工作中常用的shell命令

列出所有 ESTABLISHED 状态的连接:

1
netstat -nta | fgrep "ESTABLISHED" | cut -b 49-75 | cut -d ':' -f1 | sort | uniq -c | sort -n -r --key=1,7 | head -25

列出所有连接状态的统计:

1
netstat -nta | fgrep ":" | cut -b 77-90 | sort | uniq -c

1
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

简单将攻击IP列入iptables 限制范围:

1
netstat -an | grep -v LISTEN | awk '{print $5}' |grep -v 127.0.0.1|grep -v 本机ip|sed  "s/::ffff://g"|awk 'BEGIN { FS=":" } { Num[$1]++ } END { for(i in Num) if(Num[i]>8) { print i} }' |grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'|  xargs -i[] iptables -I INPUT -s [] -j DROP

Num[i]>8部分是设置阀值,这条shell句子会自动将netstat -an中查到的来自同一ip的超过阀值的连接的列入iptables禁止
将命令中的“本机ip”改成你的服务器的ip地址

一个ip限制30个pop连接:

1
iptables -I INPUT -p tcp --syn --dport 110 -m connlimit --connlimit-above 30 -j REJECT

将192.168.4.139上的/data0目录同步到本机:

1
rsync -avLP -e 'ssh' --delete 192.168.4.139:/data0 / 1>>/opt/out.txt 2>>/opt/err.txt

修改目标地址,用于在防火墙后端的web服务器(DNAT):

1
iptables -t nat -A PREROUTING -p tcp --dport 80 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.2:80

开启路由(SNAT):

1
2
echo "1" > /proc/sys/net/ipv4/ip_forward     #开启转发
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j MASQUERADE #eth1是公网网卡,使用伪装MASQUERADE

1
iptables -t nat -A POSTROUTING -o eth0 -j SNAT  --to-source 199.15.116.12     #不使用伪装,修改源地址为公网地址199.15.116.12

将公钥传到其他服务器:

1
ssh-copy-id -i ~/.ssh/id_rsa.pub user@remoteServer

获取本机所有ip及其对应的mac地址:

1
ifconfig|grep HWaddr -A 1|awk -v RS="--" '{sub(/addr:/,"",$7); print $7,$5}'
  • -v:赋值一个用户定义变量
  • RS:记录分隔符(默认是一个换行符)
  • FS:字段分隔符(默认是任何空格)
  • NF: 当前记录中的字段数
  • NR:当前记录数
  • sub(/addr:/,””,$7):将第7段中的addr:替换成空

查找当前目录下的所有文件,并将文件中的cszhi.com替换成test.cn:

1
find . -type f -exec sed -i 's/cszhi\.com/test\.cn/g' {} \;

不转义点号也可:

1
find . -type f -exec sed -i 's/cszhi.com/test.cn/g' {} \;

ssh交互式登陆脚本

1
2
3
4
5
6
7
8
9
#!/usr/bin/expect
set timeout 30
spawn ssh 192.168.0.2
expect {
"yes/no" { send "yes\r";exp_continue }
"password:" { send "redhat\r" }
}
expect "]#"
send "df -h > /tmp/diskfile\r"

set timeout 30命令把超时时值设定为30秒
spawn命令激活一个Unix程序来进行交互式的运行
send命令向进程发送字符串

同步时间:

1
ntpdate -s -b ntp.aliyun.com

不断更新中。。。。。。