监视磁盘的使用情况

$ du file1.txt file2.txt
$ du -a file_or_dir #-a递归输出指定目录的所有文件统计
$ 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个文件

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

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

计算命令执行时间

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

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

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

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

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

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

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

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

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

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

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

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

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

$ uptime
:: up :, users, load average: 0.04, 0.08, 0.06

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

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

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

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

watch 监视终端命令输出

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

监视目录访问的脚本

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

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

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

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

#!/bin/bash
#文件名:intruder_detect.sh
#用途:入侵报告工具,以auth.log作为日志文件
AUTHLOG=/var/log/auth.log
if [[ -n $ ]];
then
AUTHLOG=$
echo Using Log file : $AUTHLOG
fi
LOG=/tmp/valid.$$.log
grep -v "invalid" $AUTHLOG > $LOG
users=$(grep "Failed password" $LOG | awk '{ print $(NF-5) }' | sort | uniq) printf "%-5s|%-10s|%-10s|%-13s|%-33s|%s\n" "Sr#" "User" "Attempts" "IP address""Host_Mapping" "Time range"
ucount=; ip_list="$(egrep -o "[-]+\.[-]+\.[-]+\.[-]+" $LOG | sort | uniq)"
for ip in $ip_list;
do
grep $ip $LOG > /tmp/temp.$$.log
for user in $users;
do
grep $user /tmp/temp.$$.log> /tmp/$$.log
cut -c- /tmp/$$.log > $$.time
tstart=$(head - $$.time);
start=$(date -d "$tstart" "+%s");
tend=$(tail - $$.time);
end=$(date -d "$tend" "+%s")
limit=$(( $end - $start ))
if [ $limit -gt ];
then
let ucount++;
IP=$(egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" /tmp/$$.log | head - );
TIME_RANGE="$tstart-->$tend"
ATTEMPTS=$(cat /tmp/$$.log|wc -l);
HOST=$(host $IP | awk '{ print $NF }' )
printf "%-5s|%-10s|%-10s|%-10s|%-33s|%-s\n" "$ucount" "$user" "$ATTEMPTS" "$IP" "$HOST" "$TIME_RANGE";
fi
done
done
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. centos 6.5源码编译安装subversion 1.8.10

    一.简介 CentOS 6.5的yum源可以安装的SVN客户端版本太低了,1.6.11,所以需要升级到1.8.10,而官网有没有找到1.8.10的安装包,只能选择源码编译安装. 二.安装步骤 参考官网 ...

  2. STM32/GD32上内存堆栈溢出探测研究

    无数次遭受堆栈溢出折磨,随着系统变得复杂,故障点越来越难以查找!主要溢出情况如下:1,一般RAM最后两块空间是堆Heap和栈Stack,堆从下往上用,栈从上往下用,任意一个用完,都会进入对方的空间2, ...

  3. Entity Framework 第四篇 优化SQL查询

    Expression<Func<TEntity, bool>>与Func<TEntity, bool>的异同 public IList<TEntity> ...

  4. css 中的position z-index em rem zoom 的基本用法

    1.position定位: CSS 定位和浮动 CSS 为定位和浮动提供了一些属性,利用这些属性,可以建立列式布局,将布局的一部分与另一部分重叠,还可以完成多年来通常需要使用多个表格才能完成的任务. ...

  5. Annotation实战【自定义AbstractProcessor】

    前言 在使用Java的过程中,每个开发人员都接触过@Override, @Deprecated等等各式各样的注解,这些东西是java最基础的一些原生定义好的annotation.本文通过一个实例演示如 ...

  6. shell脚本例子集锦(习题总结)

    练习一:写一个脚本 .设定变量FILE的值为/etc/passwd .依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么 形如:(提示:LINE=`wc -l /etc/passw ...

  7. zImage.img、ramdisk.img、system.img、userdata.img介绍及解包、打包方法

    ramdisk.img system.img userdata.img介绍及解包.打包方法 Android 源码编译后,在out/target/product/generic下生成ramdisk.im ...

  8. 关于C指针

    地址概念:内存基本单元是一个字节,一个字节8个位.在定义变量的时候,如int a=10:系统为变量a分配2个字节空间:1000~1001,并在1001~1002中存有数据10.内存中没有变量a,只有1 ...

  9. 定时自动启动任务crontab命令用法

    crontab简介 crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行.该词 ...

  10. factory工厂模式之简单工厂SimpleFactory

    简单工厂(Simple Factory) 又叫静态工厂,是工厂模式三中状态中结构最为简单的.1.主要有一个静态方法,用来接受参数,并根据参数来决定返回实现同一接口的不同类的实例.2.或者针对每个产品, ...