天天看点

shell常用命令shell常用命令

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