0%

linux 常用命令

Shell

命令 结果 说明
"" 与 ''
-
"" 中可以解析变量, 例如 "$USER" => walfud. 而 '' 则代表原始字符串, 例如 '$USER' => $USER
---
cat /etc/hostname > out
-/pre>
标准输出流重定向到 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 | grep XXX` 来查找(比较慢)

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 获取信息

网络

命令 结果 说明
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...
* TCP_NODELAY set
* Connected to walfud.com (123.56.81.162) port 80 (#0)
> GET / HTTP/1.1
> Host: walfud.com
> User-Agent: curl/7.65.3
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Server: nginx/1.17.4
< Date: Wed, 27 Nov 2019 04:55:56 GMT
< Content-Type: text/html
< Content-Length: 612
< Last-Modified: Tue, 24 Sep 2019 14:49:10 GMT
< Connection: keep-alive
< ETag: "5d8a2ce6-264"
< Accept-Ranges: bytes
< 
<!DOCTYPE html>
<html>
.....
</html>
* Connection #0 to host walfud.com left intact
    
-v 显示请求和响应的详细信息
---
原理请看这里
iptables -L
-
按 chain 查询规则, 也可以指定 chain 查询 `iptables -L <PREROUTING/INPUT/FORWARD/OUTPUT/POSTROUTING>`.
-t 可以限制 table, 例如 `iptables -L -t filter` 则查询所有 filter 表中的规则.
-n 表示不解析域名.

其他

命令 结果 说明
grep "some thing" <文件>
-
显示 <文件> 中匹配 "some thing" 的行, 可以使用正则, 但需要转义字符. -i 可以不区分大小写, -C 可以打印匹配行的前后 n/2 行, -r 可以递归遍历目录下的所有文件, -v 表示显示部匹配的行
egrep "^fo.+$" <文件>
-
等价于 `grep -E`, 使用正则表达式无需转义字符
---
echo '1 2 3 4\na b c d' | awk '{print $1}'
1
a
    
打印每行的第 1 列. `$0` 代表整个行, `$1` 代表第一列
echo '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 权限