Shell

命令 结果 说明
"" 与 '' - "" 中可以解析变量, 例如 "$USER" => walfud. 而 '' 则代表原始字符串, 例如 '$USER' => $USER
cat /etc/hostname > out - 标准输出流重定向到 out 文件
cat not-exists > err - 标准错误流重定向到 err 文件
cat not-exists >& all - 标准输出和错误流都重定向到 all 文件
cat not-exists 2>&1 - 标准输出流重定向到标准输出. 这样错误信息也能够被管道使用
echo $USER walfud echo 可以解析 $ 变量
echo "\n" \n echo 不能解析控制字符. 如果想打印 \n 这种控制字符, 考虑使用 printf '%s\\n%d' foo 123
dirname /home/walfud/.profile /home/walfud 解析路径
basename /home/walfud/.profile .profile 解析文件名

系统信息

命令 结果 说明
lsb_release -a No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 19.10
Release: 19.10
Codename: eoan 所有发行版专有信息
lsb_release -is Ubuntu 发行版名称. -s 只返回 value
lsb_release -sr 19.10 版本
lsb_release -sc eoan 代号
ps axu USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 168424 7864 ? Ss 11月14 1:39 /sbin/init splash
root 2 0.0 0.0 0 0 ? S 11月14 0:00 [kthreadd]
gdm 1521 0.0 0.0 274428 9072 tty1 Sl+ 11月14 0:00 /usr/lib/gnome-session/gnome-session-binary --systemd --autostart /usr/share/gdm/greeter/autostart
walfud 1783 0.0 0.0 18964 6140 ? Ss 11月14 0:01 /lib/systemd/systemd --user
walfud 1784 0.0 0.0 168496 212 ? S 11月14 0:00 (sd-pam)
walfud 1796 0.0 0.0 3851460 13728 ? S 列出所有进程的常用信息. 默认情况下 ps 输出当前用户有 tty 的进程信息, a 表示 "包含所有用户", x 表示 "包含非 tty 进程", u 表示 "包含用户常用的信息, 例如 cpu/内存 等". 注意参数前不要加 -
kill -9 123456 - 杀掉 pid 为 123456 的进程. -9 表示发送 SIGKILL(9), 由内核杀进程而不会经过进程同意. 默认的 SIGTERM(15) 则是发送给进程告知其应该立刻结束, 但是进程可以不响应或者来不及响应从而杀不死进程
killall -9 java - 杀掉所有名称为 java 的进程
lsof -c java COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 12159 walfud cwd DIR 259,2 4096 2229681 /home/walfud/Projects/akulaku/midend-test/sms-testutils/backend
java 12159 walfud rtd DIR 259,4 4096 2 /
java 12159 walfud txt REG 259,3 8464 3933441 /opt/jdk/bin/java
java 12159 walfud mem REG 259,3 283368 3933758 /opt/jdk/jre/lib/amd64/libsunec.so
java 12159 walfud 3r REG 259,3 66463215 3933500 /opt/jdk/jre/lib/rt.jar
java 12159 walfud 90u IPv6 186997 0t0 TCP *:7211 (LISTEN)
java 12159 walfud 96u a_inode 0,14 0 11326 [eventpoll]
... 查看进程打开的所有文件. 这样会遍历所有同名进程. 可以使用 -p 指定 pid
lsof /home/walfud - 反向查看哪些进程打开了 /home/walfud 目录. 在不知道全路径的情况下, 可以通过 `lsof

CPU

命令 结果 说明
lscpu Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 39 bits physical, 48 bits virtual
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 142
Model name: Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz
Stepping: 12
CPU MHz: 800.008
CPU max MHz: 4900.0000
CPU min MHz: 400.0000
BogoMIPS: 4599.93
Virtualization: VT-x
L1d cache: 128 KiB
L1i cache: 128 KiB
L2 cache: 1 MiB
L3 cache: 8 MiB
NUMA node0 CPU(s): 0-7
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp
Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d arch_capabilities 根据 /proc/cpuinfo 获取信息

网络

https://www.polarxiong.com/usr/uploads/2017/04/3086068925.png

https://i.imgur.com/YG0MJHm.png

命令 结果 说明
dig +trace walfud.com ; <<>> DiG 9.16.1-Ubuntu <<>> +trace walfud.com
;; global options: +cmd
. 364828 IN NS c.root-servers.net.
. 364828 IN NS l.root-servers.net.
.....
;; Received 262 bytes from 127.0.0.53#53(127.0.0.53) in 3 ms

com. 172800 IN NS a.gtld-servers.net.com. 172800 IN NS b.gtld-servers.net.…..;; Received 1170 bytes from 198.97.190.53#53(h.root-servers.net) in 59 ms walfud.com. 172800 IN NS dns9.hichina.com.walfud.com. 172800 IN NS dns10.hichina.com.….. walfud.com. 600 IN A 123.56.81.162;; Received 55 bytes from 106.11.211.66#53(dns10.hichina.com) in 11 ms | +trace 模拟 dns 递归查询. 返回值中 ;; Received 55 bytes from ….. in 11 ms 是当前轮查询所使用的权威服务器 | | dig ns +noall +answer walfud.com | walfud.com. 54601 IN NS dns9.hichina.com. walfud.com. 54601 IN NS dns10.hichina.com. | ns 参数表明查询权威服务器. 可选的还有 a, aaaa, txt 等等. +noall +answer 组合表示不输出其他信息, 只输出结果 | | dig @8.8.8.8 walfud.com | ..... | @... 指定从某个 dns 服务器查询 | | ss -a | State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 100 127.0.0.1:18083 0.0.0.0:*
LISTEN 0 10 10.1.2.94:35301 0.0.0.0:*
ESTAB 0 0 127.0.0.1:5037 127.0.0.1:48126
CLOSE-WAIT 32 0 10.1.2.94:51300 180.163.255.156:https timer:(keepalive,13sec,2)
...... | 列出所有网络连接. 默认情况下只显示已连接的套接字, -a 可以包括 LISTENING 状态的所有套接字 | | ss -au | - | 列出所有 udp 连接. -u 指定 udp 连接, 还可以 -t 指定 tcp 连接 | | ss -au4 | - | 列出所有基于 ipv4 的 udp 连接. -4 指定基于 ipv4 的连接, 还可以 -6 指定 ipv6 | | ss -aup | State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 224.0.0.251:mdns 0.0.0.0:* users:(("chrome",pid=3624,fd=46))
UNCONN 0 0 0.0.0.0:mdns 0.0.0.0:*
UNCONN 0 0 127.0.0.1:46643 0.0.0.0:*
UNCONN 0 0 10.1.2.94:48101 0.0.0.0:*
..... | 列出所有 udp 连接. -p 显示进程名称 | | ss -aun | State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 224.0.0.251:5353 0.0.0.0:*
UNCONN 0 0 0.0.0.0:5353 0.0.0.0:*
UNCONN 0 0 127.0.0.1:46643 0.0.0.0:*
UNCONN 0 0 10.1.2.94:48101 0.0.0.0:*
..... | 列出所有 udp 连接. -n 制定以数字而非名称方式显示端口号 | | | | | | curl http://walfud.com?foo=123&bar=abc | - | 发送 GET 请求 | | curl http://walfud.com -d '{ "foo": 123, "bar": "abc" }' | - | 发送 POST 请求. -d 会自动识别为 POST 请求 | | curl http://walfud.com -H 'Content-Type: application/json' -H 'token: fooooo' | - | -H 设置 header | | curl http://walfud.com -v | * Trying 123.56.81.162:80...

GET / HTTP/1.1 Host: walfud.com User-Agent: curl/7.65.3 Accept: /

其他

命令 结果 说明
grep "some thing" <文件> - 显示 <文件> 中匹配 "some thing" 的行, 可以使用正则, 但需要转义字符. -i 可以不区分大小写, -C 可以打印匹配行的前后 n/2 行, -r 可以递归遍历目录下的所有文件, -v 表示显示部匹配的行
egrep "^fo.+$" <文件> - 等价于 grep -E, 使用正则表达式无需转义字符
sed '<指令>' <文件> - 按行分割内容, 对每一行执行操作, 指令类似 vim
echo -e 'foo\nbarrrr\nbaz sed 's/r/1/g' foo
ba1111
baz s/<xxx>/<yyy>/g 用于替换每一行的所有 xxx 为 yyy
echo -e 'foo\nbarrrr\nbaz' sed '3d' foo
barrrr 3d 可以删除第三行
echo -e 'foo\nbarrrr\nbaz' sed '2i\1234' foo
1234
barrrr
baz 2i\\1234 在第 2 行前插入 1234. 2a\\1234 可以在第 2 行后插入 1234
echo -e 'foo\nbarrrr\nbaz' sed '2c\bar bar bar' foo
bar bar bar
baz 2c\\bar bar bar 将第 2 行替换为 bar bar bar
echo -e 'foo\nbarrrr\nbaz' sed '1,2d' baz
echo -e 'foo\nbarrrr\nbaz' sed '=' 1
foo
2
barrrr
3
baz = 显示行号
echo -e 'foo\nbarrrr\nbaz' sed '=;2d;3a\1234' 1
foo
2
3
baz
1234 可以通过 ; 串行执行多个指令
echo -e '1 2 3 4\na b c d' awk '{print $1}' 1
a 打印每行的第 1 列. $0 代表整个行, $1 代表第一列
echo -e '1 2 3 4\na b c d' awk 'BEGIN{ print "<<<<<" 1 } { print end{ ">>>>>" }' <<<<<
1 2 3 4

| BEGIN/END 是命令开始解析和结束解析时执行的动作./1/ 指定了只有匹配该正则的行才进行处理. 默认是处理所有行. | | echo '1,2,3,4.a,b,c,d' | awk 'BEGIN{RS="."; FS=","} {print $1}' | 1 a | 默认情况下以 "\n" 为一行, 而每一行以空白符分割列, 可以通过 RS 设置换行符, FS 指定列分隔符. 他们都支持正则, 例如 FS=[\\t ,.] | | | | | | date | 2019年 12月 27日 星期五 15:42:29 CST | 显示当前时区的系统时间. 可以使用 -u 显示 UTC 时间 | | date +"%Y-%m-%d %H:%M:%S" | 2019-12-27 15:45:03 | 按指定格式显示时间. date +"%s" 可以获取 timestamp. 其他格式参考 man date | | date -s "2019-12-27 15:45:03" | - | 设置日期时间, 需要 root 权限 |