• Shell文件权限和脚本执行


    一、预备知识

    1、shell的作用

     

    2、常识

    (1)Tab键自动补全
       使用Terminal时,输入命令的前几个字母,敲tab会自动补全命令或文件名、目录等。
       好处:操作速度更快;不容易出错;
    (2)清屏命令
      Ctrl + L 或 输入命令clear 
    (3)命令历史:
     执行:history     
    清除历史:history -c
            技巧1:!num  命令直接打开历史命令,num为history查看的序列
            技巧2:!XX     命令查看历史命令中最后一次以xx结尾的命令
        技巧3:Ctrl + R ,然后输入历史命令的一部分,能快速搜索想要找的历史操作全名
     
    (4)命令别名:
      使用频率高的复杂命令,可以设置简短的调用名称,存放位置: ~/.bashrc
        alias  别名=‘实际执行命令’         设置别名
        unalias  别名                          取消别名
        alias     [别名]                        查看系统中的别名                    
      注意:别名,重启后消失,若经常使用,可以保存到bashrc文件中
      
    (5)输出重定向
      1>相当于>正确重定向
      2>错误重定向(将错误信息重定向到指定文件中)
     
      将正确和错误的结果都重定向到文件中的方法:
             命令  1>   文件  2>&1  
             命令  1>>   文件  2>&1  
      解释:错误的信息也会通过通道1进入文件中。
     
      管道操作符号“|”
    练习示例:
    [root@Salve scripts]# free -m | grep Mem
    Mem:980875105173569
    
    [root@Salve scripts]# free -m | grep -i mem
    Mem:980875105173569
    
    [root@Salve scripts]# free -m | grep -i mem | awk 'print $4'
    awk: print $4
    awk:^ syntax error
    
    [root@Salve scripts]# free -m | grep -i mem | awk '{print $4}'
    
    [root@Salve scripts]# free -m | grep -i mem | awk '{print $2,$3,$4}'
    
    [root@Salve scripts]# free -m | grep -i mem | awk '{print $2"
    ",$3,$4}'
    875105
    
    [root@Salve scripts]# free -m | grep -i mem | awk '{print $2"
    ",$3"
    ",$4"
    "}'
    875
     
    [root@Salve scripts]# free -m | grep -i mem | awk '{print "total:"$2"
    ","used:"$3"
    ","free:"$4"
    "}'
    total:980
    used:875
    free:104
    View Code

    (6)Linux系统的启动级别

      从0 到 6 共7个,比较重要的是0、3、5、6。

      说明:

        init 0 关机
        init 3 字符模式模式(网络功能齐全)
        init 5 图形界面
        init 6 重启
      注:可在终端输入init x进入到对应的状态,如重启:# init 6
     

    二、认识权限和用户管理

    1、关于权限

    权限类型:
        1、r 读
        2、w 写
        3、x 可执行
     
    Linux用户
        1、所有者(u)
        2、所属组(g) (所有者及所有者所在组的全部用户)
        3、其他用户(o)(其他组的所有用户(包括文件所有者))
        4、所有用户(a)
     
    文件权限解读
     -rw-r--r--. 1 root root 44184 5月 22 00:28 install.log
      -        rw-        r--         r--                root    root     44184             insall.log
      文件类型 所有者权限  所属组权限  其他用户权限            所有者  用户所在的组  文件大小  创建时间    文件名
    [root@Salve ~]# ll
    总用量 100
    -rw-------. 1 root root 1752 5月 22 00:29 anaconda-ks.cfg
    -rw-r--r--. 1 root root 44184 5月 22 00:28 install.log
    [root@Salve ~]# head -1 /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    [root@Salve ~]# head -1 /etc/group
    root:x:0:
    [root@Salve ~]# cat /etc/group
    root:x:0:
    bin:x:1:bin,daemon

    2、用户与权限

    2.1、用户管理

    (1)、用户查看
           
     id  username

    (2)、用户添加 

     useradd  username

      创建用户,同时会产生新的用户组,并且用户属于该组

    (3)、用户删除
        
    userdel  -r  username 

    2.2、用户组

    用户与组的关系:
    (1)、把用户加入组
    [root@Salve ~]# id test2
    uid=501(test2) gid=501(test2) 组=501(test2)
    [root@Salve ~]# gpasswd -a test2 root          #把用户test2加入到root组
    Adding user test2 to group root
    [root@Salve ~]# id test2
    uid=501(test2) gid=501(test2) 组=501(test2),0(root)  #test2同时属于两个组
        同时属于两个组后,两个组的权限都具备,即两个组权限之和
     
    (2)、把组中用户删除
    [root@Salve ~]# gpasswd -d test2 root
    Removing user test2 from group root

    3、权限分配

        第一、二种修改用户对文件的权限

    3.1、chmod权限分配

        3.1.1、字母权限分配

             chmod  u+x file
             chmod   u-x file
        (对用户单独设置权限用此方式。)

        3.1.2、数字权限

            chmod 755  file
    数字对应权限如下:
        r        4
        w       2
        x        1
    755        rwx r-x r-x
    754        rwx r-x r--
    默认644
    (当所有用户的权限都要修改时用词方法)
        缺点:不能对用户的细化权限分配
     

    3.2、acl权限分配

    适用于对权限的细化需求,比如要求一些用户对某个文件file的权限如下:
      1、root file rw-
      2、root file r--
      3、other file r--
      4、user1 file rw
      5、user2 file rx
      6、user3 file wx    (不能查看,但是能写入)
      7、user4 file rwx  (rwx只是对内容有权限,无法删除)
     
    acl权限分配:
    (1)、setfacl设置文件权限 
    setfacl -m u:user1:rw file01.txt 
    setfacl -m u:user2:rx file01.txt 
    (2)、getfacl查看文件权限
    getfacl file01.txt  
    (3)、删除文件权限
        setfacl -x user:user4 file01.txt
    (4)、清空文件权限
        setfacl -b file01.txt           擦除对文件所有的权限(恢复文件的原始状态权限:644)
     
    (5)、创建和删除文件权限:
    #需要对目录设置acl权限即可
     setfacl -m u:user4:rwx mnt/
    注意:
    dr-xr-xr-x.   2 root root  4096 5月  24 14:19 mnt
    切换到目录的一瞬间需要目录的x权限,否则不能切换目录。
     
    (6)、如何对目录及子目录和文件设置acl权限
    setfacl -m u:user4:rwx -R /mnt/                R参数代表递归
     
    (7)、目录中后期添加的子目录和文件如何继承父目录的权限
    方法一: setfacl -m u:user4:rwx -R /mnt/     繁琐                       (应用实例:网站文件管理)
    方法二:setfacl -m d:u:user4:rwx -R /mnt/         d代表default权限,会继承默认权限
     
    用户对程序、命令的权限

    3.3、sudo权限设置

    设置用户对命令的执行权限-visodo:
    (1)、设置:
    # visudo
    user4 localhost=/usr/sbin/useradd,/usr/sbin/userdel
     
    (2)、使用有密码的sudo授权命令
    $ sudo /usr/sbin/useradd user5
    $ sudo /usr/sbin/userdel -r user5
     
    (3)、使用无密码的sudo授权命令  (使用情境:在脚本里输入命令)
    $ sudo /usr/sbin/useradd user6
    $ sudo /usr/sbin/userdel -r user6
    设置形式: 
    user5 ALL=NOPASSWD: /usr/sbin/useradd,/usr/sbin/userdel
    sudo  ALL=NOPASSWD: /usr/sbin/userdel -r user4

    三、Shell文件权限和脚本执行

    1、Shell脚本简介

        (1)、用途:完成特定的、较复杂的系统管理任务
        (2)、格式:集中保存多条Linux命令,普通文本文件
        (3)、执行方式:按照预设的顺序执行解释执行

    2、编写可执行的Shell脚本

       (1)、 建立包含执行语句的脚本文件
       (2)、 #脚本文件中包含的内容
                运行环境设置:#!/bin/bash
                注释信息:以#开始的说明性文字
                可执行的Linux命令行
        (3)、为脚本文件添加可执行权限

    3、执行Shell脚本的方式:

        (1)、bash test.sh          #不需要写解析器,并且不需要给脚本设置执行权限
        (2)、./test.sh                #需要写解析器,需要给脚本设置执行权限

    4、Shell脚本例子:

    (1)简单例子

    #!/bin/bash
    #tesh.sh
     
    echo 'disk space:'
    echo
    df -Th
    echo
    echo 'free space:'
    free -m
    echo
    echo 'users:'
    for i in'ls /home'
    do
      id -u $i
    done
    View Code
    运行Shell脚本:
        直接执行具有x权限的脚本文件:例如:./test.sh
        使用指定的解释器程序执行脚本内容:例如:bash test.sh 、sh test.sh

    (2)实例练习:

        每周五17:30清理FTP服务器的公共共享目录
            检查/var/ftp/pub/目录,将其所有子目录及文件的详细列表、当时的时间信息追加保存到/var/log/pubdir.log
    文件中,然后清空该目录
    yum -y install vsftpd*
    #!/bin/bash
    #ftp目录统计
     
    date >>/var/log/pubdir.log
     
    ls -lhR /var/ftp/pub >>/var/log/pubdir.log
     
    rm -rf /var/ftp/pub
    命令执行通过后即可添加到任务计划中:
    crontab -e   
    查看任务计划:
    crontab -l
     
     
     
  • 相关阅读:
    JS实现菜单滚动到一定高度后固定
    原生js如何获取某一元素的高度
    在Vue项目中,添加的背景图片在服务器上不显示,如何处理
    单行文本截断 text-overflow
    使用line-height垂直居中在安卓手机上效果不好
    css 苹方字体
    十二. for of 示例 (可以解决大多数应用场景)
    npm详解
    webpack搭建服务器,随时修改刷新
    探讨弹性布局Flexible Box
  • 原文地址:https://www.cnblogs.com/chinas/p/5557727.html
Copyright © 2020-2023  润新知