〇、最重要的事兒
- [指令] --help
- man [指令]
環境:CentOS7X64(CentOS Linux release 7.5.1804)
一、CPU相關指令
1、top指令
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLyEDNzYjNzAjMtgjN3kzMwMzNxMjMxETOxAjMtYzMxUTN58CXxETOxAjMvwlNzETN1kzLcd2bsJ2Lc12bj5ycn9Gbi52YugTMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
描述:display Linux processes.
操作:控制鍵
- P:以CPU使用百分比排序
- M:以記憶體使用百分比排序
- T:以累積占用CUP時間排序
- q:退出top
字段:常關注行和列的含義
- 第1部分(同uptime指令内容)
-
:機器時間22:59:39
-
:機器持續運作時間up 12 days, 23:39
-
:線上使用者數量1 user
-
:系統負載,三個數值依次為1min、5min、15min前到現在的平均負載load average: 0.00, 0.01, 0.05
更詳細,使用
:cat /proc/loadavg
:三個數值依次為1min、5min、15min前到現在的平均負載0.00, 0.01, 0.05
:其中的3代表此時運作隊列中的程序個數,而113則代表此時的程序總數量3/113
:最後建立的一個程序ID2580
系統負載分析,詳見Linux系統之運作狀态分析及問題排查思路:CPU分析。
-
- 第2部分:程序狀态及數量,詳細見Linux系統之程序狀态和ps指令
- Tasks:113 total:總程序(任務)數
- 3 running:運作的程序(任務)數,狀态碼R
- 110 sleeping:睡眠的程序(任務)數,狀态碼S或D
- 0 stopped:停止的程序(任務)數,狀态碼T或t
- 0 zombie:僵死的程序(任務)數,狀态碼Z
-
第3部分:CPU使用率
按1展示/關閉每個CPU或核的使用率
- 0.8 us:使用者空間占用CPU百分比
- 0.0 sy:核心空間占用CPU百分比
- 0.0 ni:使用者空間内變更過優先級的程序占用CPU百分比
- 99.2 id:CPU空閑率
- 0.0 wa:等待IO完成的CPU時間百分比
- 0.0 hi:硬中斷(Hardware Interrupts)占用的CPU百分比
- 0.0 si:軟中斷(Software Interrupts)占用的CPU百分比
- 0.0 st:被虛拟機偷走的CPU時間比率
CPU使用率分析,詳見Linux系統之運作狀态分析及問題排查思路:CPU分析。
- 第4部分:記憶體消耗情況,見free指令
- 第5部分:FIELDS / Columns
- PID:程序Id
- USER:啟動程序的使用者
- PR:程序優先級
- NI:負數代表高優先級,正數代表低優先級,零表示程序優先級在排程室不會被 調整
- VIRT:程序占用的虛拟記憶體(Virtual Memory Size (KiB),It includes all code, data and shared libraries plus pages that have been swapped out and pages),對應free指令的swap
- RES:程序占用的實體記憶體(Resident(固有的) Memory Size (KiB))
- SHR:程序使用的共享記憶體(Shared Memory Size (KiB)),對應free指令的shared
- S:程序狀态,見Linux系統之程序狀态
- %CPU:CPU使用率
- %MEM:記憶體使用率
- TIME+:占用CPU的時間
- COMMAND:程序啟動指令
指令:
- top
- top -c
- top -Hp <pid>:展示指定程序的子程序
x、檢視CPU資訊
- 檢視實體CPU個數:cat /proc/cpuinfo | grep "physical id" | uniq | wc -l
- 檢視每個實體CPU中core的個數(即核數):cat /proc/cpuinfo | grep "cpu cores" | uniq
- 檢視邏輯CPU的個數:cat /proc/cpuinfo | grep "processor" | wc -l
二、記憶體相關指令
1、free指令
描述:Display amount of free and used memory in the system.
參數:常用的參數
- -h, --human show human-readable output
- -t, --total show total for RAM + swap
- -s N, --seconds N repeat printing every N seconds
- -c N, --count N repeat printing N times, then exit
Mem:
- total:總記憶體
- used:使用記憶體
- free:空閑記憶體
- shared:多個程序的共享記憶體,一般不用
- buff/cache:緩存
- available:系統可用記憶體
buff/cache:緩存,是為了提高檔案讀寫性能,對應用程式來說,buff/cache 是等于可用的,當應用程式需要用到buff/cache記憶體的時候,buff/cache會很快地被釋放回收。
理論上(CentOS7之前,可用記憶體和已用記憶體需要自己算):
可用記憶體 = free + buff/cache
已用記憶體 = used - buff/cache
實際上(CentOS7之後,可用記憶體和已用記憶體直接給出了):
因為并不是所 有的buff/cache空間都可以被回收(比如共享記憶體段、tmpfs、ramfs等),是以CentOS7之後系統算好各種記憶體直接給出,簡單直覺。
Swap:
swap是存儲盤上的一塊自留地,作業系統可以在這裡暫存一些記憶體裡放不下的東西。系統可以設定(cat /proc/sys/vm/swappiness),剩餘記憶體比例多少時,就使用swap。使用swap是為了在系統記憶體不夠用的時候,防止系統崩潰。一般不要使用,會影響應用程式性能。因為swap使用的是虛拟記憶體(磁盤空間),相比記憶體慢了去了。當使用free檢視記憶體使用情況是,如果swap有用到,說明伺服器記憶體不夠了,需要更新或遷移應用等。
如果swap有用到,可以使用如下指令檢視各程序使用swap的情況:
for i in $(ls /proc | grep "^[0-9]" | awk '$0>100'); do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps;done| sort -k2nr | head
- free -h
- free -ht
- free -ht -s3 -c5
分析:詳見Linux系統之運作狀态分析及問題排查思路:記憶體分析。
三、磁盤相關指令
1、df指令
描述:檢視挂載磁盤的使用情況
- -h:以人們較易讀的容量格式 (G/M) 顯示;
- -T:列印檔案類型
- df -hT:檢視系統中所有挂載磁盤的使用請況
- df -hT /xx:檢視指定目錄下挂載磁盤的使用情況
2、du指令
描述:檢視檔案或目錄的大小
- m/-k:大小機關;
- h:以人們較易讀的容量格式 (G/M) 顯示;
- a:列出所有的檔案與目錄容量,預設隻列出目錄及其大小;
- s :列出總量而已,而不列出目錄下所有檔案或目錄;
- c:統計幾個檔案的大小之和;
- du -h /opt:列出opt目錄及其所有子目錄的大小;
- du -ha /opt:列出opt目錄及其所有子目錄和檔案的大小;
- du -sh /opt/*:列出opt目錄下所有直接目錄和檔案的大小;
- du -shc /opt/*:列出opt目錄下所有直接目錄和檔案的大小及其和;
- du -ma /opt/* | sort -rn | head -n 10:統計目前目錄下前10大的檔案和目錄;
3、iostat指令
描述:展示CPU和IO統計資訊
- h:Make the Device Utilization Report easier to read by a human
- x:Display extended statistics
- avg-cpu:CPU相關,不解釋
- Device:IO相關
- rrqm/s: 每秒進行 merge 的讀操作數目。即 rmerge/s
- wrqm/s: 每秒進行 merge 的寫操作數目。即 wmerge/s
- r/s: 每秒完成的讀 I/O 裝置次數。即 rio/s
- w/s: 每秒完成的寫 I/O 裝置次數。即 wio/s
- rsec/s: 每秒讀扇區數。即 rsect/s
- wsec/s: 每秒寫扇區數。即 wsect/s
- rkB/s: 每秒讀K位元組數。是 rsect/s 的一半,因為每扇區大小為512位元組。
- wkB/s: 每秒寫K位元組數。是 wsect/s 的一半。
- avgrq-sz: 平均每次裝置I/O操作的資料大小 (扇區)。
- avgqu-sz: 平均I/O隊列長度。
- await: 平均每次裝置I/O操作的等待時間 (毫秒)。
- svctm: 平均每次裝置I/O操作的服務時間 (毫秒)。
- %util: 一秒中有百分之多少的時間用于 I/O 操作,即被io消耗的cpu百分比
擴充:找出IO高的程序
- pidstat指令
- 用iotop,類似top
擴充:找出具體檔案的讀寫情況
- lsof -p <pid>
指令:iostat -hx 3
分析:詳見Linux系統之運作狀态分析及問題排查思路:I/O分析。
四、網絡相關指令
1、netstat指令
描述:列印網絡連接配接、路由表、接口統計資訊、僞裝連接配接和多點傳播成員資格
參數:一般 netstat --help 就夠了
- Proto:協定(tcp, udp, udpl, raw)
- Recv-Q:Established:The count of bytes not copied by the user program connected to this socket. Listening:Since Kernel 2.6.18 this column contains the current syn backlog.
- Send-Q:Established:The count of bytes not acknowledged by the remote host. Listening:Since Kernel 2.6.18 this column contains the maximum size of the syn backlog.
- Local Address:本地IP+端口
- Foreign Address:對端IP+端口
- State:連接配接狀态,詳見Java網絡程式設計系列之TCP連接配接狀态
- PID/Program name:程序id/程式名稱
- netstat -naltup
- netstat -naltup | uniq | wc -l
- netstat -naltp | egrep 'LISTEN|ESTABLISHED|TIME_WAIT|CLOSE_WAIT' | awk '{print $6}'| sort | uniq -c | sort -rn
分析:詳見Linux系統之運作狀态分析及問題排查思路:網絡分析。
擴充:一個很相似的指令
ss
,效率更高,有取代netstat的趨勢,感興趣可以自行研究
ss的優勢在于它能夠顯示更多更詳細的有關TCP和連接配接狀态的資訊,而且比netstat更快速更高效:
1)當伺服器的socket連接配接數量變得非常大時,無論是使用netstat指令還是直接cat /proc/net/tcp,執行速度都會很慢。可能你不會有切身的感受,但請相信我,當伺服器維持的連接配接達到上萬個的時候,使用netstat等于浪費 生命,而用ss才是節省時間。
2)ss快的秘訣在于,它利用到了TCP協定棧中tcp_diag。tcp_diag是一個用于分析統計的子產品,可以獲得Linux 核心中第一手的資訊,這就確定了ss的快捷高效。當然,如果你的系統中沒有tcp_diag,ss也可以正常運作,隻是效率會變得稍慢。
2、tcpdump指令
描述:網絡抓包工具
參數:
- tcp:tcp、udp、icmp這些選項等都要放到第一個參數的位置,用來過濾資料報的類型
- -i eth1:隻抓經過eth1網卡的包
- -s 0:抓取資料包時預設抓取長度為68位元組。加上
後可以抓到完整的資料包-s 0
- -c 100:隻抓取100個資料包并自動退出
- -w /xx/target.cap:儲存成cap檔案,友善用ethereal(即wireshark)分析
- -n:不要将ip位址轉換為主機名,進而避免dns查表
- tcpdump host 10.253.8.222 -> 監聽本機和指定主機的通信
- tcpdump host ! 10.253.8.222 -> 監聽本機和指定主機之外的其他主機的通信
- tcpdump host 10.253.8.222 and 10.37.18.28 -> 監聽特定主機之間的通信
- tcpdump host 10.253.8.222 and ! 10.37.18.28 -> 監聽10.253.8.222和除10.37.18.28之外主機的通信
- tcpdump port 28051 and host 10.253.8.222 -> 監聽本機和指定主機在特定端口上的通信
- tcpdump port ! 28051 and host 10.253.8.222 -> 監聽本機和指定主機在非特定端口上的通信
- tcpdump tcp port 28051 and host 10.253.8.222 -> 監聽本機和指定主機在特定端口上的tcp通信
- tcpdump tcp -s 0 -c 1000 -n -w /tmp/tcpdump_save.cap and port 28051
五、系統相關指令
1、ps指令
描述:report a snapshot of the current processes.
參數:ps --help all,常用的參數
- -ef:To see every process on the system using standard syntax
- aux:To see every process on the system using BSD syntax
- -eo:To see every process with a user-defined format
- -mp:列出指定程序的子程序
- -L:顯示線程,可能使用LWP和NLWP列
- ps -ef | grep 'xx'
- ps aux | grep 'xx'
- ps au --sort -pcpu | more:檢視哪些程序的CPU占用率最高
- ps -eo stat,pid,user,%cpu,%mem,time,cmd:檢視程序狀态
- ps -eo stat,pid,user,%cpu,%mem,time,cmd | grep -e '^[R]':檢視運作中的程序狀态
- ps -eo stat,pid,user,%cpu,%mem,time,cmd,lwp -L | grep -e '^[R]':檢視運作中的程序+線程狀态
- ps au -L | grep R:檢視運作中的程序+線程狀态
- ps -mp <pid> -o stat,tid,user,%cpu,%mem,time,wchan | sort -rn:根據程序id檢視其線程狀态
- ps -Lp <pid> cu | more:檢視JAVA程序的每個線程的CPU占用率
- ps -efL | wc -l:列出機器總線程數
wchan:正在等待的程序資源
擴充:檢視程序的線程數
- pstree -p <pid> | wc -l
2、crontab指令
描述:maintains crontab files for individual users.
顧名思義,定時任務。
參數:crontab --help,常用的參數
- -u :define user,省略使用者表表示操作目前使用者的crontab
- -e:edit user's crontab,編輯使用者工作表
- -l:list user's crontab,列出使用者工作表裡的所有任務指令
- -r:delete user's crontab,删除使用者的工作表
crontab -e,編輯使用者工作表說明:
每行是一條任務指令,crontab的任務指令構成為:時間+動作。
其時間依次為
分、時、日、月、周
,操作符有:
*:取值範圍内的所有數字;
/:每過多少個數字;
-:從X到Y;
,:散列數字;
示例:
-> 每天晚上23點-早上6點,沒兩個小時的0分和30分執行依次
0,30 23-6/2 * * * /usr/local/start.sh
。
/usr/local/start.sh
- crontab -e:編輯目前使用者工作表
檢視crontab的執行日志: tail -200f /var/log/cron
3、檢視系統
指令:cat /etc/redhat-release
4、檢視核心
指令:uname -a 或 cat /proc/version
六、檔案相關指令
1、cp指令
描述:複制檔案或目錄
- -r:遞歸處理,将指定目錄下的檔案與子目錄一并處理
- -f:強行複制檔案或目錄,不論目标檔案或目錄是否已存在
- cp <檔案> <目标檔案>
- cp -r <目錄> <目标位置>
2、scp指令
描述:在不通主機間複制檔案或目錄
- scp檔案:scp /usr/local/soft/xx.tar.gz [email protected]:/usr/local/soft
- scp目錄:scp -r /usr/local [email protected]:/usr/local/
3、tar指令
描述:解壓縮工具
- -c:建立壓縮檔案
- -x:解壓
- -t:檢視内容
- -v:顯示所有過程
- -f: 使用檔案名字,切記,這個參數是最後一個參數,後面隻能接檔案名
- --exclude:排除指定檔案或目錄
-
壓縮:tar <參數> <檔案名> <壓縮目錄> --exclude <排除目錄> <壓縮檔案存放位置,預設目前目錄>
tar –cvf xx.tar /tmp/ --exclude /tmp/test.txt /opt/ -> 打包為tar包
tar –czvf xx.tar /tmp/ --exclude /tmp/test/ /opt/ -> 打包為tar.gz包
- 檢視:tar -tf xx.tar.gz
-
解壓
tar –xvf xx.tar -> 解壓tar包
tar -xzvf xx.tar.gz -> 解壓tar.gz
總結:
- *.tar 用 tar –xvf 解壓
- *.gz 用 gzip -d或者gunzip 解壓
- *.tar.gz和*.tgz 用 tar –xzf 解壓
- *.bz2 用 bzip2 -d或者用bunzip2 解壓
- *.tar.bz2用tar –xjf 解壓
- *.Z 用 uncompress 解壓
- *.tar.Z 用tar –xZf 解壓
x、vi/vim指令
描述:a programmers text editor.
指令:vi/vim fileName
操作:
- 模式轉換
- 指令模式->輸入模式
- i :在光标前
- I :在目前行首
- a:光标後
- A:在目前行尾
- o:在目前行之下新開一行
- O:在目前行之上新開一行
- 輸入模式->指令模式:Esc
- 指令模式->末行模式::
- 末行模式->指令模式:Esc Esc
- 指令模式->輸入模式
- 指令模式
- 移動光标
- w或W:光标右移一個字至字首
- b或B:光标左移一個字至字首
- H:光标移至螢幕頂行
- M:光标移至螢幕中間行
- L:光标移至螢幕最後行
- 翻屏
- Ctrl+u:向檔案首翻半屏
- Ctrl+d:向檔案尾翻半屏
- Ctrl+f:向檔案尾翻一屏
- Ctrl+b:向檔案首翻一屏
- gg:跳轉到文檔開頭
- G:跳轉到文檔結尾
- 删除
- x:删除光标所在字元
- d0:删除至行首
- d$:删除至行尾
- dd:删除一行
- ndd:删除目前行及其後n-1行 -> 3dd
- ndw/ndW:删除目前單詞及其後(前)的n-1個單詞
- 複制
- y0:複制至行首
- y$:複制至行尾
- yy:複制一行
- nyy:複制目前行及其後n-1行 -> 3yy
- nyw/nyW:複制目前單詞及其後(前)的n-1個單詞
- 粘貼
- p:若删除或複制内容為整行,則粘貼至光标所在行的下方;若删除或複制内容為非整行,則粘貼至光标所在字元的後面。
- P:若删除或複制内容為整行,則粘貼至光标所在行的上方;若删除或複制内容為非整行,則粘貼至光标所在字元的前面。
- 修改
- c0:修改至行首
- c$:修改至行尾
- cc:修改一行
- ncc:修改目前行及其後n-1行 -> 3cc
- ncw/ncW:修改目前單詞及其後(前)的n-1個單詞
- 替換
- r:替換目前字元 -> 先輸入r,再輸入替換字元
- R:替換目前字元及其後的字元,直至按ESC鍵
- 撤銷/恢複
- u:撤銷前一次操作
- ctrl+r:恢複撤銷
- 查找
- /内容:查找内容 -> n:下一個,N:上一個
- /noh:取消高亮顯示
- \c表示大小寫不敏感查找,\C表示大小寫敏感查找 -> /xx\C
- 移動光标
- 末行模式
-
- :%s/xx/yy/g:将文檔中的xx替換為yy,一次全部替換
- :%s/xx/yy/gc:将文檔中的xx替換為yy,逐個替換
- 😒/xx/yy/g:将目前行中所有xx均用yy替代,一次全部替換
- 😒/xx/yy/gc:将目前行中所有xx均用yy替代,逐個替換
- \c表示大小寫不敏感查找,\C表示大小寫敏感查找 -> :%s/xx\C/yy/g
- 設定行号
- :set nu/:set number:臨時設定行号
- vim /etc/vir[m]c -> 添加set nu或者set number:永久設定行号
-
-
輸入模式
輸入中…
七、其他常用指令
1、vmstat大指令
描述:用來檢視系統的運作狀況及系統資源的使用情況
- procs - 對應top指令
- r:The number of processes waiting for run time(R狀态的程序數量)
- b:The number of processes in uninterruptible sleep(D狀态的程序數量)
- memory - 對應free指令
- swpd:the amount of virtual memory used
- free:the amount of idle memory
- buff:the amount of memory used as buffers
- cache:the amount of memory used as cache
- swap - 對應free指令
- si:Amount of memory swapped in from disk (/s);
- so:Amount of memory swapped to disk (/s);
- io - 對應iostat指令
- bi:Blocks received from a block device (blocks/s),塊裝置每秒接收的塊數量,簡單粗暴地了解為OutputStream;
- bo:Blocks sent to a block device (blocks/s),塊裝置每秒發送的塊數量,簡單粗暴地了解為InputStream;
- system - 對應top指令
- in:The number of interrupts per second, including the clock;
- cs:The number of context switches per second,每秒上下文切換次數,這個值要越小越好,太大了,要考慮減少線程或者程序的數目,上下文切換次數過多表示CPU大部分浪費在上下文切換,導 緻CPU幹正經事的時間少了,CPU沒有充分利用,不可取;
- cpu - 對應top指令
- us:Time spent running non-kernel code (user time, including nice time),使用者CPU時間;
- sy:Time spent running kernel code (system time),系統CPU時間,如果太高,表示系統調用時間長,例如IO操作頻繁;
- id:Time spent idle, this includes IO-wait time,空閑 CPU時間,一般來說,id+us+sy=100;
- wa:Time spent waiting for IO, included in idle;
指令:vmstat 1 3
2、pidstat指令
描述:Report statistics for Linux tasks.
- -u:統計CPU
- -r:統計記憶體
- -d:統計IO
- -p:後跟程序id
- 統計CPU
- PID:程序id
- %usr:程序在使用者空間占用cpu的百分比
- %system:程序在核心空間占用cpu的百分比
- %guest:任務在虛拟機中花費的CPU百分比
- %CPU:程序占用cpu的百分比
- CPU:處理程序的cpu編号
- Command:指令
- 統計記憶體
- minflt/s:任務每秒發生的次要故障總數,這些故障不需從磁盤加載記憶體頁
- majflt/s:任務每秒發生的主要故障總數,這些故障需要從磁盤加載記憶體頁
- VSZ:虛拟記憶體使用大小(Virtual Size: The virtual memory usage of entire task in kilobytes)
- RSS:實體記憶體使用大小(Resident Set Size: The non-swapped physical memory used by the task in kilobytes)
- %MEM:記憶體使用比率
- 統計IO
- kB_rd/s:每秒讀取磁盤的KB
- kB_wr/s:每秒寫入磁盤的KB
- kB_ccwr/s:任務取消的寫入磁盤的KB,當任務截斷髒的pagecache的時候會發生
- pidstat -u 1 [-p <pid>]
- pidstat -r 1 [-p <pid>]
- pidstat -d 1 [-p <pid>]
- pidstat -w 1 [-p <pid>]:檢視上下文切換
八、最後但很重要
- 一個w3cschool的Linux教程;
- 這些指令,知道就行,用到就是查,不用刻意去記,特别是參數項(簡單的用 [指令] --help,複雜的用 man [指令])!
作者:尜尜人物