Linux中的幾個命令–top、free、uniq
- 2019 年 11 月 6 日
- 筆記
關於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