• Linux08 facl、basename、mail、hostname、RANDOM及CASE语句


    文件系统访问列表

    FACL: Filesystem Access Control List
    利用文件扩展保存额外的访问控制权限
    getfacl /etc/inittab
    setfacl  # 设定用户的额外访问控制列表
    	-m:设定额外的控制列表
    		u:UID:perm
    		setfacl -m u:user1:rw- /backup/inittab
    		g:GID:perm
    		setfacl -m g:developteam:
    	-x:取消
    		u:UID
    		setfacl -x u:user1 /backup/inittab 
    		g:GID
    		setfacl -x g:mygroup /back/inittab
    
    	-m:
    		d:u:UID:perm  # 给某个目录设定用户访问控制列表
    

    给用户设定访问控制权限:设定好之后这个文件的权限后面会多出来一个”+“,表示这个文件有扩展属性。

    取消某个用户对某个文件的访问控制权限:

    给用户组设定访问控制权限:

    user8可以写入inittab文件:

    user9可以写入inittab文件:

    取消某个用户组对某个文件的访问控制权限:

    用户进程访问文件时权限的查找顺序:

    Linux用户终端

    w:/var/log/utmp ,显示登录的有效用户,比who显示的更详细。
    whoami:显示当前系统的有效用户,但是这个用户不一定是登录进来的,有可能是su过来的。
    user:
    who :/var/log/utmp ,显示登录的有效用户
    	-H # 显示显示信息的head,表明每一列是什么信息
    	-r # 希纳是当前及上一次的运行级别
    last:用于显示/var/log/wtmp文件,哪个远程主机登陆的、什么时间登陆的、停留了多长时间,现在是否还处于登录状态。
    	-n # :显示最近#次的相关信息
    lastb:/var/log/btmp文件,显示用户错误的登录尝试。。
    lastlog:显示每一个用户最近一次的成功登录信息
    	-u USERNAME:显示特定用户最近一次的登录信息
    
    终端设备:
    	console:控制台  # 直接连接到当前主机上的键盘和显示器
    		pty:物理终端(VGA)  physical terminal
             tty#:虚拟控制台(VGA:虚拟终端)比如:xshell,一般都安装在本地,虚拟出来的一个远程访问终端
             ttys:串行终端
             pts/number:伪终端,在伪文件系统上形成的一个假的终端
    

    basename

    basename:
    	basename 路径 # 取出路径的后蜀第一个路径名
    	bash /etc/passwd   --> passwd
    	basename ./shell_script/  --> shell_script/
    	
    	$0 执行脚本是的脚本路径及脚本名称
    	在脚本中,使用basename 获取用户的文件名:
    		basename $0
    

    mail

    mail: # 查看邮件
    	-s : 指定邮件标题
    	mail -s "How are you?" root < /etc/fstab 给root用户发邮件标题为 "How are you?",正文是fstab;这里使用的是输入重定向。
    

    hostname

    hostname:显示主机名
    如果当前主机的主机名不是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)

    
    RANDOM:系统变量,是由bash自己维护的,输入RANDOM会生成0~32768的一个随机数
    
    随机数生成器:
    /dev/random  # 更安全
    /dev/urandom  # 不会阻塞
    

    写一个脚本,利用RANDOM生成10个随机数,并找出其中的最大值;

    #!/bin/bash
    #
    
    #let MINSUM=0
    #let MAXSUM=0
    #for i in {1..10};do
    #  if [ $i -lt 9 ];then
    #    echo -n "$RANDOM,"
    #  else
    #    echo "$RANDOM"
     # fi
    #done
    
    # 方式一:
    declare -i MINSUM=0
    declare -i MAXSUM=0
    for i in {1..10};do
      MYRAND=$RANDOM
      if [ $i -le 9 ];then
          echo -n "$MYRAND,"
      else
        echo "$MYRAND"
      fi
    
      if [ $i -eq 1 ];then
        MINSUM=$MYRAND
        MAXSUM=$MYRAND
        continue
      fi
      if [ $MAXSUM -lt $MYRAND ];then
        let MAXSUM=$MYRAND
      else
        if [ $MINSUM -ge $MYRAND ];then
          let MINSUM=$MYRAND
        fi
      fi
    done
    echo "MAXSUM is $MAXSUM,MINSUM is $MINSUM ."
    
    # 方式二:
    #!/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 -ge $MAX ] && MAX=$MYRAND
      [ $MYRAND -lt $MIN ]  && MIN=$MYRAND
    done
    echo "$MAX,$MIN"
    

    case 选择结构

    case语句:先择结构
    
    用法:
    case SWITCH in  # SWITCH 代表要引用的变量的值
    value1)
      statement
      ...
      ;;  # 每个条件下用双分号结尾
    value2)
      statement
      ...
      ;;
    *)   # 表示既不是第一种可能性,也不是第二种可能性,是其他任意可能性
      statement
      ...
      ;;
    esac  
    
    
    #!/bin/bash
    #
    DEBUG=0
    
    case $1 in
    -v|--verbose)
      DEBUG=1
      ;;
    *)
      echo "Unknown options." 
      exit 7
      ;;
    esac
    
    [ $DEBUG -eq 1 ] && echo "hello."
    
    只接受参数start,stop,restart,status其中之一
    
    #!/bin/bash
    #
    case $1 in 
    'start')  # 表示将start字符串作为一个整体  如果是 ('start') ,表示从start中取一个字符
       echo "start server..." ;;
    'stop')
      echo "stop server..." ;;
    'restart')
      echo "Restarting server..." ;;
    'status')
      echo "Running..." ;;
    *)
      echo "`basename $0` {start|stop|restart|status}" ;;
    esac
    

    写要给脚本,可以接受选项及参数,而后能获取每一个选项,及选项的参数;并能根据选项及参数做出特定的操作。比如:adminuers.sh --add tom,jerry ==del tom,blair -v|--verbose -h|--help

    #!/bin/bash
    #
    DEBUG=0
    ADD=0
    DEL=0
    
    for i in `seq 1 $#`;do
      if [ $# -gt 0 ];then
        case $1 in
        -v|--verbose)
          DEBUG=1
          shift ;;
        -h|--help)
          echo "Usage: `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help" 
          exit 0
          ;;
        --add)
          ADD=1
          ADDUSERS=$2
          shift 2
          ;;
        --del)
          DEL=1
          DELUSERS=$2
          shift 2
          ;;
          *)
          echo "Usage: `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help"
          exit 7
          ;;
        esac
      fi
    done
    
    if [ $ADD -eq 1 ];then
      for USER in `echo $ADDUSERS | sed 's@,@ @g'`;do
        if id $USER &> /dev/null;then
          [ $DEBUG -eq 1 ] && echo "$USER exists."
        else
          useradd $USER
          [ $DEBUG -eq 1 ] && echo "Add user $USER finished."
        fi
      done
    fi
    
    if [ $DEL -eq 1 ];then
      for USER in `echo $DELUSERS | sed 's@,@ @g'`;do
        if id $USER &> /dev/null;then
          userdel -r $USER
          [ $DEBUG -eq 1 ] && echo "Delete $USER finished."
        else
          [ $DEBUG -eq 1 ] && echo "$USER not exist."
        fi
      done
    fi
    

    写一个脚本showlogged.sh,其用法格式为:showlogged.sh -v -c -h|--help 其中,-h选项只能单独使用,用于显示帮助信息;-c选项时,显示当前系统上登录的所有用户户数;如果同时使用了-v选项,则既显示同时登录的用户数,又显示登录的相关信息;如:

    *

    #!/bin/bash
    #
    declare -i DEBUG=0
    declare -i SHOWNUM=0
    declare -i SHOWUSERS=0
    
    for i in `seq 1 $#`;do
      if [ $# -gt 0 ];then
        case $1 in 
        -h|--help)
          echo "Usage: `basename $0` -h|--help -c|--count -v|--verbose"
          exit 0  
          ;;
        -v|--verbose)
          let SHOWUSERS=1 
          shift ;;
        -c|--count)
          let SHOWNUM=1 
          shift ;;
        *)
          echo "Usage: `basename $0` -h|--help -c|--count -v|--verbose"
          exit 8 
          ;;
        esac
      fi
    done
    
    if [ $SHOWNUM -eq 1 ];then
      echo "Logged users:`who | wc -l`."
      if [ $SHOWUSERS -eq 1 ];then
        echo "They are:`who`"
      fi
    fi
    
  • 相关阅读:
    nginx中目录转义字符问题
    2022年3月2日最近的状态~
    [esp8266]官方SDK与arduino ROM或Flash布局,Vscode+platformio 如何设置
    什么是并发容器
    Executor, ExecutorService 和 Executors区别与联系
    Spirng和SpringBoot中的Aop优先使用的是JDK动态代理还是Cglib
    建造者模式
    MySQL四大排名函数
    SpringMVC执行流程解析(PS:使用了适配器模式)
    适配器模式
  • 原文地址:https://www.cnblogs.com/zhangchaocoming/p/14701050.html
Copyright © 2020-2023  润新知