练习:写一个脚本
写一个脚本,显示当前系统上shell为-s指定类型的用户,并统计其用户总数。-s选项后面跟的参数必须是/etc/shells文件中存在的shell类型,否则不执行此脚本。另外,此脚本还可以接受--help选项,以显示帮助信息。脚本执行形如:
./showshells.sh -s bash
显示结果形如:
BASH,3users,they are:
root,redhat,gentoo
#!/bin/bash
#
if [ $1 == '-s' ]; then
! grep "${2}$" /etc/shells &> /dev/null && echo "Invalid shell." && exit 7
elif [ $1 == '--help' ];then
echo "Usage: showshells.sh -s SHELL | --help"
exit 0
else
echo "Unknown Options."
exit 8
fi
NUMOFUSER=`grep "${2}$" /etc/passwd | wc -l`
SHELLUSERS=`grep "${2}$" /etc/passwd | cut -d: -f1`
SHELLUSERS=`echo $SHELLUSERS | sed 's@[[:space:]]@,@g'`
echo -e "$2, $NUMOFUSER users, they are: \n$SHELLUSERS"
${变量名}
21.1 文件系统访问控制列表:
tom:
tom, tom基本组
jerry: other:r--
想让jerry访问tom创建的文件,并且不让其他人访问
FACL:Filesystem Access Control List(文件系统访问控制列表)
利用文件扩展保存额外的访问控制权限
jerry: rw-
21.1.1 FACL配置
(1)setfacl(设置FACL)
-m: 设定
u:UID:perm
g:GID:perm
-x:取消
u:UID
g:GID
(2)getfacl(查看FACL)
21.2 几个命令:
w:
查看当前登录到系统上的用户及其在处理的事情
who:
查看当前登录到系统上的用户及其登录信息
[root@Daniel-LASV ~]# who
root pts/0 2021-06-10 01:58 (116.228.4.126)
[root@Daniel-LASV ~]# w
01:59:05 up 215 days, 18:16, 1 user, load average: 0.03, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 116.228.4.126 01:58 1.00s 0.00s 0.00s w
[root@Daniel-LASV ~]#
每隔5秒钟,就来查看hadoop是否已经登录,如登录,显示其已经登录,并退出;
sleep :
让进程延迟几秒钟
whoami:
当前系统的有效用户
last:
显示/var/log/wtmp文件,显示用户登录历史及系统重启历史
-n #: 显示最近#次的相关信息
[root@Daniel-R480 tmp]# last -4
root pts/1 localhost Thu Jun 10 09:54 still logged in
root pts/0 localhost Thu Jun 10 09:03 still logged in
root pts/1 localhost Wed Jun 9 17:16 - 09:54 (16:37)
root pts/0 localhost Wed Jun 9 17:04 - 09:03 (15:59)
wtmp begins Wed Jun 9 14:30:27 2021
lastb:
/var/log/btmp文件,显示用户错误的登录尝试
-n #:
[root@Daniel-SHSH ~]# lastb -3
root ssh:notty 65.78.170.48 Tue Jun 8 21:12 - 21:12 (00:00)
root ssh:notty 65.78.170.48 Tue Jun 8 21:12 - 21:12 (00:00)
root ssh:notty 65.78.170.48 Tue Jun 8 21:12 - 21:12 (00:00)
btmp begins Sat Jun 5 01:06:32 2021
lastlog:
显示每一个用户最近一次的成功登录信息;
-u USERNAME: 显示特定用户最近的登录信息
[root@Daniel-R480 tmp]# lastlog -u daniel
Username Port From Latest
daniel pts/1 Thu Jun 10 09:58:18 +0800 2021
basename:
$0: 执行脚本时的脚本路径及名称
[root@Daniel-R480 ~]# basename ./quit.sh
quit.sh
mail:
查看邮件
[root@Daniel-SHSH ~]# mail
No mail for root
hostname:
显示主机名
[root@Daniel-SHSH ~]# hostname
Daniel-SHSH
[root@Daniel-SHSH ~]# echo $HOSTNAME
Daniel-SHSH
[root@Daniel-R480 ~]# hostname test
[root@Daniel-R480 ~]# hostname
test
[root@Daniel-R480 ~]# su - root
Last login: Thu Jun 10 09:58:28 CST 2021 on tty1
[root@test ~]#
如果当前主机的主机名不是www.magedu.com,就将其改为www.magedu.com
如果当前主机的主机名是localhost,就将其改为www.magedu.com
如果当前主机的主机名为空,或者为(none),或者为localhost,就将其改为www.magedu.com
[ -z `hostname` ] || [ `hostname` == '(none)' o `hostname` == 'localhost' ] && hostname www.magedu.com
生成随机数
RANDOM: 0-32768
[daniel@Daniel-R480 ~]$ echo $RANDOM
20744
linux下的随机数生成器:熵池
/dev/random:
/dev/urandom:
终端类型:
console:控制台
pty:物理终端(通过VGA连接)
tty:虚拟终端(通过vga连接)
ttys:串行终端
pts/#:伪终端
写一个脚本,利用RANDOM生成10个随机数,并找出其中的最大值,和最小值;
#!/bin/bash
#
declare -i MAX=0
declare -i MIN=0
for I in {1..10}; do
MYRAND=$RANDOM
[ $I -eq 1 ] && MIN=$MYRAND
if [ $I -le 9 ]; then
echo -n "$MYRAND,"
else
echo "$MYRAND"
fi
[ $MYRAND -gt $MAX ] && MAX=$MYRAND
[ $MYRAND -lt $MIN ] && MIN=$MYRAND
done
echo $MAX, $MIN
Comments Closed.