Linux系統之常用命令


〇、最重要的事兒

  1. [命令] --help
  2. man [命令]

環境:CentOS7X64(CentOS Linux release 7.5.1804)

一、CPU相關命令

1、top命令

描述:display Linux processes.

操作:控制鍵

  • P:以CPU使用百分比排序
  • M:以內存使用百分比排序
  • T:以累積占用CUP時間排序
  • q:退出top

字段:常關注行和列的含義

  1. 第1部分(同uptime命令內容)
    • 22:59:39:機器時間

    • up 12 days, 23:39:機器持續運行時間

    • 1 user:在線用戶數量

    • load average: 0.00, 0.01, 0.05:系統負載,三個數值依次為1min、5min、15min前到現在的平均負載

      更詳細,使用cat /proc/loadavg
      0.00, 0.01, 0.05:三個數值依次為1min、5min、15min前到現在的平均負載
      3/113:其中的3代表此時運行隊列中的進程個數,而113則代表此時的進程總數量
      2580:最后創建的一個進程ID

      系統負載分析,詳見Linux系統之運行狀態分析及問題排查思路:CPU分析。

  2. 第2部分:進程狀態及數量,詳細見Linux系統之進程狀態ps命令
    • Tasks:113 total:總進程(任務)數
    • 3 running:運行的進程(任務)數,狀態碼R
    • 110 sleeping:睡眠的進程(任務)數,狀態碼S或D
    • 0 stopped:停止的進程(任務)數,狀態碼T或t
    • 0 zombie:僵死的進程(任務)數,狀態碼Z
  3. 第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分析。

  1. 第4部分:內存消耗情況,見free命令
  2. 第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信息

  1. 查看物理CPU個數:cat /proc/cpuinfo | grep "physical id" | uniq | wc -l
  2. 查看每個物理CPU中core的個數(即核數):cat /proc/cpuinfo | grep "cpu cores" | uniq
  3. 查看邏輯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

字段:常關注行和列的含義

  1. avg-cpu:CPU相關,不解釋
  2. 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高的進程

擴展:找出具體文件的讀寫情況

  • 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查表

命令

  1. tcpdump host 10.253.8.222 -> 監聽本機和指定主機的通信
  2. tcpdump host ! 10.253.8.222 -> 監聽本機和指定主機之外的其他主機的通信
  3. tcpdump host 10.253.8.222 and 10.37.18.28 -> 監聽特定主機之間的通信
  4. tcpdump host 10.253.8.222 and ! 10.37.18.28 -> 監聽10.253.8.222和除10.37.18.28之外主機的通信
  5. tcpdump port 28051 and host 10.253.8.222 -> 監聽本機和指定主機在特定端口上的通信
  6. tcpdump port ! 28051 and host 10.253.8.222 -> 監聽本機和指定主機在非特定端口上的通信
  7. tcpdump tcp port 28051 and host 10.253.8.222 -> 監聽本機和指定主機在特定端口上的tcp通信
  8. tcpdump tcp -s 0 -c 1000 -n -w /tmp/tcpdump_save.cap and port 28051

分析:詳見Linux系統之運行狀態分析及問題排查思路:網絡分析。

五、系統相關命令

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;
,:散列數字;
示例:0,30 23-6/2 * * * /usr/local/start.sh -> 每天晚上23點-早上6點,沒兩個小時的0分和30分執行依次/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命令

描述:在不通主機間復制文件或目錄

參數:常用的參數

  • -r:遞歸處理,將指定目錄下的文件與子目錄一並處理
  • -f:強行復制文件或目錄,不論目標文件或目錄是否已存在

命令

  • scp文件:scp /usr/local/soft/xx.tar.gz root@10.10.10.1:/usr/local/soft
  • scp目錄:scp -r /usr/local root@10.10.10.1:/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

操作

  1. 模式轉換
    • 命令模式->輸入模式
      • i :在光標前
      • I :在當前行首
      • a:光標后
      • A:在當前行尾
      • o:在當前行之下新開一行
      • O:在當前行之上新開一行
    • 輸入模式->命令模式:Esc
    • 命令模式->末行模式::
    • 末行模式->命令模式:Esc Esc
  2. 命令模式
    • 移動光標
      • 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
  3. 末行模式
    • 替換
      • :%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:永久設置行號
  4. 輸入模式
    輸入中…

七、其他常用命令

1、vmstat大命令

描述:用來查看系統的運行狀況及系統資源的使用情況

字段:常關注行和列的含義

  1. procs - 對應top命令
    • r:The number of processes waiting for run time(R狀態的進程數量)
    • b:The number of processes in uninterruptible sleep(D狀態的進程數量)
  2. 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
  3. swap - 對應free命令
    • si:Amount of memory swapped in from disk (/s);
    • so:Amount of memory swapped to disk (/s);
  4. io - 對應iostat命令
    • bi:Blocks received from a block device (blocks/s),塊設備每秒接收的塊數量,簡單粗暴地理解為OutputStream;
    • bo:Blocks sent to a block device (blocks/s),塊設備每秒發送的塊數量,簡單粗暴地理解為InputStream;
  5. system - 對應top命令
    • in:The number of interrupts per second, including the clock;
    • cs:The number of context switches per second,每秒上下文切換次數,這個值要越小越好,太大了,要考慮減少線程或者進程的數目,上下文切換次數過多表示CPU大部分浪費在上下文切換,導 致CPU干正經事的時間少了,CPU沒有充分利用,不可取;
  6. 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

字段:常關注行和列的含義

  1. 統計CPU
    • PID:進程id
    • %usr:進程在用戶空間占用cpu的百分比
    • %system:進程在內核空間占用cpu的百分比
    • %guest:任務在虛擬機中花費的CPU百分比
    • %CPU:進程占用cpu的百分比
    • CPU:處理進程的cpu編號
    • Command:命令
  2. 統計內存
    • PID:進程id
    • 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:內存使用比率
    • Command:命令
  3. 統計IO
    • PID:進程id
    • kB_rd/s:每秒讀取磁盤的KB
    • kB_wr/s:每秒寫入磁盤的KB
    • kB_ccwr/s:任務取消的寫入磁盤的KB,當任務截斷臟的pagecache的時候會發生
    • Command:命令

命令

  • pidstat -u 1 [-p <pid>]
  • pidstat -r 1 [-p <pid>]
  • pidstat -d 1 [-p <pid>]
  • pidstat -w 1 [-p <pid>]:查看上下文切換

八、最后但很重要

  1. 一個w3cschool的Linux教程
  2. 這些命令,知道就行,用到就是查,不用刻意去記,特別是參數項(簡單的用 [命令] --help,復雜的用 man [命令])!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM