Linux shell 学习笔记(2)— 监测程序、磁盘空间和处理文件(ps -ef、top、kill、df、du 、grep、tar)
1. 監測程序
1.1 檢查進程
默認情況下,ps 命令只會顯示運行在當前控制臺下的屬于當前用戶的進程。
$ ps
PID TTY TIME CMD
3081 pts/0 00:00:00 bash
3209 pts/0 00:00:00 ps
上圖顯示了程序的進程 ID(Process ID,PID)、它們運行在哪個終端(TTY)以及進程已用的CPU 時間。
ps -ef 查看系統上運行的所有進程
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 11:29 ? 00:00:01 init [5]
...
rich 3081 3080 0 12:00 pts/0 00:00:00 -bash
rich 4445 3081 3 13:48 pts/0 00:00:00 ps -ef
- UID:啟動這些進程的用戶
- PID:進程的進程ID
- PPID:父進程的進程號(如果該進程是由另一個進程啟動的)
- C: 進程生命周期中的CPU利用率
- STIME:進程啟動時的系統時間
- TTY: 進程啟動時的終端設備
- TIME:運行進程需要的累計CPU時間
- CMD:啟動的程序名稱
1.2 實時監測進程
top 命令跟 ps 命令相似,能夠顯示進程信息,但它是實時顯示的。
輸出的第一部分顯示的是系統的概況:
第一行顯示了當前時間、系統的運行時間、登錄的用戶數以及系統的平均負載。
平均負載有3個值:最近1分鐘的、最近5分鐘的和最近15分鐘的平均負載。值越大說明系統的負載越高。
第二行顯示了進程概要信息——top命令的輸出中將進程叫作任務(task):有多少進程處在運行、休眠、停止或是僵化狀態(僵化狀態是指進程完成了,但父進程沒有響應)。
下一行顯示了CPU的概要信息。top根據進程的屬主(用戶還是系統)和進程的狀態(運行、空閑還是等待)將CPU利用率分成幾類輸出。
最后兩行中第一行說的是系統的物理內存:總共有多少內存,當前用了多少,還有多少空閑。后一行說的是同樣的信息,不過是針對系統交換空間。
最后一部分顯示了當前運行中的進程的詳細列表,有些列跟ps命令的輸出類似:
-
PID:進程的 ID。
-
USER:進程屬主的名字。
-
PR:進程的優先級。
-
NI:進程的謙讓度值。
-
VIRT:進程占用的虛擬內存總量。
-
RES:進程占用的物理內存總量。
-
SHR:進程和其他進程共享的內存總量。
-
S:進程的狀態(D 代表可中斷的休眠狀態,R 代表在運行狀態,S 代表休眠狀態,T 代表跟蹤狀態或停止狀態,Z 代表僵化狀態)。
-
%CPU:進程使用的 CPU 時間比例。
-
%MEM:進程使用的內存占可用內存的比例。
-
TIME+:自進程啟動到目前為止的 CPU 時間總量。
-
COMMAND:進程所對應的命令行名稱,也就是啟動的程序名。
默認情況下,top 命令在啟動時會按照 %CPU 值對進程排序。鍵入 f 允許你選擇對輸出進行排序的字段,鍵入 d 允許你修改輪詢間隔。鍵入 q 可以退出 top。
1.3 結束進程
在 Linux 中,進程之間通過信號來通信。進程的信號就是預定義好的一個消息,進程能識別它并決定忽略還是作出反應。
-
kill 命令
kill命令可通過進程 ID(PID)給進程發信號。默認情況下,kill 命令會向命令行中列出的全部 PID 發送一個 TERM 信號。
要發送進程信號,你必須是進程的屬主或登錄為 root 用戶。
$ kill 3940 -bash: kill: (3940) - Operation not permittedTERM 信號告訴進程可能的話就停止運行,如果要強制終止,-s 參數支持指定其他信號(用信號名或信號值)。
$ sudo kill -s HUP 3940 -
killall 命令
killall 命令非常強大,它支持通過進程名而不是 PID 來結束進程。killall 命令也支持通配符。
killall http*
2. 監測磁盤空間
2.1 使用 df 命令
要知道在某個設備上還有多少磁盤空間,可以使用 df -h ,它會把輸出中的磁盤空間按照用戶易讀的形式顯示,通常用 M 來替代兆字節,用 G 替代吉字節。
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sdb2 18G 7.4G 9.2G 45% /
/dev/sda1 99M 19M 76M 20% /boot
tmpfs 117M 0 117M 0% /dev/shm
/dev/sdb1 125M 112M 14M 90% /media/disk
2.2 使用 du 命令
du 命令可以顯示某個特定目錄(默認情況下是當前目錄)的磁盤使用情況。
默認情況下,du 命令會顯示當前目錄下所有的文件、目錄和子目錄的磁盤使用情況,它會以磁盤塊為單位來表明每個文件或目錄占用了多大存儲空間。
du 命令常用參數:
- -c:顯示所有已列出文件總的大小。
- -h:按用戶易讀的格式輸出大小,即用 K 替代千字節,用 M 替代兆字節,用 G 替代吉字節。
- -s:顯示每個輸出參數的總計。
3. 處理數據文件
3.1 排序數據
默認情況下,sort 命令按照會話指定的默認語言的排序規則對文本文件中的數據行排序。
- -n 參數 把數字識別成數字而不是字符,并且按值排序。
- -M 參數 按月排序
- -k --key=POS1[,POS2] 指定排序的字段,排序從 POS1 位置開始;如果指定了 POS2 的話,到POS2 位置結束
- -t --field-separator=SEP 指定字段分隔符
- -r 參數 將結果按降序輸出
比如要對前面提到的密碼文件 /etc/passwd 根據用戶 ID 進行數值排序:
$ sort -t ':' -k 3 -n /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
3.2 搜索數據
grep 命令的命令行格式:grep [options] pattern [file]
grep 命令會在輸入或指定的文件中查找包含匹配指定模式的字符的行。grep 的輸出就是包含了匹配模式的行。
-
要進行反向搜索(輸出不匹配該模式的行),可加 -v 參數
$ grep -v t file1 one four five -
要顯示匹配模式的行所在的行號,可加 -n 參數
$ grep -n t file1 2:two 3:three -
要知道有多少行含有匹配的模式,可用 -c 參數
$ grep -c t file1 2 -
要指定多個匹配模式,可用 -e 參數來指定每個模式
$ grep -e t -e f file1 two three four five -
默認情況下,grep 命令用基本的 Unix 風格正則表達式來匹配模式。
3.3 壓縮數據
gzip 命令會壓縮你在命令行指定的文件。也可以在命令行指定多個文件名甚至用通配符來一次性批量壓縮文件。
$ gzip my*
$ ls -l my*
-rwxr--r-- 1 rich rich 103 Sep 6 13:43 myprog.c.gz
-rwxr-xr-x 1 rich rich 5178 Sep 6 13:43 myprog.gz
-rwxr--r-- 1 rich rich 59 Sep 6 13:46 myscript.gz
-rwxr--r-- 1 rich rich 60 Sep 6 13:44 myscript2.gz
3.4 歸檔數據
tar命令的格式:
tar function [options] object1 object2 ...
function 參數定義了 tar 命令應該做什么,如下圖所示:
options 參數的選項:
這些選項經常合并到一起使用。
-
用下列命令來創建一個歸檔文件
tar -cvf test.tar test/ test2/上面的命令創建了名為 test.tar 的歸檔文件,含有 test 和 test2 目錄內容
-
列出 tar文件 test.tar 的內容
tar -tf test.tar -
從tar文件test.tar中提取內容
tar -xvf test.tar
下載了開源軟件之后,你會經常看到文件名以 .tgz 結尾。這些是 gzip 壓縮過的 tar 文件可以用命令 tar -zxvf filename.tgz 來解壓。
總結
以上是生活随笔為你收集整理的Linux shell 学习笔记(2)— 监测程序、磁盘空间和处理文件(ps -ef、top、kill、df、du 、grep、tar)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux shell 学习笔记(1)—
- 下一篇: Linux shell 学习笔记(3)—