Linux 常用命令:系統狀態篇
前言
Linux常用命令中,有些命令可以用於檢視系統的狀態,通過了解系統當前的狀態,能夠幫助我們更好地維護系統或定位問題。本文就簡單介紹一下這些命令。
1. 檢視系統執行時間--uptime
有時候我們想知道系統上一次復位是在什麼時候或者系統已經運行了多長時間,我們可以通過uptime命令獲取這些資訊:
uptime
20:47:06 up 50 min, 1 user, load average: 0.75, 0.84, 0.93
從左往右顯示的資訊依次為:當前時間、已執行時間、使用者登入數、1分鐘、5分鐘和15分鐘內系統的平均負載。
2. 檢視系統已登入使用者--who
who -a hyb tty7 2018-09-30 19:57 (:0)
通過who命令可以檢視到哪些使用者通過哪個ip登入到了這臺主機。
3. 檢視系統版本相關資訊--uname
例如:
uname -a
Linux ubuntu16.04 4.15.0-34-generic #37~16.04.1-Ubuntu SMP Tue Aug 28 10:44:06 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
從結果可以看到作業系統版本(ubuntu16.04),CPU型別(x86_64)等資訊
4. 檢視當前環境變數--export
環境變數影響著程式的執行,因此有時候需要檢視當前環境的環境變數:export
5. 檢視目錄和檔案佔用空間--du
du命令直接顯示當前目錄下每個目錄及其檔案佔用空間。結合--max-depth引數可以指定顯示的目錄層級。
例如,如果只想顯示當前目錄下各個目錄所佔總空間,可以使用:
du -h --max-depth=1 19M ./python 9.0M ./git 321M ./hexo 17M ./lua 28K ./vim 1.4M ./shell 81M ./redis 316M ./books 48M ./c 810M . du -sh #僅統計當前目錄總大小 810M
其中-h表示以易讀的單位顯示大小,即M,--max-depth=1表明目錄層級。通過命令結果,我們可以看到當前目錄下各個子目錄佔用空間大小,以及總空間大小。
6. 檢視各掛載點空間--df
例如:
df -h
檔案系統 容量 已用 可用 已用% 掛載點
udev 3.9G 0 3.9G 0% /dev
tmpfs 786M 9.5M 776M 2% /run
/dev/sda10 24G 9.8G 13G 45% /
tmpfs 3.9G 43M 3.8G 2% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda11 454M 274M 153M 65% /boot
/dev/sda15 55G 5.2G 47G 10% /home
/dev/sda1 256M 31M 226M 12% /boot/efi
/dev/sda14 4.6G 9.9M 4.4G 1% /tmp
tmpfs 786M 60K 786M 1% /run/user/1000
從結果中,我們可以看到各個掛載點總空間以及可用空間。當磁碟檔案佔用空間較大時,可能導致系統執行緩慢,因此,可根據該結果進行相應的磁碟清理。
7. 檢視記憶體可用情況--free
free命令可用於顯示系統中可用的實體記憶體,交換區記憶體以及核心使用的buffer:
free -h
total used free shared buff/cache available
Mem: 7.7G 2.3G 2.6G 268M 2.8G 4.7G
Swap: 7.6G 0B 7.6G
從執行結果可以看到已用記憶體和空閒記憶體的情況。同樣地,當記憶體不足時,可能導致程式執行異常或系統卡頓。
8. 檢視程序的記憶體使用情況--pmap
pmap命令用於檢視程序記憶體相關資訊:
pmap pid #pid為程序id,可通過ps命令獲取
6030: ./main
0000000000400000 4K r-x-- main
0000000000600000 4K r---- main
0000000000601000 4K rw--- main
00000000017d2000 132K rw--- [ anon ]
00007fc3843e8000 1792K r-x-- libc-2.23.so
00007fc3845a8000 2048K ----- libc-2.23.so
00007fc3847a8000 16K r---- libc-2.23.so
00007fc3847ac000 8K rw--- libc-2.23.so
00007fc3847ae000 16K rw--- [ anon ]
00007fc3847b2000 152K r-x-- ld-2.23.so
00007fc3849b9000 12K rw--- [ anon ]
00007fc3849d7000 4K r---- ld-2.23.so
00007fc3849d8000 4K rw--- ld-2.23.so
00007fc3849d9000 4K rw--- [ anon ]
00007ffcf2018000 132K rw--- [ stack ]
00007ffcf2175000 12K r---- [ anon ]
00007ffcf2178000 8K r-x-- [ anon ]
ffffffffff600000 4K r-x-- [ anon ]
total 4356K
我們可以根據程序各部分佔用空間情況,來不斷優化我們的程式。
9. 檢視虛擬記憶體統計資訊--vmstat
vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 2214960 407828 2572148 0 0 126 57 377 1006 8 2 88 2 0
vmstat的輸出值能夠幫助我們瞭解當前系統的效能。比如說,如果si(每秒從交換區寫到記憶體的大小)和so(每秒寫入交換區的記憶體大小)的值經常大於0,說明記憶體可能不夠用,因此才需要用到交換空間。再比如說,us(使用者程序執行時間百分比)的值比較高時,說明使用者程序消耗的CPU資源較多。而wa(IO等待時間百分比)值較高時,說明IO等待情況嚴重。
10. 檢視ip地址--ip
有時候使用ifconfig命令並不一定能夠看到所有的ip地址,因此可以使用:ip addr
11. 檢視網路連線狀態--netstat
netstat命令可以檢視網路連線狀態,通常用於診斷網路相關問題。例如檢視埠是否被佔用,連線是否已經釋放,服務是否在監聽等等。
12. 檢視程序間關係--pstree
通過pstree命令可以看到程序間的父子關係,它以樹形結構顯示這些資訊:
pstree
systemd─┬─ModemManager─┬─{gdbus}
│ └─{gmain}
├─NetworkManager─┬─dhclient
│ ├─dnsmasq
│ ├─{gdbus}
│ └─{gmain}
├─accounts-daemon─┬─{gdbus}
│ └─{gmain}
├─acpid
├─atd
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─colord─┬─{gdbus}
│ └─{gmain}
├─cron
├─cups-browsed─┬─{gdbus}
│ └─{gmain}
├─cupsd───3*[dbus]
├─dbus-daemon
├─gnome-keyring-d─┬─{gdbus}
│ ├─{gmain}
│ └─{timer}
(僅顯示部分內容)
總結
實際上,前面所提到的很多相關命令資訊都是從系統檔案中獲取的,例如/proc/meminfo儲存了記憶體相關資訊,/proc/net/dev儲存網路流量相關資訊。只是,它們都是靜態數值,但是我們可以結合watch命令來動態地觀察這些資訊,例如:
watch -n 1 cat /proc/meminfo
watch -n 1 cat /proc/net/dev
上面的命令表示,每隔一秒執行一次cat /proc/meminfo或cat /proc/net/dev,因此我們可以看到記憶體資訊或網絡卡流量資訊在實時重新整理。
本文僅介紹這些命令的經典使用,更多使用可通過man 命令檢視。通過前面這些系統自帶命令,我們可以比較方便地監控系統狀態,從而幫助我們維護系統或定位問題。歡迎留言補充或更正。
本文轉自Linux愛好者!