shell常用命令
持续更新
提取关键字
grep -i biztype 2017_09_05.stderrout.log | sed 's/.*\("bizType":[0-9]\).*/\1/g'
grep -i biztype 2017_09_05.stderrout.log | while read line; do expr "$line" : '.*\(\"bizType\":[0-9]\).*'; done
查找socket泄露
lsof -p pid | grep -i 'can't identified'
socket监控
ss -lnt
# 参数
-h:显示帮助信息;
-V:显示指令版本信息;
-n:不解析服务名称,以数字方式显示;
-a:显示所有的套接字;
-l:显示处于监听状态的套接字;
-o:显示计时器信息;
-m:显示套接字的内存使用情况;
-p:显示使用套接字的进程信息;
-i:显示内部的TCP信息;
-4:只显示ipv4的套接字;
-6:只显示ipv6的套接字;
-t:只显示tcp套接字;
-u:只显示udp套接字;
-d:只显示DCCP套接字;
-w:仅显示RAW套接字;
-x:仅显示UNIX域套接字。
查看端口pid即运行情况
// pid超出65535时看不到pid,如果看不到可以使用下面的lsof命令
netstat -anp | grep port
lsof -i:port
查看指定用户下进程文件句柄数
lsof -u linux_user_name | awk '{print $2}' | sort | uniq -c | sort -rn
查看io负载
iostat -d -x -k 1 10
cat /proc/pid/io
查看指定网卡网络带宽
sudo ethtool eth1
查看网络负载
dstat
iftop
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
测试网速(会有10秒左右占满带宽)
wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
或者直接登录复制文件至服务器即可:https://github.com/sivel/speedtest-cli
python speedtest-cli
查看内存使用情况
free -h
vmstat
查看cpu负载
uptime
w
查看文件夹和文件大小
du -h --max-depth=0 dm 查看dm目录大小
du -h --max-depth=1 dm 查看dm目录大小,以及dm各文件文件夹的大小
du -h --max-depth=0 查看当前文件夹大小
查看命令历史(含时间戳)
查看cpu
cat /proc/cpuinfo
//只看cpu数量
grep "model name" /proc/cpuinfo | wc -l
查看磁盘使用情况
df -h
综合查看系统资源
top
sar
查看进程
ps -ef
// 如果安装了可以使用tree,可以查看所有进程与子线程
pstree -p <pid>
杀进程
kill pid 如果强制杀加“-9”参数
查看进程状态
kill -3 pid > dump.log
根据关键字杀进程
根据关键字删除文件
find . -type f -name "*.log" -print0 | xargs -0 rm -f
查找超过指定大小文件
find / -type f -size +500M -exec ls -lh '{}' \; 2>/dev/null
按照更新时间(ctime创建时间)移动N天前文件
大写I可以指定替换符,小写默认{},-代表N天内,+代表N天外,无符号代表具体某天
find / -type f -mtime +31 | xargs -i mv {} /tmp
awk统计各个线程打印日志数量
awk '/^[0-9]+/{gsub("\-[0-9]+","",$4);print $4}' tmp.log | sort | uniq -c
dmesg查看异常日志
查看异常日志,是否存在os kill等异常
dmesg --level = err,warn -T> dmesg_output
sort排序
参数t指定分隔符,k指定分隔后按照第x列至第x列进行排序,r指定按照反向排序,n代表将指定的列的字符看作数字进行排序
sort -t " " -k3,3rn
恢复误删文件
进程依然存在并且依然持有文件句柄情况下可以使用如下方法
# lsof |grep /var/log/myapp.log
syslogd 1383 gallant 2w REG 3,3 6386077 5763657 /var/log/myapp.log (deleted)
cat /proc/1383/fd/2 > /var/log/myapp.log
进程已经结束,并且不再持有文件句柄情况,亲测可行:https://blog.51cto.com/sf1314/2054166
上下文切换监控
cswch/s : 每秒自愿上下文切换数。Total number of voluntary context switches the task made per second.
nvcswch/s : 每秒非自愿上下文切换数。Total number of non voluntary context switches the task made per second.
pidstat -w 1
02:12:07 PM UID PID cswch/s nvcswch/s Command
02:12:08 PM 0 1 1.00 0.00 systemd
02:12:08 PM 0 404 1.00 0.00 syslog-ng
02:12:08 PM 0 1906 1.00 0.00 ilogtail
02:12:08 PM 1079 2791 10.00 0.00 tengine
02:12:08 PM 1079 2792 10.00 0.00 tengine
02:12:08 PM 1079 2794 10.00 0.00 tengine
02:12:08 PM 1079 110501 1.00 0.00 pidstat
替换换行符
花括号后追加换行符,反之替换换行符
awk 'BEGIN{RS="}";ORS="}\n";}{print $0}' source.txt > target.txt
系统故障诊断
# 查看被系统kill的进程及原因
sudo dmesg | grep kill
查看环境变量
# 查看所有环境变量
set
# 查看当前用户环境变量
env
# 查看特定环境变量
echo ${变量名称} # 例如:echo $PATH