linux常用shell脚本

查看系统当前进程连接数
netstat -an | grep ESTABLISHED | wc -l
如何在/usr目录下找出大小超过10MB的文件?
find /usr -type f -size +10240k
添加一条到192.168.3.0/24的路由,网关为192.168.1.254?
route add -net 192.168.3.0/24 netmask 255.255.255.0 gw 192.168.1.254
如何在/var目录下找出90天之内未被访问过的文件?
find /var \! -atime -90
在整个目录树下查找文件“core”,如发现则无需提示直接删除它们
find / -name core -exec rm {} \;
有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下,该用户应如何
crontab -e 0 0 * * 7 /bin/cp /user/backup /tmp
每周一下午三点将/tmp/logs目录下面的后缀为*.log的所有文件rsync同步到备份服务器192.168.1.100中同样的目录下面,crontab配置项该如何写
00 15 * * 1 rsync -avzP /tmp/logs/*.log [email protected]:/tmp/logs
找到/tmp/目录下面的所有名称以"_s1.jpg"结尾的普通文件,如果其修改日期在一天内,则将其打包到/tmp/back.tar.gz文件中
find /tmp -type f -name ".*_sj.jpg" -mtime 1|xarges tar zxf /tmp/back.tar.gz
一台Linux系统初始化环境后需要做一些什么安全工作?
  • 1、添加普通用户登陆,禁止root用户登陆,更改SSH端口号
  • 2、服务器使用密钥登陆,禁止密码登陆
  • 3、开启防火墙,关闭SElinux,根据业务需求设置相应的防火墙规则
  • 4、装fail2ban这种防止SSH暴力破击的软件
  • 5、设置只允许公司办公网出口IP能登陆服务器(看公司实际需要)
  • 6、设置nginx_waf模块防止SQL注入
  • 7、把Web服务使用www用户启动,更改网站目录的所有者和所属组为www
  • 8、修改历史命令记录的条数为10条
用一条命令显示本机eth0网卡的IP地址,不显示其它字符
#方法一:
ifconfig eth0|grep inet|awk -F ':' '{print $2}'|awk '{print $1}'
#方法二
ifconfig eth0|grep "inet addr"|awk -F '[ :]+' '{print $4}' 
#方法三:
ifconfig eth0|awk -F '[ :]+' 'NR==2 {print $4}' 
#方法四:
ifconfig eth0|sed -n '2p'|sed 's#^.*addr:##g'|sed 's# Bc.*$##g'
#方法五:
ifconfig eth0|sed -n '2p'|sed -r 's#^.*addr:(.*)  Bc.*$#\1#g'
#方法六(centos7也适用):
ip addr|grep eth0|grep inet|awk '{print $2}'|awk -F '/' '{print $1}'
用netstat命令配合其他shell命令,按照源IP统计所有到80端口的ESTABLISHED状态链接的个数,输出结果类似(第一列为连接数,第二列为IP):
[root@ ~]# netstat -an|grep ESTABLISHED
tcp        0     52 139.224.199.85:22           101.47.33.86:51763          ESTABLISHED 
tcp        0      0 139.224.199.85:45368        106.11.68.13:80             ESTABLISHED 
[root@ ~]# netstat -an|grep ESTABLISHED|grep ":80"
tcp        0      0 139.224.199.85:45368        106.11.68.13:80             ESTABLISHED
netstat -an|grep ESTABLISHED|grep ":80"|awk 'BEGIN{FS="[[:space:]:]+"}{print $4}'
统计nginx日志中访问最多的10个IP
方法1: awk '{a[$1]++}END{for(i in a)print a[i],i|"sort -k1 -nr|head -n10"}' access.log

方法2: awk '{print $1}' access.log |sort |uniq -c |sort -k1 -nr |head -n10
统计日志中访问大于100次的IP
方法1: awk '{a[$1]++}END{for(i in a){if(a[i]>100)print i,a[i]}}' access.log

方法2: awk '{a[$1]++;if(a[$1]>100){b[$1]++}}END{for(i in b){print i,a[i]}}' access.log

说明:方法1是将结果保存a数组后,输出时判断符合要求的IP。方法2是将结果保存a数组时,并判断符合要求的IP放到b数组,最后打印b数组的IP。

统计当前时间前一分钟的访问数
date=$(date -d '-1 minute' +%d/%b/%Y:%H:%M);awk -vdate=$date '$0~date{c++}END{print c}' access.log

date=$(date -d '-1 minute' +%d/%b/%Y:%H:%M);awk -vdate=$date '$4>="["date":00" && $4<="["date":59"{c++}END{print c}' access.log

grep -c $(date -d '-1 minute' +%d/%b/%Y:%H:%M) access.log
统计访问最多的前10个页面($request)
awk '{a[$7]++}END{for(i in a)print a[i],i|"sort -k1 -nr|head -n10"}' access.log
统计访问状态码为404的IP及出现次数
awk '{if($9~/404/)a[$1" "$9]++}END{for(i in a)print i,a[i]}' access.log
crontab的文件格式
* * * * * echo "hello" #每1分钟执行hello
3,15 * * * * myCommand #每小时第三分钟和第十五分钟执行
3,15 8-11 * * * myCommand# 在上午8点到11点的第3和第15分钟执行
3,15 8-11 */2  *  * myCommand #每隔两天的上午8点到11点的第3和第15分钟执行
30 21 * * * /etc/init.d/smb restart #每晚的21:30重启smb
0 23 * * 6 /etc/init.d/smb restart #每星期六的晚上11 : 00 pm重启smb

你可能感兴趣的:(linux,服务器,运维)