跳转至

Linux Dev Cheat Sheet

系统查看

查看Linux系统发行版

Bash
1
uname -a

查看系统架构

Bash
1
arch
ARM64 / X86-84 / RISC-V

x86(也称为 Intel 架构或 AMD 架构):

  • 这是最常见的桌面和服务器 CPU 架构之一,长期以来在个人电脑中占据主导地位
  • 它使用复杂指令集(CISC),支持多种操作模式,兼容性强
  • 主要由 Intel 和 AMD 提供

ARM64(也称为 AArch64,ARMv8+):

  • 这是 ARM 架构的 64 位版本,常见于手机、嵌入式设备、以及最近越来越多的服务器和桌面设备中(如 Apple Silicon M1/M2)
  • 它使用精简指令集(RISC),意味着指令集相对简单、执行效率更高,通常也更省电
  • 优势在于 低功耗和高性能的平衡

RISC-V:

  • RISC-V 是一个开源的指令集架构(ISA),并且是最灵活和可定制的架构之一
  • 它也采用 RISC 架构,且与 ARM 有许多相似之处,但它的 开源特性 使得任何公司或个人都能根据需求定制它
  • 目前主要出现在实验性、学术和一些特定的嵌入式系统中,但也有不断增长的商业应用

进程管理

CLI中管理进程

1) 在CLI中输入 Ctrl + C,关闭此运行程序

Ctrl + C -> SIGINT -> kill -2 [PID]

2)在CLI中输入 Ctrl + D,关闭此 Shell / 远程连接

Ctrl + D -> EOF for file

3)关闭一个进程:

Bash
1
2
3
4
# 优雅的析构
kill -15 [PID]
# 暴力的终止
kill -9 [PID]
-2 and -15 and -9
  • kill -9 PID: 没得商量,啥都别干,现在就滚🥚
  • kill -2 PID: 赶紧滚,但是你可以先把手头的事情干完
  • kill -15 PID: 差不多应该停了,请你优雅的离职 (礼貌)

top中查看/管理进程

这一部分所有的操作都基于 htop 而不是传统的 top

  1. 方向键:
    • ↑/↓: 上下移动进程列表
    • ←/→: 横向滚动,查看其他列的内容(如 MEM、CPU、PID)
  2. 搜索进程:
    • /: 按进程名搜索进程。按下 / 后,输入搜索的进程名,htop 会高亮显示匹配的进程
  3. 排序进程:
    • 鼠标直接点对应列即可
  4. 杀死进程:
    • k: 选择一个进程后,你可以按 k 来杀死(终止)它
    • 弹窗会让你选择一个信号,通常默认是 SIGTERM(终止进程)
    • 也可以选择其他信号(如 SIGKILL)来强制结束进程
  5. 查看进程树:
    • t: 显示进程树(类似 pstree),这会显示进程之间的父子关系
  6. 改变进程优先级(Nice 值):
    • N: 调整进程的 "nice" 值,改变进程的优先级
    • 对任一进程,默认的 nice 值是 0,负数表示提高优先级,正数表示降低优先级
  7. 退出htop:
    • q: 退出 htop,回到命令行

CPU 显示

我们将分别展示在 MacOS 和 Linux 上查看 CPU 信息的方式:

MacOS

指令:

Bash
1
sysctl -a | grep cpu
结果
Bash
 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
30
31
32
33
34
35
36
37
 sysctl -a | grep cpu
kern.sched_rt_avoid_cpu0: 0
kern.cpu_checkin_interval: 5000
hw.ncpu: 12 # CPU 总数
hw.activecpu: 12 # 当前可用的CPU数量

# 性能级别是0 (perf level 0) -> 最高级别的性能模式
hw.perflevel0.physicalcpu: 8 # 性能级别为0(最高性能)时,开启的CPU数量是8 (物理)
hw.perflevel0.physicalcpu_max: 8 # 性能级别为0(最高性能)时,最高可支持CPU数量为8 (物理)
hw.perflevel0.logicalcpu: 8 # 性能级别为0(最高性能)时,开启的CPU数量是8 (逻辑)
hw.perflevel0.logicalcpu_max: 8 # 性能级别为0(最高性能)时,最高可支持CPU数量为8 (逻辑)

# 性能级别是1 (perf level 1) -> 稍弱点的性能模式
hw.perflevel0.cpusperl2: 4
hw.perflevel1.physicalcpu: 4
hw.perflevel1.physicalcpu_max: 4
hw.perflevel1.logicalcpu: 4
hw.perflevel1.logicalcpu_max: 4
hw.perflevel1.cpusperl2: 4

hw.physicalcpu: 12
hw.physicalcpu_max: 12
hw.logicalcpu: 12
hw.logicalcpu_max: 12
# 这里可以体现出来,没有开超线程 
# (current phy_CPUNum 12 / logi_CPUNum 12 = 1)

hw.cputype: 16777228 # Apple Silicon ID
hw.cpusubtype: 2
hw.cpu64bit_capable: 1 # 1: this machine is 64-bit
hw.cpufamily: -634136515
hw.cpusubfamily: 4
machdep.cpu.cores_per_package: 12
machdep.cpu.core_count: 12
machdep.cpu.logical_per_package: 12
machdep.cpu.thread_count: 12
machdep.cpu.brand_string: Apple M2 Pro

Linux

指令:

Bash
1
lscpu
结果
Bash
 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
30
31
Architecture:                         aarch64 # ARM架构
CPU op-mode(s):                       64-bit # 64-bit machine
Byte Order:                           Little Endian
CPU(s):                               12 # physical CPU num
On-line CPU(s) list:                  0-11 # CPU that works
Thread(s) per core:                   1 # 说明没开超线程 :)
Core(s) per socket:                   12 # 每个 CPU 插槽中有 12 个核心
Socket(s):                            1 # 电脑只有一个 CPU 插槽
Vendor ID:                            0x61
Model:                                0
Stepping:                             0x0
CPU max MHz:                          2000.0000
CPU min MHz:                          2000.0000
BogoMIPS:                             48.00

# 后面这些都不重要了
Vulnerability Gather data sampling:   Not affected
Vulnerability Itlb multihit:          Not affected
Vulnerability L1tf:                   Not affected
Vulnerability Mds:                    Not affected
Vulnerability Meltdown:               Not affected
Vulnerability Mmio stale data:        Not affected
Vulnerability Reg file data sampling: Not affected
Vulnerability Retbleed:               Not affected
Vulnerability Spec rstack overflow:   Not affected
Vulnerability Spec store bypass:      Vulnerable
Vulnerability Spectre v1:             Mitigation; __user pointer sanitization
Vulnerability Spectre v2:             Not affected
Vulnerability Srbds:                  Not affected
Vulnerability Tsx async abort:        Not affected
Flags:                                fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 asimddp sha512 asimdfhm dit uscat ilrcpc flagm sb dcpodp flagm2 frint ecv

更先进的方式是使用btop直接看TUI:

alt text

网络检查

1) ifconfig:查看和配置网络接口

Bash
1
ifconfig

en0即可,可以查到 IPv4 / IPv6 / MAC.Addr

ifconfig -> en0
Bash
1
2
3
4
5
6
7
8
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=6460<TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
    ether 7a:c4:24:e3:6f:b9
    inet6 fe80::1c72:880b:75c9:c42e%en0 prefixlen 64 secured scopeid 0xe
    inet 192.168.31.130 netmask 0xffffff00 broadcast 192.168.31.255
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: active

根据这段信息:

  • IPV4: 192.168.31.130
  • IPV6: fe80::1c72:880b:75c9:c42e
  • MAC Addr: 7a:c4:24:e3:6f:b9

ifconfig 只会查看处于 UP 状态的网络接口,更详细的指令是: ip addr show (它可以显示UP/DOWN/UNKNOWN)

Text Only
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
huluobo@ubuntu:/Users/huluobo/Github_Content/The_Website_of_hbx$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
3: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
4: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1000
    link/tunnel6 :: brd ::
5: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 76:65:f1:60:2e:bd brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 198.19.249.157/24 metric 100 brd 198.19.249.255 scope global dynamic eth0
       valid_lft 172795sec preferred_lft 172795sec
    inet6 fd07:b51a:cc66:0:7465:f1ff:fe60:2ebd/64 scope global mngtmpaddr noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::7465:f1ff:fe60:2ebd/64 scope link 
       valid_lft forever preferred_lft forever

2) ping:测试网络连通性

Bash
1
2
ping 1.1.1.1 # cloudflare
ping 8.8.8.8 # google.com

是icmp包, 因此只可以测试网络连通性。如果想要检测“是否可以科学上网”(对TCP/UDP等进行封装), 应该使用 curlwget, 它们对应的是TCP/UDP流量。

3) curlwget:发送 HTTP 请求

  • curl 支持更多的协议,灵活度更高,笔者更倾向于用curl
  • 一般都是用 getpost用的少
Bash
1
2
3
4
# GET请求
curl http://example.com
# GET请求,并将响应保存为response.html
curl -o response.html http://example.com

4) netstatss:查看网络连接状态

Bash
1
2
3
4
netstat # 相当于CLI简化版的wireshark
# --------------------------------
Active Internet connections
Proto  Recv-Q  Send-Q  Local Address  Foreign Address  (state)
Note
Bash
 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 netstat
Active Internet connections
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
tcp4       0      0  192.168.31.130.60031   111.29.57.39.14901     ESTABLISHED
tcp4       0      0  198.18.0.1.cbt         198.18.0.3.60030       ESTABLISHED
tcp4       0      0  198.18.0.1.60030       91.108.56.145.https    ESTABLISHED
tcp4       0      0  192.168.31.130.60001   113.240.75.252.https   ESTABLISHED
tcp4       0      0  198.18.0.1.cbt         198.18.0.3.60000       ESTABLISHED
tcp4       0      0  198.18.0.1.60000       198.18.1.74.https      ESTABLISHED
tcp4       0      0  192.168.31.130.59966   111.29.57.39.14901     ESTABLISHED
tcp4       0      0  localhost.7890         localhost.59959        ESTABLISHED
tcp4       0      0  localhost.59959        localhost.7890         ESTABLISHED
tcp4       0      0  192.168.31.130.59958   111.29.57.39.14901     ESTABLISHED
tcp4       0      0  localhost.7890         localhost.59951        ESTABLISHED
tcp4       0      0  localhost.59951        localhost.7890         ESTABLISHED
tcp4       0      0  192.168.31.130.59940   111.29.57.39.14901     ESTABLISHED
tcp4       0      0  localhost.7890         localhost.59933        ESTABLISHED
tcp4       0      0  localhost.59933        localhost.7890         ESTABLISHED
tcp4       0      0  192.168.31.130.59932   111.29.57.39.14901     ESTABLISHED
tcp4       0      0  192.168.31.130.59931   111.29.57.39.14901     ESTABLISHED
tcp4       0      0  localhost.7890         localhost.59930        ESTABLISHED
tcp4       0      0  localhost.59930        localhost.7890         ESTABLISHED
tcp4       0      0  localhost.7890         localhost.59929        ESTABLISHED
tcp4       0      0  localhost.59929        localhost.7890         ESTABLISHED
tcp4       0      0  192.168.31.130.59922   111.29.57.39.14901     ESTABLISHED
tcp4       0      0  localhost.7890         localhost.59919        ESTABLISHED
tcp4       0      0  localhost.59919        localhost.7890         ESTABLISHED
tcp4       0      0  192.168.31.130.59918   111.29.57.39.14901     ESTABLISHED
tcp4       0      0  localhost.7890         localhost.59917        ESTABLISHED
tcp4       0      0  localhost.59917        localhost.7890         ESTABLISHED
tcp4       0      0  192.168.31.130.59916   111.29.57.39.14901     ESTABLISHED
tcp4       0      0  localhost.7890         localhost.59913        ESTABLISHED
tcp4       0      0  localhost.59913        localhost.7890         ESTABLISHED
tcp4       0      0  192.168.31.130.59903   111.29.57.39.14901     ESTABLISHED
tcp4       0      0  localhost.7890         localhost.59901        ESTABLISHED
tcp4       0      0  localhost.59901        localhost.7890         ESTABLISHED
tcp4       0      0  192.168.31.130.59900   111.29.57.39.14901     ESTABLISHED
tcp4       0      0  localhost.7890         localhost.59897        ESTABLISHED
tcp4       0      0  localhost.59897        localhost.7890         ESTABLISHED
tcp4       0      0  192.168.31.130.59896   111.29.57.39.14901     ESTABLISHED
tcp4       0      0  localhost.7890         localhost.59895        ESTABLISHED
tcp4       0      0  localhost.59895        localhost.7890         ESTABLISHED
tcp4       0      0  localhost.irdmi        localhost.59894        CLOSE_WAIT
tcp4       0      0  localhost.59894        localhost.irdmi        FIN_WAIT_2
tcp4       0      0  localhost.irdmi        localhost.59820        CLOSE_WAIT
tcp4       0      0  localhost.59820        localhost.irdmi        FIN_WAIT_2
tcp4       0      0  localhost.irdmi        localhost.59818        CLOSE_WAIT
tcp4       0      0  localhost.59818        localhost.irdmi        FIN_WAIT_2

5)traceroute (linux) / tcptraceroute (macos)

Bash
1
2
3
4
# linux
traceroute 8.8.8.8
# macos
sudo tcptraceroute 8.8.8.8

6) ip route 路由查询

7) wireshark && tcdump:抓包分析工具

这个太强大了, 单独说

8)nmap:网络端口扫描工具

Bash
1
2
brew install nmap # macos
sudo apt install nmap # linux
  • 扫描单个主机: nmap [target] (target: 主机IP, 从ifconfig获得)
  • 扫描多个主机: nmap [target1] [target2] [target3]
  • 扫描主机的UDP端口: nmap -sU [target]
  • 扫描整个子网: nmap [subnet]/24 (subnet: 子网IP, 从ifconfig获得)
  • 检测服务的版本信息: nmap -sV [target]
  • 检测某个主机的操作系统: nmap -O [target]
  • 加速: 在上述任一指令加入 -T2 / -T3 / -T4 / -T5 实现加速
    • 数字越大加速效果越好,但也更容易被 入侵检测系统(IDS) 发现
Examples on MacOS

主机端口扫描:

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
 nmap 10.172.66.0/24
Starting Nmap 7.95 ( https://nmap.org ) at 2025-02-27 20:40 CST
Nmap scan report for 10.172.66.43
Host is up (0.000056s latency).
Not shown: 995 closed tcp ports (conn-refused)
PORT     STATE SERVICE
22/tcp   open  ssh
445/tcp  open  microsoft-ds
5000/tcp open  upnp
7000/tcp open  afs3-fileserver
8080/tcp open  http-proxy

Nmap done: 256 IP addresses (1 host up) scanned in 13.10 seconds

主机UDP端口扫描:

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
 sudo nmap -sU 10.172.66.43
Starting Nmap 7.95 ( https://nmap.org ) at 2025-02-27 20:46 CST
Nmap scan report for 10.172.66.43
Host is up (0.00033s latency).
Not shown: 995 closed udp ports (port-unreach)
PORT     STATE         SERVICE
53/udp   open          domain
88/udp   open          kerberos-sec
137/udp  open|filtered netbios-ns
138/udp  open|filtered netbios-dgm
5353/udp open          zeroconf

Nmap done: 1 IP address (1 host up) scanned in 1.35 seconds

主机服务检测:

Bash
 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 nmap -sV -T3 10.172.66.43
Starting Nmap 7.95 ( https://nmap.org ) at 2025-02-27 20:40 CST
Nmap scan report for 10.172.66.43
Host is up (0.000066s latency).
Not shown: 995 closed tcp ports (conn-refused)
PORT     STATE SERVICE       VERSION
22/tcp   open  ssh           OpenSSH 9.8 (protocol 2.0)
445/tcp  open  microsoft-ds?
5000/tcp open  rtsp
7000/tcp open  rtsp
8080/tcp open  http          nginx 1.27.0
2 services unrecognized despite returning data. If you know the service/version, please submit the following fingerprints at https://nmap.org/cgi-bin/submit.cgi?new-service :
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port5000-TCP:V=7.95%I=7%D=2/27%Time=67C05D5A%P=arm-apple-darwin24.1.0%r
SF:(GetRequest,8F,"HTTP/1\.1\x20403\x20Forbidden\r\nContent-Length:\x200\r
SF:\nServer:\x20AirTunes/800\.74\.5\r\nX-Apple-ProcessingTime:\x200\r\nX-A
SF:pple-RequestReceivedTimestamp:\x2034216270\r\n\r\n")%r(RTSPRequest,8F,"
SF:RTSP/1\.0\x20403\x20Forbidden\r\nContent-Length:\x200\r\nServer:\x20Air
SF:Tunes/800\.74\.5\r\nX-Apple-ProcessingTime:\x201\r\nX-Apple-RequestRece
SF:ivedTimestamp:\x2034216290\r\n\r\n")%r(HTTPOptions,8F,"HTTP/1\.1\x20403
SF:\x20Forbidden\r\nContent-Length:\x200\r\nServer:\x20AirTunes/800\.74\.5
SF:\r\nX-Apple-ProcessingTime:\x200\r\nX-Apple-RequestReceivedTimestamp:\x
SF:2034221291\r\n\r\n")%r(FourOhFourRequest,8F,"HTTP/1\.1\x20403\x20Forbid
SF:den\r\nContent-Length:\x200\r\nServer:\x20AirTunes/800\.74\.5\r\nX-Appl
SF:e-ProcessingTime:\x201\r\nX-Apple-RequestReceivedTimestamp:\x2034221295
SF:\r\n\r\n")%r(SIPOptions,A1,"RTSP/1\.0\x20403\x20Forbidden\r\nContent-Le
SF:ngth:\x200\r\nServer:\x20AirTunes/800\.74\.5\r\nCSeq:\x2042\x20OPTIONS\
SF:r\nX-Apple-ProcessingTime:\x200\r\nX-Apple-RequestReceivedTimestamp:\x2
SF:034221299\r\n\r\n");
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port7000-TCP:V=7.95%I=7%D=2/27%Time=67C05D5F%P=arm-apple-darwin24.1.0%r
SF:(RTSPRequest,8F,"RTSP/1\.0\x20403\x20Forbidden\r\nContent-Length:\x200\
SF:r\nServer:\x20AirTunes/800\.74\.5\r\nX-Apple-ProcessingTime:\x201\r\nX-
SF:Apple-RequestReceivedTimestamp:\x2034216267\r\n\r\n")%r(GetRequest,8F,"
SF:HTTP/1\.1\x20403\x20Forbidden\r\nContent-Length:\x200\r\nServer:\x20Air
SF:Tunes/800\.74\.5\r\nX-Apple-ProcessingTime:\x201\r\nX-Apple-RequestRece
SF:ivedTimestamp:\x2034221273\r\n\r\n")%r(HTTPOptions,8F,"HTTP/1\.1\x20403
SF:\x20Forbidden\r\nContent-Length:\x200\r\nServer:\x20AirTunes/800\.74\.5
SF:\r\nX-Apple-ProcessingTime:\x200\r\nX-Apple-RequestReceivedTimestamp:\x
SF:2034221283\r\n\r\n")%r(FourOhFourRequest,8F,"HTTP/1\.1\x20403\x20Forbid
SF:den\r\nContent-Length:\x200\r\nServer:\x20AirTunes/800\.74\.5\r\nX-Appl
SF:e-ProcessingTime:\x200\r\nX-Apple-RequestReceivedTimestamp:\x2034221288
SF:\r\n\r\n")%r(SIPOptions,A1,"RTSP/1\.0\x20403\x20Forbidden\r\nContent-Le
SF:ngth:\x200\r\nServer:\x20AirTunes/800\.74\.5\r\nCSeq:\x2042\x20OPTIONS\
SF:r\nX-Apple-ProcessingTime:\x200\r\nX-Apple-RequestReceivedTimestamp:\x2
SF:034221292\r\n\r\n");

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 26.27 seconds

主机系统扫描:

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
 sudo nmap -O 10.172.66.43
Password:
Starting Nmap 7.95 ( https://nmap.org ) at 2025-02-27 20:43 CST
Nmap scan report for 10.172.66.43
Host is up (0.00022s latency).
Not shown: 995 closed tcp ports (reset)
PORT     STATE SERVICE
22/tcp   open  ssh
445/tcp  open  microsoft-ds
5000/tcp open  upnp
7000/tcp open  afs3-fileserver
8080/tcp open  http-proxy
Device type: general purpose
Running: Apple macOS 12.X
OS CPE: cpe:/o:apple:mac_os_x:12
OS details: Apple macOS 12 (Monterey) (Darwin 21.1.0 - 21.6.0)
Network Distance: 0 hops

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.46 seconds

9)nginx:Web服务器 + 反向代理服务器(轻量级/高并发处理强)

这个太强大了, 单独说

10) tc:限制网络端口流量发送速率

这个太强大了, 单独说