shell常用命令

shell常用命令

持续更新

awk打印第二至第五列

awk '{print $2,$3,$4,$5}' data.txt

提取关键字

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
w命令输出含义

USER – 登录用户名
TTY – 登录用户使用的终端名
FROM –登录用户来源的主机名或IP地址
LOGIN@ – 用户登录时长
IDLE – 自用户上一次与终端进行交互以来的空闲时间
JCPU – 附加到tty的所有进程使用的时间
PCPU –用户当前进程所用的时间。 显示在“ WHAT”字段中的那个
WHAT – 用户当前的进程及选项/参数。

查看文件夹和文件大小

du -h --max-depth=0 dm 查看dm目录大小

du -h --max-depth=1 dm 查看dm目录大小,以及dm各文件文件夹的大小

du -h --max-depth=0 查看当前文件夹大小

查看命令历史(含时间戳)

export HISTTIMEFORMAT='%F %T ';history| more

查看cpu

cat /proc/cpuinfo

//只看cpu数量
grep "model name" /proc/cpuinfo | wc -l

查看磁盘使用情况

df -h

磁盘被未释放的文件占满问题排查

# 查看已删除的文件大小排序top 10
lsof | grep deleted | sort -k8,8rn | head
COMMAND     PID        USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
java         848  10482 admin    1w      REG            253,224  41779200    3276805 /test.log (deleted)

综合查看系统资源

top

sar

查看进程

ps -ef
// 如果安装了可以使用tree,可以查看所有进程与子线程
pstree -p <pid>

杀进程

kill pid 如果强制杀加“-9”参数

查看进程状态

kill -3 pid > dump.log

根据关键字杀进程

ps -ef | grep -i test.sh | grep -v grep | awk '{print $2}' | xargs -I {} kill -9 {}

根据关键字删除文件

find . -type f -name "*.log" -print0 | xargs -0 rm -f

find / -iname "*my-file*" -delete 2>/dev/null

# 缺点,文件过多时会参数超长报错
find / -name "*my-file*" -exec rm -rf {} \; 2>/dev/null

查找超过指定大小文件

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

查看网络连接情况

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
# 输出
CLOSE_WAIT 6
TIME_WAIT 1
ESTABLISHED 56

for循环+数组定义

indices=(user_operation_log_v1_202301 user_operation_log_v1_202302)
for((i=0;i<${#indices[*]};i++));do
  curl -HContent-Type:application/json -XPOST localhost:9200/_reindex?pretty -d'{
    "source": {
      "index": "'${indices[i]}'"
    },
    "dest": {
      "index": "'${indices[i]}'-reindexed"
    }
  }'
done

字符串替换

// 替换一次 v1 为 v2
target_index=${indices[i]/v1/v2};
// 替换所有 v1 为 v2
target_index=${indices[i]//v1/v2};
// 替换开头为v1的字符 为 v2
target_index=${indices[i]/#v1/v2};
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值