列出当前监听的所有端口

1
sudo lsof -Pn -i4 | grep LISTEN

并发执行shell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ cat command_groups.sh 
#!/bin/sh

command() {
echo $1 start
sleep $(( $1 & 03 )) # keep the seconds value within 0-3
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, no need for background/wait:
command 10

统计 TCP 连接情况

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

# NR>1 去除第一行
# {d[$1]++} 对第一列元素进行累加计数
# {for (i in d) print d[i],i} 打印出数组的元素和出现的次数

xargs

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

批量删除文件

1
2
3
4
5
6
7
# Use find:

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

# But use it with precaution. Run first:

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

查看prometheus的日志

1
curl localhost:36425/metrics | grep orm

Go pprof

1
2
# 查看堆栈信息
go tool pprof -alloc_space http://localhost:4321/debug/pprof/heap

循环

1
2
3
4
5
6
7
8
9
10
# i 取值为1 2 3
for i in {1..3}; do echo 192.168.1.1$i ; done

# i 取值为 1 3 5 7 9
for i in {1..9..2} ; do echo $i ; done

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

条件判断

|| 和 &&

||前面执行不通过才执行后面的,也就是或啦, && 是与,前面执行通过会接着执行后面的

匹配 IPv4 地址

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

获取本机 IP

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

$ curl cip.cc # 查看公网ip

ipcalc

工作中遇到这样的子网ip和掩码:192.168.20.0/24,得在脑海中用二进制去算IP范围是多少,子网掩码是多少;有时还得在纸上画一画,耗时费力。
后来发现ipcalc这个神器,麻麻再也不用担心我算不动了。

一条命令,搞定网络类型、广播地址、子网IP范围等的计算,也很方便给小伙伴演示。

Mac OS

1
brew install ipcalc

Linux

1
sudo apt install ipcalc  

执行

1
ipcalc 192.168.20.0/24

结果示例

1
2
3
4
5
6
7
8
9
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

文件的交集并集差集

1
2
3
4
5
cat a b | sort | uniq > c   # c is a union b 并集

cat a b | sort | uniq -d > c # c is a intersect b 交集

cat a b b | sort | uniq -u > c # c is set difference a - b 差集

lsof

lsof - list open files

lsof 列出打开的文件。绝对是个排查故障的利器,在一切皆文件的 Linux 世界里,lsof 可以查看打开的文件是:

  • 普通文件
  • 目录
  • 网络文件系统的文件
  • 字符或设备文件
  • (函数)共享库
  • 管道、命名管道
  • 符号链接
  • 网络文件(例如:NFS file、网络 socket,unix 域名 socket)

还有其它类型的文件,等等
另外 lsof 命令也是有着最多选项的 Linux/Unix 命令之一,另一个 nc 命令也是如此 😂。

判断VPS虚拟化类别

VPS(虚拟专用服务器)的虚拟技术有很多种,VPS就是通过某种虚拟技术把一台服务器分成多个虚拟服务器。VPS常用的虚拟技术有OpenVZ、Xen、KVM三种。
在配置ikve2时,需要选择vps类型(OpenVZ还是Xen、KVM),选错将无法成功连接,请务必核实服务器的类型。

vitr-what是RedHat开发的一款检测VPS虚拟化技术的脚本工具,支持检测KVM、Xen、QEMU、VirtualBox等常见的虚拟化技术。
在以下多种发行版上都可以找到二进制安装包:Debian、Ubuntu、CentOS、Fedora (13+)、Red Hat Enterprise Linux (5.7+ and 6.1+)、ArchLinux and Gentoo。

如何判断VPS虚拟化类别,命令如下:

1
2
3
$ sudo apt-get install virt-what -y
$ sudo virt-what
kvm