Linux經常使用命令中,有些命令能夠用於查看系統的狀態,經過了解系統當前的狀態,可以幫助咱們更好地維護系統或定位問題。本文就簡單介紹一下這些命令。python
有時候咱們想知道系統上一次復位是在何時或者系統已經運行了多長時間,咱們能夠經過uptime命令獲取這些信息:git
uptime 20:47:06 up 50 min, 1 user, load average: 0.75, 0.84, 0.93
從左往右顯示的信息依次爲:當前時間、已運行時間、用戶登陸數、1分鐘、5分鐘和15分鐘內系統的平均負載。redis
who -a hyb tty7 2018-09-30 19:57 (:0)
經過who命令能夠查看到哪些用戶經過哪一個ip登陸到了這臺主機。shell
例如:ubuntu
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)等信息vim
環境變量影響着程序的運行,所以有時候須要查看當前環境的環境變量:export
網絡
du命令直接顯示當前目錄下每一個目錄及其文件佔用空間。結合--max-depth參數能夠指定顯示的目錄層級。
例如,若是隻想顯示當前目錄下各個目錄所佔總空間,可使用:hexo
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代表目錄層級。經過命令結果,咱們能夠看到當前目錄下各個子目錄佔用空間大小,以及總空間大小。性能
例如:優化
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
從結果中,咱們能夠看到各個掛載點總空間以及可用空間。當磁盤文件佔用空間較大時,可能致使系統運行緩慢,所以,可根據該結果進行相應的磁盤清理。
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
從執行結果能夠看到已用內存和空閒內存的狀況。一樣地,當內存不足時,可能致使程序運行異常或系統卡頓。
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
咱們能夠根據進程各部分佔用空間狀況,來不斷優化咱們的程序。
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等待狀況嚴重。
有時候使用ifconfig命令並不必定可以看到全部的ip地址,所以可使用:ip addr
netstat命令能夠查看網絡鏈接狀態,一般用於診斷網絡相關問題。例如查看端口是否被佔用,鏈接是否已經釋放,服務是否在監聽等等。
經過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愛好者!