開發必備linux命令大全-穩賺不虧

我們的服務一般都是在linux系統運行,因此了解一些關於linux命令是必須。接下來將一一詳細介紹一些常用的linux的命令

  • 文件操作
  • 遠程登錄與操作
  • 磁碟掛載
  • 進程管理 啟動和結束
  • 系統性能參數查看
  • 網路數據抓取
  • shell 腳本命令
  • jvm 常用命令

關注公眾號,一起交流,微信搜一搜: 潛行前行

1 文件操作命令

find

  • find 用於在指定目錄下查找文件或子目錄,如果不指定查找目錄,則在當前目錄下查找
  • 命令格式:·find path -option [-print] [ -exec/-ok command {} \ ] ;
    • print: 將匹配的文件輸出到標準輸出
    • exec:對匹配的文件作為參數 讓 command 命令執行。{} 是匹配文件的佔位符
    • ok: 和 exec 的作用相同,但在執行命令之前,會給出提示,讓用戶來確定是否執行
常用的option 選項 | 描述
-mount     | 只檢查和指定目錄在同一個文件系統下的文件,避免列出其它文件系統中的文件
-amin n    | 在過去 n 分鐘內被讀取過
-atime n   | 在過去 n 天內被讀取過的文件
-cmin n    | 在過去 n 分鐘內被修改過
-ctime n   | 在過去n天內被修改過的文件
-gid n     | gid 是 n 文件。或 -group name, group 名稱是 name 的文件
-pid n     | pid 是 n 的文件
-ipath p   | 路徑名稱符合 p 的文件。或 -path p,ipath 會忽略大小寫
-name name | 文件名稱符合 name 的文件。或者-iname name,iname 會忽略大小寫
-size n    | 文件大小 是 n 單位,b 代表 512 位元組的區塊,c 表示字元數,k 表示 kilo bytes,w 是二個位元組
-type c    | 文件類型是c的文件。 d: 目錄;f: 一般文件;l: 符號連結;s: socket
  • find 示例
~~ 查找 /var/log 目錄中更改時間在 7 日以前的普通文件,並在刪除之前詢問它們
# find /var/log -type f -mtime +7 -ok rm {} \;

touch 和 vim

  • touch 可用於創建一個空文件,如果文件存在,則會更改文件的訪問時間和修改時間
  • touch 示例
~~ #創建一個名為「file」的新的空白文件,如果存在則會修改其時間屬性
# touch file             
  • vim Vim是從 vi 發展出來的一個文本編輯器,是在 linux 系統交互介面進行文件查看,編寫文本的首選工具

image.png

  • vim 共分為三種模式,分別是命令模式(Command mode),輸入模式(Insert mode)和底線命令模式(Last line mode)
1 命令模式:用戶 vim fileName,便進入了命令模式
    i         切換到輸入模式,以輸入字元
    :         冒號切換到底線命令模式
    /word     向游標之下尋找一個名稱為 word 的字元串
    ?word     向游標之上尋找一個字元串名稱為 word 的字元串
    n         重複前一個搜索(與 / 或 ? 有關)
    N         反向重複前一個搜索(與 / 或 ? 有關)
    PageUp    上翻頁
    PageDown  下翻頁
    G	      移動到這個檔案的最後一行(常用)
    nG	      n 為數字。移動到這個檔案的第 n 行
    
2 輸入模式: 在命令模式下按下i就進入了輸入模式; ESC 退出輸入模式,切換到命令模式
    字元按鍵、shift組合    輸入字元
    ENTER                 回車鍵,換行
    BACK SPACE            退格鍵,刪除游標前一個字元
    DEL                   刪除鍵,刪除游標後一個字元
    方向鍵                在文本中移動游標
    HOME/END              移動游標到行首/行尾
    Page Up/Page Down     上/下翻頁
    Insert                切換游標為輸入/替換模式,游標將變成豎線/下劃線

3 底線命令模式: 在命令模式下按下 ":" 就進入了底線命令模式; ESC退出模式,切換到命令模式
    :q                 退出 vim 程式
    :w                 保存文件
    :wq                保存後離開
    :!q                不保存退出
    :w [filename]      將編輯的數據儲存成另一個檔案
    :r [filename]      在編輯的數據中,讀入另一個檔案的數據。追加到游標所在行後面
    :!ShellCommand     暫時離開 vi 到指令行模式下執行 shellCommand 的顯示結果
    :%s/word1/word2/g  從第一行到最後一行尋找 word1 字元串,並將該字元串取代為 word2 
    :%s/word1/word2/gc 和 %s/word1/word2/g 功能一致,不過每次替換都需用戶確認  

less、cat、more、tail 和 head

  • less 是linux 必不可少的查看文件工具,功能極其強大
less [option] 文件
option 常用參數
-f 強制打開文件,二進位文件顯示時,不提示警告;
-i 搜索時忽略大小寫;除非搜索串中包含大寫字母;
-I 搜索時忽略大小寫,除非搜索串中包含小寫字母;
-m 顯示讀取文件的百分比;
-M 顯法讀取文件的百分比、行號及總行數;
-N 在每行前輸出行號;
-p pattern 搜索 pattern;比如在/etc/profile搜索單詞MAIL,就用 less -p MAIL /etc/profile
-s 把連續多個空白行作為一個空白行顯示;
  • less 文件後可進行的動作操作和 vim 在命令模式下的操作相似;less在查看文本時的常用動作命令如下
Enter      向下移動一行
y          向上移動一行
Space      向下滾動一屏
b          向上滾動一屏
d          向下滾動半屏
u          向上滾動半屏
g          跳到第一行
G          跳到最後一行
/pattern   向下搜索pattern ,比如 /MAIL 表示在文件中搜索MAIL單詞
?pattern   向上搜索pattern 
n          重複前一個搜索(與 / 有關)
N          反向重複前一個搜索(與 / 有關)
v          調用 vi 編輯器
q          退出 less
!command   調用 shell 命令;比如 !ls 顯示當前目錄下的所有文件
  • more 常用於顯示輸出的內容,然後根據窗口的大小進行分頁顯示,然後還能提示文件的百分比。命令格式:more 文件,more 常用操作指令如下
Enter        向下n行,需要定義,默認為1行;
Ctrl+f       向下滾動一屏
空格鍵        向下滾動一屏
Ctrl+b       返回上一屏
=            輸出當前行的行號
:f           輸出文件名和當前行的行號
v            當我們查看某一文件時,想調用vi來編輯它,用 v 動作指令
!command     調用 shell,並執行command命令
q            退出 more
  • cat 常用於連接文件並列印到標準輸出設備上,也可用於查看文件。格式: cat fileName [| command ] ,command 默認是 echo,cat會一次性顯示整個文件的內容,不分頁
  • head 是顯示一個文件的內容的前多少行;常用命令格式:head -n 行數值 文件名
  • tail 是顯示一個文件的內容的後多少行;常用命令格式:tail -n 行數值 文件名

grep、zgrep

  • grep 一般用於在文件中查和匹配模式匹配的每一行數據。命令格式 grep [options] 'pattern' [files];grep 支援處理管道的輸出數據; pattern 支援正則表達式;files 可以是多個文件,用空格分開
  • grep 無法在壓縮文件匹配查找數,此時可以用 zgrep,zgrep 適用處理壓縮後的gz等格式文件
options選項 | 功能描述
-i	|	忽略大小寫
-v	|	不匹配匹配的
-l	|	輸出匹配的文件名
-L	|	輸出不匹配的文件名
-c	|	輸出匹配的數目(行數)
-C num  |       輸出匹配的前後 num 條行數
-n	|	輸出匹配行的同時在前面加上文件名及在文件名中的行數
  • grep 和 zgrep 示例
~~ 輸出匹配 lwl 數據,及前後十行
# grep -C 10 'lwl' log.txt 

cp

  • 文件目錄複製可用使用 cp 命令。cp 格式:cp [選項參數] fileSource... fileTarget
cp 選項參數 | 描述
-a | 此選項通常在複製目錄時使用,它保留鏈接、文件屬性,並複製目錄下的所有內容
-r | 若給出的源文件是一個目錄文件,此時將複製該目錄下所有的子目錄和文件
-f | 覆蓋已經存在的目標文件而不給出提示。
-i | 與 -f 選項相反,在覆蓋目標文件之前給出提示,要求用戶確認是否覆蓋,回答 y 時目標文件將被覆蓋
-l | 不複製文件,只是生成鏈接文件
  • cp 示例
~~ 將當前目錄 csc/ 下的所有文件複製到新目錄 lwl 下
# cp –r csc/ lwl 

mv

  • mv 可用來移動文件夾、文件 或者 修改文件名、目錄名
option 參數 | 描述
-b | 當目標文件存在時,先進行備份再覆蓋
-f | 當目標文件存在時,強制覆蓋
-i | 默認選項,當目標文件存在時,提示是否覆蓋
-t | 先指定目標,再指定源目標。即目標 和 源目標 參數位置互換
  • mv 示例
~~ 把 csc.txt 修改名字為 lwl.txt
# mv csc.txt lwl.txt
~~ 將 csc 目錄下的文件移到 lwl 下
# mv csc/ lwl 

rm

  • rm 命令用於刪除一個文件或者目錄;命令格式 rm [options] fileName/filePath
option參數 | 描述
-i | 刪除前逐一詢問確認
-f | 即使原檔案屬性設置為只讀,也可強制刪除,無需確認
-r | 將目錄及以下之檔案亦逐一刪除
  • rm 示例
~~ 刪除文件名 test.txt
# rm  -rf   test.txt

mdkir

  • mdkir命令用於創建目錄, mkdir [-p] dirName; -p 確保目錄名稱存在,不存在的就建一個

tar 和 jar

  • tar 的命令格式:tar [-option] fileName/filePath;tar具有打包和壓縮功能,普通文件和文件夾可以被打包成 xxx.tar,如果要壓縮,則是在打包之後再壓縮,格式是 xxx.tar.gz
tar [-cxtzjvfpPN] 文件與目錄
常用參數:描述
-c :建立一個壓縮文件 
-x :解開一個壓縮文件
-t :查看tarfile 裡面的文件!特別注意,c/x/t 僅能存在一個,不可同時存在
-z :用 gzip 解壓縮
-j :用 bzip2 解壓縮
-v :壓縮的過程中顯示文件,這個常用,但不建議用
-f :使用檔名,在 f 之後要立即接檔名!例如使用『 tar -zcfv tfile sfile』就是錯誤的寫法,要寫成 『tar -zcvf tfile sfile』才對喔
-p :使用原文件的原來屬性(屬性不會依據使用者而變)
-P :(大寫P)使用絕對路徑來壓縮
-r : 新增文件到已存在的備份文件的結尾部分
-N :比後面接的日期(yyyy/mm/dd)還要新的才會被打包進新建的文件中
--exclude file :在壓縮的過程中,不要將 FILE 打包
  • tar 示例
~~ 打包不壓縮:/home/lwl 目錄
# tar -cvf lwl.tar /home/lwl
~~ 打包並壓縮:/home/lwl 目錄
# tar zcvf lwl.tar.gz /home/lwl
~~ 解壓 lwl.tar.gz
# tar zxvf lwl.tar.gz

~~ 壓縮 lwl.java 為 bz2 格式
# tar jcvf lwl.tar.bz2 lwl.java
~~ 解壓 lwl.tar.bz2
# tar jxvf lwl.tar.bz2

~~ 解壓部分文件 log2021.log
# tar -zxvf log.tar.gz log2021.log
  • jar 的命令格式:jar {c t x u f }[ v m e 0 M i ][-C 目錄] fileName;其中{ ctxu }這四個選項必須選其一。[ v f m e 0 M i ]是可選選項,文件名是必須的
jar {c t x u f }[ v m e 0 M i ][-C 目錄] fileName 
jar 的選項參數和 tar 差不多,如下

-c :創建一個jar包
-t :顯示jar中的內容列表
-x :解壓jar包
-u :添加文件到jar包中
-f :指定jar包的文件名
-v :生成詳細的報造,並輸出至標準設備
-m :指定manifest.mf文件.(manifest.mf 文件中可以對jar包及其中的內容作一些一設置)
-0 :產生jar包時不對其中的內容進行壓縮處理
-M :不產生所有文件的清單文件(Manifest.mf)。這個參數會忽略掉 -m 參數的設置
-i :為指定的jar文件創建索引文件
-C :表示轉到相應的目錄下執行jar命令,相當於cd到那個目錄,然後不帶-C執行jar命令
  • jar 示例
~~ 利用hello目錄創建 hello.jar 包,並顯示創建過程
# jar cvf hello.jar hello
~~ 往 jar 包添加文件,將 HelloWorld.java 添加到 hello.jar 包中
# jar uf hello.jar HelloWorld.java    
~~  解壓 hello.jar 至當前目錄
# jar xvf hello.jar  

chmod

  • chmod 是控制用戶對文件的許可權的命令, 命令格式: chmod [-cfvR] mode file
    1626575501(1).jpg
## -cfvR 參數解析
-c : 若該文件許可權確實已經更改,才顯示其更改動作
-f : 若該文件許可權無法被更改也不要顯示錯誤訊息
-v : 顯示許可權變更的詳細資料
-R : 對目前目錄下的所有文件與子目錄進行相同的許可權變更(即以遞歸的方式逐個變更)

## mode [ugoa][+-=][rwxX-] 參數解析
u 表示該文件的擁有者
g 表示與該文件的擁有者屬於同一個群體(group)者
o 表示其他以外的人
a 包扣 u g o
## [+-=]
+ 表示增加許可權
- 表示取消許可權
= 表示唯一設定許可權
## [rwxX-]
r 表示可讀取
w 表示可寫入
x 表示可執行
X 只有當文件為目錄文件,或者其他類型的用戶有可執行許可權時,才將文件許可權設置可執行
- 不具任何許可權
  • chmod 示例
# chmod ugo+r lwl.txt
# chmod ug+w,o-w csc.txt lwl.txt

ln

  • 命令格式:ln [options] [源文件或目錄] [目標文件或目錄];當我們需要在不同的目錄,用到相同的文件時,又不想浪費空間複製相同的文件,可以用ln 鏈接它,相當創建一個快捷圖標
options 參數 | 描述
-b | 刪除,覆蓋以前建立的鏈接
-d | 允許超級用戶製作目錄的硬鏈接
-f | 強制執行
-i | 交互模式,文件存在則提示用戶是否覆蓋
-n | 把符號鏈接視為一般目錄
-s | 軟鏈接(符號鏈接)
  • 軟鏈接: 以路徑的形式存在。類似於Windows作業系統中的快捷方式;可以對一個不存在的文件名進行鏈接;可以對目錄進行鏈接;軟鏈接可以 跨文件系統 ,硬鏈接不可以
  • 硬鏈接: 以文件副本的形式存在。但不佔用實際空間;不允許給目錄創建硬鏈接;硬鏈接只有在同一個文件系統中才能創建
  • ln 示例
~~ 給文件創建軟鏈接,log2021.log文件創建軟鏈接log2021,如果log2021.log丟失,log2021將失效
# ln -s log2021.log link2021

2 遠程登錄與操作

ssh

  • linux下的ssh服務是一個守護進程(demon),ssh 服務端的進程名為 sshd ,負責實時監聽客戶端的請求(默認22埠),包括公共秘鑰等交換等資訊。ssh的客戶端可以用 xShell,Securecrt, Mobaxterm等工具進行連接,也可以在 linux 命令窗口使用 ssh 命令連接 ssh 服務端
  • 命令格式:ssh [-p port] user@remoteIp 或者 ssh [-p port] user@remoteIp shellCommand ; 會提示輸入密碼
  • ssh示例
~~ 登錄 192.168.25.137 ,並執行 ls /backup/data
# ssh [email protected] ls /backup/data

sftp

  • 登錄sftp伺服器 sftp -oPort=23 user@remoteIp
~~ 上傳,第一個目錄是本機的, 第二個參數遠端的    
> put /etc/hosts /home/lwl   
~~ 下載,第一個目錄是遠端的, 第二個參數是本機的
> get /home/lwl /home/csc  

scp

  • 如果是涉及不同linux系統間的文件複製則用 scp, 格式: scp [options] fileSource fileTarget
options 選項參數 | 描述

-P | port:注意是大寫的P, port是指定數據傳輸用到的埠號
-p | 保留原文件的修改時間,小寫p,訪問時間和訪問許可權
-r | 遞歸複製整個目錄
-C | 允許壓縮。(將-C標誌傳遞給ssh,從而打開壓縮功能)
  • scp 示例
~~ 從本地複製到遠程 
~~ A 格式: scp localFile username@remoteIp:filePath; B 格式:scp localFile remoteIp:filePath 
~~ A 命令指定了用戶名,但命令執行後需要輸入密碼,B 格式則需要輸入用戶名和密碼
# scp -r /home/lwl/ [email protected]:/home/lwl/ 

~~ 從遠程複製到本地 
~~ 格式:scp remoteIp:filePath localFile
# scp -r www.csc.com:/home/lwl/ /home/lwl/

文件同步 rsync

  • 與其他文件傳輸工具(如 FTP 或 scp)不同,和 scp 功能類似。 rsync 的最大特點是會檢查發送方和接收方已有的文件
# rsync -r source destination

linux與客戶端的上傳下載命令:rz、sz

  • 用 ssh 管理 linux 伺服器時經常需要遠程與 win 本地之間交互文件。直接用SecureCRT自帶的上傳下載功能無疑是最方便的。上傳:rz、下載:sz
  • 在 window 上使用SecureCRT、XShell 軟體,用 rz、sz 進行上傳下載
~~ 上傳文件到linux;彈出SecureCRT上傳窗口,用SecureCRT來上傳
# rz    
~~ 下載文件到客戶端(window)
# sz filename

3 磁碟掛載

df

  • df 用於查看磁碟空間佔用情況:df [-options] [file]
options 參數解釋

-i                   顯示inode資訊
-h                   方便閱讀方式顯示
-k                   區塊為1024位元組
-m                   區塊為1048576位元組
-a                   全部文件系統列表
-T                   顯示文件系統類型
-t<文件系統類型>      只顯示選定文件系統的磁碟資訊
-x<文件系統類型>      不顯示選定文件系統的磁碟資訊
  • df 示例
# df -hT
文件系統          類型            容量  已用  可用 已用% 掛載點
devtmpfs          devtmpfs         63G     0   63G    0% /dev
tmpfs             tmpfs            63G     0   63G    0% /dev/shm
tmpfs             tmpfs            63G  4.1G   59G    7% /run
tmpfs             tmpfs            63G     0   63G    0% /sys/fs/cgroup

mount

  • mount 命令是經常會使用到的命令,它用於掛載Linux系統外的文件
命令格式:mount [-t vfstype] [-o options] device dir
1、-t vfstype 指定文件系統的類型,通常不必指定,mount 會自動選擇正確的類型
iso9660 : 光碟或光碟鏡像 
msdos   : DOS fat16文件系統 
vfat    : Windows 9x fat32文件系統
ntfs    : Windows NT ntfs文件系統
smbfs   : Mount Windows文件網路共享
nfs     :UNIX(LINUX) 文件網路共享

2、-o options 主要用來描述設備或檔案的掛接方式
loop      :用來把一個文件當成硬碟分區掛接上系統 
ro        :採用只讀方式掛接設備 
rw        :採用讀寫方式掛接設備 
iocharset :指定訪問文件系統所用字符集

3、device 要掛接(mount)的設備

4、dir設備在系統上的掛接點(mount point)
  • mount 示例
~~ 1 掛接U盤,/dev/sdd1 是 U 盤裡的磁碟分區
# mount -t vfat -o iocharset=cp936 /dev/sdd1 /mnt/usb

~~ 2 掛接Windows文件共享
~~ administrator 和 pldy123 是ip地址為10.140.133.23 windows電腦的一個用戶名和密碼,c$是這台電腦的一個磁碟共享
# mount -t smbfs -o username=administrator,password=pldy123 //10.140.133.23/c$ /mnt/samba

~~ 3 linux 掛接(mount)其他linux系統 NFS 共享 
/export/home/sunky 10.140.133.23(rw)  ~~ 在服務端 /etc/exports文件配置共享目錄
~~ 在服務端啟動 nfs 服務
/etc/rc.d/init.d/nfs start 啟動NFS服務 
/etc/rc.d/init.d/nfs stop 停止NFS服務
~~ linux 客戶端掛接 NFS 共享
# mount -t nfs -o rw 10.140.133.9:/export/home/sunky /mnt/nfs

4 進程管理 啟動和結束

systemctl 和 service

  • service 命令本身是一個shell腳本,它會在 /etc/init.d/ 目錄查找指定的服務腳本,然後調用該服務腳本來完成任務;service命令用於對系統服務進行管理,比如啟動(start)、停止(stop)、重啟(restart)、查看狀態(status)等。命令格式:service 服務名 [start|stop|restart|reload|status]
~~ service 命令: 停止、啟動、查看 redis服務
# service redis stop   ~~ 等於在 /etc/init.d/ 目錄下運行 ./redis stop
# service redis start  ~~ 等於在 /etc/init.d/ 目錄下運行 ./redis start
# service redis status ~~ 等於在 /etc/init.d/ 目錄下運行 ./redis status
  • systemctl 命令兼容了 service 命令,且包含其他更強大功能
  • systemctl 用來管理 linux系統的多種資源:系統服務、硬體設備、掛載點、socket等;下面則主要介紹關於 service 系統服務的相關命令使用。因為 systemctl 一般用於實現服務自啟動的腳本
~~ 系統自啟動時 啟動 cron 服務,啟用或禁用它
# systemctl enable crond.service
# systemctl disable ccrond.service
# systemctl is-active crond.service  ~~ 是否正在運行
# systemctl is-enabled crond.service ~~  是否建立了啟動鏈接

~~ 啟動、重啟、停止、重載、殺死服務以及查看服務 httpd
# systemctl start httpd.service
# systemctl restart httpd.service
# systemctl stop httpd.service
# systemctl reload httpd.service
# systemctl status httpd.service
# systemctl kill apache.service

~~ 列出所有服務(包括啟用的和禁用的)
# systemctl list-units      ~~  列出所有管理的資源單元
# systemctl list-unit-files --type=service   ~~ 只列出所有 service 類型資源

~~ 獲取某個服務(httpd)的依賴性列表
# systemctl list-dependencies httpd.service

~~ 檢查 httpd 服務的所有配置細節
# systemctl show httpd
  • xxx.service 文件的詳細配置介紹請上網自行查看,下面給個簡單的模板介紹
[Unit]
Description:描述
After:auditd.service 在auditd.service啟動後才啟動
ConditionPathExists: 執行條件

[Service]
EnvironmentFile: 變數所在文件
ExecStart: 執行啟動命令
Restart: fail時重啟

[Install]
Alias:服務別名
WangtedBy: 多用戶模式下需要的

nohup 和 &

  • nohup 和 & 組合可以不掛斷地在後台運行進程,命令格式:nohup command [agrs..] [&]。& 表示程式可以在linux 後台運行,在當前 shell 介面 ctrl C 退出,該程式也能繼續運行,它可以忽略 SIGINT 訊號,不過它會隨著 shell 程式的關閉而停止,這是因為 & 運行的進程對 SIGHUP 訊號不免疫
  • 加上 nohup 就可以做到忽略SIGHUP訊號
~~ 在後台運行 lwl.py,且不隨著 shell 關閉而死亡。永遠存在
# nohup python lwl.py &> /var/log/lwl.log &

kill

  • 如果在linux遇到需要殺死或停止某進程,可以使用 kill, 示例:# kill -9 1211。kill 也不單單用於停止進程,可用kill [-s <指定訊號>][程式] 發送指定訊號給指定程式,而# kill -l 可列出全部的訊號名稱。
~~ 列出全部的資訊名稱
# kill -l 
1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
...
...
~~ 發送 SIGQUIT 給 pid = 1211 的進程
# kill -s SIGQUIT 1211  ~~ 或者 kill -SIGQUIT 1211

5 系統性能參數查看

ps

  • ps 命令用於顯示當前進程的狀態。命令格式:ps [options]
options 參數解釋
-A/a      列出所有的進程
-e        等於 「-A」
f         顯示程式間的關係
-w        顯示加寬可以顯示較多的資訊
-au       顯示較詳細的資訊
-aux      顯示所有包含其他使用者的行程
  • ps -ef 各項指標解釋
# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  6 18:39 pts/0    00:02:27 java -jar /opt/lp-admin.jar
root        102      0  0 18:40 pts/1    00:00:00 /bin/bash
root        158    102  0 18:47 pts/1    00:00:00 /usr/bin/python /usr/bin/dstat
---------各項指標解析-----------------------
UID    程式的執行者 UID
PID    進程的ID號
PPID   則是其上級父程式的ID
C      cpu 使用的資源百分比
TTY    登入者的終端機位置
TIME   CPU 執行的時間
CMD    進程執行的命令
  • ps -aux 各項指標解釋
# ps -aux
ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  7.0  5.3 13278220 1736948 pts/0 Ssl+ 18:39   2:24 java -jar /opt/lp-admin.jar
root        102  0.0  0.0  15264  2044 pts/1    Ss   18:40   0:00 /bin/bash
root        158  0.0  0.0  52176  6756 pts/1    T    18:47   0:00 /usr/bin/python /usr/bin/dstat
root        159  0.0  0.0  52176  6756 pts/1    T    18:49   0:00 /usr/bin/python /usr/bin/dstat -n -N eth0,total
---------各項指標解析-----------------------
USER    行程擁有者
PID     pid
%CPU    佔用的 CPU 使用率
%MEM    佔用的記憶體使用率
VSZ     佔用的虛擬記憶體大小
RSS     佔用的記憶體大小
TTY     終端的次要裝置號碼 (minor device number of tty)
STAT    該進程程的狀態:
   D:  無法中斷的休眠狀態 (通常 IO 的進程)
   R:  正在執行中
   S:  可中斷的睡眠狀態
   T:  暫停狀態或跟蹤狀態
   Z:  殭屍進程(zombie),無法正常終止
   X: 退出狀態,進程即將被銷毀
START   登入者的終端機位置
TIME    CPU 執行的時間
COMMAND 進程執行的命令

lsof

  • lsof(List Open Files) 用於查看你進程開打的文件,打開文件的進程,進程打開的埠(TCP、UDP)。命令格式 lsof [options] filename
options 參數解釋

-a            列出打開文件存在的進程
-c<進程名>     列出指定進程所打開的文件(常用)
-p<進程號>     列出指定進程號所打開的文件(常用)
-g            列出屬於gid的進程詳情
-u<uname/uid> 顯示歸屬uname或uid的進程情況
-d<fd文件號>   列出佔用該文件號的進程
+d<目錄>       列出目錄下被打開的文件
+D<目錄>       遞歸列出目錄下被打開的文件
-n<目錄>       列出使用NFS的文件
-i<條件>       列出符合條件的進程。(ip4/ip6協議、埠、 @ip )
-u            列出UID號進程詳情
  • lsof 各項指標解釋
# lsof
command  PID USER   FD   type   DEVICE     SIZE     NODE  NAME
init       1 root  txt   REG       8,2    43496  6121706 /sbin/init

---------各項指標解析-----------------------
COMMAND  進程的名稱 
PID      進程標識符 
USER     進程所有者 
FD       文件描述符,應用程式通過文件描述符識別該文件。如cwd、txt等 
TYPE     文件類型,如DIR、REG等 
DEVICE   指定磁碟的名稱 
SIZE     文件的大小 
NODE     索引節點(文件在磁碟上的標識) 
NAME     打開文件的確切名稱
  • lsof 示例
~~ 顯示所有打開80埠的進程
# lsof -i:80       
~~ 那個進程在佔用/etc/passwd
# lsof /etc/passwd 
~~ 顯示使用fd為1211的進程
# lsof -d 1211     
~~ 顯示那些文件被pid為 1211 的進程打開
# lsof -p 1211     
~~ 查看sendmail進程的文件使用情況
# lsof -c sendmail 

pidof

  • pidof 是linux系統中用來查找正在運行進程的進程號(pid)的工具。如果我們提前知道進程名,則可以根據進程名查找pid,命令格式:pidof [options] 進程名稱
options 選項參數

-s: 僅返回一個進程號;
-c: 僅顯示具有相同「root」目錄的進程
-x: 顯示由腳本開啟的進程
-o: 指定不顯示的進程ID
  • pidof 示例
# pidof -s nginx
1211

top

  • top 命令是用來監控Linux系統狀況,比如cpu、記憶體,進程等資源使用情況。命令格式: top [-options]
options 選項參數

-i<時間>    設置刷新間隔時間
-u<用戶名>    指定用戶名
-p<進程號>    指定進程
-H           開啟執行緒查看
  • top 各項輸出指標解釋
# top
top - 18:20:27 up 26 days,  8:30,  2 users,  load average: 0.04, 0.09, 0.13
Tasks: 168 total,   1 running, 167 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.5 sy,  0.0 ni, 99.1 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem:  32762356 total, 14675196 used, 18087160 free,      884 buffers
KiB Swap:  2103292 total,        0 used,  2103292 free.  6580028 cached Mem

PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                
1260 root      20   0 7933492 1.173g  14004 S 0.333 3.753  58:20.74 java                       
1503 root      20   0   69172   2240   1412 S 0.333 0.007   0:48.05 httpd                       
1520 daemon    20   0  358140   3980    776 S 0.333 0.012   6:19.55 httpd                       
2323 mysql     20   0 19.918g 4.538g   9404 S 0.333 14.52 352:51.44 mysqld                     
.......
---------各項指標解析---------------------------------------------------
第一行統計資訊區
    18:20:27	                    當前時間
    up 25 days, 17:29	            系統運行時間,格式為時:分
    1 user	                    當前登錄用戶數
    load average: 0.04, 0.09, 0.13  系統負載,三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值

Tasks:進程相關資訊
    running   正在運行的進程數
    sleeping  睡眠的進程數
    stopped   停止的進程數
    zombie    殭屍進程數
Cpu(s):CPU相關資訊
    %us:表示用戶空間程式的cpu使用率(沒有通過nice調度)
    %sy:表示系統空間的cpu使用率,主要是內核程式
    %ni:表示用戶空間且通過nice調度過的程式的cpu使用率
    %id:空閑cpu
    %wa:cpu運行時在等待io的時間
    %hi:cpu處理硬中斷的數量
    %si:cpu處理軟中斷的數量
    %st:被虛擬機偷走的cpu
Mem  記憶體資訊  
    total	物理記憶體總量
    used	使用的物理記憶體總量
    free	空閑記憶體總量
    buffers	用作內核快取的記憶體量
Swap 記憶體資訊  
    total	交換區總量
    used	使用的交換區總量
    free	空閑交換區總量
    cached	緩衝的交換區總量

~~ 常用的指標
PID	進程id
PPID	父進程id
UID	進程所有者的用戶id
USER	進程所有者的用戶名
GROUP	進程所有者的組名
TTY	啟動進程的終端名。不是從終端啟動的進程則顯示為 ?
PR	優先順序
NI	nice值。負值表示高優先順序,正值表示低優先順序
P	最後使用的CPU,僅在多CPU環境下有意義
%CPU	上次更新到現在的CPU時間佔用百分比
TIME	進程使用的CPU時間總計,單位秒
TIME+	進程使用的CPU時間總計,單位1/100秒
%MEM	進程使用的物理記憶體百分比
VIRT	進程使用的虛擬記憶體總量,單位kb。VIRT=SWAP+RES
SWAP	進程使用的虛擬記憶體中,被換出的大小,單位kb。
RES	進程使用的、未被換出的物理記憶體大小,單位kb。RES=CODE+DATA
CODE	可執行程式碼佔用的物理記憶體大小,單位kb
DATA	可執行程式碼以外的部分(數據段+棧)佔用的物理記憶體大小,單位kb
SHR	共享記憶體大小,單位kb
S       進程狀態; 相關枚舉值解釋查看 ps -ef S 項解釋
COMMAND	進程啟動執行的命令行    
  • top 命令下,查看資訊常用快捷鍵
h    顯示快捷鍵幫助
k    終止一個進程
i    開/關忽略閑置和僵死進程
q    退出程式
r    重新安排一個進程的優先順序別
S     切換到累計模式
s    更改刷新間隔時間,單位秒
f,F    從當前顯示中添加或者刪除項目
o,O    改變顯示項目的順序
l    切換顯示平均負載和啟動時間資訊
m     切換顯示記憶體資訊
t    切換顯示進程和CPU狀態資訊
c    切換顯示命令名稱和完整命令行
M     根據記憶體使用大小排序
P    根據CPU使用率進行排序 (默認排序)
T    根據時間/累計時間進行排序
1    展開多核cpu顯示
H       執行緒查看模式切換為開或關

free

  • free 可查看系統記憶體的使用情況,包括物理記憶體、交換記憶體(swap)和內核緩衝區記憶體。命令格式:free [-bkmg][-hlot][s delay][-c count]
free 選項參數

 -b,-k,-m,-g  表示輸出顯示的單位為 bytes,KB,MB,or GB,不添加選項的話默認以 KB 為單位顯示
 -h          以人類可讀的方式顯示,即後邊會自動帶上單位
 -l          顯示詳細的低記憶體和高記憶體統計資訊(增加了 Low 和 High 這兩行顯示)
 -o          使用舊的格式顯示(不顯示 -/+buffers/cache 這一行)
 -t          增加顯示 Total 行,Total = Mem + Swap
 -s delay    每 delay 秒重複列印一次,delay 為具體的秒數
 -c count    循環列印 count 次後退出,count 為具體的次數。需要配合 -s delay 使用
# free -m
             total       used       free     shared    buffers     cached
Mem:         32107      30414       1692          0       1962       8489
-/+ buffers/cache:      19962      12144
Swap:            0          0          0
------各項指標解釋-------------------------------------------------
Mem 表示物理記憶體統計:
 total   物理記憶體總量,total = used + free
 used    總使用快取的數量(包含 buffers 與 cache),但其中可能部分快取並未實際使用
 free    未被分配的記憶體
 shared  共享記憶體,一般系統不會用到,總是0
 buffers  系統分配但未被使用的 buffers 數量
 cached  系統分配但未被使用的 cache 數量
 
-/+ buffers/cache:
 used    實際使用記憶體,等於第一行的 used - buffers - cached
 free    實際可用記憶體,等於第一行的 free + buffers + cached

Swap表示交換區的使用情況,也就是我們通常所說的虛擬記憶體
 total   總量虛擬記憶體
 used    使用的虛擬記憶體
 free    空閑的虛擬記憶體

mpstat

  • mpstat 是 Multiprocessor Statistics 的縮寫,可以查看多核心的 cpu 中每個計算核心的統計數據。命令格式:mpstat [-P {cpu|ALL}] [delay [count]]
-P {cpu|ALL}	 表示監控哪個CPU, cpu在[0,cpu個數-1]中取值
delay	         相鄰的兩次取樣的間隔時間
count	         取樣的次數,count只能和delay一起使用
# mpstat  -P ALL 2
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:19:07 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
07:19:09 PM  all   21.43    3.36    6.54    6.45    0.00    1.29    0.00    0.00    0.00   60.93
07:19:09 PM    0   20.41    3.57    7.14    4.08    0.00    1.53    0.00    0.00    0.00   63.27
07:19:09 PM    1   22.45    3.06    6.12    5.10    0.00    1.53    0.00    0.00    0.00   61.73
---------各項輸出指標解釋----------------------------------------------
CPU	處理器ID	
%usr	在 delay 時間段里,用戶態的 cpu 時間(%)
%nice	
%sys	在 delay 時間段里,核心時間(%)	
%iowait	在 delay 時間段里,硬碟IO等待時間(%)	
%irq	在 delay 時間段里,硬中斷時間(%)	
%soft	在 delay 時間段里,軟中斷時間(%)	
%steal	虛擬機管理器在服務另一個虛擬處理器時虛擬CPU處在非自願等待下花費時間的百分比	
%guest	顯示運行虛擬處理器時 CPU 花費時間的百分比	
%gnice  gnice/total*100
%idle	在internal時間段里,CPU除去等待磁碟IO操作外的因為任何原因而空閑的時間閑置時間(%)

iostat

  • iostat 主要用於輸出 CPU 和磁碟 I/O 相關的統計資訊,命令格式: iostat [options] [delay [count]]
options 選項參數

-c      只顯示系統CPU統計資訊,即單獨輸出avg-cpu結果,不包括device結果
-d      單獨輸出Device結果,不包括cpu結果
-k/-m   輸出結果以kB/mB為單位,而不是以扇區數為單位
-x      輸出更詳細的io設備統計資訊
delay   每次輸出間隔時間
count   表示輸出次數,不帶count表示循環輸出
  • 默認命令iostat的各項指標解析
# iostat
Linux 4.4.73-5-default        2021年07月08日  _x86_64_        (40 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.50    0.41    0.94    0.02    0.00   96.13

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              12.09        27.80       507.24   57343492 1046298308
sdb              17.95        30.91       647.84   63751096 1336305974
------各項指標解析-----------------------------------------------------------
avg-cpu: 總體cpu使用情況統計資訊,對於多核cpu,這裡為所有cpu的平均值
    %user      用戶空間的CPU使用率
    %nice      CPU處在帶NICE值的用戶模式下的時間百分比
    %system    內核空間的CPU使用率
    %iowait    CPU等待IO的百分比 
    %steal     虛擬機的虛擬機CPU使用的CPU
    %idle      空閑的CPU   

Device: 各磁碟設備的IO統計資訊。各列含義如下:
    tps        每秒進程下發的IO讀、寫請求數量
    KB_read/s  每秒從驅動器讀入的數據量,單位為K。
    KB_wrtn/s  每秒從驅動器寫入的數據量,單位為K。
    KB_read    讀入數據總量,單位為K。
    KB_wrtn    寫入數據總量,單位為K
  • iostat -x -k -d 1 2的各項指標解析
# iostat -x -k -d 1 1
Linux 4.4.73-5-default (ceshi44)        2021年07月08日  _x86_64_        (40 CPU)

Device:  rrqm/s   wrqm/s  r/s    w/s    rkB/s   wkB/s  avgrq-sz avgqu-sz await r_await w_await  svctm  %util
sda      0.08     2.48    0.37   11.71  27.80   507.24  88.53   0.02     1.34   14.96    0.90   0.09   0.10
sdb      0.00     1.20    1.28   16.67  30.91   647.83  75.61   0.17     9.51    9.40    9.52   0.32   0.57
------各項指標解析----------------------------------------------------------
rrqm/s:   每秒對該設備的讀請求被合併次數,文件系統會對讀取同塊(block)的請求進行合併
wrqm/s:   每秒對該設備的寫請求被合併次數
r/s:      每秒完成的讀次數
w/s:      每秒完成的寫次數
rkB/s:    每秒讀數據量(kB為單位)
wkB/s:    每秒寫數據量(kB為單位)
avgrq-sz: 平均每次IO操作的數據量(扇區數為單位)
avgqu-sz: 平均等待處理的IO請求隊列長度
await:    平均每次IO請求等待時間(包括等待時間和處理時間,毫秒為單位)
svctm:    平均每次IO請求的處理時間(毫秒為單位)
%util:    採用周期內用於IO操作的時間比率,即IO隊列非空的時間比率

netstat

  • netstat 命令用於顯示各種網路相關資訊,如網路連接,路由表,網路連接狀態。命令格式:netstat [-options]
options 參數解析

-a (all)顯示所有選項,默認不顯示 Listen 相關
-t (tcp)僅顯示tcp相關選項
-u (udp)僅顯示udp相關選項
-n 拒絕顯示別名,能顯示數字的全部轉化成數字。
-l 僅列出有在 Listen (監聽) 的服務狀態

-p 顯示建立相關鏈接的程式名
-r 顯示路由資訊,路由表
-e 顯示擴展資訊,例如uid等
-s 按各個協議進行統計
-c 每隔一個固定時間,執行該netstat命令
  • 各項輸出指標解析
# netstat -pt 
Proto Recv-Q Send-Q Local Address   Foreign Address  State   PID/Program name  
tcp        0      0 localhost:30037 *:*              LISTEN  2109/firefox
....
------各項指標解析----------------------------------------
Proto           協議
Recv-Q          接收隊列 ,一般都應該是0。如果不是則表示軟體包正在隊列中堆積
Send-Q          發送隊列,一般都應該是0。如果不是則表示軟體包正在隊列中堆積
Local Address   本地地址+port
Foreign Address 遠端地址+port
State           狀態
PID             進程pid
Program name    進程名
  • netstat 常用命令示例
# netstat -anp
# netstat -tnlp

vmstat

  • vmstat (虛擬記憶體統計)可對作業系統的記憶體、進程、CPU,磁碟進行監控。相比top,可以看到整個機器的CPU、記憶體、IO的使用情況,而不是單單看到各個進程的CPU使用率和記憶體使用率(使用場景不一樣)
  • 命令格式
// -a:顯示活躍和非活躍記憶體 -n:只在開始時顯示一次各欄位名稱
# vmstat [-a] [-n] [delay [count]]
// f:總的fork進程 s:記憶體使用的詳細資訊 d:磁碟的讀/寫 m:系統的slab資訊
# vmstat [-fsdm] 
// 查看指定磁碟分區統計資訊
# vmstat [-p disk partition]
  • vmstat 示例
$ vmstat 2 1
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 3498472 315836 3819540  0  0    0   1   2    0  3  1  96  0 0

------各項指標解析----------------------------------------
Procs(進程)
  r:     運行隊列中進程數量,當這個值超過了CPU數目,就會出現CPU瓶頸了
  b:    等待IO的進程數量

Memory(記憶體):
  swpd:  使用虛擬記憶體大小,如果大於0,表示你的機器物理記憶體不足了,如果不是程式記憶體泄露的原因,那麼你該升級記憶體了
  free:  可用記憶體大小
  buff:  用作緩衝的記憶體大小
  cache: 用作快取的記憶體大
  
Swap:
  si:    每秒從交換區寫到記憶體的大小,如果這個值大於0,表示物理記憶體不夠用或者記憶體泄露了,要查找耗記憶體進程解決掉
  so:    每秒寫入交換區的記憶體大小

IO:(現在的Linux版本塊的大小為1024bytes)
  bi:    每秒讀取的塊數
  bo:    每秒寫入的塊數,bi和bo一般都要接近0,不然就是IO過於頻繁,需要調整

系統
  in:    每秒中斷數,包括時鐘中斷
  cs:    每秒上下文切換數,調用系統函數,就要進行上下文切換,執行緒的切換,也要進程上下文切換,這個值要越小越好

CPU(以百分比表示):
  us:    用戶進程執行時間 
  sy:    系統進程執行時間 
  id:    空閑時間(包括IO等待時間),中央處理器的空閑時間
  wa:    等待 IO 時間  
  st:    虛擬機的虛擬機CPU使用的CPU

dstat

  • vmstat 是對系統的整體情況進行統計,無法對某個進程進行深入分析,所以推薦下 dstat。dstat 是一個可以取代vmstat、iostat、netstat 這些命令的多功能命令工具,執行 dstat 命令,默認情況它會收集-cpu-、-disk-、-net-、-paging-、-system-的數據,一秒鐘收集一次。命令格式:dstat [options] [delay [count]],其中使用 -p pid 選項可針對某一進程進行統計監控
options 常用參數解析

-l         顯示負載統計量
-c         開啟cpu統計
-C <CPU>   選項跟著 cpu 的編號,顯示該cpu 的統計
-d         開啟 disk 統計
-g         開啟分頁統計
-y         開啟系統統計,包括中斷和上下文切換
-i         開啟中斷統計
-s 	   開啟 swap 統計,包括used, free
-m         顯示記憶體使用率(包括used,buffer,cache,free值)
-n         開啟網路讀寫統計
–socket    顯示網路統計數據
–tcp       顯示常用的TCP統計
-N	   選項跟著網路設備名,多個用逗號隔開,進行網路統計
-p         開啟對進程統計,runnable, uninterruptible, new
-r         io開啟請求統計,包括read requests, write requests

--output文件  此選項也比較有用,可以把狀態資訊以csv的格式重定向到指定的文件中
-–disk-util   顯示某一時間磁碟的忙碌狀況
-–freespace   顯示當前磁碟空間使用率
-–proc-count  顯示正在運行的程式數量
--top-bio-adv 指出塊I/O最大的進程
--top-cputime 耗費CPU時間最多的進程名和耗費時間
--top-cpu-adv 顯示CPU佔用最大的進程
-–top-io      顯示正常I/O最大的進程
-–top-mem     顯示佔用最多記憶體的進程
  • 輸出指標解析
# dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
 29   7  57   6   0   1|  85k 1457k|   0     0 |   0     0 |8350    67k
 30   9  54   6   0   1|   0  1290k| 857B  568B|   0     0 |  33k   75k
...

------各項指標解析-----------------------------------
CPU的使用率
  usr   顯示了用戶佔比
  sys   系統佔比
  idl   空閑佔比
  wai   等待佔比
  hiq   硬中斷
  siq   軟中斷情況

磁碟的讀寫
  read  磁碟的讀總數
  writ  磁碟的寫總數
 
網路設備發送和接受的數據
  recv  網路收數據總數
  send  網路發數據總數

系統的分頁活動
  in    記憶體頁換入
  out   記憶體頁換出
  
系統統計	 
  int   統計中斷
  csw   上下文切換
  • 指定展示各個網卡的收髮狀態
# dstat -n -N eth0,total
--net/eth0---net/total-
 recv  send: recv  send
   0     0 :   0     0 
 140B  140B: 140B  140B
  18k 6570B:  18k 6570B
  • 查看全部記憶體都有誰在佔用
# dstat -g -l -m -s --top-mem
---paging-- ---load-avg--- ------memory-usage----- ----swap--- --most-expensive-
  in   out | 1m   5m  15m | used  buff  cach  free| used  free|  memory process 
   0     0 |5.44 4.77 5.09|23.2G 2108k 7892M  233M|   0     0 |java        1670M
   0     0 |5.44 4.77 5.09|23.3G 2108k 7893M  221M|   0     0 |java        1670
  • 進程最耗資源統計
# dstat --top-cpu-adv 1 2
-------most-expensive-cpu-process-------
process              pid  cpu read write
java                   1  0.0%  43B   0                
java                   1  0.2%   0    0

sar

  • sar 和 dstat 差不多,隨你們各自喜好使用,可以從多方面對系統的資源進行監控,包括:文件的讀寫情況、系統調用的使用情況、磁碟I/O、CPU效率、記憶體使用狀況、進程活動及 IPC 有關的活動等。命令格式:sar [options] [-A] [-o file] delay [count]。delay 為取樣間隔,count 為取樣次數,默認值是1
options 選項參數

-A          所有報告的總和
-o file     表示將命令結果以二進位格式存放在文件中,file 是文件名
-u          輸出CPU使用情況的統計資訊
-v          輸出inode、文件和其他內核表的統計資訊
-d          輸出每一個塊設備的活動資訊
-b          顯示I/O和傳送速率的統計資訊(相對-d 是匯總資訊)
-r          輸出記憶體和交換空間的統計資訊
-R          輸出記憶體頁面的統計資訊
-a          文件讀寫情況
-q          隊列長度和平均負載
-c          輸出進程統計資訊,每秒創建的進程數
-y          終端設備活動情況
-w          輸出系統交換活動資訊
-x <pid>    顯示給定進程的統計資訊
-n <關鍵詞>  統計網路資訊
    關鍵詞可以是:
        DEV    網卡
        EDEV   網卡 (錯誤)
        NFS    NFS 客戶端
        NFSD   NFS 伺服器
        SOCK   Sockets (套接字)    (v4)
        SOCK6  Sockets (套接字)    (v6)
        IP     IP 流    (v4)
        EIP    IP 流    (v4) (失敗資訊)
        ICMP   ICMP 流  (v4)
        EICMP  ICMP 流  (v4) (失敗資訊)
        TCP    TCP 流   (v4)
        ETCP   TCP 流   (v4) (失敗資訊)
        UDP    UDP 流   (v4)
        IP6    IP 流    (v6)
        EIP6   IP 流    (v6) (失敗資訊)
        ICMP6  ICMP 流  (v6)
        EICMP6 ICMP 流  (v6) (失敗資訊)
        UDP6   UDP 流   (v6)
  • 查看 CPU 使用情況:sar -u 1 2
# sar -u  1 2
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:02:04 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
07:02:05 PM     all     23.90      3.22      7.97      5.25      0.00     59.66
07:02:06 PM     all     26.53      4.76      8.84      5.95      0.00     53.91
Average:        all     25.21      3.99      8.40      5.60      0.00     56.79
------各項指標解析---------------------------------
%user     用戶空間的CPU使用
%nice     改變過優先順序的進程的CPU使用率
%system   內核空間的CPU使用率
%iowait   CPU等待IO的百分比 
%steal    虛擬機的虛擬機CPU使用的CPU
%idle     空閑的CPU
  • 查看記憶體使用情況 sar -r
# sar -r 1 2
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:05:16 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
07:05:17 PM    299596  32398396     99.08      2084   7615088  37900868    115.91  27267692   3809860       672
07:05:18 PM    298932  32399060     99.09      2084   7615848  37900100    115.91  27267828   3810252       488
Average:       299264  32398728     99.08      2084   7615468  37900484    115.91  27267760   3810056       580

------各項指標解析--------------------
kbmemfree   空閑的物理記憶體大小
kbmemused   使用中的物理記憶體大小
%memused    物理記憶體使用率
kbbuffers   內核中作為緩衝區使用的物理記憶體大小,kbbuffers和kbcached:這兩個值就是free命令中的buffer和cache. 
kbcached    快取的文件大小
kbcommit    保證當前系統正常運行所需要的最小記憶體,即為了確保記憶體不溢出而需要的最少記憶體(物理記憶體+Swap分區)
commit      這個值是kbcommit與記憶體總量(物理記憶體+swap分區)的一個百分比的值
  • 查看 IO 和傳遞速率:sar -b
# sar -b 1 2
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:06:08 PM       tps      rtps      wtps   bread/s   bwrtn/s
07:06:09 PM    171.00      0.00    171.00      0.00   3431.00
07:06:10 PM    163.00      0.00    163.00      0.00   2620.00
Average:       167.00      0.00    167.00      0.00   3025.50
------各項指標解析--------------------
tps      磁碟每秒鐘的IO總數,等於iostat中的tps
rtps     每秒鐘從磁碟讀取的IO總數
wtps     每秒鐘從寫入到磁碟的IO總數
bread/s  每秒鐘從磁碟讀取的塊總數
bwrtn/s  每秒鐘此寫入到磁碟的塊總數
  • 網路介面資訊:sar -n DEV
# sar -n DEV 1 1
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:06:57 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
07:06:58 PM      eth0      2.00      4.00      1.45      0.56      0.00      0.00      0.00
07:06:58 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
07:06:58 PM     tunl0      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
Average:         eth0      2.00      4.00      1.45      0.56      0.00      0.00      0.00
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:        tunl0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
------各項指標解析--------------------
IFACE    本地網卡介面的名稱
rxpck/s  每秒鐘接受的數據包
txpck/s  每秒鐘發送的資料庫
rxKB/S   每秒鐘接受的數據包大小,單位為KB
txKB/S   每秒鐘發送的數據包大小,單位為KB
rxcmp/s  每秒鐘接受的壓縮數據包
txcmp/s  每秒鐘發送的壓縮包
rxmcst/s 每秒鐘接收的多播數據包  
  • 查看磁碟使用情況:sar -d。相對 -b 它可以看到各個設備的資訊,-b 輸出的是匯總資訊
sar -d -p 1 1  
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:08:41 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
07:08:42 PM       sdb    160.00      0.00   2914.00     18.21      1.51      9.43      3.73     59.70
07:08:42 PM       sdc      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
07:08:42 PM       sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:          sdb    160.00      0.00   2914.00     18.21      1.51      9.43      3.73     59.70
Average:          sdc      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:          sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
------各項指標解析--------------------
DEV       磁碟設備的名稱,如果不加-p,會顯示dev253-0類似的設備名稱,因此加上-p顯示的名稱更直接
tps       每秒I/O的傳輸總數
rd_sec/s  每秒讀取的扇區的總數
wr_sec/s  每秒寫入的扇區的總數
avgrq-sz  平均每次次磁碟I/O操作的數據大小(扇區)
avgqu-sz  磁碟請求隊列的平均長度
await     從請求磁碟操作到系統調用完成處理,每次請求的平均消耗時間
svctm     I/O的服務處理時間,即不包括請求隊列中的時間
%util     I/O請求佔用的CPU百分比,值越高,說明I/O越慢
  • 統計socket連接資訊:sar -n SOCK 1 1
# sar -n SOCK 1 1
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:09:18 PM    totsck    tcpsck    udpsck    rawsck   ip-frag    tcp-tw
07:09:19 PM     10910       261         0         0         0       562
Average:        10910       261         0         0         0       562
------各項指標解析--------------------
totsck   當前被使用的socket總數
tcpsck   當前正在被使用的TCP的socket總數
udpsck   當前正在被使用的UDP的socket總數
rawsck   當前正在被使用於RAW的skcket總數
if-frag  當前的IP分片的數目
tcp-tw   TCP套接字中處於TIME-WAIT狀態的連接數量
  • TCP連接的統計:sar -n TCP
# sar -n TCP 1 1
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

07:09:39 PM  active/s passive/s    iseg/s    oseg/s
07:09:40 PM      1.00      0.00      5.00      7.00
Average:         1.00      0.00      5.00      7.00
------各項指標解析--------------------
active/s   新的主動連接
passive/s  新的被動連接
iseg/s     接受的段
oseg/s     輸出的段

pidstat

  • pidstat是sysstat工具的一個命令,用於監控全部或指定進程的cpu、記憶體、執行緒、設備IO等系統資源的佔用情況。命令格式:pidstat [options] [delay [count]]
options 參數解析

-u         默認的參數,顯示各個進程的cpu使用統計
-r         顯示各個進程的記憶體使用統計
-d         顯示各個進程的IO使用情況
-p <pid>   指定進程號
-w         顯示每個進程的上下文切換情況
-t         顯示選擇進程的執行緒的統計資訊
  • 查看所有進程的 CPU 使用情況:pidstat -u
# pidstat -u
Linux 4.4.73-5-default (ceshi44)        2021年07月08日  _x86_64_        (40 CPU)

14時11分56秒   UID  PID  %usr %system  %guest    %CPU   CPU  Command
14時11分56秒     0    1  0.15    0.06    0.00    0.22    22  systemd
....
------各項指標解析----------------------------------------
UID      進程所屬UID
PID      進程ID
%usr     進程在用戶空間佔用cpu的百分比
%system  進程在內核空間佔用cpu的百分比
%guest   進程在虛擬機佔用cpu的百分比
%CPU     進程佔用cpu的百分比
CPU      處理進程的cpu編號
Command  當前進程對應的命令
  • 記憶體使用情況統計:pidstat -r
# pidstat -r
Linux 4.4.73-5-default (ceshi44)        2021年07月08日  _x86_64_        (40 CPU)

14時13分08秒   UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
14時13分08秒     0         1     41.04      0.00  186020   5968   0.00  systemd
14時13分08秒     0       443      0.00      0.00    5828   3004   0.00  pidstat
....
------各項指標解析----------------------------------------
PID       進程標識符
Minflt/s  任務每秒發生的次要錯誤,不需要從磁碟中載入頁
Majflt/s  任務每秒發生的主要錯誤,需要從磁碟中載入頁
VSZ       虛擬地址大小,虛擬記憶體的使用KB
RSS       常駐集合大小,非交換區五里記憶體使用KB
Command   task命令名
  • 顯示各個進程的IO使用情況:pidstat -d
# pidstat -d
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

06:42:35 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
06:42:35 PM     0         1      0.05      0.00      0.00  java
06:42:35 PM     0       102      0.04      0.05      0.00  bash
------各項指標解析---------------------------
kB_rd/s   每秒從磁碟讀取的KB
kB_wr/s   每秒寫入磁碟KB
kB_ccwr/s 任務取消的寫入磁碟的KB。當任務截斷髒的pagecache的時候會發生
Command   進程執行命令
  • 顯示每個進程的上下文切換情況:pidstat -w
# pidstat -w
Linux 3.10.0-862.el7.x86_64 (8f57ec39327b)      07/11/2021      _x86_64_        (6 CPU)

06:43:23 PM   UID       PID   cswch/s nvcswch/s  Command
06:43:23 PM     0         1      0.00      0.00  java
06:43:23 PM     0       102      0.00      0.00  bash
06:43:23 PM     0       150      0.00      0.00  pidstat
------各項指標解析---------------------------
PID       進程id
Cswch/s   每秒主動任務上下文切換數量
Nvcswch/s 每秒被動任務上下文切換數量
Command   進程執行命令
  • 指定進程並( -t)顯示進程的執行緒統計資訊:pidstat -t -p 1211
# pidstat -t -p 1211
06:44:37 PM   UID      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
06:44:37 PM     0         1         -    0.00    0.00    0.00    0.00     3  java
06:44:37 PM     0         -         1    0.00    0.00    0.00    0.00     3  |__java
06:44:37 PM     0         -         6    0.00    0.00    0.00    0.00     5  |__java
06:44:37 PM     0         -         7    0.00    0.00    0.00    0.00     4  |__java
...
------各項指標解析---------------------------
TGID      主執行緒的表示
TID       執行緒id
%usr      進程在用戶空間佔用cpu的百分比
%system   進程在內核空間佔用cpu的百分比
%guest    進程在虛擬機佔用cpu的百分比
%CPU      進程佔用cpu的百分比
CPU       處理進程的cpu編號
Command   當前進程對應的命令

pstree

  • ps 命令可以顯示當前正在運行的那些進程的資訊,但是對於它們之間的關係卻顯示得不夠清晰,pstree 命令可以以樹狀圖顯示進程間的關係。命令格式:pstree [-p] <pid>
# pstree -p 3169
mongod(3169)─┬─{mongod}(3170)
             ├─{mongod}(3173)
             ├─{mongod}(3174)
             ├─{mongod}(3175)
             ├─{mongod}(3177)
             ├─{mongod}(3178)
             ├─{mongod}(3179)
             ├─{mongod}(3180)

strace

  • strace 可以跟蹤到一個進程產生的系統調用,包括參數,返回值,執行消耗的時間命令格式:strace [options] [command]。如果指定進程pid,要去掉 command
options 簡單常用的參數解析

-c                統計每一系統調用的所執行的時間,次數和出錯的次數等
-t                在輸出中的每一行前加上時間資訊
-tt               在輸出中的每一行前加上時間資訊,微秒級
-ttt              微秒級輸出,以秒了表示時間
-T                顯示每一調用所耗的時間
-e trace=         只跟蹤指定的系統 調用.例如:-e trace=open,close,rean,write表示只跟蹤這四個系統調用,默認是 all
-e trace=file     只跟蹤有關文件操作的系統調用
-e trace=process  只跟蹤有關進程式控制制的系統調用
-e trace=network  跟蹤與網路有關的所有系統調用
-e trace=ipc      跟蹤所有與進程通訊有關的系統調用
-o filename       將strace的輸出寫入文件filename 
-p pid            跟蹤指定的進程pid
  • strace 示例
# strace ls
# strace cat /dev/null
# strace -o output.txt -T -tt -e trace=all -p 28979
  • 每一行都是一條系統調用,等號左邊是系統調用的函數名及其參數,右邊是該調用的返回值

pmap

  • pmap 提供了進程的記憶體映射,pmap命令用於顯示一個或多個進程的記憶體狀態。其報告進程的地址空間和記憶體狀態資訊
  • pmap [options] PID
options 參數解析
-x extended顯示擴展格式
-d device顯示設備格式
# pmap -dx 1
Address  Kbytes Mode  Offset           Device    Mapping
00110000 1480K  r-x-  0000000000000000 008:00005 /usr/lib/libcrypto.so.1.0.0
00282000 80K    rw--  0000000000015000 008:00005 /usr/lib/libcrypto.so.1.0.0
00296000 12K    rw--  0000000000015000 008:00005 [ anon ]
.....
------各項指標解析----------------------------------------
Address: 記憶體開始地址
Kbytes:  佔用記憶體的位元組數(KB)
RSS:     保留記憶體的位元組數(KB)
Dirty:   臟頁的位元組數(包括共享和私有的)(KB)
Mode:    記憶體的許可權:read、write、execute、shared、private (寫時複製)
Mapping: 佔用記憶體的文件、或[anon](分配的記憶體)、或[stack](堆棧)
Offset:  文件偏移
Device:  設備名 (major:minor)

watch

  • watch 可以幫助實現定時輸出的命令結果,比如 netstat 沒有間隔輸出結果的功能。watch [-options] <command>
options 常用參數選項

-n <num> watch 默認每2秒運行一下程式,可以用 -n 來指定間隔的時間  
-d       watch 會高亮顯示變化的區域

切換終端: Ctrl+x     退出watch:Ctrl+g
  • watch 示例
# watch -n 1 -d netstat -ant
# watch uptime

6 網路數據抓取

tcpdump

  • tcpdump 是一個運行在命令行下的抓包工具。它允許用戶攔截和顯示發送或收到過網路連接到該電腦的TCP/IP和其他數據包。tcpdump 適用於大多數的類Unix系統作業系統;tcpdump 命令格式為:
# tcpdump [ -adeflnNOpqStvx ] [ -c 數量 ] [ -F 文件名 ]
        [ -i 網路介面 ] [ -r 文件名] [ -s len ]
        [ -T 類型 ] [ -w 文件名 ] [ 表達式 ]
選項參數

-a       將網路地址和廣播地址轉變成名字
-d     將匹配資訊包的程式碼以人們能夠理解的彙編格式給出
-dd     將匹配資訊包的程式碼以c語言程式段的格式給出
-ddd    將匹配資訊包的程式碼以十進位的形式給出
-e    在輸出行列印出數據鏈路層的頭部資訊,包括源mac和目的mac,以及網路層的協議
-f    將外部的Internet地址以數字的形式列印出來
-l    使標準輸出變為緩衝行形式
-n    指定將每個監聽到數據包中的域名轉換成IP地址後顯示,不把網路地址轉換成名字
-nn:    指定將每個監聽到的數據包中的域名轉換成IP、埠從應用名稱轉換成埠號後顯示
-t    在輸出的每一行不列印時間戳
-v    輸出一個稍微詳細的資訊,例如在ip包中可以包括ttl和服務類型的資訊
-vv    輸出詳細的報文資訊
-c    在收到指定的包的數目後,tcpdump就會停止
-F    從指定的文件中讀取表達式,忽略其它的表達式
-i    指定監聽的網路介面
-p:     將網卡設置為非混雜模式,不能與host或broadcast一起使用
-r    從指定的文件中讀取包(這些包一般通過-w選項產生)
-w    直接將包寫入文件中,並不分析和列印出來
-s len  len 表示從一個包中截取的位元組數。0表示包不截斷,抓完整的數據包。默認的話 tcpdump 只顯示部分數據包,默認68位元組
-T     將監聽到的包直接解釋為指定的類型的報文,常見的類型有rpc (遠程過程調用)和snmp(簡單網路管理協議)
-X       告訴tcpdump命令,需要把協議頭和包內容都原原本本的顯示出來(tcpdump會以16進位和ASCII的形式顯示),這在進行協議分析時是絕對的利器。    
  • 表達式選項 大體可以分成三種過濾條件,「類型」、「方向」和「協議」,這三種條件的搭配組合就構成了我們的過濾表達式
    • 類型關鍵字:主要包括host,net,port, 例如 host 210.45.114.211,指定主機 210.45.114.211,net 210.11.0.0 指明210.11.0.0是一個網路地址,port 21 指明埠號是21
    • 傳輸方向的關鍵字:主要包括src , dst ,dst or src, dst and src ,這些關鍵字指明了傳輸的方向。舉例說明,src 210.45.114.211 ,指明ip包中源地址是210.45.114.211, dst net 210.11.0.0 指明目的網路地址是210.11.0.0
    • 協議的關鍵字:主要包括 ether,ip,ip6,arp,rarp,tcp,udp等類型,及這幾個的包的協議內容。如果沒有指定任何協議,則tcpdump將會監聽所有協議的(更具體的請自行查看官方文檔)

image.png

第一行:「tcpdump: verbose output suppressed, use -v or -vv for fullprotocol decode」;

提示使用選項 -v 和 -vv,可以看到更全的輸出內容

第二行「listening on eth0, link-type EN10MB (Ethernet), capture size 65535bytes」;

我們監聽的是通過 eth0 這個NIC設備的網路包,且它的鏈路層是基於乙太網的,要抓的包大小限制是65535位元組。包大小限制值可以通過-s選項來設置

第三行」12:40:33.569037 00:19:e0:b5:10:94 > 00:1a:a0:31:39:d4, ethertypeIPv4 (0x0800),」

12:40:33.569037 分別對應著這個包被抓到的「時」、「分」、「秒」、「微妙」。 00:19:e0:b5:10:94 > 00:1a:a0:31:39:d4 表示MAC地址 00:19:e0:b5:10:94 發送到MAC地址為 00:1a:a0:31:39:d4 的主機,ethertype IPv4 (0x0800)表示Ethernet幀的協議類型為ipv4(即程式碼為0x0800)

第四行」length 66: 210.45.123.249.27236 > 172.16.0.11.1111: Flags [S],seq 1624463808;

length 66表示以太幀長度為66。 210.45.123.249.27236 表示這個包的源IP為210.45.123.249,源埠為27236,』>』表示數據包的傳輸方向, 172.16.0.11.1111, 表示這個數據包的目的端ip為172.16.0.11,目標埠為1111,1111埠是我的一個web伺服器監聽埠。Flags是[S],表明是syn建立連接包(即三次握手的第一次握手),seq1624463808 序號為1624463808,這個其實就是TCP三次握手的第一次握手:client(210.45.123.249)發送syn請求建立連接包

第五行」 win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0」

win 8192 表示窗口大小為8192位元組。options[mss 1460,nop,wscale 2,nop,nop,sackOK]為tcp首部可選欄位mss 1460表示mss是發送端(客戶端)通告的最大報文段長度,發送端將不接收超過這個長度的TCP報文段(這個值和MTU有一定關係)。nop是一個空操作選項, wscale指出發送端使用的窗口擴大因子為2, sackOK 表示發送端支援並同意使用SACK選

  • tcpdump 示例
~~ 只查目標機器埠是21或80的網路包,其他埠不關注
# tcpdump -i eth0 -c 10 'dst port 21 or dst port 80'
~~ 想獲取172.16.10.11 和 google.com之間建立TCP三次握手中帶有SYN標記位的網路包.
# tcpdump -i eth0 'host 172.16.0.11 and host google.com and tcp[13]&2!=0' -c 3 -nn
  • 最後一命令的 tcp[13]&2!=0 可能有點怪,這裡解析一下,標誌位(URG,ACK,PSH,RST,SYN,FIN)在 tcp頭部的第 13 個位元組中,而 SYN 則在低第二位(xxxxxx10,十進位是2),和2進行與操作,即可判斷報文是否 syn 報文

nc

  • nc 命令實現任意TCP/UDP埠的偵聽,nc可以作為 server 以TCP或UDP方式偵聽指定埠。nc 也可以作為 client 發起TCP或UDP連接
options 常用參數
-l    用於指定nc將處於偵聽模式。指定該參數,則意味著nc被當作server,偵聽並接受連接,而非向其它地址發起連接。
-s    指定發送數據的源IP地址,適用於多網卡機
-u    指定nc使用UDP協議,默認為TCP
-v    輸出交互或出錯資訊,新手調試時尤為有用
-w    超時秒數,後面跟數字
-z    使用 Zero-I/O mode,只在掃描通訊埠時使用
  • nc 示例
~~ 埠掃描
# nc -v -w 2 192.168.2.34 -z 21-24
nc: connect to 192.168.2.34 port 21 (tcp) failed: Connection refused
Connection to 192.168.2.34 22 port [tcp/ssh] succeeded!

~~ 簡單聊天工具 在 192.168.2.34 服務端監聽 1211
# nc -l 1211
~~ 在 192.168.2.33 上 連接 34 的 1211埠
# nc 192.168.2.34 1211

curl

  • curl 是一款很強大的 http 命令行工具。它支援文件的上傳和下載。命令格式:curl [option] [url]
option 常用參數

-A/--user-agent <string>   設置用戶代理髮送給伺服器
-b <name=string/file>      cookie字元串或文件讀取位置
-c <file>                  操作結束後把cookie寫入到這個文件中
-C <offset>                斷點續轉
-D <file>                  把header資訊寫入到該文件中
-e                         來源網址(偽造referer)
-o                         把輸出寫到該文件中
-O                         把輸出寫到該文件中,保留遠程文件的文件名
-r <range>                 分塊下載來自HTTP/1.1或FTP伺服器 range位元組
-T <file>                  上傳文件
-u <user[:password]>       設置伺服器的用戶和密碼
-L                         參數會讓 HTTP 請求跟隨伺服器的重定向。curl 默認不重定向
-x <host:port>             在給定的埠上使用HTTP代理
-#                         進度條顯示當前的傳送狀態
-X                         指定 HTTP 請求的方法
-d                         POST方式傳送數據(默認是application/x-www-form-urlencoded)
-H/--header <line>         自定義頭資訊傳遞給伺服器
  • curl 示例
~~ 顯示下載進度條
# curl -# -O //www.linux.com/lwl.jpg
~~ 上傳文件
# curl -T lwl.jpg -u 用戶名:密碼 ftp://www.linux.com/img/
~~ 發出 POST 請求
# curl -X POST //www.example.com
~~ data.json 是json 數據
# curl localhost:3000/api/json -X POST -d @data.json --header "Content-Type: application/json"

wget

  • wget 是一個下載文件的工具,對於Linux用戶是必不可少的工具,因為我們經常要下載一些軟體或從遠程伺服器恢復備份到本地伺服器。wget支援HTTP,HTTPS和FTP協議。命令格式:wget [-options] [url]
options 常用參數解析

-O <fileName>        把文檔寫到FILE文件中
-c                   (斷點續傳)接著下載沒下載完的文件
-P filePath          將文件保存到 filePath 目錄 
-b                   後台下載

TP 選項:
--ftp-user=USER         設置 ftp 用戶名為 USER
--ftp-password=PASS     設置 ftp 密碼為 PASS
  • wget 示例
~~ wget -b 後台下載
# wget -c -b -O wordpress.zip //cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
~~ ftp 下載 csc.txt 文件
# wget --ftp-user=baidu  --ftp-password=123 ftp://192.168.19.1/lwl/csc.txt

7 shell 腳本命令

shell 程式語法

sed

  • 如果涉及到文本處理,可試試 sed,sed 採用的是流編輯模式,在 sed 處理數據之前,需要預先提供一組規則,sed 會按照此規則來編輯數據
  • 之前寫的一篇文章:sed教程-linux命令

awk

  • awk 同樣適合處理文本,且更強大; 和 sed 命令類似,awk 命令也是逐行掃描文件,尋找含有目標文本的行,如果匹配成功,則會在該行上執行用戶想要的操作;反之,則不對行做任何處理
  • 之前寫的一篇文章:awk教程-linux命令

xargs

  • xargs 是一個強有力的命令,在 linux 命令管道傳遞中,它能夠捕獲上一個命令的輸出,然後傳遞給另外一個命令。xargs 默認的命令是 echo,這意味著通過管道傳遞給 xargs 的輸入將會包含換行和空白,不過通過 xargs 的處理,換行和空白將被空格取代
  • 命令格式:command |xargs [-options] nextCommand
options 參數解釋

-e flag 或 -E flag    flag必須是一個以空格分隔的標誌,當xargs分析到含有flag這個標誌的時候就停止
-r no-run-if-empty    當xargs的輸入為空的時候則停止xargs,不再去執行
-t                    表示先列印命令,然後再執行
-p                    每執行一次xargs 後面跟隨的 nextCommand 時,詢問一次用戶
-n num                將輸出數據用"空格"分割成多個參數,再按n個一組分批作為 nextCommand 執行時的參數
-L num 或 -l num      從標準輸入一次讀取 num 行送給 nextCommand 命令執行
-i 或 -I              將一行一行賦值給佔位符 {},在接下來的command里用 {} 替換數據
-s num                命令行的最大字元數,指的是 xargs 後面那個命令的最大命令行字元數
-d delim              指定分隔符,默認的xargs分隔符是回車(換行鍵),這裡修改的是xargs的分隔符
  • xargs 示例
~~ 複製所有圖片文件到 /data/images 目錄下
# ls *.jpg | xargs -n1 -I {} cp {} /data/images
~~ 查找所有的 jpg 文件,並且壓縮它們
# find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz

8 jvm 常用命令

jps

  • java 版的 ps 命令,查看java進程及其相關的資訊,如果想找到一個 java 進程的 pid,那可以用 jps 命令替代linux中的 ps 命令了,命令格式: jps [-options] [hostIP]。如果要查看其他 hostIP 機器上的jvm進程,需要在待查看機器上啟動 jstatd
options 參數解釋

-l : 輸出主類全名或jar路徑
-q : 只輸出LVMID
-m : 輸出JVM啟動時傳遞給main()的參數
-v : 輸出JVM啟動時顯示指定的JVM參數
  • jps 示例
# jps -lmv
18884 /opt/app/spring-boot/order.jar --spring.profiles.active=test
39812 /opt/app/spring-boot/user.jar --spring.profiles.active=test

jinfo

  • jinfo 是用來查看JVM參數和動態修改部分JVM參數的命令;命令格式:jinfo [-option] <pid>
options 參數解釋

-flag <name>          列印指定名稱的參數
-flag [+|-]<name>     打開或關閉參數
-flag <name>=<value>  設置參數
-flags                列印所有參數
-sysprops             列印系統配置
默認是 flags 和 sysprops
  • jinfo 示例
# jinfo -flags 19092
Attaching to process ID 19092, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.181-b13
Non-default VM flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:CICompilerCount=4 -XX:InitialHeapSize=266338304 -XX:+ManagementServer -XX:Max
HeapSize=4229955584 -XX:MaxNewSize=1409810432 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=88604672 -XX:OldSize=177733632 -XX:TieredStopAtLevel=1 -XX:+UseCompressedClassP ointers -XX:+UseCompressedOops 
.....

jstat

  • jstat 命令是使用頻率比較高的命令,主要用來查看JVM運行時的狀態資訊,包括記憶體狀態、垃圾回收等;命令格式:jstat [-option] pid [interval] [count],pid 是進程id,interval 是列印間隔時間(毫秒),count是列印次數(默認一直列印)
option 參數解釋

-class            : class loader的行為統計
-compiler         : HotSpt JIT編譯器行為統計
-gc               : 垃圾回收堆的行為統計
-gccapacity       : 各個垃圾回收代容量(young,old,perm)和他們相應的空間統計
-gcutil           : 垃圾回收統計概述
-gccause          : 垃圾收集統計概述(同-gcutil),附加最近兩次垃圾回收事件的原因
-gcnew            : 新生代行為統計
-gcnewcapacity    : 新生代與其相應的記憶體空間的統計
-gcold            : 年老代和永生代行為統計
-gcoldcapacity    : 年老代行為統計
-gcpermcapacity   : 永生代行為統計
-printcompilation : HotSpot編譯方法統計
  • jstat 示例
# jstat -gcutil 18884
S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
0.00  84.14  19.93  45.77  91.32  87.65    641   18.311     6    3.512   21.824

------各項指標解析----------------------------------------
S0	第 0 個 survivor(倖存區)使用的百分比
S1	第 1 個 survivor(倖存區)使用的百分比
E	Eden 區使用記憶體的百分比
O	老生代記憶體使用的百分比
P/M	PermGen/MetaSpace 的記憶體使用百分比
YGC	程式啟動以來 Young GC 發生的次數
YGCT	程式啟動以來 Young GC 共消耗的時間(s)
FGC	程式啟動以來 Full GC 發生的次數
FGCT	程式啟動以來 Full GC 共消耗的時間(s)
GCT	程式啟動以來 GC 的總用時(s)

jstack

  • jstack 是用來查看 jvm 執行緒快照的命令,執行緒快照是當前JVM執行緒正在執行的方法堆棧集合。使用 jstack 命令可以定位執行緒出現長時間卡頓的原因,例如死鎖,死循環等。jstack 還可以查看程式崩潰時生成的 core 文件中的 stack 資訊;命令格式:jstack [-Flm] <pid>
option 參數解釋

-F  當使用jstack <pid>無響應時,強制輸出執行緒堆棧
-m  同時輸出java和本地堆棧(混合模式)
-l  額外顯示鎖資訊 (小寫l)
  • jstack 示例,查看 pid = 1211 的執行緒棧
# jstack -l 1211
"DiscoveryClient-CacheRefreshExecutor-0" #146 daemon prio=5 os_prio=0 tid=0x000000002ba2c000 nid
=0x4fe4 waiting on condition [0x000000002cade000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x00000006c775dc60> (a java.util.concurrent.SynchronousQueue$Tra
nsferStack)
......

jmap

  • jmap 是用來生成堆dump文件 或 查看堆相關的各類資訊的命令,例如查看 finalize 執行隊列,heap 的詳細資訊和使用情況;命令格式:jmap [-option] <pid>
option 參數解釋

-heap 列印java heap摘要
-histo[:live] 列印堆中的java對象統計資訊
-clstats 列印類載入器統計資訊
-finalizerinfo 列印在f-queue中等待執行finalizer方法的對象
-dump:<dump-options> 生成java堆的dump文件
      dump-options:
      live 只轉儲存活的對象,如果沒有指定則轉儲所有對象
      format=b 二進位格式
      file=<file> 轉儲文件到 <file>
-F 如果jvm掛起,可用-F強制執行選項,會影響java 服務
  • jmap 示例,dump 出 pid=1211 java進程的記憶體堆文件
# jmap -dump:live,format=b,file=dump.hprof 1211
Dumping heap to /home/lwl/dump.hprof ...
Heap dump file created

歡迎指正文中錯誤

參考文章