常用的Linux命令学习[ing]


#删除当前文件夹中大小为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 条评论

  1. 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
    `

  2. 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 还是强大,可是对于用来限制带宽,操作起来还是很蛋疼,踩了不少坑..
    `

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注