搬砖常用shell片段

Page content

列出当前监听的所有端口

sudo lsof -Pn -i4 | grep LISTEN

并发执行shell

$ 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 连接情况

$ 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

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

批量删除文件

# Use find:

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

# But use it with precaution. Run first:

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

查看prometheus的日志

curl localhost:36425/metrics | grep orm

Go pprof

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

循环

# 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 地址

$ 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}'

$ curl cip.cc # 查看公网ip

ipcalc

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

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

Mac OS

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

文件的交集并集差集

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虚拟化类别,命令如下:

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