系統信息及進程管理
一、系統信息查看
常用命令:uname、hostnam、hostnamectl、uptime、df、du、free、lscpu
1、uname
(1)、命令簡介
uname 是一個在 Unix 和類 Unix 系統(如 Linux、macOS)中常用的命令行工具,用于顯示系統信息。它的名稱來源于 “Unix name”。
(2)、命令選項清單
#命令語法:uname [選項]
#選項 說明
-a 或 --all 顯示所有信息(相當于同時使用 -snrvmpio)。
-s 或 --kernel-name 顯示內核名稱(如 "Linux"、"Darwin")。
-n 或 --nodename 顯示網絡節點的主機名。
-r 或 --kernel-release 顯示內核版本(如 "5.4.0-80-generic")。
-v 或 --kernel-version 顯示內核的構建信息或版本詳情。
-m 或 --machine 顯示硬件架構(如 "x86_64"、"arm64")。
-p 或 --processor 顯示處理器類型(可能與 -m 相同,部分系統不支持)。
-i 或 --hardware-platform 顯示硬件平臺(部分系統不支持)。
-o 或 --operating-system 顯示操作系統名稱(如 "GNU/Linux")。
(3)、常用命令示例
root@master:~# uname -a #顯示所有信息
Linux master 5.15.0-143-generic #153-Ubuntu SMP Fri Jun 13 19:10:45 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
root@master:~# uname -s #顯示內核名稱
Linux
root@master:~# uname -m #顯示硬件架構
x86_64
root@master:~# uname -r #顯示內核版本
5.15.0-143-generic
2、hostname
(1)、命令簡介
hostname 是一個用于 查看或臨時修改系統主機名 的命令,適用于大多數 Unix/Linux 系統。它比 hostnamectl 更基礎,但功能較為有限(特別是在 systemd 系統中,hostnamectl 是更現代的替代方案)。
(2)、命令選項清單
#命令語法:hostname [選項] [新主機名] # 查看或設置主機名
#選項 說明 常用示例 輸出示例
無選項 顯示當前主機名 hostname ubuntu
-a 顯示所有主機別名 hostname -a (通常為空)
-A 顯示所有FQDN(長主機名) hostname -A ubuntu.example.com
-b 若主機名為空,設為默認 sudo hostname -b (無輸出,設置默認名)
-d 顯示DNS域名 hostname -d example.com
-f 顯示完整FQDN hostname -f ubuntu.example.com
-F <文件> 從文件讀取主機名 sudo hostname -F /etc/newhost (無輸出,設置主機名)
-i 顯示主IP(依賴hosts) hostname -i 127.0.0.1(可能不準確)
-I 顯示所有IP地址 hostname -I 192.168.1.100 10.0.0.5
-s 顯示短主機名 hostname -s ubuntu
-y 顯示NIS域名 hostname -y nisdomain
-V/-h 顯示版本/幫助 hostname -V hostname 3.23
(3)、常用命令示例
root@master:~# hostname #顯示當前主機名
master
root@master:~# hostname -a #顯示所有主機別名,未設置輸出為空root@master:~# hostname -A #顯示所有FQDN(長主機名)
192.168.0.117 172.17.0.1
root@master:~# hostname -b #若主機名為空,設為默認
master
root@master:~# hostname -d #顯示DNS域名,本機未設置
root@master:~# hostname -f #顯示完整FQDN
master
root@master:~# hostname -i #顯示主IP(依賴hosts)
192.168.0.117 172.17.0.1 fe80::20c:29ff:feb6:e83e
root@master:~# hostname -I #顯示所有IP地址
192.168.0.117 172.17.0.1
root@master:~# hostname -s #顯示短主機名
master
root@master:~# hostname -y #顯示NIS域名,本機未設置
hostname: Local domain name not set
root@master:~# hostname -V #顯示版本/幫助
hostname 3.23
root@master:~# echo "Test" > hostname_test
root@master:~# hostname -F ./hostname_test #讀取文件內容,臨時設置新hostname
root@master:~# hostname
Test
3、hostnamectl
(1)、命令簡介
hostnamectl 是 systemd 提供的命令行工具,用于 管理系統主機名和相關系統信息(如操作系統、內核版本、硬件架構等)。它是現代 Linux 發行版(如 Ubuntu、CentOS、Fedora 等)中推薦的主機名管理工具,相比傳統的 hostname 命令功能更強大,且修改永久生效。
(2)、命令選項清單
#命令語法:hostnamectl [選項] [子命令] [參數]
#選項 說明
--static 顯示靜態主機名(來自 /etc/hostname) hostnamectl --static
--transient 顯示臨時主機名(運行時) hostnamectl --transient
--pretty 顯示用戶友好的主機名(可自定義) hostnamectl --pretty
--json=pretty 以 JSON 格式輸出(易讀) hostnamectl --json=pretty
-H/--host 遠程操作其他主機(需 SSH 權限) hostnamectl -H user@remote
--help 顯示幫助信息 hostnamectl --help
--version 顯示版本信息 hostnamectl --version
#子命令
status - 顯示當前主機信息
hostname [NAME] - 查看/設置系統主機名
icon-name [NAME] - 查看/設置圖標名稱
chassis [NAME] - 查看/設置設備類型,desktop(臺式機)、laptop(筆記本)、server(服務器)、vm(虛擬機)等
deployment [NAME] - 查看/設置部署環境
location [NAME] - 查看/設置物理位置
(3)、常用命令示例
root@master:~# hostnamectl status #或直接hostnamectl ,顯示當前主機信息Static hostname: master
Transient hostname: TestIcon name: computer-vmChassis: vmMachine ID: f5d70adfffc44e54b0fa69c294f4cac0Boot ID: ef1c4ed4701745048a077dadda5a0afeVirtualization: vmwareOperating System: Ubuntu 22.04.5 LTS Kernel: Linux 5.15.0-143-genericArchitecture: x86-64Hardware Vendor: VMware, Inc.Hardware Model: VMware20,1
root@Test:~# hostname #原主機名
Test
root@Test:~# hostnamectl set-hostname "master" #設置新主機名
root@Test:~# hostname #顯示更改后主機名
master
root@Test:~# hostnamectl set-chassis server #設置主機類型為server-服務器
root@Test:~# hostnamectl chassis
server #設置成功
# 通過 SSH 修改遠程主機
root@Test:~# hostnamectl -H root@192.168.1.100 set-hostname "node01"
# 檢查當前主機名是否被正確解析
root@Test:~# hostnamectl --static
# 若服務(如 Nginx)依賴 FQDN,確保 /etc/hosts 包含:
# 192.168.1.100 web01.example.com web01
root@Test:~# hostnamectl location "1-1" #設置機架號
root@Test:~# hostnamectl location
1-1
4、uptime
(1)、命令簡介
uptime 是一個簡單但實用的 Linux/Unix 命令,用于 顯示系統的運行時間、當前登錄用戶數以及系統負載。它可以幫助管理員快速了解系統的運行狀態。
(2)、命令選項清單
#命令語法:uptime [選項]
#選項 說明
-p 僅顯示系統運行時間(簡潔模式)
-s 顯示系統啟動時間(since)
-h 以人類可讀格式輸出(如 "3 days")
-V 顯示版本信息
(3)、常用命令示例
root@Test:~# uptime #輸出為系統時間 運行時間 當前登錄用戶數量 系統1分鐘、5分鐘、15分鐘的平均負載。
14:25:29 up 1 day, 1:14, 3 users, load average: 0.00, 0.01, 0.00
#14:25:29 系統時間
#up 1 day, 1:14 運行時間
#3 users當前登錄用戶數量
#load average: 0.00, 0.01, 0.00 系統1分鐘、5分鐘、15分鐘的平均負載
root@Test:~# uptime -p #查看系統運行時間
up 1 day, 1 hour, 16 minutes
root@Test:~# uptime -s #查看系統啟動時間
2025-07-21 13:11:20
5、df
(1)、命令簡介
df(Disk Filesystem)用于 查看磁盤空間使用情況,顯示文件系統的總容量、已用空間、可用空間及掛載點信息。是 Linux/Unix 系統中最常用的磁盤管理命令之一。
(2)、命令選項清單
#命令語法:df [選項] [文件或目錄]
#選項 說明
-h 以易讀格式顯示(如 KB、MB、GB)
-T 顯示文件系統類型(如 ext4、xfs)
-i 顯示 inode 使用情況(而非磁盤空間)
-a 顯示所有文件系統(包括偽文件系統如 proc)
-x <類型> 排除指定類型的文件系統
--total 在最后一行顯示總計信息
(3)、常用命令示例
root@Test:~# df #查看磁盤空間
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 201020 1184 199836 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 11218472 8192824 2433984 78% /
tmpfs 1005096 0 1005096 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
/dev/sda2 1992552 258544 1612768 14% /boot
/dev/sda1 1098632 6228 1092404 1% /boot/efi
tmpfs 201016 4 201012 1% /run/user/1000
root@Test:~# df -h #易讀格式輸出
Filesystem Size Used Avail Use% Mounted on
tmpfs 197M 1.2M 196M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 11G 7.9G 2.4G 78% /
tmpfs 982M 0 982M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 253M 1.6G 14% /boot
/dev/sda1 1.1G 6.1M 1.1G 1% /boot/efi
tmpfs 197M 4.0K 197M 1% /run/user/1000
root@Test:~# df -Th #顯示文件系統類型
Filesystem Type Size Used Avail Use% Mounted on
tmpfs tmpfs 197M 1.2M 196M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4 11G 7.9G 2.4G 78% /
tmpfs tmpfs 982M 0 982M 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 ext4 2.0G 253M 1.6G 14% /boot
/dev/sda1 vfat 1.1G 6.1M 1.1G 1% /boot/efi
tmpfs tmpfs 197M 4.0K 197M 1% /run/user/1000
root@Test:~# df -i #查看inode使用情況,磁盤不滿,但是inode使用率100%也會導致磁盤無法寫入
Filesystem Inodes IUsed IFree IUse% Mounted on
tmpfs 251274 800 250474 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 719488 139448 580040 20% /
tmpfs 251274 1 251273 1% /dev/shm
tmpfs 251274 3 251271 1% /run/lock
/dev/sda2 131072 310 130762 1% /boot
/dev/sda1 0 0 0 - /boot/efi
tmpfs 50254 25 50229 1% /run/user/1000
root@Test:~# df -h /home #查看指定目錄大小
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 11G 7.9G 2.4G 78% /
6、du
(1)、命令簡介
du(Disk Usage)用于 統計文件和目錄的磁盤使用情況,是排查存儲空間問題的核心工具。與 df 不同,du 從文件層級計算實際占用空間,而非文件系統級別。
(2)、命令選項清單
#命令語法:du [選項] [文件/目錄]
#選項 說明
-h 以易讀格式顯示(KB/MB/GB)
-s 僅顯示總用量(不遞歸子目錄)
-a 顯示所有文件(包括普通文件)
--max-depth=N 限制遞歸深度(如 --max-depth=1)
-c 最后顯示總計
--exclude="PATTERN" 排除匹配的文件/目錄
--time 顯示文件修改時間
(3)、常用命令示例
root@Test:/opt# du -h #查看當前目錄占用空間
4.0K ./containerd/bin
4.0K ./containerd/lib
12K ./containerd
692M
root@Test:/opt# du -sh /opt #僅顯示目錄總大小(不顯示子目錄)
692M /opt
root@Test:/opt# du -h --max-depth=1 /opt/ #顯示目錄及其子目錄大小(限制深度為1)
12K /opt/containerd
692M /opt/
root@Test:/opt# du -ah /opt #顯示所有文件(包括普通文件)
4.0K /opt/containerd/bin
4.0K /opt/containerd/lib
12K /opt/containerd
692M /opt/vulnerables.tar
692M /opt
root@Test:/opt# du -h --exclude="*.tar" /opt #排除特定文件(tar)類型
4.0K /opt/containerd/bin
4.0K /opt/containerd/lib
12K /opt/containerd
16K /opt
7、free
(1)、命令簡介
free 用于 查看系統內存(RAM)和交換空間(Swap)的使用情況,是 Linux 系統監控的必備工具。它能直觀顯示內存總量、已用量、空閑量及緩存/緩沖區的占用情況。
(2)、命令選項清單
#命令語法:free [選項]
#選項 說明
-h 以人類可讀格式顯示(KB/MB/GB)
-s <秒> 每隔 N 秒自動刷新(如 -s 2)
-c <次數> 與 -s 聯用,設置刷新次數
-t 顯示 物理內存 + Swap 的總和
-w 分開顯示緩存(cache)和緩沖區(buffers)
--help 顯示幫助信息
(3)、常用命令示例
root@Test:/opt# free -h #查看內存信息total used free shared buff/cache available
Mem: 1.9Gi 278Mi 68Mi 1.0Mi 1.6Gi 1.5Gi
Swap: 2.0Gi 0.0Ki 2.0Gi
#total:總內存量。
#used:已用內存(包括緩存和緩沖區)。
#free:完全未被使用的內存。
#shared:多個進程共享的內存(如 tmpfs)。
#buff/cache:內核緩存(buffers)和頁面緩存(cache)占用的內存。
#buffers:塊設備(如磁盤)的臨時緩存。
#cache:文件系統的頁面緩存(加速文件讀寫)。
#available:真正可用的內存(含緩存可回收部分,更準確)。
#Swap:交換空間的使用情況。
root@Test:/opt# free -h -s 2 -c 2 #每隔 2 秒刷新一次(共 2 次)total used free shared buff/cache available
Mem: 1.9Gi 277Mi 68Mi 1.0Mi 1.6Gi 1.5Gi
Swap: 2.0Gi 0.0Ki 2.0Gitotal used free shared buff/cache available
Mem: 1.9Gi 277Mi 68Mi 1.0Mi 1.6Gi 1.5Gi
Swap: 2.0Gi 0.0Ki 2.0Gi
root@Test:/opt# free -th #顯示總和(物理內存 + Swap)total used free shared buff/cache available
Mem: 1.9Gi 277Mi 68Mi 1.0Mi 1.6Gi 1.5Gi
Swap: 2.0Gi 0.0Ki 2.0Gi
Total: 3.9Gi 278Mi 2.1Gi
8、lscpu
(1)、命令簡介
lscpu 用于 顯示 CPU 架構信息,包括處理器型號、核心數、線程數、緩存大小等。它是 Linux 系統下快速獲取 CPU 硬件信息的標準工具。
(2)、命令選項清單
#命令語法:lscpu [選項]
#選項 說明
-a 顯示所有信息(包括離線 CPU)
-b 僅顯示在線 CPU 的信息
-c 只顯示指定的列(如 -c=CPU,Core,Socket)
-J 以 JSON 格式輸出
-p 以可解析的格式輸出(用于腳本)
-s <目錄> 從指定目錄讀取 CPU 信息(默認為 /sys)
-x 以十六進制顯示 CPU 掩碼
(3)、常用命令示例
root@Test:/opt# lscpu
Architecture: x86_64CPU op-mode(s): 32-bit, 64-bitAddress sizes: 45 bits physical, 48 bits virtualByte Order: Little Endian
CPU(s): 2On-line CPU(s) list: 0,1
Vendor ID: GenuineIntelModel name: Intel(R) Core(TM) i3-8100 CPU @ 3.60GHzCPU family: 6Model: 158Thread(s) per core: 1Core(s) per socket: 2Socket(s): 1Stepping: 11BogoMIPS: 7199.99Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves arat md_clear flush_l1d arch_capabilities
Virtualization features: Hypervisor vendor: VMwareVirtualization type: full
Caches (sum of all): L1d: 64 KiB (2 instances)L1i: 64 KiB (2 instances)L2: 512 KiB (2 instances)L3: 6 MiB (1 instance)
NUMA: NUMA node(s): 1NUMA node0 CPU(s): 0,1
Vulnerabilities: Gather data sampling: Unknown: Dependent on hypervisor statusItlb multihit: KVM: Mitigation: VMX unsupportedL1tf: Mitigation; PTE InversionMds: Mitigation; Clear CPU buffers; SMT Host state unknownMeltdown: Mitigation; PTIMmio stale data: Mitigation; Clear CPU buffers; SMT Host state unknownReg file data sampling: Not affectedRetbleed: Mitigation; IBRSSpec rstack overflow: Not affectedSpec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccompSpectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitizationSpectre v2: Mitigation; IBRS; IBPB conditional; STIBP disabled; RSB filling; PBRSB-eIBRS Not affected; BHI SW loop, KVM SW loopSrbds: Unknown: Dependent on hypervisor statusTsx async abort: Not affected
#字段 說明
#Architecture CPU 架構(如 x86_64、aarch64)
#CPU(s) 邏輯 CPU 總數(物理核心 × 線程數)
#Thread(s) per core 每個核心的線程數(超線程技術)
#Core(s) per socket 每個物理 CPU 的核心數
#Socket(s) 物理 CPU 插槽數(服務器常見多插槽)
#Model name CPU 型號
#CPU MHz 當前 CPU 頻率
#L1d/L1i/L2/L3 cache 各級緩存大小
root@Test:/opt# lscpu | grep -E "Architecture|CPU\(s\)|Model name|MHz" #簡化查看
Architecture: x86_64
CPU(s): 2
On-line CPU(s) list: 0,1
Model name: Intel(R) Core(TM) i3-8100 CPU @ 3.60GHz
NUMA node0 CPU(s): 0,1
root@Test:/opt# lscpu | grep "Thread(s) per core" #查看是否啟用超線程
Thread(s) per core: 1
root@Test:/opt# lscpu -J #以json格式輸出
root@Test:/opt# lscpu -p | grep -v "^#" | cut -d "," -f 2 | sort -u | wc -l #統計物理核心數
2
root@Test:/opt# cat /proc/cpuinfo | grep flags | head -1 #檢查 CPU 支持的指令集
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves arat md_clear flush_l1d arch_capabilities
二、進程管理
**常用命令:**ps、top、kill、pkill、bg/fg
1、ps
(1)、命令簡介
ps 命令是 Linux/Unix 系統中用于查看當前進程狀態的工具,全稱為 Process Status。它可以顯示正在運行的進程信息,如進程 ID(PID)、CPU 占用、內存使用、運行時間等。
(2)、命令選項清單
#命令語法:ps [選項]
#選項(可以組合使用) 說明(選項前有-是UNIX 風格,不加的是BSD 風格)
-e 或 -A 顯示所有進程(包括其他用戶的進程)
-f 完整格式輸出(UID, PID, PPID, CMD 等)
-u <user> 顯示指定用戶的進程
-p <PID> 顯示指定 PID 的進程
-C <cmd> 按命令名過濾(如 ps -C nginx)
--sort=<key> 按指定字段排序(如 --sort=-%cpu 按 CPU 降序)
-o <fields> 自定義輸出字段(如 ps -eo pid,cmd,%mem)
-H 顯示進程層次結構(縮進表示父子關系)
--forest 樹狀顯示進程關系(類似 pstree)
a 顯示所有終端關聯的進程(包括其他用戶的)
u 以用戶友好格式顯示(含 CPU、內存等)
x 顯示不關聯終端的進程(如守護進程)
l 長格式輸出(更多詳細信息)
j 顯示作業控制信息(會話 ID、進程組 ID)
-T 顯示線程(LWP 列表示線程 ID)
-
使用-o參數時,自定義常用字段如下
-
pcpu:CPU占用百分比
-
pmem:內存占用百分比
-
vsz:虛擬內存大小(KB)
-
rss:實際內存占用(KB)
-
stat:進程狀態(如 S=睡眠, R=運行, Z=僵尸)
-
-
ps輸出內容中UID、PID、PPID、C、STIME、TTY、TIME、CMD說明
列名 全稱 說明 UID User ID 運行該進程的用戶 ID(或用戶名,取決于 ps 選項)。 PID Process ID 進程的唯一標識號(殺死進程時使用,如 kill PID)。 PPID Parent Process ID 父進程的 PID(啟動該進程的進程 ID)。 C CPU Utilization CPU 占用率(百分比,通常是一個時間段的平均值)。 STIME Start Time 進程啟動的時間(格式為 HH:MM 或 月-日,取決于系統)。 TTY TeleTYpe 進程關聯的終端設備(? 表示無終端,如守護進程)。 TIME CPU Time 進程占用 CPU 的總時間(格式為 HH:MM:SS)。 CMD Command 啟動進程的命令(包括參數,可能是截斷的)。
(3)、常用命令示例
root@master:~# ps -ef #查看全部進程,以下僅為部分示例
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jul21 ? 00:00:02 /sbin/init
root 2 0 0 Jul21 ? 00:00:00 [kthreadd]
root 3 2 0 Jul21 ? 00:00:00 [rcu_gp]
root@master:~# ps -u root -f #查看root用戶的所有進程,以下僅為部分示例
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jul21 ? 00:00:02 /sbin/init
root 2 0 0 Jul21 ? 00:00:00 [kthreadd]
root@master:~# ps -p 17190 -o pid,cmd #僅顯示PID=17190的進程pid,cmd信息PID CMD17190 [kworker/u4:2-events_power_efficient]
root@master:~# ps -e --sort=-%mem | head -n 5 #查看內存占用最高的5個進程PID TTY TIME CMD923 ? 00:00:12 dockerd844 ? 00:00:25 containerd837 ? 00:00:07 snapd521 ? 00:00:08 multipathd
root@master:~# ps aux #顯示所有進程(類似 `ps -ef`,但含 %CPU/%MEM)
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.5 166340 11784 ? Ss Jul21 0:02 /sbin/init
root 2 0.0 0.0 0 0 ? S Jul21 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Jul21 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< Jul21 0:00 [rcu_par_gp]
root@master:~# ps aux | grep nginx #查找nginx相關進程
root 17364 0.0 0.1 6480 2264 pts/1 S+ 10:07 0:00 grep --color=auto nginx
root@master:~# ps aux --sort=-%cpu #按CPU占用降序排序
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.5 166340 11784 ? Ss Jul21 0:02 /sbin/init
root 2 0.0 0.0 0 0 ? S Jul21 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Jul21 0:00 [rcu_gp]
root@master:~# ps -T -p 17190 # 查看PID=17190 的線程PID SPID TTY TIME CMD17190 17190 ? 00:00:00 kworker/u4:2-flush-8:0
root@master:~# ps -e u #混合使用選項,顯示所有進程,BSD 風格的 `u` 格式
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.5 166340 11784 ? Ss Jul21 0:02 /sbin/init
root 2 0.0 0.0 0 0 ? S Jul21 0:00 [kthreadd]
root@master:~# ps -f -u root # 使用`-f`(完整格式)和`-u`(用戶過濾)
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jul21 ? 00:00:02 /sbin/init
root 2 0 0 Jul21 ? 00:00:00 [kthreadd]
root@master:~# ps -f --forest #樹狀結構顯示當前窗口進程
UID PID PPID C STIME TTY TIME CMD
root 17333 17332 0 09:48 pts/1 00:00:00 sudo su
root 17334 17333 0 09:48 pts/1 00:00:00 \_ su
root 17335 17334 0 09:48 pts/1 00:00:00 \_ bash
root 17370 17335 0 10:10 pts/1 00:00:00 \_ ps -f --forest
root@master:~# ps -A -ostat,ppid | grep -e '[Zz]' #查找僵尸進程及其父進程,如有需要可以kill查找到進程
2、top
(1)、命令簡介
top 是 Linux 系統中一個 實時動態 查看系統進程和資源占用情況的命令行工具,比 ps 更直觀,適合監控系統運行狀態。
(2)、命令選項清單
#命令行參數(啟動時指定選項)
參數 說明
top -d 2 設置刷新間隔為 2 秒(默認 3 秒)
top -p 1234,5678 僅監控指定 PID(多個 PID 用 , 分隔)
top -u mysql 僅顯示指定用戶(如 mysql)的進程
top -b -n 3 > top.log 以批處理模式運行 3 次后退出,結果保存到文件
top -H -p 1234 顯示某個進程的所有線程(配合 -p 使用)
#交互式操作常用快捷鍵
快捷鍵 功能
q 退出 top
k 殺死進程(輸入 PID 后發送信號,默認 SIGTERM)
r 調整進程優先級(renice,輸入 PID 和新的 NI 值)
h 顯示幫助
Shift + P 按 CPU 使用率 排序(默認)
Shift + M 按 內存使用率 排序
Shift + T 按 運行時間 排序
Shift + N 按 PID 排序
1 顯示所有 CPU 核心的單獨使用率
z 切換彩色/黑白顯示
c 顯示完整命令(包括參數)
W 保存當前配置到 ~/.toprc(下次啟動生效)
(3)、常用命令示例
root@master:~# top #直接輸入top進入交互界面
top - 10:18:06 up 1 day, 21:06, 3 users, load average: 0.00, 0.00, 0.00
Tasks: 183 total, 1 running, 182 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1963.1 total, 110.4 free, 292.4 used, 1560.3 buff/cache
MiB Swap: 2048.0 total, 2047.5 free, 0.5 used. 1477.5 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 166340 11784 8356 S 0.0 0.6 0:02.22 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
#第1行:系統運行時間、用戶數、平均負載(1/5/15 分鐘)。
#第2行:任務狀態(運行、睡眠、停止、僵尸進程)。
#第3行:CPU 使用率(us=用戶空間, sy=內核, id=空閑)。
#第4行:內存使用(total/free/used/buffers)。
#第5行:交換分區(Swap)使用情況。
#進程列表:
#PID:進程 ID
#USER:運行用戶
#%CPU:CPU 占用率
#%MEM:內存占用率
#COMMAND:進程名#部分操作場景
#1、查找當前占用最高CPU最多的進程
運行 top。
按 Shift + P(按 CPU 排序)。
觀察最上方的進程#2、查看當前CPU各核心占用
運行 top。
按 1,可以看到個核心使用率。
top - 10:22:23 up 1 day, 21:11, 3 users, load average: 0.00, 0.00, 0.00
Tasks: 182 total, 1 running, 181 sleeping, 0 stopped, 0 zombie
%Cpu0 : 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
3、kill
(1)、命令簡介
kill 是 Linux/Unix 系統中用于 終止進程 的命令,它通過發送特定的 信號(Signal) 來控制進程的行為(如結束、重啟、暫停等)。
(2)、命令選項清單
#命令語法:kill [-s sigspec | -n signum | -sigspec] pid | jobspec ...kill -l [sigspec]
#語法說明:
pid|jobspec:(
1)pid:進程 ID(如 kill 1234 發送 SIGTERM 給 PID 1234)。(2)jobspec:作業 ID(如 kill %1 發送 SIGTERM 給作業 1,僅限 shell 內置命令支持)。
-s sigspec / -n signum / -sigspec:
指定信號,可以是信號名稱(如 -s SIGKILL)、信號編號(如 -n 9)或直接寫信號名/編號(如 -9 或 -SIGKILL)。
-l / -L:
列出所有支持的信號名稱。可搭配參數查詢特定編號對應的信號名(如 kill -l 9 輸出 KILL)。命令選項 說明
-s sig 使用信號名稱(如 -s SIGINT)。
-n sig 使用信號編號(如 -n 2 等價于 SIGINT)。
-l [sigspec] 列出信號名稱(無參數時列出全部,有參數時翻譯編號,如 kill -l 9)。
-L 同 -l(兼容性選項)。
信號編號說明:
#信號編號 信號名 作用 示例
1 SIGHUP 掛起(重新加載配置) kill -1 1234
2 SIGINT 中斷(等同 Ctrl+C) kill -2 1234
9 SIGKILL 強制終止(不可被捕獲) kill -9 1234
15 SIGTERM 默認終止(允許進程清理) kill -15 1234
18 SIGCONT 繼續運行已暫停的進程 kill -18 1234
19 SIGSTOP 暫停進程(不可被捕獲) kill -19 1234
#全部標準信號
kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
#說明
常見標準信號(1-31)
SIGHUP (1):終端掛起或控制進程終止。常用于通知守護進程重新加載配置。
SIGINT (2):鍵盤中斷(如 Ctrl+C),請求終止進程。
SIGQUIT (3):鍵盤退出(如 Ctrl+\),請求終止并生成核心轉儲。
SIGILL (4):非法指令,通常因執行無效的機器指令觸發。
SIGTRAP (5):調試陷阱,由調試器使用(如斷點)。
SIGABRT (6):調用 abort() 觸發的異常終止。
SIGBUS (7):總線錯誤(非法內存訪問,如未對齊訪問)。
SIGFPE (8):算術錯誤(如除以零)。
SIGKILL (9):強制終止信號(不可捕獲或忽略)。
SIGUSR1 (10):用戶自定義信號 1。
SIGSEGV (11):段錯誤(無效內存訪問)。
SIGUSR2 (12):用戶自定義信號 2。
SIGPIPE (13):管道破裂(寫入無讀端的管道)。
SIGALRM (14):定時器超時(由 alarm() 設置)。
SIGTERM (15):終止請求(可捕獲,優雅退出)。
SIGSTKFLT (16):協處理器棧錯誤(已廢棄)。
SIGCHLD (17):子進程狀態改變(終止或停止)。
SIGCONT (18):恢復已停止的進程(不可忽略)。
SIGSTOP (19):停止進程的執行(不可捕獲或忽略)。
SIGTSTP (20):終端停止請求(如 Ctrl+Z)。
SIGTTIN (21):后臺進程嘗試讀取終端。
SIGTTOU (22):后臺進程嘗試寫入終端。
SIGURG (23):緊急數據(如帶外數據到達套接字)。
SIGXCPU (24):CPU 時間超限。
SIGXFSZ (25):文件大小超限。
SIGVTALRM (26):虛擬定時器超時。
SIGPROF (27):性能分析定時器超時。
SIGWINCH (28):終端窗口大小改變。
SIGIO (29):異步 I/O 事件(文件描述符就緒)。
SIGPWR (30):電源故障(UPS 電池低電量)。
SIGSYS (31):無效的系統調用。
實時信號(34-64)
SIGRTMIN 到 SIGRTMAX:實時信號(優先級高于標準信號),編號范圍因系統而異(通常 34-64)。
特點:
支持排隊(同一信號多次觸發不會丟失)。
可通過 sigqueue() 發送附加數據。
常用于高可靠性應用(如實時調度)。
(3)、常用命令示例
root@master:/data# ps -ef | grep test
root 17981 17335 0 12:34 pts/1 00:00:00 sh test.sh
root 17984 17335 0 12:34 pts/1 00:00:00 grep --color=auto test
root@master:/data# kill 17981 #根據進程pid停止程序(不加信號參數,默認是kill -15,等待程序執行完成退出)
root@master:/data# ps -ef | grep test
root 17988 17335 0 12:34 pts/1 00:00:00 grep --color=auto test
root@master:/data# kill -19 17989 #暫停進程
root@master:/data# [1]+ Stopped nohup sh test.sh
root@master:/data# ps -f | grep 17989
root 17989 17335 0 12:35 pts/1 00:00:00 sh test.sh
root 18024 17989 0 12:38 pts/1 00:00:00 [sleep] <defunct>
root 18035 17335 0 12:39 pts/1 00:00:00 grep --color=auto 17989
root@master:/data# kill -18 17989 #恢復進程
root@master:/data# ps -f | grep 17989
root 17989 17335 0 12:35 pts/1 00:00:00 sh test.sh
root 18036 17989 0 12:39 pts/1 00:00:00 sleep 10
root 18038 17335 0 12:39 pts/1 00:00:00 grep --color=auto 17989
root@master:/data# kill -9 17989 #強制結束進程
root@master:/data# ps -f | grep 17989
root 18048 17335 0 12:40 pts/1 00:00:00 grep --color=auto 17989
[1]+ Killed nohup sh test.sh
4、pkill
(1)、命令簡介
pkill 是 Linux 系統中用于 通過進程名或其他屬性終止進程 的命令,相比 kill(需要手動指定 PID),它可以直接按名稱匹配進程并發送信號,更加高效。
(2)、命令選項清單
#命令語法:pkill [選項] <模式>
#模式:可以是進程名、用戶、終端等(支持正則表達式)。
#默認信號:SIGTERM(15),類似 kill。
#選項 說明
-<信號> 指定發送的信號(如 -9 強制終止)
-u <用戶> 終止指定用戶的進程
-f 匹配完整的命令行(而不僅是進程名)
-x 精確匹配進程名(避免誤殺)
-n 只終止最新(最新啟動)的匹配進程
-o 只終止最舊(最早啟動)的匹配進程
-t <終端> 終止指定終端關聯的進程
(3)、常用命令示例
root@master:/data# ps -ef | grep nginx #查看nginx進程
root 18811 1 0 12:56 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 18814 18811 0 12:56 ? 00:00:00 nginx: worker process
www-data 18815 18811 0 12:56 ? 00:00:00 nginx: worker process
root 18953 18072 0 12:57 pts/3 00:00:00 grep --color=auto nginx
root@master:/data# pkill nginx #根據關鍵字,殺死名為nginx進程
root@master:/data# ps -ef | grep nginx
root 18958 18072 0 12:57 pts/3 00:00:00 grep --color=auto nginx
root@master:~# ps -ef | grep "www-data" #查看www-data用戶啟動進程
www-data 19104 18963 0 12:59 ? 00:00:00 nginx: worker process
www-data 19105 18963 0 12:59 ? 00:00:00 nginx: worker process
root 19113 19090 0 12:59 pts/1 00:00:00 grep --color=auto www-data
root@master:~# pkill -u www-data -9 #強制殺死www-data用戶啟動進程
root@master:~# ps -ef | grep "www-data" #可以看到www-data用戶啟動進程被重新拉起
www-data 19115 18963 0 13:00 ? 00:00:00 nginx: worker process
www-data 19116 18963 0 13:00 ? 00:00:00 nginx: worker process
root 19118 19090 0 13:00 pts/1 00:00:00 grep --color=auto www-data
#其他部分場景命令示例:
pkill -x "bash" # 僅終止進程名嚴格等于 "bash" 的進程
pkill -f "python3 app.py" # 終止命令行包含 "python3 app.py" 的進程
pkill -n chrome # 終止最近啟動的 "chrome" 進程
pkill -o mysql # 終止最早啟動的 "mysql" 進程
pkill -t pts/1 # 終止終端 pts/1 上的所有進程
5、bg/fg
(1)、命令簡介
bg 和 fg 是 Linux/Unix 系統中用于控制 后臺(Background) 和 前臺(Foreground) 作業(Jobs)的命令,常用于管理正在運行或暫停的任務。
(2)、命令選項清單
#命令語法:bg [%作業號]
#命令語法:fg [%作業號]
(3)、常用命令示例
root@master:~# ping 192.168.0.118
PING 192.168.0.118 (192.168.0.118) 56(84) bytes of data.
64 bytes from 192.168.0.118: icmp_seq=1 ttl=64 time=0.290 ms
64 bytes from 192.168.0.118: icmp_seq=2 ttl=64 time=0.130 ms
^Z #ctrl+z掛起進程
[1]+ Stopped ping 192.168.0.118
root@master:~# jobs #查看當前作業
[1]+ Stopped ping 192.168.0.118
root@master:~# bg 1 #恢復編號為1的作業,并在后臺運行
[1]+ ping 192.168.0.118 &
root@master:~# 64 bytes from 192.168.0.118: icmp_seq=3 ttl=64 time=0.194 ms
64 bytes from 192.168.0.118: icmp_seq=4 ttl=64 time=0.136 ms
64 bytes from 192.168.0.118: icmp_seq=5 ttl=64 time=0.110 ms
64 bytes from 192.168.0.118: icmp_seq=6 ttl=64 time=0.102 ms
64 bytes from 192.168.0.118: icmp_seq=7 ttl=64 time=0.124 ms
64 bytes from 192.168.0.118: icmp_seq=25 ttl=64 time=0.101 ms
64 bytes from 192.168.0.118: icmp_seq=26 ttl=64 time=0.108 ms
^C #手動執行crtl+c強制終止
root@master:~# 64 bytes from 192.168.0.118: icmp_seq=27 ttl=64 time=0.157 ms #命令繼續執行
64 bytes from 192.168.0.118: icmp_seq=28 ttl=64 time=0.145 ms
64 bytes from 192.168.0.118: icmp_seq=29 ttl=64 time=0.103 msroot@master:~# ping 192.168.0.118
PING 192.168.0.118 (192.168.0.118) 56(84) bytes of data.
64 bytes from 192.168.0.118: icmp_seq=1 ttl=64 time=0.173 ms
64 bytes from 192.168.0.118: icmp_seq=2 ttl=64 time=0.121 ms
^Z #ctrl+z掛起進程
[1]+ Stopped ping 192.168.0.118
root@master:~# jobs #查看當前作業
[1]+ Stopped ping 192.168.0.118
root@master:~# fg 1 #恢復編號為1的作業,恢復前臺運行
ping 192.168.0.118
64 bytes from 192.168.0.118: icmp_seq=3 ttl=64 time=0.140 ms
64 bytes from 192.168.0.118: icmp_seq=4 ttl=64 time=0.102 ms
64 bytes from 192.168.0.118: icmp_seq=5 ttl=64 time=0.142 ms
64 bytes from 192.168.0.118: icmp_seq=6 ttl=64 time=0.147 ms
^C ##手動執行crtl+c強制終止
--- 192.168.0.118 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 14426ms
rtt min/avg/max/mdev = 0.102/0.137/0.173/0.022 ms #命令執行結束
root@master:~#