#删除当前文件夹中大小为0的文件 $ find . -type f -size 0 -exec rm -rf {} \; $ find . -type f -size 0 -delete #以指定格式显示进程信息{%C:cpu %p:pid %z:memory %a:command} $ ps -e -o "%C : %p : %z : %a" %CPU : PID : VSZ : COMMAND 0.0 : 1 : 3540 : /sbin/init 0.0 : 2 : 0 : [kthreadd] #按内存使用量从大到小排列 $ ps -e -o "%C : %p : %z : %a" | sort -k5 -nr #按CPU利用率从大到小排列 $ ps -e -o "%C : %p : %z : %a" | sort -nr #查看TCP协议请求的连接状态及其数量 # netstat -n | awk '/^tcp/ {++S[$NF]} END{for(a in S) print a, S[a]}' #把文件中包含有Root的行中的第一个no替换成yes # sed -i '/Root/s/no/yes/' /etc/ssh/sshd_config #显示运行级别为3时,开启的服务项目 # ls /etc/rc3.d/S* | cut -c 15- #取IP地址 # 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}' #查看80端口的已建立连接,并排序 # netstat -ant | grep ":80" | grep ESTABLISHED | awk '{printf "%s %sn",$5,$6}' | sort #统计一下服务器上面所有的jpg文件的大小(可灵活更改) # find / -name "*.jpg" -exec wc -c {} \; | awk '{print $1}' | awk '{a+=$1} END{print a}'
basename命令
basename [pathname] [suffix]
basename [string] [suffix]
其中suffix为后缀,如果指定了suffix,basename会将pathname或string中的suffix去掉。
用法示例:
$ basename /usr/bin/sort 输出”sort”
$ basename ./include/stdio.h .h 输出”stdio”
一些非常有用的Linux命令
服务{RedHat系列} # chkconfig --list # 列出所有系统服务 # chkconfig --list | grep on # 列出所有启动的系统服务 服务{Debian系列} # service --status-all 程序{RedHat系列} # rpm -qa # 查看所有安装的软件包 程序{Debian系列} # dpkg --list # 查看所有安装的软件包 ########## cksum md5sum shasum/sha1sum/sha256sum/sha512sum ##########
一、有时候希望把找到的包含某些内容的文件名字给打出来,如果只是需要打印文件名(grep的”-l选项”只打印匹配的文件名),使用如下命令:
find . -name "*.log" -exec grep -l "RspCode:20" {} \;
如果希望既把文件打印出来,还把相应的字符串所在的位置打印出来(grep的”-n选项”打印行号),使用如下命令:
find . -type -f -name "*.log" -print | xargs grep -n "RspCode:20"
基本上都是在find和grep的参数上面做文章。
二、反向打印某个文件,这个用于文件比较大,但需要从尾部深入地查看。tail不能很好地支持编辑搜索等功能。完成这个任务最后的命令是cat的反向体:
tac
三、如何看某个文件的精确地access time等信息,一般ls只能显示到分钟。这个时候就要用这个命令:
stat
四、显示进程的详细创建时间
ps -e -o command,pid,lstart | grep xxx
五、用正则杀某些进程
pkill -f "xxxx"
六、列出包括子进程的进程树:
ps axwef
pstree
七、测试硬盘写入速度:
dd if=/dev/zero of=/tmp/output.img bs=8k count=256k; rm -rf /tmp/output.img
八、列出前10个最大的文件:
lsof / | awk '{ if($7 > 1048576) print $7/1048576 "MB "$9 }' | sort -nu | tail
九、显示剩余内存(MB):
free -m | grep Mem | awk '/[0-9]/{ print $4" MB" }'
十、找出/home/user下所有空子目录:
find /home/user -maxdepth 1 -type d -empty
十一、获取test.txt文件中第50-60行内容:
sed -n '50,60p' test.txt
十二、在文件中查找整个单词:
grep -w "name" test.txt
十三、在需要提升权限的情况下往一个文件里追加文本:
echo "some text" | sudo tee -a /path/file
十四、将tabs转换成空格:
expand test.txt > test1.txt
十五、当Ctrl + c不好使时,试试:
Ctrl + `
十六、获取文件owner:
stat -c %U file.txt
十七、如何查找yum和rpm安装的lib的路径
rpm -ql package-namel
yum search buildrpmtree | less
十八、用正则进行查找/匹配
grep xxx '(lo(nely|vely)'
系统连接状态篇
查看TCP连接状态
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
{输出类似于:
SYN_RECV 1
ESTABLISHED 1
TIME_WAIT 1
}
查找请求数前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
用tcpdump嗅探80端口的访问看看谁最高(-c选项指定捕获packet的个数)
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | head -20
查找较多time_wait连接
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
找查较多的SYN连接
netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c |sort -nr | more
根据端口列进程
netstat -ntlp | grep 80 | awk '{print $7}' | cut -d/ -f1
网站日志分析(Apache):
获得访问前10位的ip地址
cat access.log|awk '{print $1}'|sort|uniq -c|sort -nr|head -10
cat access.log|awk '{counts[$(11)]+=1}; END {for(url in counts) print counts[url], url}'
访问次数最多的文件或页面,取前20
cat access.log|awk '{print $11}'|sort|uniq -c|sort -nr|head -20
列出传输最大的几个exe文件(分析下载站的时候常用)
cat access.log |awk '($7~/.exe/){print $10 " " $1 " " $4 " " $7}'|sort -nr|head -20
列出输出大于200000byte(约200kb)的exe文件以及对应文件发生次数
cat access.log |awk '($10 > 200000 && $7~/.exe/){print $7}'|sort -n|uniq -c|sort -nr|head -100
如果日志最后一列记录的是页面文件传输时间,则有列出到客户端最耗时的页面
cat access.log |awk '($7~/.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head-100
列出最最耗时的页面(超过60秒的)的以及对应页面发生次数
cat access.log |awk '($NF < 60 && $7~/.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100
列出传输时间超过 30 秒的文件
cat access.log |awk '($NF > 30){print $7}'|sort -n|uniq -c|sort -nr|head -20
统计网站流量(GB)
cat access.log |awk '{sum+=$10} END {print sum/1024/1024/1024}'
统计404的连接
awk '($9 ~/404/)' access.log | awk '{print $9,$7}' | sort
统计HTTP状态码
cat access.log |awk '{counts[$(9)]+=1}; END {for(code in counts) print code, counts1}'
cat access.log |awk '{print $9}'|sort|uniq -c|sort -rn
数据库篇
/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'
以上这些命令/技巧都是从网上搜集而来,但自己都进行了测试,如果在你的系统中存在问题的话,请根据具体情况进行些许修改即可。
《 “常用的Linux命令学习[ing]” 》 有 3 条评论
tcpdump使用技巧
http://linuxwiki.github.io/NetTools/tcpdump.html
`
# 下面的 host 可以替换成 port/net 来实现 端口/网络 的过滤
tcpdump -i eth0 host 192.168.1.1 #过滤主机
tcpdump -i eth0 src host 192.168.1.1 #过滤源主机
tcpdump -i eth0 dst host 192.168.1.1 #过滤目的主机
# 过滤目的主机和端口是 192.168.1.104:514 的 UDP 数据包,只抓取 10 个包并存为文件然后退出
tcpdump -i eth0 ‘((udp) and ((dst host 192.168.1.104) and (dst port 514)))’ -c 10 -w debug_udp.pcap
# 过滤目的主机和端口是 192.168.1.104:514 的 TCP 数据包,只抓取 10 个包并存为文件然后退出
tcpdump -i eth0 ‘((tcp) and ((dst host 192.168.1.104) and (dst port 514)))’ -c 10 -w debug_tcp.pcap
`
TC:Linux 流量控制工具
http://int64.me/2018/TC%20-%20Linux%20%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6%E5%B7%A5%E5%85%B7.html
https://toutiao.io/posts/jnwsld/preview
https://paper.tuisec.win/detail/2c2d6559b538d89
https://github.com/magnific0/wondershaper
`
最近一个新任务,需要模拟限制主机带宽的场景,之前只是知道使用 tc 是可以做到模拟网络延迟、网络丢包等情况,所有就想应该 tc 也可以搞定限制带宽的情况,就在网上搜了一波,果不其然 tc 还是强大,可是对于用来限制带宽,操作起来还是很蛋疼,踩了不少坑..
`
Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。
https://github.com/jaywcjlove/linux-command
https://git.io/linux
https://wangchujiang.com/linux-command/
https://jaywcjlove.gitee.io/linux-command/