zoukankan      html  css  js  c++  java
  • 用户管理与Llinux权限

    第1章            密码管理与批量创建用户

    1.1    用户知识点

    密码管理:

    md5校验

    find /目录 –type f |xargs md5sum  > police.txt

    md5sum –c police.txt  #定时任务+脚本

    useradd

    userdel

    usermod

    passwd

    chown

    id

    w

    sort  排序

    uniq  去重统计

    1.2  批量创建用户

         1.2.1  让用户显示为一列 因为三剑客都是按照行执行的

    [root@oldboyedu-lnb ~]# echo stu{01..10}|xargs -n1
    stu01
    stu02
    

    1.2.2    如何在用户名的前面 加上useradd和空格

       

     [root@oldboyedu-lnb ~]# echo stu{01..10}|xargs -n1|awk '{print "useradd " $1}'
    useradd stu01
    useradd stu02
    useradd stu03
    

    1.2.3  如何让输出到屏幕上的命令执行  交给bash处理执行

    [root@oldboyedu-lnb ~]# echo stu{01..10}|xargs -n1|awk '{print "useradd " $1}'|bash

    1.2.4  批量删除用户

    [root@oldboyedu-lnb ~]# echo stu{01..10}|xargs -n1|awk '{print "userdel -r " $1}'|bash
    

    1.2.5    使用sed批量创建

    [root@oldboyedu-lnb ~]# echo stu{01..10}|xargs -n1|sed -r 's#(.*)#useradd 1#g'|bash
    

    1.2.6  批量创建用户并创建随机密码:

    1.2.6.1   如何生成随机数

    [root@oldboyedu-lnb ~]# echo $RANDOM|md5sum|cut -c1-8
    7845f8e7
    [root@oldboyedu-lnb ~]# openssl rand -base64 8
    
    1.2.6.1.1  在命令行如何创建用户并且创一个随机密码
    [root@oldboyedu-lnb ~]# useradd oldboy01;echo 123456|passwd --stdin oldboy01
    
    1.2.6.1.2   给一个用户设置随机密码
    [root@oldboyedu-lnb ~]# echo  `echo $RANDOM|md5sum|cut -c1-8`|passwd --stdin oldboy01
    Changing password for user oldboy01.
    passwd: all authentication tokens updated successfully.
    
    1.2.6.1.3   把密码放入文件中
    echo $(echo `echo $RANDOM|md5sum|cut -c1-8`|tee -a oldboy.txt)|passwd --stdin oldboy01
    echo $(echo 12345678|tee -a oldboy.txt)|passwd --stdin oldboy01
    

    1.2.6.2  使用变量的方式

    [root@oldboyedu-lnb ~]# useradd oldboy11;pass=`echo $RANDOM|md5sum|cut -c1-8`;echo $pass|passwd --stdin oldboy11;
    echo $pass >>passwd.txt ----------------------- useradd stu01;pass=`echo $RANDOM|md5sum|cut -c1-8`;echo $pass|passwd --stdin stu01;
    echo stu01$pass >>passwd.txt

    1.2.6.3   和awk拼接

    [root@oldboyedu-lnb ~]# echo stu{01..10}|xargs -n1|awk '{print "useradd "$1";pass=`echo $RANDOM|md5sum|cut -c1-8`;
    echo $pass|passwd --stdin "$1";echo "$1" $pass >>passwd.txt"}'|bash                                                                                                                                            
    [root@oldboyedu-lnb ~]# cat passwd.txt
    stu01 5d3b1e6e
    stu02 7cd57313
    stu03 cde56c82
    stu04 4b831d6c   
    

    1.2.6.4    sed拼接

    [root@oldboyedu-lnb ~]# echo alex{01..10}|xargs -n1|sed -r 's#(.*)#useradd 1;pass=`date +%N|md5sum|cut -c1-8`;
    echo $pass|passwd --stdin 1;echo 1 $pass >> passwd.txt#g'|bash

    第2章  用户管理

    2.1  last命令  显示用户登录日志  #排查系统安全问题的时候使用

                显示用户什么时间登录的系统   什么时间离开的登录系统   总共连接的时间

                lastlog命令  显示所有用户最后登录的时间      

    2.2  sudo 提权   让普通用户执行命令拥有root的权限

               安全:  

              a.禁止使用root登陆

              b.使用普通用户登陆

              c.开发和运维都是普通用户

              d.测试人员想要看日志   

         2.2.1  第一步: 创建oldboy用户

         2.2.2  第二步: 切换到oldboy用户

                     su - oldboy  # - 更新环境变量 重新执行环境变量文件

         2.2.3  第三步:查看日志: /var/log/secure  没有权限查看日志文件

    [oldboy@oldboyedu-lnb ~]$ cat /var/log/secure
    cat: /var/log/secure: Permission denied             
    

        2.2.4  第四步: oldboy用户需要root的权限才能看日志

              皇帝    授予大臣   尚方大宝剑(一个命令相当于一个宝剑)

            2.2.4.1   sudo  让oldboy临时拥有root的权限   root给oldboy授权可执行什么命令

            2.2.4.2   我如何知道我当前是否有大宝剑  是否有可使用root权限

           查看当前拥有的大宝剑

    [root@oldboyedu-lnb ~]# sudo -l      # 查看当前拥有的权限
    [root@oldboyedu-lnb ~]# sudo -k        # 清除密码缓存
    

    2.2.4.3    普通用户默认没有sudo权限   没有人可以抱着大宝剑出生

                第五步: root授权给oldboy cat命令临时拥有root的权限

                 a) 使用 vim /etc/sudoers

                 b)  使用 visudo ===== vim /etc/sudoers  # 拥有语法检测的功能

                 c)  给oldboy授权cat命令  授权单个命令

                 visudo

                oldboy  ALL=(ALL)       /usr/bin/cat              # 命令使用全路径

    2.2.5   使用sudo -l 查看 是否授权成功

    [oldboy@oldboyedu-lnb ~]$ sudo -l
    [sudo] password for oldboy:
    User oldboy may run the following commands on oldboyedu-lnb:
    (ALL) /usr/sbin/cat

    2.2.5.1    如何使用sudo提权后的命令  如何使用大宝剑

    [oldboy@oldboyedu-lnb ~]$ sudo cat /var/log/secure
    

    2.2.5.2   授权多个命令  ls vim echo

    oldboy  ALL=(ALL)       /usr/sbin/cat,/usr/bin/vim,/usr/bin/echo,/usr/bin/ls
    [oldboy@oldboyedu-lnb ~]$ sudo ls /root
    

    PS: 授权尽量不授权危险的命令 vim echo sed cat...可编辑文件的命令

    sed -i '1s#x##g' /etc/passwd
    [oldboy@oldboyedu-lnb ~]$ sudo sed '1s#root::#root:x:#g' /etc/passwd
    root:x:0:0:root:/root:/bin/bash        

    2.2.5.3  授权所有命令 运维人员

     oldboy ALL=(ALL)       ALL

    2.2.5.4   对ALL进行取反 不允许执行 vim echo cat less 

    注意:授权的命令之间必须要有逗号,          

    oldboy ALL=(ALL)       ALL,!/usr/sbin/cat,!/usr/bin/vim,!/usr/bin/echo,!/usr/bin/ls      
    oldboy ALL=(ALL)       /usr/sbin/*,/usr/bin/*,!/usr/sbin/cat,!/usr/bin/vim,!/usr/bin/echo,
    !/usr/bin/ls                                                                             

    2.2.5.5     运维使用sudo不需输入自己用户的密码

            oldboy ALL=(ALL)       NOPASSWD: ALL

    2.2.5.6   日志审计  记录用户所有的操作行为

            跳板机  shell编程编写跳板机(记录用户的操作)

    法1)齐治的堡垒机:商业产品
    法2)  gateone web跳板机
    法3)  python开发的开源的跳板机产品        
    法4)  shell跳板机 J

    2.3  awk过滤与sort uniq 去重统计

    [root@oldboyedu-lnb ~]# awk -F/ '{print $3}' oldboy.txt
    www.baidu.com
    www.sina.com
    www.baidu.com
    www.weibo.com
    www.sina.com
    www.baidu.com
    www.sina.com
    [root@oldboyedu-lnb ~]# awk -F "[:/]+" '{print $2}' oldboy.txt
    www.baidu.com
    www.sina.com
    www.baidu.com
    www.weibo.com
    www.sina.com
    www.baidu.com
    www.sina.com      

    去重统计:

    1) 先排序

    [root@oldboyedu-lnb ~]# awk -F "[:/]+" '{print $2}' oldboy.txt |sort
    

    2) 去重统计

    [root@oldboyedu-lnb ~]# awk -F "[:/]+" '{print $2}' oldboy.txt |sort|uniq -c
    3 www.baidu.com
    3 www.sina.com
    1 www.weibo.com
    

    第3章        Linux12权限体系

    3.1  权限体系

    3.1.1   linux如何知道我对某个文件或目录有什么权限?

    查看我对当前目录oldboy.txt拥有什么权限

            -rw-r--r-- 1 root root 233 Aug 13 10:36 oldboy.txt   

    1) 你是谁 当前登陆系统的用户
    2) 当前登陆的用户和oldboy.txt 文件或目录有什么关系
    3) 通过对应的关系 找到和oldboy.txt 对应的权限
    4) 当前登陆的用户是oldboy用户 我对oldboy.txt用户拥有什么权限
    

       r(4)w(2)-r(4)--r(4)-- ===== 644          

    3.1.2    修改权限   chmod

    3.1.3   第一种方法:  ugo方式

              权限的表示方法总共三种   RWX 可读 可写 可执行

    对应的数字 421
    ugo授权
    u===user   属主
    g===group    属组
    o===other     其他用户 

    语法格式:

     增加权限  chmod u+x 文件

    取消权限  chmod u-x 文件    

    3.1.3.1  属主去掉写入的权限

    [root@oldboyedu-lnb ~]# ll 1.sh
    -rw-r--r-- 1 root root 4 Aug 13 11:06 1.sh
    [root@oldboyedu-lnb ~]# chmod u-w 1.sh
    [root@oldboyedu-lnb ~]# ll 1.sh
    -r--r--r-- 1 root root 4 Aug 13 11:06 1.sh
    

    3.1.3.2    属主增加w权限

    [root@oldboyedu-lnb ~]# chmod u+w 1.sh
    [root@oldboyedu-lnb ~]# ll 1.sh
    -rw-r--r-- 1 root root 4 Aug 13 11:06 1.sh
    

    3.1.3.3    属主和属组同时增加x权限

    [root@oldboyedu-lnb ~]# chmod ug+x 1.sh
    [root@oldboyedu-lnb ~]# ll 1.sh
    -rwxr-xr-- 1 root root 4 Aug 13 11:06 1.sh
    

    3.1.3.4       给所有权限位取消r权限

    [root@oldboyedu-lnb ~]# chmod ugo-r 1.sh
    [root@oldboyedu-lnb ~]# ll 1.sh
    --wx--x--- 1 root root 4 Aug 13 11:06 1.sh
    

    3.1.3.5        给属主重新授权为r-x

    [root@oldboyedu-lnb ~]# chmod u=rx 1.sh
    [root@oldboyedu-lnb ~]# ll 1.sh
    -r-x--x--- 1 root root 4 Aug 13 11:06 1.sh
    

    3.1.3.6        给所有的权限位统一授权

    [root@oldboyedu-lnb ~]# chmod ugo=rw 1.sh
    [root@oldboyedu-lnb ~]# ll 1.sh
    -rw-rw-rw- 1 root root 4 Aug 13 11:06 1.sh
    
    [root@oldboyedu-lnb ~]# chmod ugo=rw 1.sh
    [root@oldboyedu-lnb ~]# ll 1.sh
    -rw-rw-rw- 1 root root 4 Aug 13 11:06 1.sh
    

    a. ugo

    b. a === ugo   all  所有权限位

    c. 啥都不加 默认代表所有权限位

    取消所有权限位的w权限

    [root@oldboyedu-lnb ~]# chmod a-w 1.sh
    [root@oldboyedu-lnb ~]# ll 1.sh
    -r--r--r-- 1 root root 4 Aug 13 11:06 1.sh
    

    所有权限位增加x权限

    [root@oldboyedu-lnb ~]# chmod a+x 1.sh
    [root@oldboyedu-lnb ~]# ll 1.sh
    -r-xr-xr-x 1 root root 4 Aug 13 11:06 1.sh
    

    默认就是代表所有权限位

    [root@oldboyedu-lnb ~]# chmod -x 1.sh
    [root@oldboyedu-lnb ~]# ll 1.sh
    -r--r--r-- 1 root root 4 Aug 13 11:06 1.sh
    

    3.1.3.4   第二种方法:  使用权限对应的数字进行授权  公司常用

    R 4

    W 2

    X 1

    3.1.3.4.1   文件修改为655权限  rw-r-xr-x
    [root@oldboyedu-lnb ~]# chmod 655 1.sh
    [root@oldboyedu-lnb ~]# ll 1.sh
    -rw-r-xr-x 1 root root 4 Aug 13 11:06 1.sh
    
    3.1.3.4.2   文件修改为rw------- 权限 ---> 数字 600
    [root@oldboyedu-lnb ~]# chmod 600 1.sh
    [root@oldboyedu-lnb ~]# ll 1.sh
    -rw------- 1 root root 4 Aug 13 11:06 1.sh
    

    第4章            文件与目录权限

    4.1  权限对于文件的作用         

               RWX对于文件的作用

       4.1.1   测试R权限对文件的作用 read

    [root@oldboyedu-lnb oldboy]# chmod u=r 1.sh
    [root@oldboyedu-lnb oldboy]# ll
    total 4
    -r--r--r-- 1 oldboy oldboy 9 Aug 14 08:09 1.sh
    

    PS:执行一个文本中的命令 使用./1.sh  /oldboy/1.sh 上面两种执行方式 对于root有同样的作用

    a. 对文件可读  cat  less more...
    b. 不能修改文件
    c. 不能执行文件
    

      4.1.2    测试W权限对文件的作用  write

    [root@oldboyedu-lnb oldboy]# chmod u=w 1.sh
    [root@oldboyedu-lnb oldboy]# ll
    total 4
    --w-r--r-- 1 oldboy oldboy 9 Aug 14 08:09 1.sh
    
    a. 不能读取文件
    b. 可以追加内容
    c. 不能编辑写入内容
    d. 可以强制写入并强制保存退出 但是会覆盖原有内容
    e. 不能执行文件
    f. 可写入必须和r配置使用 rw权限
    

    4.1.3   测试X权限对文件的作用 execute  可以运行文件中的命令

    [root@oldboyedu-lnb oldboy]# chmod u=x 1.sh
    [root@oldboyedu-lnb oldboy]# ll
    total 4
    ---xr--r-- 1 oldboy oldboy 9 Aug 14 08:20 1.sh                    

     

    a. 不能读取文件
    b. 不能写入内容
    c. 不能执行文件
    d. 文件只有x权限 什么都无法操作
    e. 想要执行必须和r配合使用 r-x权限
    

    4.1.4  小结

    1.查看文件 r权限

    2.写入内容到文件  rw

    3.想要执行文件 rx

    4.2  RWX对于目录的作用

           环境准备:

    在/oldboy目录下创建oldboyedu
    在oldboyedu目录下创建stu{1..3}.txt
    授权oldboyedu目录属主属组oldboy
    chown -R o ldboy.oldboy oldboyedu
    

    4.2.1  测试R权限对于目录的作用

    [root@oldboyedu-lnb oldboy]# chmod u=r oldboyedu
    [root@oldboyedu-lnb oldboy]# ll
    total 0
    dr--r-xr-x 2 oldboy oldboy 54 Aug 14 08:29 oldboyedu
                        

    a. 只能看到文件名 看不到详细信息

    b. 不能进入目录中 不能cd

    c. 不能创建和删除文件、不能改名

    4.2.2  测试W权限对于目录的作用

    [root@oldboyedu-lnb oldboy]# chmod u=w oldboyedu/
    [root@oldboyedu-lnb oldboy]# ll
    total 0
    d-w-r-xr-x 2 oldboy oldboy 54 Aug 14 08:29 oldboyedu                 

    a. 无法查看目录下的内容

    b. 无法创建文件、删除、移动改名等

    c. 只有W权限啥都不能干

    4.2.3  测试X权限对于目录的作用

    [root@oldboyedu-lnb oldboy]# chmod u=x oldboyedu/
    [root@oldboyedu-lnb oldboy]# ll
    total 0
    d--xr-xr-x 2 oldboy oldboy 54 Aug 14 08:29 oldboyedu
    

    a. 可以cd到目录

    b. 不能查看目录下的内容

    c. 不能创建和删除文件、不能改名  

    4.2.4   小结

                对于目录 可以查看没目录下的内容需要使用 rx配合

                能写入内容到文件 但是不能删除 创建 改名等操作  (还得确定文件的权限)

    [root@oldboyedu-lnb oldboy]# chmod u=rx oldboyedu/
    [root@oldboyedu-lnb oldboy]# ll
    total 0
    dr-xr-xr-x 2 oldboy oldboy 54 Aug 14 08:29 oldboyedu
    

                对于目录 可以创建 删除 移动 改名等需要使用x权限

    [root@oldboyedu-lnb oldboy]# chmod u=wx oldboyedu/
    [root@oldboyedu-lnb oldboy]# ll
    total 0
    d-wxr-xr-x 2 oldboy oldboy 54 Aug 14 08:29 oldboyedu
    

    对于目录 可以查看文件的属性信息 可以cd 需要r和x配合

     

    4.3   系统默认的权限UMASK   不要修改UMASK值 了解即可

                 创建文件和目录默认的权限

                 文件 644

                 目录 755

                 UMASK控制默认创建的权限

       4.3.1  查看当前UMASK默认的值

    [root@oldboyedu-lnb oldboy]# umask
    0022
    

       4.3.2  文件最大的权限为 666

                   普通文件最大为什么是666权限

                    rw-rw-   对于普通文本 可读可写就是最大权限

                    系统默认创建的文件权限

                    文件权限计算:

                    文件的最大权限减去UMASK

                    666-022=644

    4.3.3  目录的最大权限为777

                目录的权限计算:

                目录的最大权限减去umask

                777-022=755

    4.3.3   umask 特殊情况  修改umask值为032

    [root@oldboyedu-lnb ~]# umask 032
    [root@oldboyedu-lnb ~]# umask
    0032
    

              创建文件权限: 666-032=634

              创建目录权限:777-032=745                  

              如果umask值有奇数位 不影响目录 文件在计算后 在对应的奇数位加1即可

              文件计算:

              666

            - 032

            = 634

            + 010

               644    

    案例:  创建一个文件权限为000 目录为111 则umask默认是多少?

              666

            -666

             000

             777

           -666

            111

    [root@oldboyedu-lnb ~]# umask 666
    [root@oldboyedu-lnb hehe]# touch umask.txt
    [root@oldboyedu-lnb hehe]# mkdir umask
    [root@oldboyedu-lnb hehe]# ll
    total 0
    d--x--x--x 2 root root 6 Aug 14 09:43 umask
    --------- 1 root root 0 Aug 14 09:43 umask.txt
    

    4.4    通过权限使网站更安全

    1) 网站程序存放的位置  访问我们服务器上某个目录
    2) 网站通过什么用户来运行  普通用户运行
    3) 目录和文件用什么权限   目录 755 文件 644  
    

    4.5 Linux的隐藏权限

    4.5.1   查看文件的隐藏属性

    [root@oldboyedu-lnb ~]# lsattr /etc/passwd
    ---------------- /etc/passwd          # 表示没有隐藏权限  
    

    4.5.2   设置隐藏权限

                 隐藏权限有 a  i

                 a (append 只能追加) 如果设置了这个权限 只能追加 不能删除 不能修改

                 i( immutable 无敌) 无法修改 无法删除

                chattr 设置隐藏权限

                 给oldboy.txt a权限 只能追加 echo cat 不能使用vim

    [root@oldboyedu-lnb ~]# lsattr oldboy.txt
    ---------------- oldboy.txt
    [root@oldboyedu-lnb ~]# chattr +a oldboy.txt
    [root@oldboyedu-lnb ~]# lsattr oldboy.txt
    -----a---------- oldboy.txt
    

    4.5.3  取消隐藏权限

    [root@oldboyedu-lnb ~]# chattr -a oldboy.txt
    [root@oldboyedu-lnb ~]# lsattr oldboy.txt
    ---------------- oldboy.txt
    

    4.5.4  设置隐藏权限 i 无敌

    [root@oldboyedu-lnb ~]# chattr +i oldboy.txt
    [root@oldboyedu-lnb ~]# lsattr oldboy.txt
    ----i----------- oldboy.txt
    

    4.5.5  取消权限

    [root@oldboyedu-lnb ~]# chattr -i oldboy.txt
    [root@oldboyedu-lnb ~]# lsattr oldboy.txt
    ---------------- oldboy.txt
    

    4.6   文件的特殊权限位  了解

    [root@oldboyedu-lnb ~]# ll /usr/bin/passwd
    -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
    

    s权限位  位于属主权限位 会把原有的权限位隐藏掉 而不是覆盖   不要给命令轻易设置s权限

    s对应数字关系 4

    s的作用: 执行命令的时候 相当于这个命令的属主(suid)

    4.6.1  授权rm命令s权限  所有的其他用户执行rm都相当于 root

    [root@oldboyedu-lnb ~]# ll /usr/bin/rm
    -rwxr-xr-x. 1 root root 62864 Apr 11  2018 /usr/bin/rm
    [root@oldboyedu-lnb ~]# chmod u+s /usr/bin/rm
    [root@oldboyedu-lnb ~]# ll /usr/bin/rm
    -rwsr-xr-x. 1 root root 62864 Apr 11  2018 /usr/bin/rm
    

    4.6.2  或者是数字授权

    [root@oldboyedu-lnb ~]# chmod 4755 /usr/bin/rm
    [root@oldboyedu-lnb ~]# ll /usr/bin/rm
    -rwsr-xr-x. 1 root root 62864 Apr 11  2018 /usr/bin/rm
    

    4.6.3  撤销授权s

    [root@oldboyedu-lnb ~]# chmod 0755 /usr/bin/rm
    [root@oldboyedu-lnb ~]# ll /usr/bin/rm
    -rwxr-xr-x. 1 root root 62864 Apr 11  2018 /usr/bin/rm
    

    4.6.4   t 粘滞位 控制用户只能管理自己的文件 不能删除其他用户的文件

                t 其他用户other

                增加t权限

    [root@oldboyedu-lnb ~]# ll -d /tmp
    drwxrwxrwx. 9 root root 145 Aug 14 10:19 /tmp
    [root@oldboyedu-lnb ~]# chmod o+t /tmp/
    [root@oldboyedu-lnb ~]# ll -d /tmp/
    drwxrwxrwt. 9 root root 145 Aug 14 10:20 /tmp/
    

    测试:

    [root@oldboyedu-lnb ~]# touch /tmp/root.txt
    [root@oldboyedu-lnb ~]# ll /tmp/root.txt
    -rw-r--r-- 1 root root 0 Aug 14 10:20 /tmp/root.txt
    

    s sgid(属主权限)

    作用:运行某一个命令的时候相当于属于这个命令所在家庭(用户组)(root)

    4.6.5   权限拒绝排查流程

     4.6.6   odlboy用户下面几个操作报错原因

    [oldboy@lzy oldboy]$ cat /etc/shadow
    cat: /etc/shadow: Permission denied
    

    /etc/shadow文件下没有r权限

    [oldboy@lzy oldboy]$ echo '#' >> /etc/passwd
    -bash: /etc/passwd: Permission denied
    

    对/etc/passwd文件没有w权限

    [oldboy@lzy oldboy]$ touch /etc/passwd.txt
    touch: cannot touch ‘/etc/passwd.txt’: Permission denied
    

    对于/etc/目录没有w权限

    [oldboy@lzy oldboy]$ rm -rf /etc/shadow
    rm: cannot remove ‘/etc/shadow’: Permission denied
    

    对于/etc/shadow没有w权限

    [oldboy@lzy oldboy]$ ls /root/
    ls: cannot open directory /root/: Permission denied
    

    对于/root/没有r权限

    4.7  定时任务

        1) 定时任务介绍

        2) 定时任务分类

        3) 定时任务相关文件

        4) 定时任务使用

        5) 书写流程

        6) 定时任务注意事项

    4.7.1  定时任务介绍

          什么是定时任务

          在某个时间做什么事情

         闹钟 定时

         定时上课 定时下课 定时吃饭

         在linux中定时任务

         打包 备份

         重要的文件日志数据进行打包---> 在业务的低谷期传送到备份服务器

    4.7.2  定时任务分类

           1. crond  工作使用的定时任务

           2. atd    只能运行一次       了解

           3. anacon 非7*24运行的服务器 了解

    4.7.2.1   查看crond是否安装  默认是安装并运行 开机启动

    [root@oldboyedu-lnb ~]# rpm -qa cronie
    cronie-1.4.11-19.el7.x86_64
    

    4.7.2.2   查看crond当前运行的状态   # 运行中 开机自动启动

    [root@oldboyedu-lnb ~]# systemctl status crond
    crond.service - Command Scheduler
    Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
    Active: active (running)
    

    4.7.2.3   定时任务相关文件    /var/log/messages

    系统的message日志 logrotate+定时任务来执行切割

    /etc/cron.deny # 拒绝某个用户使用定时任务 了解

    /var/log/cron   # 定时任务的日志文件

    4.7.3   定时任务的分类 两类

                 1系统定时任务

                 2用户定时任务

         4.7.3.1   系统定时任务

               /etc/crontab  #系统定时任务配置文件  针对所有用户生效 全局

         4.7.3.2   用户定时任务

              4.7.3.2.1   查看用户的定时任务 crontab -l
    [root@oldboyedu-lnb ~]# crontab -l
    no crontab for root
    
               4.7.3.2.2    crontab -e 编辑定时任务 ----> 编辑 /var/spool/cron/以当前登陆用户命名的文件名称

                例如当前登陆用户root  ---> /var/spool/cron/root

                例如当前登陆用户oldboy---> /var/spool/cron/oldboy

                crontab -e 有语法检测功能 类似于 visudo

       4.7.4  定时任务使用

    [root@oldboyedu-lnb ~]# crontab -e  # 编辑用户的定时任务 默认为空
    

    口诀:什么时间做什么,然后再想下一次什么时候执行 什么时间,做什么事情

    *        *       *               *          *
    分        时      日             月          周
    minute   hour   day of month month   day of week
    分钟     小时    天          月           周
    0-59     0-23   1-31        1-12        0-6 1-7            

    1.案例 每天的上午8点30分,来学校上车(go to school)

    格式:

    *  *  *  *  * user-name  command to be executed
    30 8 * * *  root go to school
    

    2.案例 每天晚上12点准时,回家自己开车(go to bed)

    第一个*  0 表示整点  可以使用00

    第二个*  0 表示凌晨12点 可以使用00

    00  00  * * * root go to bed

     注意:星期几和日期不要同时加上  2020年2月29星期六

    4.7.5   定时任务实际编写方法

    4.7.5.1  定时任务服务环境准备

    定时任务服务是否启动/是否开机自动启动   

    [root@oldboyedu ~]# systemctl status crond
    crond.service - Command Scheduler
    Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
    Active: active (running) since Tue 2019-04-23 09:15:43 CST; 2 days ago
        Main PID: 905 (crond)
        CGroup: /system.slice/crond.service
             └─905 /usr/sbin/crond -n
          Apr 23 09:15:43 oldboyedu.com systemd[1]: Started Command Scheduler.
          Apr 23 09:15:43 oldboyedu.com systemd[1]: Starting Command Scheduler...
          Apr 23 09:15:43 oldboyedu.com crond[905]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 30% if used.)
          Apr 23 09:15:43 oldboyedu.com crond[905]: (CRON) INFO (running with inotify support
    

    4.7.5.2   实际编写定时任务                                                                                     

    配置方法: crontab -e

    编写语法规范:

    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |
    # *   *   *  *  * user-name  command to be executed
    *   *   *    *   * 具体做什么事情
    分  时  日   月  周
    

    4.8  写法

    4.8.1  用数值表示时间信息

    00 02 *  *  *   备份文件

    4.8.2  利用特殊符号表示时间信息

    *           *              *        *             *        备份文件
    
    每分钟     每小时          每天       每月          每周
    

    PS: 定时任务最短执行的周期为每分钟

             */5     */5      */5   

        每隔5分钟  每隔5小时  每隔5

    01-05       02    *    *    *    

    01到05     02    *    *    *

         指定时间的范围

    00      14,20  *   *    *
    

    指定不连续的时间信息

    每天14:30分钟    起来学习

    测验01: 每天下午02:30分钟 起来学习

    30 14 * * *
    

    测验02: 每隔3天 夜里2点 执行数据备份

    00 02 */3  *  * 
    

    测验03:  */10  01,03  *  *   *   

    每天凌晨01点  每隔10分钟
    每天凌晨03点 每隔10分钟 
    每天凌晨1点和凌晨3点  每隔10分钟0点整 -->  01:00 03:00      
    

     测验04:    

    */10   01-03  *  *   *
    

     测验05:   

    *  01,03  *  *   *   ???   
    

     测验06:  

    *  01-03  *  *   *   
    

     测验07:

    00     02   28      */2          6 ???  
    02:00        28   每隔两个月   星期6
    

    结论:

    01. 在写时间信息的时候, 如果想表示每隔多久执行什么任务

     /上面尽量用*号表示, 不要写具体数值

    02. 时间信息由左到右依次书写, 尽量不要跳步

    03. 当编写定时任务时,日期信息不要和星期信息同时出现

    补充说明:

    20/10  01,03 * * * 

    01:20 01:30 01:40       01:59

    03:00      03:59

    4.8.3  实际编写定时任务

    4.8.3.1   每天凌晨两点备份 /data目录到 /backup

      第一个历程: 写上时间信息

    00 02  * * *
    

    第二个历程: 写上完成任务的具体命令

    cp -a /data /backup
    

    第三个历程: 编写定时任务

    crontab -e
    00 02 * * *  cp -a /data /backup   
    

    4.9  定时任务排查方法:

    4.9.1  检查是否有定时任务配置文件

    cat /var/spool/cron/root
    00 02 * * *  cp -a /data /backup
    

    4.9.2  检查定时任务日志文件

    ll /var/log/cron
    -rw-------. 1 root root 14050 Apr 25 15:49 /var/log/cron
    日志信息说明
    Apr 25 15:53:22 oldboyedu crontab[3893]: (root) BEGIN EDIT (root)
    Apr 25 15:54:06 oldboyedu crontab[3934]: (oldboy) BEGIN EDIT (oldboy)
    Apr 25 15:54:48 oldboyedu crontab[3893]: (root) REPLACE (root)
    Apr 25 15:54:48 oldboyedu crontab[3893]: (root) END EDIT (root)
    Apr 25 15:55:01 oldboyedu crond[905]: (root) RELOAD (/var/spool/cron/root)
    Apr 25 15:55:01 oldboyedu CROND[3939]: (root) CMD (cp -a /data /backup)
    Apr 25 15:55:01 oldboyedu CROND[3937]: (root) MAIL (mailed 55 bytes of output but got status 0x004b#012)
    执行时间      主机名   编辑定时任务    以什么用户编辑或执行定时任务/干了什么事情                              执行定时任务
    

    4.10  定时任务编写注意事项:(规范)

    4.10.1  编写定时任务要有注释说明

    4.10.2  编写定时任务路径信息尽量使用绝对路径

    4.10.3  编写定时任务命令需要采用绝对路径执行 /usr/sbin/useradd

    命令执行成功条件:
    useradd  ---> $PATH ---> /sbin/useradd ---> 命令执行成功
    定时任务执行时,识别的PATH信息只有: /usr/bin:/bin
    useradd命令--->usr/sbin/useradd
    

    4.10.4  编写定时任务时,可以将输出到屏幕上的信息保存到黑洞中,避免占用磁盘空间

    * * * * *  sh test.sh &>/dev/null
    

        说明: 定时任务中执行命令,如果产生输出到屏幕的信息,都会以邮件方式告知用户

    /var/spool/mail/root          不断变大占用磁盘空间        占用的block空间
    

        解决方法: 将邮件服务关闭

    systemctl stop postfix    
    /var/spool/postfix/maildrop/  不断产生小文件占用磁盘空间  占用的inode空间
    

        解决方法: 删除小文件/

    rm -f /var/spool/postfix/maildrop/*
    systemctl start postfix
    

    4.10.5   编写定时任务, 尽量不要产生屏幕输出信息

    cp -a /data /backup  
    tar zcvf /backup/data.tar.gz  /data    有信息输出
    cd /
    tar zcf /backup/data.tar.gz  ./data    没有信息输出
    

    4.10.6 当需要多个命令完成一个定时任务需求时,可以利用脚本编写定时

    vim backup.sh
    cp -a /data /backup  
    tar zcvf /backup/data.tar.gz  /data
    crontab -e
    # xxxxx
    * * * * *  /bin/sh /server/scripts/backup.sh &>/dev/null
    

    作业: 使用crond只在凌晨4点运行一次、如何关闭或者取消或删除下一次执行(非手动)

    4.11   定时任务

                  配置文件

                  系统定时任务 /etc/crontab

                  用户定时任务 /var/spool/cron/用户  ====> crontab -e

    4.12   查看当前用户定时任务的列表

                  crontab -l   # 系统的定时任务 只能通过查看文件cat /etc/crontab

                   * 代表每     第一个是* 代表了每分钟

                   * * * * *  代表了1分钟执行1次

                   */n    n数字    每隔多少分钟执行1次

                   */5 * * * *     每间隔5分钟执行1次8点13-->定时任务--->15分  20分 25分执行            

                  - 代表了区间

                  00 06-08 * * *    6点7点8点 执行1次

                  每天的上午7点到上午11点 每一个小时运行CMD命令

                  00 7-11 * * * root cmd

                  , 分隔

                  00 04-07,11,15  * * *分别是上午的4点到7点和11点,15点 执行

        案例: 每分钟把自己的名字 追加到 /oldboy/oldboy.txt

                  PS:输出文件尽量使用绝对路径 默认存放在家目录

    4.13.1  在命令行把自己的名字追加到文件中

    4.13.2  写入定时任务 定时任务的规范     

    * * * * * 可执行命令
    * * * * * echo oldboyedu >> /oldboy/oldboy.txt
    

    4.13.3  测试结果

    4.13.4   排错 /var/log/cron 日志            

    00 23,00-07 * * *   晚上23点,0点到7点   /application/nginx/sbin/nginx -s reload 
    

    4.14  定时任务书写规范

    4.14.1  在命令行测试

    4.14.2  测试成功后写入脚本(一个定时任务的命令超过2条 写入脚本 在定时任务中执行脚本)

    4.14.3  执行脚本进行测试 sh test.sh  ./test.sh /root/test.sh . test.sh source test.sh

    4.14.4  写入定时任务 分时日月周

    4.14.5  检查结果并排错

    4.14.6  定时任务命令为1条命令 直接写入定时任务即可

                 案例: 每间隔5分钟 进行1次时间同步 

    date -s 20081011
    

                通过邮件来查看详细的执行过程: 系统开启了postfix邮件服务

    [root@oldboyedu-lnb ~]# cat /var/spool/mail/root
    

    4.15   定时任务注意事项

    4.15.1  定时任务规则前加注释 什么时间做什么 作用是什么 作者是谁  给我们自己开 方便管理

    4.15.2    使用脚本来替代命令行的定时任务(超过两条写入脚本) 脚本: 命令的集合

    4.15.3    定时任务中的%需要使用转义

    4.15.3.1  写入定时任务

                   每分钟对/etc/hosts /etc/passwd 打包成时间格式命名的压缩包 放在/opt

                    /opt/2008-09-10.tar.gz

                    命令行执行      

    tar zcvfP /opt/`date +%F`.tar.gz /etc/hosts /etc/passwd   
    

                    写入定时任务     

     * * * * * tar zcvfP /opt/`date +\%F`.tar.gz /etc/hosts /etc/passwd
    

                      不加转义:

                      写入脚本 定时任务中执行脚本: 放在系统的固定目录 统一管理

    [root@oldboyedu-lnb scripts]# cat tar.sh
    tar zcfP /opt/`date +%F`.tar.gz /etc/hosts /etc/passwd
    crontab -e
    * * * * * sh /server/scripts/tar.sh
    

    4.15.4  定时任务执行脚本使用/bin/sh 或sh 执行 脚本统一放在一个目录

    4.15.5  定时任务中-命令或脚本结果(正确及错误)定向到黑洞(>/dev/null 2>&1)或追加到文件中 >>/tmp/oldboy.txt 2>&1              

    4.15.6  企业案例:

                  如果定时任务规则结尾不加>/dev/null 2>&1或者追加到文件中>>/tmp/oldboy 2>&1

                   很容易导致硬盘inode空间被占满,从而系统服务不正常。

    4.15.6.1  为什么会导致inode满  一个文件必须最少占用1个inode和多个block

                    如果邮件postfix服务没有开启 定时任务没有把执行结果定向到空或者文件中

                   定时任务里面的每一条执行一次都会产生1个临时文件 临时文件占用inode

    4.15.6.2   如果postfix服务开启 则不会产生小文件 定时任务会不断的给root用户发邮件

                    执行命令过程中会提示

                   you have new mail in /var/spool/mail/root 

    4.15.6.3    定时任务产生的小文件的目录(邮件没开启产生的)  默认邮件开启/var/spool/postfix/maildrop/

    4.15.6.3.1      关闭邮件服务
    [root@oldboyedu-lnb ~]# systemctl stop postfix
    
    4.15.6.3.2       让定时任务每分钟执行测试
    */5 * * * *  ntpdate ntp1.aliyun.com
    * * * * * sh /server/scripts/tar.sh
    

     解决方案:

    1. 开启邮件 (不建议)
    2. 把命令的执行结果定向到空或者是文件中 使用第二种方法
    定向到空
    &> /dev/null 
    定向到文件
    &>> /data/test.txt
    3. 定时清理 /var/spool/postfix/maildrop
    
    */30 * * * * find /var/spool/postfix/maildrop/ -type f|xargs rm  
    

    PS:目录本身越大 表示下面的小文件越多,如果目录下有个1G的文件 会影响目录大小

            目录里存的是文件名称 文件名称存放在目录的block

            文件里的内容有1G  1G的内容文件的block

            如果一个目录本身大于1M 说明了小文件很多

    4.15.7  避免不必要的程序输出

                tar -zcvf  ----> tar -zcf          

    4.15.8    在脚本中打包先进入相对路径

    4.15.8.1   案例

                    每天凌晨1点把/etc/目录 打包备份/tmp目录并且要求每天的备份名字不同。

    1) 命令行测试
    2) 写入脚本
    [root@oldboyedu-lnb scripts]# cat tar.sh
    cd /
    tar zcf /tmp/`date +%F-%H-%M`.tar.gz etc
    3) 执行脚本测试
    4) 写入定时任务
    00 01 * * * sh /server/scripts/tar.sh &>/dev/null
    

    4.15.9  定时任务脚本中的程序文件 ,尽量用绝对路径

           * * * * * echo oldboyedu >>/root/oldboy.txt

    4.15.10  定时任务的配置文件 必须要打包备份

    4.15.11  用户定时任务运行脚本的时候可以识别的PATH只有 /usr/bin和/bin

    */5 * * * *  ntpdate ntp1.aliyun.com  命令无法执行
    [root@oldboyedu-lnb ~]# which ntpdate
    /usr/sbin/ntpdate
    

    4.15.11.1  解决方法1

    命令使用绝对路径方式         

    * * * * *  /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null
    

    4.15.11.2  解决方法2:定义PATH变量(在定时任务配置文件中  在脚本中)

    [root@oldboyedu-lnb ~]# crontab -l
    
    PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin'
    

    4.15.11.3  解决方法3: 在脚本中实现

                     PS:在写脚本的过程中 目录和目录之间的连接必须连着的 不能有空格

                          创建一个以ip地址命名的目录 使用ifconfig命令获取IP并创建目录,

                          并把/etc/目录打包压缩放在里面,保持每天的压缩包名字不同

    4.15.11.3.1   获取IP地址
    [root@oldboyedu-lnb ~]# hostname -I
    10.0.0.200
    [root@oldboyedu-lnb ~]# ifconfig eth0|awk 'NR==2{print $2}'
    10.0.0.200
    [root@oldboyedu-lnb scripts]# cat ip.sh
    #PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin'
    #source /etc/profile
    /etc/profile
    dir=`ifconfig eth0|awk 'NR==2{print $2}'`
    time=`date +%F-%H-%M`
    IP=`hostname`
    #mkdir -p /opt/$dir
    #cd /opt/$dir || mkdir $dir
    [ -d /opt/$dir ] || mkdir /opt/$dir
    cd /
    tar zcf /opt/$dir/${time}.tar.gz etc
    

    4.16  写入定时任务

    * * * * *  sh /server/scripts/ip.sh

    4.17  企业中常见笔试题

    每天晚上12点执行一条 ntpdate ntp1.aliyun.com

    00 00  * * * /usr/sbin/ntpdate ntp1.aliyun.com
    案例: 早上4点执行1次 ntpdate ntp1.aliyun.com 执行完后 注释删除该定时任务
    #* * * * *  ntpdate ntp1.aliyun.com &>/dev/null && sed -i '4s#^###g' /var/spool/cron/root
    [root@oldboyedu-lnb ~]# sed -n '/ntpdate/s#^###gp' /var/spool/cron/root
    * * * * *  ntpdate ntp1.aliyun.com &>/dev/null && sed -i '4s#^###g' /var/spool/cron/root
    [root@oldboyedu-lnb scripts]# cat ntp.sh
    ntpdate ntp1.aliyun.com &>/dev/null
    sed -i '/ntp/s#^###g' /var/spool/cron/root
    

                                                  

  • 相关阅读:
    Maven工程读取properties文件过程
    Nginx实现高可用(了解)
    使用Nginx实现负载均衡(tomcat集群之后实现交叉访问)
    使用Nginx实现反向代理过程(一台服务器部署两个网站)
    一台服务器,通过不同域名区分不同主机,配置步骤
    EditPlus5.0破解激活
    [通知] 博客停更
    [论文理解] 活体检测算法论文小结 (一)
    [CUDA] CUDA编程入门
    [学习笔记]《机器学习基础》 课程总结(一)
  • 原文地址:https://www.cnblogs.com/strugger-0316/p/13674382.html
Copyright © 2011-2022 走看看