常用 shell 片段合集。短命令、短说明,临时排障最省心。

端口与连接

列出当前监听端口

sudo lsof -Pn -i4 | grep LISTEN

统计 TCP 连接状态

ss -nat | awk 'NR>1 {d[$1]++} END {for (i in d) print d[i], i}'

并发执行

#!/usr/bin/env bash

command() {
  echo "$1 start"
  sleep $(( $1 & 03 ))
  echo "$1 complete"
}

echo "First Group:"
command 1 &
command 2 &
command 3 &
wait

echo "Second Group:"
command 4 &
command 5 &
command 6 &
wait

echo "Third Group:"
command 7 &
command 8 &
command 9 &
wait

echo "Not really a group:"
command 10

进程与信号

一键干掉进程(谨慎)

ps -ef | grep nginx | grep -v grep | awk '{print $2}' | xargs kill -9

建议:能优雅退出就别 -9,先试 kill -15

文件批处理

批量删除文件

find . -name "*.bak" -type f -delete

先预览再执行:

find . -name "*.bak" -type f

文件的交集/并集/差集

cat a b | sort | uniq > c     # c = a 并 b

cat a b | sort | uniq -d > c  # c = a 交 b

cat a b b | sort | uniq -u > c  # c = a - b

监控与诊断

查看 Prometheus 指标

curl localhost:36425/metrics | grep orm

Go pprof(内存)

go tool pprof -alloc_space http://localhost:4321/debug/pprof/heap

循环与条件

for 循环

for i in {1..3}; do
  echo "192.168.1.1$i"
done

for i in {1..9..2}; do
  echo "$i"
done

for ((i=1; i<=10; i++)); do
  echo "$i"
done

条件判断

cmd_ok && echo "success"
cmd_fail || echo "fallback"

说明:&& 表示前者成功才执行后者;|| 表示前者失败才执行后者。

网络与 IP

匹配 IPv4 地址

egrep --only-matching -E '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'

获取本机 IP

ip r get 1 | awk 'NR==1 {print $NF}'

ip r get 1 | sed "s/uid.*//g" | awk 'NR==1 {print $NF}'

查看公网 IP

curl cip.cc

ipcalc

工作中遇到子网 192.168.20.0/24,心算容易错,ipcalc 一条命令就够。

安装

macOS:

brew install ipcalc

Linux:

sudo apt install ipcalc

使用

ipcalc 192.168.20.0/24

输出示例:

Address:   192.168.20.0         11000000.10101000.00010100. 00000000
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.20.0/24      11000000.10101000.00010100. 00000000
HostMin:   192.168.20.1         11000000.10101000.00010100. 00000001
HostMax:   192.168.20.254       11000000.10101000.00010100. 11111110
Broadcast: 192.168.20.255       11000000.10101000.00010100. 11111111
Hosts/Net: 254                   Class C, Private Internet

lsof

lsof 用于列出打开的文件,排障时很强:

  • 普通文件、目录
  • 网络 socket
  • 设备文件、共享库
  • 管道、符号链接

用一句话记住:一切皆文件,文件都能被 lsof 看见。

判断 VPS 虚拟化类型

常见虚拟化:OpenVZ、Xen、KVM。选错类型会导致配置失败。

sudo apt-get install virt-what -y
sudo virt-what

输出示例:kvm