Linux Shell DAY16

本文分享了一系列实用的Linux脚本,包括计算文档中的数字个数、对比文件差异、检测网卡流量、批量杀进程及判断web服务状态等。通过这些脚本,你可以更高效地进行系统管理和故障排查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

21.计算数字个数

22.对比文件差异

23.检测网卡流量

24.批量杀进程

25.判断web服务


计算数字个数

题目要求

计算文档a.txt中每一行中出现的数字个数并且要计算一下整个文档中一共出现了几个数字。例如a.txt内容如下: 12aa*lkjskdj alskdflkskdjflkjj 我们脚本名字为 ncount.sh, 运行它时: bash ncount.sh a.txt 输出结果应该为: 2 0 sum:2

核心要求

sed把非数字字符删除,计算长度

for循环总和

代码

#!/bin/bash

sum=0

while read line

do

    line_n=\`echo $line|sed 's/\[^0-9\]//g'|wc -L\`

    echo $line_n                                            #打印每一行的数字

    sum=$\[$sum+$line_n\]

done < $1                                                   #重新输入这个文件 1.txt

echo "sum:$sum"

避免行中有空格,不能直接用for i in cat 'xxx'

可是使用

wc -l 1.txt

for i in 'seq 1 22 ' ; do sed -n "$i"p 1.txt; done

或者

while read line


对比文件差异

题目要求

有两台Linux服务器A和B,假如A可以直接ssh到B,不用输入密码。A和B都有一个目录叫做/data/web/ 这下面有很多文件,

当然我们不知道具体有几层子目录,假若之前A和B上该目录下的文件都是一模一样的。

但现在不确定是否一致了。固需要我们写一个脚本实现这样的功能,检测A机器和B机器/data/web/目录下文件的异同,我们以A机器上的文件作为标准。

比如,假若B机器少了一个a.txt文件,那我们应该能够检测出来,或者B机器上的b.txt文件有过改动,我们也应该能够检测出来(B机器上多了文件不用考虑)。

核心要点

md5sum file

代码

#!/bin/bash

dir=/data/web

\[ -f /tmp/md5.list \] && rm -f /tmp/md5.list

find $dir/ -type f > /tmp/file.list

while read line

do

    md5sum $line  >> /tmp/md5.list

done < /tmp/file.list

scp /tmp/md5.list B:/tmp/

\[ -f /tmp/check\_md5.sh \] && rm -f /tmp/check\_md5.sh

cat >/tmp/check\_md5.sh << EOF                                                                     #EOF 嵌入文档  把EOF中文本写入到tmp/check\_md5.sh中去

#!/bin/bash

dir=/data/web

n=\\\`wc -l /tmp/md5.list|awk '{print \\$1}'\\\`

for i in \\\`seq 1 \\$n\\\`

do

    file_name=\\\`sed -n "\\$i"p /tmp/md5.list |awk '{print \\$1}'\\\`

    md5=\\\`sed -n "\\$i"p /tmp/md5.list|awk '{print \\$2}'\\\`

    if \[ -f \\$file_name \]

    then

        md5\_b=\\\`md5sum \\$file\_name\\\`                                                          # ''中命令会直接执行,所以要用\\脱意

        if \[\\$md5_b != \\$md5 \]

        then

            echo "\\$file_name changed."

        fi

    else

        echo "\\$file_name lose."

    fi

done

EOF

scp /tmp/check_md5.sh B:/tmp/

ssh B "/bin/bash /tmp/check_md5.sh"                                      #远程执行脚本

检测网卡流量

题目要求

写一个脚本,检测你的网络流量,并记录到一个日志里。需要按照如下格式,并且一分钟统计一次(只需要统计外网网卡,假设网卡名字为eth0):   2017-08-04 01:11 eth0 input: 1000bps eth0 output : 200000bps

2017-08-04 01:12 

eth0 input: 1000bps 

eth0 output : 200000bps   

提示:使用sar -n DEV  1 59 这样可以统计一分钟的平均网卡流量,只需要最后面的平均值。另外,注意换算一下,1Byte=8bit

核心要点

sar命令                  查看网卡流量  8bit=1byte

awk格式话输出

代码

#!/bin/bash

logdir=/tmp/sar_log

file=$logdir/\`date +%d%H\`.log

t=\`date +"%F %H:%M"\`

\[ -d $logdir \] || mkdir -p $logdir

LANG=en

sar -n DEV 1 59 |grep eth0 |grep "Average" > /tmp/sar.tmp                                 #过滤出average行

exec >>$file                                                                             # 下面输出都追加到$file中去

echo "$t"

awk '{print "eth0 input:",$5\*8000"bps""\\n""eth0 output:",$6\*8000"bps"}' /tmp/sar.tmp         #,用来表示空格  "/n"表示回车

echo "#### ###################"

批量杀进程

题目要求

一台机器负载高,top查看有很多sh的进程,然后top -c查看可以看到对应的进程命令是sh -c /bin/clearnen.sh 。

经分析后发现是因为该脚本执行时间太长,导致后续执行时,上次的脚本还未执行结束。写一个脚本批量杀死所有sh的进程。

核心要点

kill -9 pid      强制杀死进程

代码

#!/bin/bash

for pid in \`ps aux |grep clearnen.sh |awk '{print $2}'\`

do

    echo $pid

    kill -9 $pid

done

判断web服务

题目要求

写一个脚本判断你的Linux服务器里是否开启web服务?(监听80端口)如果开启了,请判断出跑的是什么服务,是httpd呢还是nginx又或者是其他的什么?

核心要点

netstat -lnpt |grep ':80 '

lsof -i :80

代码

#!/bin/bash

n=\`netstat -lntp |grep ':80 '|wc -l\`

if \[ $n -eq 0 \]

then

    echo "It not listen port 80"

else

    ser=\`netstat -lntp |grep ':80 '|awk -F '/' '{print $NF}'|sed 's/ //g'\`                     #sed 清楚空格

    echo "It is listenning port 80, and the service is $ser."

fi

转载于:https://my.oschina.net/u/3959701/blog/3101440

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值