本文已参与[新人创作礼]活动,一起开启掘金创作之路。
习题集收藏的是一些习题联系,可以自己尝试着做做!
习题1
将每天的磁盘使用状态写入相对应的按时间生成的日志文件里
#!/usr/bin/bash
Time=$(date +%F) #时间
df -h > $Time.log #磁盘使用成日志文件
习题2
统计Nginx日志中每个IP的访问量有多少
筛选ip;排序,去重,统计;
cat /var/log/nginx/access.log
如无信息,可尝试下面这条命令,创造访问量
虚拟机上: ab -n2000 -c 200 http://127.0.0.1/index.html
本机上: ab -n2000 -c 200 http://IP地址/index.html
格式如下图
awk '{print $1}' /var/log/nginx/access.log|sort|uniq -c|head
#分割 排序 去重 统计 头部前10(不推荐)
awk '{print $1}' /var/log/nginx/access.log|sort|uniq -c|sort -n|tail
#升序排列
awk '{print $1}' /var/log/nginx/access.log|sort|uniq -c|sort -rn|head
#将访问量高的放在最上面
习题3
计算Linux系统所有进程占用内容大小的和
#!/usr/bin/bash
Men=$(ps aux|awk '{print $6}'|grep -v "RSS") #列出所有进程占用内容大小
num=0
for i in $Men
do
num=$[$i+$num]
done
num=$[$num/1024]
echo ${num}M
习题4
找到/home目录下所有后缀名为.txt的文件,将其后缀名批量修改为txt.bak;将所有.bak文件打包压缩为123.tar.gz;批量还原文件的名字,及把增加的.bak再删除。
#!/usr/bin/bash
#1.将后缀名批量修改为txt.bak
file_txt=$(find /home/ type f -iname "*.txt"|xargs >/home/txt.tt)
for i in $(cat /home/txt.tt)
do
mv $i $i.bak
done
#2.将所有.bak文件打包压缩为123.tar.gz
file_bak=$(find /home/ type f -iname "*.bak"|xargs >/home/tar.tt)
cd /home/
tar czf 123.tar.gz ./*.bak
#3.批量还原文件的名字,及把增加的.bak再删除
for j in $(cat /home/tar.tt)
do
mv $j ${j%.*} #去掉.bak
done
习题5
检查80端口是否开启,如无就开启;再检查nginx是否开启,如无就开启。
#!/usr/bin/bash
#Port=$(netstat -lntp|grep ":80"|wc -l) #检查80端口
Process=$(ps aux|grep [n]ginx|wc -l ) #查看有无nginx进程
yum install -y nmap
Port_open=$(nmap -p80 127.0.0.1|grep open|wc -l) #检查80端口是否处于开启状态
if [ $Port_open -ne 1 ];then
if [ $Process -ne 2 ];then
/usr/sbin/nginx #启动nginx
else
/usr/sbin/nginx -s reload #重新加载nginx
fi
fi
习题6
有个lnmp环境,经常502,一旦重启php-fpm就解决,如果不重启就会持序;现在需要编写脚本,监控访问日志的状态码,一旦发生502,就自动重启php-fpm。
分析:1.通过日志尾部300行,统计502出现次数
2.精准判断是否是502,如果是就重启;不是就不管
#!/usr/bin/bash
while true
do
sleep 3 #停止3s等待服务器反应
log=$(tail -n300 /var/log/nginx/access.log|grep "502"|wc -l) #查询日志文件的后300行中的502个数
if [ $log -ge 50 ];then #超过50就重启
systemctl restart php-fpm
sleep 5 #停止5s等待服务器反应
fi
done
习题7
列出常用的命令top10
拿值,排序,去重,统计(3选其1)
history |awk '{print $2}'|sort|uniq -c|sort -rn|head
hash|sort -rn|head #缓存的命令
cat ~/.bash_history |sort|uniq -c|sort -rn|head
习题8
判断Linux服务器里是否开启web服务,如果开启,那开起的是哪种服务?
分析:筛选80端口是否存在,筛选80端口对应的服务是啥?
查看所有端口服务:netstat -lntp
#!/usr/bin/bash
Nginx_status=$(ss -lntup|grep ":80"|grep nginx|wc -l)
Http_status=$(ss -lntup|grep ":80"|grep httpd|wc -l)
if [[ $Nginx_status -eq 0 && $Httpd_status -eq 0 ]];then
echo "没有启动80端口"
exit 1
fi
if [ $Nginx_status -eq 1 ];then
echo "启动的是Nginx服务"
elif [ $Httpd_status -eq 1 ];then
echo "启动的是Httpd服务"
else
echo "启动的是未知服务"
exit 2
fi
感谢大家,点赞,收藏,关注,评论!