Linux中的幾個命令–top、free、uniq

  • 2019 年 11 月 6 日
  • 筆記

Linux中的幾個命令
01

關於top命令的詳解

Linux top命令用於實時顯示 process 的動態,當我們在命令框中敲入top命令然後回車之後,可以看到如下輸出:

top - :: up  days,  :,  users,  load average: ., ., .  Tasks:  total,    running,  sleeping,    stopped,    zombie  Cpu(s):  5.9%us,  .%sy,  .%ni, 93.7%id,  .%wa,  .%hi,  .%si,  .%st  Mem:  k total, k used,   k free,   k buffers  Swap:  k total,   k used,  k free,  k cached      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND    mysql         m 1.1g  m S 39.8  4.5  : mysqld    cassandr      m 4.5g m S  4.6 19.2  : java   root          m m  S  3.0  . :40.27 filebeat   mysql         m m  m S  1.3  2.8   : mysqld   mysql         m m  m S  .  2.2 :59.41 mysqld   dba_mysq       m    S  .  .   :. sshd   dba_mysq          R  .  .   :. top   mysql         m 1.3g  m S  .  5.4   : mysqld   mysql         m 1.4g  m S  .  5.9   : mysqld       root              S  .  .   :11.38 init       root                       S  .  .   :. kthreadd       root      RT                 S  .  .   :56.87 migration/       root                       S  .  .  :32.83 ksoftirqd/       root      RT                 S  .  .   :. stopper/  

它顯示的是進程的狀態,並且每5s更新一次,類似watch命令一樣,對結果會刷新。下面是它的命令參數:

PID: 進程描述符 USER: 進程的擁有者 PRI:進程的優先順序 NI: nice level

VIRT:virtual memory usage 虛擬記憶體 1、進程「需要的」虛擬記憶體大小,包括進程使用的庫、程式碼、數據等 2、假如進程申請100m的記憶體,但實際只使用了10m,那麼它會增長100m,而不是實際的使用量

RES:resident memory usage 常駐記憶體 1、進程當前使用的記憶體大小,但不包括swap out 2、包含其他進程的共享 3、如果申請100m的記憶體,實際使用10m,它只增長10m,與VIRT相反 4、關於庫佔用記憶體的情況,它只統計載入的庫文件所佔記憶體大小

SHR:shared memory 共享記憶體 1、除了自身進程的共享記憶體,也包括其他進程的共享記憶體 2、雖然進程只使用了幾個共享庫的函數,但它包含了整個共享庫的大小 3、計算某個進程所佔的物理記憶體大小公式:RES – SHR 4、swap out後,它將會降下來

S:進程的狀態,有 S=sleeping,R=running,T=stopped or traced,D=interruptible sleep(不可中斷的睡眠狀態),Z=zombie。 %CPU: CPU使用率 %MEM: 物理記憶體的使用 TIME: 進程佔用的總共cpu時間 COMMAND:進程的命令

top 運行中可以通過 top 的內部命令對進程的顯示方式進行控制。內部命令如下: s – 改變畫面更新頻率 l – 關閉或開啟第一部分第一行 top 資訊的表示 t – 關閉或開啟第一部分第二行 Tasks 和第三行 Cpus 資訊的表示 m – 關閉或開啟第一部分第四行 Mem 和 第五行 Swap 資訊的表示 N – 以 PID 的大小的順序排列表示進程列表 P – 以 CPU 佔用率大小的順序排列進程列表 M – 以記憶體佔用率大小的順序排列進程列表 h – 顯示幫助 n – 設置在進程列表所顯示進程的數量 q – 退出 top

A: 根據單窗口切換成多窗口,可以看到四個不同的窗口,可以通過a或者w來切換多個窗口。 四個窗口的名字分別為:Def,Job,Mem,Usr

f:進入一個動態配置top的screen中,可以根據自己的喜好配置top

o:對top的現有配置排序(order)

r:使用renice命令

k:使用kill命令

i:使top不顯示任何閑置或者僵死進程。

c:顯示整個命令行而不只是顯示命令名。

top的命令行使用方式

(1) 批量處理模式

$ top -b  

加上-b後,top顯示的時候,將每一次顯示的結果都列印出來,不會將上一次的結果給衝掉。

(2) 顯示某個進程的資訊

$ top -p pid

如果是多個進程,只要如下:

$ top -p pid1,pid2,pid3

(3) 顯示某個用戶的進程資訊

$ top -u username

(4) 顯示執行緒的資訊,而不是進程的資訊

$ top -H  

(5) 設置刷屏的時間(單位為s)

$ top -d ntime

02

free命令

1.命令格式:

free [參數]

2.命令功能:

free 命令顯示系統使用和空閑的記憶體情況,包括物理記憶體、交互區記憶體(swap)和內核緩衝區記憶體。共享記憶體將被忽略

3.命令參數:

-b  以Byte為單位顯示記憶體使用情況。

-k  以KB為單位顯示記憶體使用情況。

-m  以MB為單位顯示記憶體使用情況。

-g 以GB為單位顯示記憶體使用情況。

-o  不顯示緩衝區調節列。

-s<間隔秒數>  持續觀察記憶體使用狀況。

-t  顯示記憶體總和列。

-V  顯示版本資訊

下面給出相關示例:

#簡單參數介紹  [dba_mysql@tk-dba-mysql-194 ~]$ free -G  free: invalid option -- 'G'  usage: free [-b|-k|-m|-g|-h] [-l] [-o] [-t] [-s delay] [-c count] [-V]    -b,-k,-m,-g show output in bytes, KB, MB, or GB    -h human readable output (automatic unit scaling)    -l show detailed low and high memory statistics    -o use old format (no -/+buffers/cache line)    -t display total for RAM + swap    -s update every [delay] seconds    -c update [count] times    -a show available memory if exported by kernel (> characters per line)    -V display version information and exit  #以b為單位來顯示空閑記憶體情況  [dba_mysql@tk-dba-mysql-194 ~]$ free -b               total       used       free     shared    buffers     cached  Mem:  -/+ buffers/cache:  Swap:  #以kb為單位來顯示空閑記憶體情況  [dba_mysql@tk-dba-mysql-194 ~]$ free -k               total       used       free     shared    buffers     cached  Mem:  -/+ buffers/cache:  Swap:  #以Mb為單位來顯示空閑記憶體情況  [dba_mysql@tk-dba-mysql-194 ~]$ free -m               total       used       free     shared    buffers     cached  Mem:  -/+ buffers/cache:  Swap:  #以GB為單位來顯示空閑記憶體情況  [dba_mysql@tk-dba-mysql-194 ~]$ free -g               total       used       free     shared    buffers     cached  Mem:  -/+ buffers/cache:  Swap:  #每3秒顯示空閑記憶體情況  [dba_mysql@tk-dba-mysql-194 ~]$ free -s               total       used       free     shared    buffers     cached  Mem:  -/+ buffers/cache:  Swap:                 total       used       free     shared    buffers     cached  Mem:  -/+ buffers/cache:  Swap:    ^C  #顯示total行  [dba_mysql@tk-dba-mysql-194 ~]$ free -mt               total       used       free     shared    buffers     cached  Mem:  -/+ buffers/cache:  Swap:  Total:  

03

uniq命令

Linux uniq 命令用於檢查及刪除文本文件中重複出現的行列,一般與 sort 命令結合使用。uniq 可檢查文本文件中重複出現的行列。這個命令的用法比較簡單,這裡只給出相關的實例,相關的注釋在例子中有:

#首先我們創建一個文件,文件的內容如下:  [dba_mysql ~]$ cat yeyz.lst  test 30  test 30  test 30  Hello 95  Hello 95  Hello 95  Hello 95  Linux 85  Linux 85    #使用uniq命令進行處理,我們發現重複的記錄被去除了  [dba_mysql ~]$ uniq yeyz.lst  test 30  Hello 95  Linux 85  Linux 85    #使用uniq -c參數,我們可以發現每一行記錄前面統計出來了具體的重複行數  [dba_mysql ~]$ uniq -c yeyz.lst        3 test 30        4 Hello 95        1 Linux 85        1 Linux 85  [dba_mysql ~]$    #再創建一個文件yeyz.lst2文件,這個文件的不同之處是記錄是亂序的。  [dba_mysql ~]$ cat yeyz.lst2  test 30  Hello 95  Linux 85  test 30  Hello 95  Linux 85  test 30  Hello 95  Linux 85    #我們使用uniq命令,發現輸出的結果並沒有進行去重  [dba_mysql ~]$ uniq yeyz.lst2  test 30  Hello 95  Linux 85  test 30  Hello 95  Linux 85  test 30  Hello 95  Linux 85    #想要進行去重,我們必須使用sort命令對這些記錄先進行排序,然後再使用去重的方法  [dba_mysql ~]$ sort yeyz.lst2  Hello 95  Hello 95  Hello 95  Linux 85  Linux 85  Linux 85  test 30  test 30  test 30    #再次去重,我們發現還是不能出現正確的結果,原因是sort並沒有改變yeyz.lst2文件本身,只是輸出了排序後的結果  [dba_mysql ~]$ uniq yeyz.lst2  test 30  Hello 95  Linux 85  test 30  Hello 95  Linux 85  test 30  Hello 95  Linux 85    #我們看看剛才排序和去衝過後的文件,發現他們並沒有發生變化,也就證明了前文所說的。  [dba_mysql ~]$ cat yeyz.lst  test 30  test 30  test 30  Hello 95  Hello 95  Hello 95  Hello 95  Linux 85  Linux 85  [dba_mysql ~]$ cat yeyz.lst2  test 30  Hello 95  Linux 85  test 30  Hello 95  Linux 85  test 30  Hello 95  Linux 85    #最後我們通過sort+uniq的命令,對文件中的內容進行了保存。  [dba_mysql ~]$ sort yeyz.lst2|uniq  Hello 95  Linux 85  test 30    #當然,uniq照樣可以接一個-c參數  [dba_mysql ~]$ sort yeyz.lst2|uniq -c        3 Hello 95        3 Linux 85        3 test 30      #如果想要保存結果,可以把它重定向到一個文件中去  [dba_mysql@tk-dba-mysql-194 ~]$ sort yeyz.lst2|uniq -c > yeyz.lst3  [dba_mysql@tk-dba-mysql-194 ~]$ cat yeyz.lst3        3 Hello 95        3 Linux 85        3 test 30    ##注意>不要寫成>>,寫成>>就變成了追加。  [dba_mysql@tk-dba-mysql-194 ~]$ sort yeyz.lst2|uniq -c >> yeyz.lst3  [dba_mysql@tk-dba-mysql-194 ~]$ cat yeyz.lst3        3 Hello 95        3 Linux 85        3 test 30        3 Hello 95        3 Linux 85        3 test 30