• Shell记录-Shell脚本基础(六)


    watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行。

    1.命令格式

    watch[参数][命令]

    2.命令功能

    可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令

    3.命令参数

    • -n--interval watch缺省每2秒运行一下程序,可以用-n或-interval来指定间隔的时间。
    • -d或—differences 用-d或—differences 选项watch 会高亮显示变化的区域。 而-d=cumulative选项会把变动过的地方(不管最近的那次有没有变动)都高亮显示出来。
    • -t 或-no-title 会关闭watch命令在顶部的时间间隔,命令,当前时间的输出。
    • -h, —help 查看帮助文档

      4.使用实例

      实例1:

      命令:每隔一秒高亮显示网络链接数的变化情况

      watch -n 1 -d netstat -ant

      说明:其它操作:
      切换终端: Ctrl+x
      退出watchCtrl+g

      实例2:每隔一秒高亮显示http链接数的变化情况

      命令:

      watch -n 1 -d 'pstree|grep http'
      
      Shell

      说明:
      每隔一秒高亮显示http链接数的变化情况。 后面接的命令若带有管道符,需要加’’将命令区域归整。

      实例3:实时查看模拟攻击客户机建立起来的连接数

      命令:

      watch 'netstat -an | grep:21 |  grep<客户机的IP>| wc -l'
      
      Shell

      实例4:监测当前目录中 scf’ 的文件的变化

      命令:

      watch -d 'ls -l|grep scf'
      
      Shell

      实例5:10秒一次输出系统的平均负载

      命令:

      watch -n 10 'cat /proc/loadavg'
      
      Shell

      输出结果如下:

      Every 10.0s: cat /proc/loadavg                          Mon Feb 27 20:54:45 2017
      
      0.01 0.04 0.05 1/132 6335

    接下来来学习一下一次性定时计划任务的at命令的用法。

    1.命令格式

    at[参数][时间]

    2.命令功能

    在一个指定的时间执行一个指定任务,只能执行一次,且需要开启atd进程(
    ps -ef | grep atd查看, 开启用/etc/init.d/atd start or restart; 开机即启动则需要运行 chkconfig --level 2345 atd on)。

    3.命令参数

    • -m 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出
    • -I atq的别名
    • -d atrm的别名
    • -v 显示任务将被执行的时间
    • -c 打印任务的内容到标准输出
    • -V 显示版本信息
    • -q<列队> 使用指定的列队
    • -f<文件> 从指定文件读入任务而不是从标准输入读入
    • -t<时间参数> 以时间参数的形式提交要运行的任务
      at允许使用一套相当复杂的指定时间的方法。他能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。 上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。 更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。
      TIME:时间格式,这里可以定义出什么时候要进行 at 这项任务的时间,格式有:
      HH:MM    
      ex> 04:00
      
      Shell
      在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此任务。
      HH:MM YYYY-MM-DD
      ex> 04:00 2017-03-17
      
      Shell
      强制规定在某年某月的某一天的特殊时刻进行该项任务
      HH:MM[am|pm] [Month] [Date]
      ex> 04pm March 17
      
      Shell
      也是一样,强制在某年某月某日的某时刻进行该项任务
      HH:MM[am|pm] + number [minutes|hours|days|weeks]
      ex> now + 5 minutes
      ex> 04pm + 3 days
      
      Shell
      就是说,在某个时间点再加几个时间后才进行该项任务。

    4.使用实例

    实例1:三天后的下午 5 点执行 /bin/ls

    命令:

    at 5pm+3 days
    
    Shell

    输出:

    [root@localhost yiibai]# at 5pm+3 days
    at> /bin/ls
    at> <EOT> ## Ctr+D
    job 4 at Thu Mar  2 17:00:00 2017
    [root@localhost yiibai]#
    
    Shell

    实例2:明天17点钟,输出时间到指定文件内

    命令:

    at 17:20 tomorrow
    
    Shell

    输出:

    [root@localhost yiibai]# at 17:20 tomorrow
    at> date >/home/yiibai/date.log
    at> <EOT>
    job 5 at Tue Feb 28 17:20:00 2017
    [root@localhost yiibai]#
    
    Shell

    实例3:计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务

    命令:

    atq
    
    Shell

    输出:

    [root@localhost yiibai]# atq
    4       Thu Mar  2 17:00:00 2017 a root
    5       Tue Feb 28 17:20:00 2017 a root
    [root@localhost yiibai]#
    
    Shell

    实例4:删除已经设置的任务

    命令:

    atrm 7
    
    Shell

    输出:

    [root@localhost yiibai]# atrm 4
    [root@localhost yiibai]# atq
    5       Tue Feb 28 17:20:00 2017 a root
    [root@localhost yiibai]#
    
    Shell

    实例5:显示已经设置的任务内容

    命令:

    at -c 5
    
    Shell

    输出:

    [root@localhost yiibai]# at -c 5
    #!/bin/sh
    # atrun uid=0 gid=0
    # mail yiibai 0
    umask 22
    XDG_SESSION_ID=3; export XDG_SESSION_ID
    HOSTNAME=localhost.localdomain; export HOSTNAME
    SHELL=/bin/bash; export SHELL
    HISTSIZE=1000; export HISTSIZE
    SSH_CLIENT=192.168.0.5 51577 22; export SSH_CLIENT
    SSH_TTY=/dev/pts/0; export SSH_TTY
    USER=yiibai; export USER
    LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:; export LS_COLORS
    PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/yiibai/bin:/sbin:/usr/bin:/usr/sbin; export PATH
    MAIL=/var/spool/mail/yiibai; export MAIL
    PWD=/home/yiibai; export PWD
    LANG=en_US.UTF-8; export LANG
    HISTCONTROL=ignoredups; export HISTCONTROL
    HOME=/root; export HOME
    SHLVL=2; export SHLVL
    LOGNAME=yiibai; export LOGNAME
    SSH_CONNECTION=192.168.0.5 51577 192.168.0.210 22; export SSH_CONNECTION
    LESSOPEN=||/usr/bin/lesspipe.sh %s; export LESSOPEN
    XDG_RUNTIME_DIR=/run/user/1000; export XDG_RUNTIME_DIR
    cd /home/yiibai || {
             echo 'Execution directory inaccessible' >&2
             exit 1
    }
    ${SHELL:-/bin/sh} << 'marcinDELIMITER40a1c04f'
    date >/home/yiibai/date.log
    
    marcinDELIMITER40a1c04f
    [root@localhost yiibai]#
    
    Shell

    实例6:

    命令及输出:

    说明:

    • 5. atd 的启动与 at 运行的方式:
      • 5.1. atd 的启动
        要使用一次性计划任务时,Linux 系统上面必须要有负责这个计划任务的服务,那就是 atd 服务。 不过并非所有的 Linux distributions 都默认会把他打开的,所以,某些时刻我们需要手动将 atd 服务激活才行。 激活的方法很简单,就是这样:
        命令:
        /etc/init.d/atd start 
        /etc/init.d/atd restart
        
        Shell
        输出:

    说明:
    /etc/init.d/atd start 没有启动的时候,直接启动 atd 服务
    /etc/init.d/atd restart 服务已经启动后,重启 atd 服务
    备注:配置一下启动时就启动这个服务,免得每次重新启动都得再来一次
    命令:

    chkconfig atd on
    
    Shell

    输出:

    • 5.2 at 的运行方式
      既然是计划任务,那么应该会有任务执行的方式,并且将这些任务排进行程表中。那么产生计划任务的方式是怎么进行的? 事实上,我们使用 at 这个命令来产生所要运行的计划任务,并将这个计划任务以文字档的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与运行了。就这么简单。
      不过,并不是所有的人都可以进行 at 计划任务。为什么? 因为系统安全的原因。很多主机被所谓的攻击破解后,最常发现的就是他们的系统当中多了很多的黑客程序, 这些程序非常可能运用一些计划任务来运行或搜集你的系统运行信息,并定时的发送给黑客。 所以,除非是你认可的帐号,否则先不要让他们使用 at 命令。那怎么达到使用 at 的可控呢?
      我们可以利用 /etc/at.allow 与 /etc/at.deny 这两个文件来进行 at 的使用限制。加上这两个文件后, at 的工作情况是这样的:
      先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);
      如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者,就可以使用 at 命令了。
      如果两个文件都不存在,那么只有 root 可以使用 at 这个命令。
      透过这个说明,我们知道 /etc/at.allow 是管理较为严格的方式,而 /etc/at.deny 则较为松散 (因为帐号没有在该文件中,就能够运行 at 了)。在一般的 distributions 当中,由于假设系统上的所有用户都是可信任的, 因此系统通常会保留一个空的 /etc/at.deny 文件,意思是允许所有人使用 at 命令的意思 (您可以自行检查一下该文件)。 不过,万一你不希望有某些使用者使用 at 的话,将那个使用者的帐号写入 /etc/at.deny 即可! 一个帐号写一行。
  • 相关阅读:
    作业4.称体重
    一、虚拟环境.二、路由配置主页与404.三、2.x路由分发.四、伪静态.五、request对象.六、FBV与CBV.七、文件上传.
    一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器
    Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查
    学习Django,http协议,
    值类型之间的相互转化,运算符,if条件判断,循环,函数
    js导读,js引入,js选择器,事件,操作页面文档,计算后样式,数据类型
    字体图标,盒子显隐,overflow属性,伪类设计边框,盒子阴影2d形变
    浮动布局,定位布局(固定定位,绝对定位,相对定位),过渡动画
    盒子总结,文本属性操作,reset操作,高级选择器,高级选择器优先级,边界圆角(了解),a标签的四大伪类,背景图片操作,背景图片之精灵图
  • 原文地址:https://www.cnblogs.com/xinfang520/p/7724389.html
Copyright © 2020-2023  润新知