监视磁盘的使用情况

  1. $ du file1.txt file2.txt
  2. $ du -a file_or_dir #-a递归输出指定目录的所有文件统计
  3. $ du file_or_dir #这只是显示子目录使用的情况不显示每个文件占用空间情况
    $ du -h filename                #-h 显示的更方便人阅读
    $ du -c file1 file2               #-c 最后有一个统计
    $ du -s FILES(s)                #-s 只输出合计数据
    $ du -b FILE(s)               #以特定的单位输出文件大小 -b(字节) -k(KB) -m(MB) -B BLOCK_SIZE(以指定块大小)
    $ du --exclude "*.txt" FILES(s)       #--exclude排除指定文件
    $ du --exclude-from EXCLUDE.txt DIRECTORY 
    $ du --max-depth 2 DIRECTORY

找出指定目录中最大的10个文件

  1. $ du -ak SOURCE_DIR | sort -nrk | head
    $ du -ak /home/slynux | sort -nrk 1 | head -n 4

-ak全部文件已kb为单位,sort 对第一列按数值逆序排序。head -n 输出头4行

计算命令执行时间

  1. $ time ls #计算命令执行时间
    b.txt expect.sh
    real 0m0.007s 
    user 0m0.000s 
    sys 0m0.004s
  1. $ /usr/bin/time -a -o output.txt COMMAND #-o filename 将相关的时间统计信息输出到指定文件

我们也可以使用选项 -f ,利用格式字符串来格式化时间输出。格式字符串由对应于特定选项的参数组成,这些参数以 % 作为前缀。 real 时间、 user 时间、 sys 时间的格式字符串分别如下:

  real: %e
  user: %U
  sys: %S

格式化输出生成后被写入标准输出,命令的执行时间信息被写入标准错误。我们可以用重定向操作符( > )对格式化输出重定向,用错误重定向操作符( 2> )对时间信息重定向。

  1. $ /usr/bin/time -f "Time: %U" uname> command_output.txt >time.log
    $ cat time.log 
    Time: 0.00 
    $ cat command_output.txt 
    Linux

收集与当前登录用户、启动日志及启动故障的相关信息

  1. $ who
  2. fzk : -- : (:)
  3. fzk pts/ -- : (:)
  4. $ w
  5. :: up :, users, load average: 0.05, 0.04, 0.05
  6. USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
  7. fzk : : : ?xdm? : .11s init --user
  8. fzk pts/ : : .00s .44s .00s w

w命令,第一行列出了当前时间,系统运行时间,当前登录的用户数量以及过去的1分钟、5分钟、15分钟内的系统平均负载。接下来的每一行显示了每一个登录用户的详细信息,其中包括登录名、TTY、远程主机、登录时间、空闲时间、自该用户登录后所使用的总CPU时间、当前运行进程所使用的CPU时间以及进程所对应的命令行。

  1. $ users #当前登陆主机的用户列表
  2. fzk fzk

如果某个用户打开了多个伪终端,那么该用户会被多次显示。

  1. $ users | tr ' ' '\n' | sort | uniq
    fzk

tr 将空格替换成换行,sort排序,uniq 去重

查看系统已经运行了多长时间

  1. $ uptime
  2. :: up :, users, load average: 0.04, 0.08, 0.06

获取上一次启动以及用户登陆会话信息

  1. $ last
  2. fzk pts/ : Thu Dec : - : (:)
  3. fzk pts/ : Thu Dec : still logged in
  4. fzk : : Thu Dec : still logged in
  5. reboot system boot 4.2.--generic Thu Dec : - : (:)
    $ last USER          #获取单个用户登录会话的信息
    $ last USER          #获取重启会话(reboot session)信息
    # lastb             #获取失败的用户登录会话信息

查看一小时内CPU占用CPU最多的10个进程脚本

  1. #!/bin/bash
  2. #文件名: pcpu_usage.sh
  3. #用途:计算1个小时内进程的CPU占用情况
  4. SECS= #将SECS更改成需要进行监视的总秒数
  5. UNIT_TIME= #UNIT_TIME是取样的时间间隔,单位是秒
  6.  
  7. STEPS=$(( $SECS / $UNIT_TIME ))
  8. echo Watching CPU usage... ;
  9. for((i=;i<STEPS;i++))
  10. do
  11. ps -eocomm,pcpu | tail -n + >> /tmp/cpu_usage.$$
  12. sleep $UNIT_TIME
  13. done
  14.  
  15. echo
  16. echo CPU eaters :
  17.  
  18. cat /tmp/cpu_usage.$$ | \
  19. awk '
  20. { process[$]+=$; }
  21. END{
  22. for(i in process)
  23. {
  24. printf("%-20s %s\n",i, process[i]) ;
  25. }
  26. }' | sort -nrk 2 | head
  27. rm /tmp/cpu_usage.$$ #删除临时日志文件

watch 监视终端命令输出

  1. $ watch ls
  2. $ watch -n 'ls -l' #以5秒为间隔,监视ls -l的输出
  3. $ watch -d 'COMMANDS' #-d 将时间间隔前后的命令输出的差异之处以不同颜色突出标示出来。

监视目录访问的脚本

  1. #/bin/bash
  2. #文件名: watchdir.sh8. 用 logrotate 管理日志文件
  3. path=$ #将目录或文件路径作为脚本参数
  4.  
  5. inotifywait -m -r -e create,move,delete $path -q

需要下载 “inotify-tools"包。选项 -m 表明要持续监视变化,而不是在事件发生之后退出。 -r 允许采用递归形式监视目录(忽略符号链接)。 -e 指定需要监视的事件列表。 -q 用于减少冗余信息,只打印出所需要的信息。命令输出可以被重定向到日志文件。事件列表如下:

访问( access )       读取文件
修改( modify )       文件内容被修改
属性( attrib )        文件元数据被修改
移动( move )        移动文件操作
创建( create )       生成新文件
打开( open )        打开文件操作
关闭( close )          关闭文件操作
删除( delete )         文件被删除

通过监视用户登录找出入侵者

  1. #!/bin/bash
  2. #文件名:intruder_detect.sh
  3. #用途:入侵报告工具,以auth.log作为日志文件
  4. AUTHLOG=/var/log/auth.log
  5. if [[ -n $ ]];
  6. then
  7. AUTHLOG=$
  8. echo Using Log file : $AUTHLOG
  9. fi
  10. LOG=/tmp/valid.$$.log
  11. grep -v "invalid" $AUTHLOG > $LOG
  12. users=$(grep "Failed password" $LOG | awk '{ print $(NF-5) }' | sort | uniq)
  13.  
  14. printf "%-5s|%-10s|%-10s|%-13s|%-33s|%s\n" "Sr#" "User" "Attempts" "IP address""Host_Mapping" "Time range"
  15. ucount=;
  16.  
  17. ip_list="$(egrep -o "[-]+\.[-]+\.[-]+\.[-]+" $LOG | sort | uniq)"
  18. for ip in $ip_list;
  19. do
  20. grep $ip $LOG > /tmp/temp.$$.log
  21. for user in $users;
  22. do
  23. grep $user /tmp/temp.$$.log> /tmp/$$.log
  24. cut -c- /tmp/$$.log > $$.time
  25. tstart=$(head - $$.time);
  26. start=$(date -d "$tstart" "+%s");
  27. tend=$(tail - $$.time);
  28. end=$(date -d "$tend" "+%s")
  29. limit=$(( $end - $start ))
  30. if [ $limit -gt ];
  31. then
  32. let ucount++;
  33. IP=$(egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" /tmp/$$.log | head - );
  34. TIME_RANGE="$tstart-->$tend"
  35. ATTEMPTS=$(cat /tmp/$$.log|wc -l);
  36. HOST=$(host $IP | awk '{ print $NF }' )
  37. printf "%-5s|%-10s|%-10s|%-10s|%-33s|%-s\n" "$ucount" "$user" "$ATTEMPTS" "$IP" "$HOST" "$TIME_RANGE";
  38. fi
  39. done
  40. done
  41. rm/tmp/valid.$$.log/tmp/$$.log $$.time/tmp/temp.$$.log >/dev/null

LinuxShell脚本攻略--第八章 当个好管家的更多相关文章

  1. LinuxShell脚本攻略--第二章 命令之乐

    用 cat 进行拼接 文件查找与文件列表玩转 xargs 用 tr 进行转换排序临时文件命名与随机数分割文件和数据根据扩展名切分文件名mv 批量重命名文件交互输入自动化 cat: echo 'Text ...

  2. LinuxShell脚本攻略--第一章 小试牛刀

    使用 shell 进行数学运算: #!/bin/bash no1=; no2=; let result=no1+no2 echo $result result=$[ $no1 + no2 ] resu ...

  3. shell 学习笔记 LinuxShell脚本攻略(第2版)

    注释用#号:多条命令通过分号或回车来分隔 echo会自动换行,若不想换行,则加上-n参数,如 echo -n "nice to meet you" echo后面的内容可以不带引号, ...

  4. LinuxShell脚本攻略--第九章 管理重任

    收集进程信息 $ ps PID TTY TIME CMD pts/ :: bash pts/ :: ps$ ps -f  #-f 显示更详细的信息UID PID PPID C STIME TTY TI ...

  5. LinuxShell脚本攻略--第六章 B计划

    tar -A或--catenate:新增文件到以存在的备份文件: -B:设置区块大小: -c或--create:建立新的备份文件: -C <目录>:这个选项用在解压缩,若要在特定目录解压缩 ...

  6. LinuxShell脚本攻略--第三章 以文件之名

    生成任意大小的文件文件权限.所有权和粘滞位创建不可修改文件生成空白文件查找符号链接及其指向目标head 与 tail只列出目录的其他方法在命令行中用 pushd 和 popd 快速定位(cd -)统计 ...

  7. Linux Shell脚本攻略

    -Linux Shell脚本攻略 总结的来说,这本书很实践性和实用性强,都是给的具体的例子,直接可以在终端操作实践,比单纯只看不动手务实多了,另外就是,这本书涵盖的内容也比较广,从文本操作到服务器管理 ...

  8. 老李分享:《Linux Shell脚本攻略》 要点(二)

    老李分享:<Linux Shell脚本攻略> 要点(二)   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课 ...

  9. 读《Linux Shell脚本攻略》(第2版) 总结

    前段时间读完了<Linux Shell脚本攻略>(第2版)这本书,给部分想读这本书的人分享下个人感受. 说下这本书的难度吧.纯新手或者只懂少部分编程知识的人,读起来还是有很大难度的.以我为 ...

随机推荐

  1. TestNG测试框架在基于Selenium进行的web自动化测试中的应用

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ TestNG+Selenium+Ant TestNG这个测试框架可以很好的和基于Selenium的 ...

  2. require.js的简单使用

    <script src="js/require.js"></script> <script src="js/require.js" ...

  3. 2016年11月17日 星期四 --出埃及记 Exodus 20:8

    2016年11月17日 星期四 --出埃及记 Exodus 20:8 "Remember the Sabbath day by keeping it holy.当记念安息日,守为圣日.

  4. python学习笔记三 文件操作(基础篇)

    文件操作 打开文件 open(name[,mode[,buffering]])   open函数使用一个文件名作为强制参数,然后返回一个文件对象.[python 3.5 把file()删除掉]   w ...

  5. (4)Redis 资料

    Redis是一种面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景. Redis Home http://redis.io/ MSOpenTech/re ...

  6. for循环嵌套的穷举,迭代,以及while的使用和for的转换

    for循环的穷举.解决多种方法做种组合问题,代替人脑的大量计算 穷举例子 迭代,寻找一定的规律.然后利用循环找出结果 迭代举例 以五个小朋友3岁,之前的每一个小朋友都比序号在后的小朋友大两岁.温,第一 ...

  7. 微信网页获取openId

    <%@ WebHandler Language="C#" Class="UserAuth" %> public class UserAuth : I ...

  8. Struts2应用的开发流程

    Struts2的开发流程 为了能够在eclipse中使用Struts2在进行开发时,需要根据需要导入一些有关的jar包: 在官网下载相关的压缩包,这里下载了两个:struts-2.3.30-all.z ...

  9. Java1.8.0_05 环境配置

    1.计算机->属性->高级系统设置->环境变量->系统变量 2.新建JAVA_HOME 变量值设为C:\Java\jdk1.8.0_05 即安装目录,确定. 3.新建CLASS ...

  10. 编写一个类A,该类创建的对象可以调用方法f输出小写的英文字母表。然 后再编写一个A类的子类B,要求子类B必须继承类A的方法f(不允许重写), 子类B创建的对象不仅可以调用方法f输出小写的英文字母表,而且可以调用子 类新增的方法g输出大写的英文字母表。最后编写主类C,在主类的main方法 中测试类A与类B。

    package zimu; public class A { public void f() { for (int i = 97; i <123; i++) { System.out.print ...