1.删除0字节文件
find
-type f
-size
0 -exec rm
-rf
{} \
;2.查看进程
按内存从大到小排列
ps -e -o "%C : %p : %z : %a"|sort -k5 -nr
3.按cpu利用率从大到小排列
ps -e -o "%C : %p : %z : %a"|sort -nr
4.打印说cache里的URL
grep -r
-a jpg
/data
/cache
/* | strings
| grep "http:" | awk
-F
'http:' '{print "http:"$2;}' 5.查看http的并发请求数及其TCP连接状态:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
6.
sed
-i
'/Root/s/no/yes/' /etc
/ssh
/sshd_config sed在这个文里Root的一行,匹配Root一行,将
no替换成yes.
7.1.如何杀掉mysql进程:
ps aux
|grep mysql
|grep
-v
grep|awk
'{print $2}'|xargs
kill -9(从中了解到awk的用途)
pgrep mysql
|xargs
kill -9killall -TERM mysqld
kill -9 `cat /usr/local/apache2/logs/httpd.pid` 试试查杀进程PID
8.显示运行3级别开启的服务:
ls /etc/rc3.d/S* |cut -c 15-
(从中了解到cut的用途,截取数据)
9.如何在编写SHELL显示多个信息,用EOF
cat << EOF
+--------------------------------------------------------------+
| === Welcome to Tunoff services === |
+--------------------------------------------------------------+
EOF
10. for 的巧用(如给mysql建软链接)
cd
/usr
/local/mysql
/bin
for i in
*
do ln
/usr
/local/mysql
/bin
/$i /usr
/bin
/$i
done
11. 取IP地址:
ifconfig eth0|sed -n '2p'|awk '{print $2}'|cut -c 6-30
或者:
ifconfig eth0 |grep "inet addr:" |awk '{print $2}'|cut -c 6-
或者
ifconfig
| grep 'inet addr:'| grep -v
'127.0.0.1' | cut
-d
: -f2
| awk
'{ print $1}'或者:
ifconfig eth0 | sed -n '/inet /{s/.*addr://;s/ .*//;p}'
Perl实现获取IP的方法:
ifconfig -a | perl -ne 'if ( m/^\s*inet (?:addr:)?([\d.]+).*?cast/ ) { print qq($1\n); exit 0; }'
12.内存的大小:
free
-m |grep
"Mem" | awk
'{print $2}'13.
netstat
-an
-t
| grep ":80" | grep ESTABLISHED
| awk
'{printf "%s %s\n",$5,$6}' | sort14.查看Apache的并发请求数及其TCP连接状态:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
15.因为同事要统计一下服务器下面所有的jpg的文件的大小,写了个shell给他来统计.原来用xargs实现,但他一次处理一部分,搞的有多个总和....,下面的命令就能解决啦.
find
/ -name
*.jpg
-exec wc
-c
{} \
;|awk
'{print $1}'|awk
'{a+=$1}END{print a}'CPU的数量(多核算多个CPU,
cat /proc/cpuinfo |grep -c processor
)越多,系统负载越低,每秒能处理的请求数也越多。
--------------------------------------------------------------------------------------------------------------------
16 CPU负载
cat /proc/loadavg
检查前三个输出值是否超过了系统逻辑CPU的4倍。
18 CPU负载
mpstat 1 1
检查%idle是否过低(比如小于5%)
19 内存空间
free
检查free值是否过低 也可以用
cat /proc/meminfo
20 swap空间
free
检查swap used值是否过高 如果swap used值过高,进一步检查swap动作是否频繁:
vmstat 1 5
观察si和so值是否较大
21 磁盘空间
df -h
检查是否有分区使用率(Use%)过高(比如超过90%) 如发现某个分区空间接近用尽,可以进入该分区的挂载点,用以下命令找出占用空间最多的文件或目录:
du
-cks
* | sort -rn
| head
-n
1022 磁盘I/O负载
iostat -x 1 2
检查I/O使用率(%util)是否超过100%
23 网络负载
sar -n DEV
检查网络流量(rxbyt/s, txbyt/s)是否过高
24 网络错误
netstat -i
检查是否有网络错误(drop fifo colls carrier) 也可以用命令:
cat /proc/net/dev
25 网络连接数目
netstat
-an
| grep -E “^
(tcp
)”
| cut
-c
68- | sort | uniq
-c
| sort -n
26 进程总数
ps aux | wc -l
检查进程个数是否正常 (比如超过250)
27 可运行进程数目
vmwtat 1 5
列给出的是可运行进程的数目,检查其是否超过系统逻辑CPU的4倍
28 进程
top -id 1
观察是否有异常进程出现
29 网络状态 检查DNS, 网关等是否可以正常连通
30 用户
who | wc -l
检查登录用户是否过多 (比如超过50个) 也可以用命令:# uptime
31 系统日志
cat
/var
/log/rflogview
/*errors
检查是否有异常错误记录 也可以搜寻一些异常关键字,例如:
grep -i error
/var
/log/messages
grep -i fail
/var
/log/messages
egrep
-i
'error|warn' /var
/log/messages
#查看系统异常
32 核心日志
dmesg
检查是否有异常错误记录
33 系统时间
date
检查系统时间是否正确
34 打开文件数目
lsof | wc -l
检查打开文件总数是否过多
35 日志
配置/etc/log.d/logwatch.conf,将 Mailto 设置为自己的email 地址,启动mail服务 (sendmail或者postfix),这样就可以每天收到日志报告了。
缺省logwatch只报告昨天的日志,可以用
logwatch
?print ?range all
获得所有的日志分析结果。
可以用
logwatch
?print ?detail high
获得更具体的日志分析结果(而不仅仅是出错日志)。
36.杀掉80端口相关的进程
lsof -i :80|grep -v "PID"|awk '{print "kill -9",$2}'|sh
37.清除僵死进程。
ps
-eal
| awk
'{ if ($2 == "Z") {print $4}}' | kill -938.tcpdump 抓包 ,用来防止80端口被人攻击时可以分析数据
tcpdump -c 10000 -i eth0 -n dst port 80 > /root/pkts
39.然后检查IP的重复数 并从小到大排序 注意 "-t\ +0" 中间是两个空格
less pkts
| awk
{'printf $3"\n"'} | cut
-d.
-f
1-4 | sort | uniq
-c
| awk
{'printf $1" "$2"\n"'} | sort -n
-t\
+040.查看有多少个活动的php-cgi进程
netstat
-anp
| grep php
-cgi
| grep ^tcp
| wc
-l
41.利用iptables对应简单攻击
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
>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>8部分设定值为阀值,这条句子会自动将netstat -an 中查到的来自同一IP的超过一定量的连接的列入禁止范围。基中本机ip改成你的服务器的ip地址
42. 怎样知道某个进程在哪个CPU上运行?
ps -eo pid,args,psr
43. 查看硬件制造商
dmidecode
-s system
-product
-name
44.perl如何编译成字节码,这样在处理复杂项目的时候会更快一点?
perlcc -B -o webseek webseek.pl
45. 统计var目录下文件以M为大小,以列表形式列出来。
find
/var
-type f
| xargs ls
-s | sort -rn
| awk
'{size=$1/1024; printf("%dMb %s\n", size,$2);}' | head
查找var目录下文件大于100M的文件,并统计文件的个数
find /var -size +100M -type f | tee file_list | wc -l
46. sed 查找并替换内容
sed -i "s/varnish/LTCache/g" `grep "Via" -rl /usr/local/src/varnish-2.0.4`
sed -i "s/X-Varnish/X-LTCache/g" `grep "X-Varnish" -rl /usr/local/src/varnish-2.0.4`
47. 查看服务器制造商
dmidecode
-s system
-product
-name
48. wget 模拟user-agent抓取网页
wget
-m -e robots
=off
-U
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6" http
://www.example.com
/50. 统计目录下文件的大小(按M打印显示)
du
$1 --max
-depth
=1 | sort -n
|awk
'{printf "%7.2fM ----> %s\n",$1/1024,$2}'|sed
's:/.*/\([^/]\{1,\}\)$:\1:g'51.关于CND实施几个相关的统计
统计一个目录中的目录个数
ls -l | awk '/^d/' | wc -l
统计一个目录中的文件个数
ls -l | awk '/^-/' | wc -l
统计一个目录中的全部文件数
find .
/ -type f
-print | wc
-l
统计一个目录中的全部子目录数
find .
/ -type d
-print | wc
-l
统计某类文件的大小:
find .
/ -name
"*.jpg" -exec wc
-c
{} \
;|awk
'{print $1}'|awk
'{a+=$1}END{print a}'53. 查找占用磁盘IO最多的进程
wget -c http://linux.web.psi.ch/dist/scientific/5/gfa/all/dstat-0.6.7-1.rf.noarch.rpm
dstat -M topio -d -M topbio
54. 去掉第一列(如行号代码)
awk '{for(i=2;i<=NF;i++) if(i!=NF){printf $i" "}else{print $i} }' list
55.输出256中色彩
for
i in
{0..255
}; do echo
-e
"\e[38;05;${i}m${i}"; done
| column
-c
80 -s '
'; echo
-e
"\e[m"
56.查看机器支持内存
机器插内存情况:
dmidecode |grep -P "Maximum\s+Capacity"
机器最大支持内存:
dmidecode |grep -P "Maximum\s+Capacity"
57.查看PHP-CGI占用的内存总数:
total=0; for i in `ps -C php-cgi -o rss=`; do total=$(($total+$i)); done; echo "PHP-CGI Memory usage: $total kb"
【网站排障分析常用的命令】
系统连接状态篇:
1.查看TCP连接状态
netstat
-nat
|awk
'{print $6}'|sort
|uniq
-c
|sort
-rn
netstat
-n
| awk
'/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}' 或
netstat
-n
| awk
'/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}'
netstat
-n
| awk
'/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"\t",arr[k]}'
netstat
-n
|awk
'/^tcp/ {print $NF}'|sort
|uniq
-c
|sort
-rn
netstat
-ant
| awk
'{print $NF}' | grep -v
'[a-z]' | sort | uniq
-c
2.查找请求数请20个IP(常用于查找攻来源):
netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20
netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n20
3.用tcpdump嗅探80端口的访问看看谁最高
tcpdump
-i eth0
-tnn dst port
80 -c
1000 | awk
-F
"." '{print $1"."$2"."$3"."$4}' | sort | uniq
-c
| sort -nr
|head
-204.查找较多time_wait连接
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
5.找查较多的SYN连接
netstat
-an
| grep SYN
| awk
'{print $5}' | awk
-F
: '{print $1}' | sort | uniq
-c
| sort -nr
| more
6.根据端口列进程
netstat
-ntlp
| grep 80 | awk
'{print $7}' | cut
-d
/ -f1
7.计算httpd占用内存的平均数
ps aux
|grep
-v
grep|awk
'/httpd/{sum+=$6;n++};END{print sum/n}'网站日志分析篇1(Apache):
1.获得访问前10位的ip地址
cat access.
log|awk
'{print $1}'|sort
|uniq
-c
|sort
-nr
|head
-10cat access.
log|awk
'{counts[$(11)]+=1}; END {for(url in counts) print counts[url], url}'2.访问次数最多的文件或页面,取前20
cat access.
log|awk
'{print $11}'|sort
|uniq
-c
|sort
-nr
|head
-203.列出传输最大的几个exe文件(分析下载站的时候常用)
cat access.
log |awk
'($7~/\.exe/){print $10 " " $1 " " $4 " " $7}'|sort
-nr
|head
-204.列出输出大于200000byte(约200kb)的exe文件以及对应文件发生次数
cat access.
log |awk
'($10 > 200000 && $7~/\.exe/){print $7}'|sort
-n
|uniq
-c
|sort
-nr
|head
-1005.如果日志最后一列记录的是页面文件传输时间,则有列出到客户端最耗时的页面
cat access.
log |awk
'($7~/\.php/){print $NF " " $1 " " $4 " " $7}'|sort
-nr
|head
-1006.列出最最耗时的页面(超过60秒的)的以及对应页面发生次数
cat access.
log |awk
'($NF > 60 && $7~/\.php/){print $7}'|sort
-n
|uniq
-c
|sort
-nr
|head
-1007.列出传输时间超过 30 秒的文件
cat access.
log |awk
'($NF > 30){print $7}'|sort
-n
|uniq
-c
|sort
-nr
|head
-208.统计网站流量(G)
cat access.
log |awk
'{sum+=$10} END {print sum/1024/1024/1024}'9.统计404的连接
awk
'($9 ~/404/)' access.
log | awk
'{print $9,$7}' | sort10. 统计http status.
cat access.
log |awk
'{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}'
[mycode
=Perl
]cat access.
log |awk
'{print $9}'|sort
|uniq
-c
|sort
-rn
10.蜘蛛分析
查看是哪些蜘蛛在抓取内容。
/usr
/sbin
/tcpdump
-i eth0
-l
-s 0 -w
- dst port
80 | strings
| grep -i user
-agent
| grep -i
-E
'bot|crawler|slurp|spider'
网站日分析2(Squid篇)
2.按域统计流量
zcat squid_access.
log.tar.gz
| awk
'{print $10,$7}' |awk
'BEGIN{FS="[ /]"}{trfc[$4]+=$1}END{for(domain in trfc){printf "%s\t%d\n",domain,trfc[domain]}}'效率更高的perl版本
#!/usr/bin/perl
$count = 0;
%HOST;
open(LOG
, $ARGV[0]);
while (my $line = <LOG>)
{
$count++;
print "[INFO]Count: $count \n" if ($count % 100000 == 0);
$tmp_1 = index($line, "http://") + 7;
$host = substr($line, $tmp_1, index($line, "/", $tmp_1) - $tmp_1);
next if (length($host) < 5);
$tmp_1 = index($line, "\" ") + 6;
$size = substr($line, $tmp_1, index($line, "\"", $tmp_1) - 1 - $tmp_1);
next if ($size !~ /^(\d+)$/);
$HOST{$host} += $size;
}
close(LOG
);
print "Total Count:$count\n";
print "Result:\n";
foreach my $key1 (sort keys %HOST)
{
$sizeNum = $HOST{$key1};
$sizeTxt = "b";
while($sizeNum >= 1024)
{
$sizeNum = $sizeNum / 1024;
if ($sizeTxt eq
"b")
{
$sizeTxt = "Kb";
}
elsif ($sizeTxt eq
"Kb")
{
$sizeTxt = "Mb";
}
elsif ($sizeTxt eq
"Mb")
{
$sizeTxt = "Gb";
}
}
printf "%s | %.2f%2s\n", $key1, $sizeNum, $sizeTxt;
}
数据库篇
1.查看数据库执行的sql
/usr
/sbin
/tcpdump
-i eth0
-s 0 -l
-w
- dst port
3306 | strings
| egrep
-i
'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'
系统Debug分析篇
1.调试命令
strace -p pid
2.跟踪指定进程的PID
gdb -p pid
Tags -
linux ,
perl ,
shell