Linux常用命令及詳細說明 — 結合工作(側重性能監控,包括CPU、記憶體、IO、網路、磁碟等)

来源:https://www.cnblogs.com/NaughtyCat/archive/2019/10/23/most-useful-linux-command-in-work.html
-Advertisement-
Play Games

Linux 性能(IO\CPU\記憶體\網路\磁碟)監控命令及基本命令 結合伺服器後端日常開發工作 ...


(一)Linux監控的幾個常用命令(對於伺服器後端程式猿很重要,必須掌握):

命令 功能 命令 功能
iostat 統計CPU及網路、設備和分區IO的數據 vmstat 展示給定時間伺服器的狀態值(包括CPU使用率、記憶體使用狀況、虛擬記憶體交換情況、IO讀寫情況),很常用
free 顯示記憶體狀況,包括空閑以及被使用的物理記憶體、交換記憶體以及被kernel使用的緩衝區 sar  System Activity report 系統活動報告,是目前Linux最為全面的系統性能分析工具之一 
ps 顯示當前正在運行的所有進程的快照 strace 跟蹤進程執行時系統調和所接收的信號
top 實時顯示系統中各個進程的資源(cpu和load)占用狀況,類似於windows任務管理器 tcpdump

dump the traffic on a network, 根據用戶定義對網路上的包進行截獲的包分析工具,

功能和查看pcap包的wireshark工具差不多

 

  • iostat

 統計CPU及網路、設備和分區IO的數據,具體命令行參數見下表:

選項 含義
 -d  顯示設備(磁碟)使用狀態
 -k 某些使用block為單位的列強制使用kilobytes/每秒
 -x 顯示更多統計信息
 -c  顯示CPU利用率

輸入"iostat -x”,結果如下圖:

avg-cpu統計信息每段含義見下表:

參數 含義
 %user   在用戶態運行程式,CPU利用的百分比
 %nice  在nice優先順序(即靜態優先順序,具體啥含義請百度)
 %system  在內核態運行程式,CPU利用的百分比
 %iowait 特別重要 — show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request
 %steal

 虛擬CPU等待的百分比 — Show the percentage of time spent in involuntary wait by the virtual CPU or CPUs

 while the hypervisor was servicing another virtual processor

 %idle  CPU 空閑的比列,CPU沒有IO請求需要處理 — 和 %iowait含義相反

 

 設備(device)輸出結果每段含義詳細說明見下表:

參數 含義
 rrqm/s 

 每秒這個設備相關的讀取請求有多少被merge了,

 當系統調用需要讀取數據的時候,VFS將請求發到各個FS,如果FS發現不同的讀取請求讀取的是相同Block的數據,FS會將這個請求合併Merge

 wrqm/s  每秒這個設備相關的寫入請求有多少被merge了
 r/s  The number of read requests that were issued to the device per second
 w/s  The number of write requests that were issued to the device per second
 rsec/s  每秒讀取的扇區數
 wsec/s  每秒寫入的扇區數
 avgrq-sz  
 avgqu-sz  
 await  每一個IO請求的處理的平均時間(單位是毫秒)
 svctm  
 %util

 在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔1秒,該設備有0.8秒在處理IO,

 而0.2秒閑置,那麼該設備的%util = 0.8/1 = 80%,所以該參數暗示了設備的繁忙程度。

一般地,如果該參數是100%表示設備已經接近滿負荷運行了

(當然如果是多磁碟,即使%util是100%,因為磁碟的併發能力,所以磁碟使用未必就到了瓶頸)。

 

參考 iostat(1) - Linux man page

  • ps
  • grep
  • top

實時顯示系統中各個進程的資源占用狀況,類似於windows任務管理器,預設3秒鐘刷新一次,太快了,看不過來,-d 可以指定,多少時間更新一次

具體命令行參數說明見下表:

選項 含義
-a 按照記憶體使用率排序
-d 設置多長時間(以秒為單位)刷新一次結果
-p <pid>  查看指定進程ID的信息
 -u <username>   查看指定用戶名的信息
 -i   不顯示任何閑置 (idle) 或僵屍 (zombie) 的進程
 -n iterations  指定更新多少次信息後終止
 -c  顯示完整命令,如mysql會顯示 “/usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql” 
 -s  安全模式
 -S  累積時間模式,開啟此模式,會列出該進程及它已經死掉的子進程所使用的CPU時間

 

例如,“top -d 30” —— 30秒刷新一次(預設按cpu占用率排序),結果如下圖:

 輸出結果前5行(統計的整體信息)的每一段的含義如下表所示:

段1含義 段2含義 段3含義 段4含義 段5含義 段6含義 段7含義 段8含義
 1 - top 13:43:10 - 當前時間  up 4:21 - 系統運行時間,格式為"時:分"  1 user - 當前登錄用戶數

 load average: 0.01, 0.04, 0.01 - 系統負載,即任務隊列的平均值

三個數值依次為"1分鐘5分鐘 15分鐘”到目前的平均值

       
 2 - Tasks 1012 total - 進程總數  1 running -  正在運行的進程數  1095 sleeping - 睡眠的進程數  6 stopped - 停止的進程數 0 zombie - 僵屍進程數       
 3 - Cpu(s)  0.8%us - 用戶空間占用CPU百分比  0.1%sy - 內核空間占用CPU百分比  0.0%ni - 用戶進程空間改變過優先順序的占CPU百分比  99.2%id - 空閑CPU百分比 0.0%wa - 等待輸入輸出的CPU百分比  0.0%hi -  0.0%si -  0.0%st - 
 4 - Mem  132173688k total - 物理記憶體總量  38002800k used - 已使用的物理記憶體總量  94170888k free - 空閑記憶體總量  208420k buffers - 用於內核緩存的記憶體總量        
 5 -Swap  4194600k total - 交換區總量  0k used - 已使用的交換區總量  4194300k free - 空閑交換區總量  2624596k cached - 緩衝的交換區總量        

 

在top命令模式下,按“f”鍵,會顯示每個column的詳細信息,如下圖:

每一列的含義翻譯成中文如下表所示:

列名 含義
PID  進程ID
USER  用戶名
PR  進程優先順序
NI  nice value,不知道怎麼翻譯好
VIRT  進程使用的虛擬記憶體總量(kb)
RES  進程使用的、未被換出的物理記憶體大小
SHR  共用記憶體大小(kb)
S  進程狀態。D=不可中斷的睡眠狀態,R=運行,S=睡眠,T=跟蹤/停止,Z=僵屍進程
%CPU  上次更新到現在的CPU時間占用百分比
%MEM  進程當前使用的可被共用的記憶體容量
TIME+  task自啟動以來,累計占用cpu時間,精確到百分之一秒
COMMAND  命令行或者程式名

 

  •  free

 顯示空閑和使用的記憶體信息,命令參數選項如下表:

選項 含義
 -b -k -m -g  單位分別為bytes, KB, MB, G
 -h 人類可讀(即自動以MB,G等為單位顯示)
 -t  額外顯示總數 (RAM + swap)
 -o (old format) 不會顯示 -/+ buffers/cache 這行信息

 

輸入“free -m”,以M為單位,便於精確計算講解,結果如下圖:

 

輸出結果具體每行每列的含義詳見下表:

 行 total used free shared buffers cached
 Mem: 記憶體總數 (total = used + free) 已經使用的記憶體數量 空閑記憶體數量 共用記憶體數量,據說已經廢棄不用 緩衝記憶體數量 緩存記憶體數量
 -/+ buffers/cache:  

(- buffers/cache) used —— 反映的是被程式實實在在吃掉的記憶體

使用的記憶體數 = 第一行即Mem行的 “used - buffers - cached” = 34562 - 87 - 1322 = 33151M

(+ buffers/cache) free —— 反映的是可以挪用的記憶體總數

空閑記憶體數 = 第一行即Mem行的 “free + buffers + cached” = 94513 + 87 + 1322 = 95922M

差2M不知道哪裡來的

     
 swap: (交換區) 交換區記憶體總數 交換區已使用記憶體數 交換區空閑記憶體數      
  • sar

System Activity report 系統活動報告,是目前Linux最為全面的系統性能分析工具之一

  • vmstat
  • tcpdump

dump the traffic on a network, 根據用戶定義對網路上的包進行截獲的包分析工具。tcpdump可以將網路傳輸的數據包的“頭”完全截獲下來以供分析。它支持針對網路層、協議、主機、網路或埠的過濾,並提供and、or、not等邏輯語句來幫助你去掉無用信息。直接啟動tcpdump將監視第一個網路介面上所有流過的數據包,抓取100個包的命令“tcpdump -c 100”,結果如下圖:

具體命令行參數詳見下表:

選項 含義
-i <網卡號或稱之為網路介面> 監聽指定網卡(又稱網路介面)的數據包,如tcpdump -i eth0(監聽第一個網路介面,etho也是預設監聽的網卡,第一個嘛)
   
   
 tcpdump -i etho dst host hostname 監視所有發送到主名為hostname的網路數據包(dst — 目的地,通過預設網卡)
 tcpdump -i etho src host hostname 截獲主機名為hostname所發送的所有數據(src — 源,通過預設網卡)
 tcpdump ip host 210.27.48.1 and !210.27.48.2  獲取主機210.27.48.1除了和主機210.27.48.2之外所有主機通信的網路包 (!—— 取反,即非的意思嘛)
   
   
   

 

 (二)基本簡單命令

列表彙總基本命令:

命令 功能 命令 功能 命令 功能
 ls  查看當前目錄下有哪些文件和文件夾  whereis  查找可執行的軟體命令在哪裡  clear/reset/ CTRL + l  清屏——切換到下一個新的屏幕
 pwd  顯示當前目錄的完整路徑  cd  改變所在目錄  vi  文本編輯器
 cat  輸出文件的內容到屏幕  mkdir  創建目錄  vim  程式編輯器
 sh  執行shell腳本  rmdir  刪除目錄  kill  殺死進程
 yum  軟體包管理器  mv  移動文件  ifconfig  顯示或者設置網路設備
 sudo  以系統管理員的身份執行指令,類似於windows  CMD,右鍵選擇"以管理員身份運行“”  rm  刪除文件  cal  日曆
 df  查看磁碟使用情況  cp  複製文件  date  日期
 stat  顯示文件或者文件系統的狀態  touch  更新文件的訪問時間和修改時間,如果不存在,則創建之  bc  計算器

 

linux命令的常識:

  (1)大小寫敏感,如 "top"可以識別,"Top" 則comand not found

  (2)-h (部分命令支持,如衝突則不支持)和 --help(大多數命令支持),查看命令幫助信息,如 rmdir --help,提示“ rmdir [OPTION]... DIRECTORY..

  (3)命令有縮寫和全拼兩種格式,如 rmdir 的"-p" <=> "--parents"

  (4)CTRL +  C ,exit 當前正在執行的命令;CTRL + Z , stop 當前正在執行的命令

  (5)命令格式說明,“【】”括起來表示選項可選,接下來緊跟的詳細參數,如ls命令說明:“ls [OPTION]... [FILE]...

  (6)可通過“|”進行命令拼接,如“ps -ef | grep java | grep -v grep” 

  (7)linux 命令或者參數在輸入1個或2個字元後,按Tab鍵,會列出可選命令和參數,如果輸入3個或者4個字元,可查找出唯一的命令和參數,將自動補全

  (8)鍵盤“PgUp”“PgDn"及 鍵盤“↑”“↓” 可以切換到上一個或者下一個已輸入的命令;按鍵“←” 和“→” ,可以在命令里左右移動游標;按鍵“Home” 和“End” 可以跳轉到命令的第一個字元和末尾

  (8)linux里所有東西都被當做文件,不像windows有硬體設備的概念,如磁碟、CPU等,所以你裝的所有軟體,如mysql等都是文件

 

詳細論述:

  • ls

查看當前目錄下有哪些文件及文件夾,具體命令行參數說明見下表:

 

常用選項 含義
-l 一行顯示一個文件或者文件夾,並顯示諸如文件大小、文件最後修改時間、owner等信息
-a 列出所有文件及文件夾,包括隱藏文件
-R 把子文件夾下的文件也全部列出來,可以“ls -R -l”組合用
-S 按文件大小倒敘列出所有文件
-h 以人類可讀的形式列出文件大小(K,M,G)

如在 linux的根目錄下,輸入“ls”,結果如下圖:

如果是在包含有文件的目錄下,輸入“ls”,比如在root下,則會包含文件如 “install.log” 及文件夾 “Music” 等等,結果如下圖:

 

組合命令,ls -S -h -l結果如下圖:

  • pwd

顯示當前的完整路徑名,如下圖:

  • cd

切換當前目錄,具體語法: cd [dirName],具體命令行參數說明見下表:

選項 含義
 .. 切換到父級目錄
 /  切換到根目錄
 ~ 切換到home根目錄

 

  • whereis

查找命令—具體語法: whereis [ -sbmu ] [ -SBM dir ... -f ] name...,例如"whereis mysql",結果如下圖:

  • cat

輸出文件內容到終端,例如“cat install.log”,結果如下圖:

  • sh
  • ifconfig

顯示或者設置網路設備,輸入“ifconfig”, 結果如下圖(可以看到自己的ipv4 、ipv6 地址等信息):

  • kill
  • rm
  • mv
  • cp
  • touch

更新文件的訪問時間和修改時間,如果文件不存在,則創建之。如我在root根目錄,“touch test2019.txt”,文件不存在則創建之,效果如下圖:

  • mkdir

創建目錄,

  • rmdir
  • df
  • vi 及vim
  • yum 
  • sudo
  • stat

顯示文件或者文件系統的狀態,具體語法: stat [OPTION]... FILE...,例如stat a.txt, 結果如下圖:

  • bc

內置計算器,"bc -q" 不會輸出關於bc軟體的一些信息,直接用(回車輸出結果),如下圖:

  • cal

日曆

  • date

日期—具體語法: date [OPTION]... [+FORMAT],例如“date ‘+%Y % m%d %H %m’”,輸出當期日期的年月日、時、分,結果如下圖:

 

附註:

 

未完待續,空了接著完善

*****************************************************************************************************

精力有限,想法太多,專註做好一件事就行

  • 我只是一個程式猿。5年內把代碼寫好,技術博客字字推敲,堅持零拷貝和原創
  • 寫博客的意義在於鍛煉邏輯條理性,加深對知識的系統性理解,鍛煉文筆,如果恰好又對別人有點幫助,那真是一件令人開心的事

*****************************************************************************************************


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在我們開發微信應用的時候,包括公眾號、企業微信、小程式等,都需要基於一定的框架基礎上開發,才能事半功倍,一般情況下,我們需要處理好微信菜單和微信事件的對接,以及後臺數據管理系統和許可權管理的有效整合,或者是基於業務流程的相關流轉等,本篇隨筆介紹如何基於微信開發框架進行業務開發的處理過程。 ...
  • 本篇簡述瞭如何使用ODP方式操作Oracle資料庫,如有錯誤歡迎指正 ...
  • 前言 我在剛接觸使用中間件的時候,發現,中間件的使用並不是最難的,反而是中間件的下載,安裝,配置才是最難的。 所以,這篇文章我們從頭開始學習RabbitMq,真正的從頭開始。 關於消息隊列 其實消息隊列沒有那麼神秘,我們這樣想一下,用戶訪問網站,最終是要將數據以HTTP的協議的方式,通過網路傳輸到主 ...
  • 截止目前為止CentOS的最新版本為CentOS 8版本,接下來就介紹CentOS Linux 8.0.1905的安裝過程 1. 安裝CentOS 8 成功引導系統會顯示如上圖的界面: # 界面說明 Install CentOS Linux 8.8.1905: 安裝CentOS Linux 8.0. ...
  • 常用的Windows 命令使用能夠提升工作效率以及快捷處理事項。 下麵為平時常用的Windows 命令/cmd 命令。 一、以下命令無需打開cmd 視窗即可操作(輸入完畢 打個 回車,即可執行)。 1、部署網站需要經常與IIS打交道:(已安裝IIS) (Win + R ) + inetmgr 快速打 ...
  • 再次重啟前將U盤插上,進系統前按快速選擇啟動裝置F12(不同品牌電腦可能不同),選擇從U盤啟動; 進入第一個安裝界面時一定要註意:在跳轉前,按E進入grub設置界面,移動游標到倒數第二行的”quiet splash”後面,空一格輸入“nouveau.modeset=0” (如此的目的是禁止安裝時載入 ...
  • 部署LAMP平臺搭建 一、源碼安裝LAMP 1、 安裝apache [root@localhost ~]# yum -y install gcc* apr-devel apr-util-devel pcre-devel [root@localhost src]# [root@localhost sr ...
  • (轉載) ubuntu 16.04國內下載地址: 中科大源 http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/ 阿裡雲開源鏡像站 http://mirrors.aliyun.com/ubuntu-releases/16.04/ 蘭州大學開源鏡像站 ht ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...