21、文件系统访问控制列表FACL

练习:写一个脚本

写一个脚本,显示当前系统上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.