bash shell 程式與磁碟資料

linlinlinle發表於2018-11-11

目錄

檢測程式

探查程式

實時監測程式

結束程式

檢測磁碟空間

檢視磁碟使用情況

 檢視目錄大小

處理資料檔案

排序資料

 搜尋資料

 壓縮資料

歸檔資料


檢測程式

  • 探查程式

當程式執行在系統上時,我們稱之為程式。ps命令能輸出執行在系統上的所有程式的許多資訊。預設情況下,ps命令只會顯示執行在當前控制檯下的屬於當前使用者的程式。在此例中,我們只執行了bash shell以及ps命令本身。程式的程式ID(PID)、執行在哪個終端(TTY)以及程式已用的CPU時間。

$ ps
   PID TTY          TIME CMD
  5272 pts/0    00:00:00 bash
  5347 pts/0    00:00:00 ps
  • -l:產生一個長格式輸出,
  • -e:引數指定顯示所有執行在系統上的程式
  • -f:擴充套件了輸出,這些擴充套件的列包含了有用的資訊
  • --forest:顯示程式的層級資訊,跟蹤子程式和父程式
$ ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000   5272   5262  0  80   0 - 29086 do_wai pts/0    00:00:00 bash
0 R  1000   5449   5272  0  80   0 - 38300 -      pts/0    00:00:00 ps
$ ps --forest
   PID TTY          TIME CMD
  5272 pts/0    00:00:00 bash
  5541 pts/0    00:00:00  \_ ps
  • 實時監測程式

ps命令只能顯示某個特定時間點的資訊。top命令能夠顯示程式資訊,但它是實時顯示的。

預設情況下,top命令在啟動時會按照%CPU值對程式排序。可以在top執行時使用多種互動命令重新排序。鍵入f允許你選擇對輸出進行排序的欄位,鍵入d允許你修改輪詢間隔。鍵入q可以退出top。

  • 結束程式

kill命令可通過程式ID(PID)給程式發訊號(只能用程式的PID而不能用命令名)。

$ kill 3940
-bash: kill: (3940) - Operation not permitted
$

killall命令支援通過程式名而不是PID來結束程式。killall命令也支援萬用字元。下例中的命令結束了所有以http開頭的程式

$ killall http*
$

檢測磁碟空間

Linux檔案系統將所有的磁碟都併入一個虛擬目錄下。在使用新的儲存媒體之前,需要把它放到虛擬目錄下。這項工作稱為掛載,mount命令會輸出當前系統上掛載的裝置列表,umount命令來解除安裝裝置。

  • 檢視磁碟使用情況

df命令可以讓你很方便地檢視所有已掛載磁碟的使用情況。顯示每個有資料的已掛載檔案系統

命令輸出格式
裝置的裝置檔案位置 能容納多少個1024位元組大小的塊 已用了多少個1024位元組大小的塊 還有多少個1024位元組大小的塊可用 已用空間所佔的比例 裝置掛載到了哪個掛載點上
$ df
檔案系統                   1K-塊    已用     可用 已用% 掛載點
/dev/mapper/centos-root 17811456 4020192 13791264   23% /
devtmpfs                  481836       0   481836    0% /dev
tmpfs                     498960       0   498960    0% /dev/shm
tmpfs                     498960    8728   490232    2% /run
tmpfs                     498960       0   498960    0% /sys/fs/cgroup
/dev/sda1                1038336  173340   864996   17% /boot
tmpfs                      99796       4    99792    1% /run/user/42
tmpfs                      99796      32    99764    1% /run/user/1000
/dev/sr0                 4364408 4364408        0  100% /run/media/linlinle/CentOS 7 x86_64
  •  檢視目錄大小

du命令可以顯示某個特定目錄的磁碟使用情況。可用來快速判斷系統上某個目錄下是不是有超大檔案。這麼用du命令(不加引數,用預設引數)作用並不大。我們更想知道每個檔案和目錄佔用了多大的磁碟空間,但如果還得逐頁查詢的話就沒什麼意義了。

  • -c:顯示所有已列出檔案總的大小。
  • -h:按使用者易讀的格式輸出大小,即用K替代千位元組,用M替代兆位元組,用G替代吉位元組。
  • -s:顯示每個輸出引數的總計。
$ du -sh *
680k rsync-2.6.6.tar.gz
448k MesaGLUT-6.5.1.tar.gz
1008k mrtg-2.9.29.tar.gz
496k php-common-4.0.4pl1-6mdk.i586.rpm
400k plp

處理資料檔案

當你有大量資料時,通常很難處理這些資訊及提取有用資訊。正如在上節中學習的du命令,
系統命令很容易輸出過量的資訊。

  • 排序資料

處理大量資料時的一個常用命令是sort命令。預設情況下,sort命令按照會話指定的預設語言的排序規則對文字檔案中的資料行排序。

$ cat file1
one
two
three
four
five
$ sort file1
five
four
one
three
two
$

sort命令會把數 字當做字元來執行標準的字元排序

  • -n : 把數字識別成數字而不是字元,並且按值排序

 

$ cat file2
1
2
100
45
3
10
145
75
$ sort file2
1
10
100
145
2
3
45
75
$ sort -n file2
1
2
3
10
45
75
100
145
$
  • -M: sort命令就能識別三字元的月份名,並相應地排序
$ sort file3
Apr
Aug
Dec
Feb
Jan
Jul
Jun
Mar
May
Nov
Oct
Sep
$ sort -M file3
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
$
sort命令引數
-b 排序時忽略起始的空白
-c 不排序,但檢查資料是否有序;未排序的話報告
-d 僅考慮空白和字元,不考慮特殊字元
-f 預設情況下,會將大寫字元排在前面,這個引數會忽略大小寫
-k 後面接一個數字,指定排序的欄位。
-m 將兩個已排序資料檔案合併
-o 將排序結果寫出到指定檔案中
-R 按隨機生成的雜湊表的鍵值排序
-r 反序排序
-t 指定一個用來區分鍵位置的字元

 -k和-t引數在對按欄位分隔的資料進行排序時非常有用,例如/etc/passwd檔案。可以用-t引數來指定欄位分隔符,然後用-k引數來指定排序的欄位。舉個例子,要對前面提到的密碼檔案/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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

 -n引數在排序數值時非常有用,比如du命令的輸出。

$ du -sh * | sort -nr
1008k mrtg-2.9.29.tar.gz
972k bldg1
888k fbs2.pdf
760k Printtest
680k rsync-2.6.6.tar.gz
660k code
516k fig1001.tiff
496k test
496k php-common-4.0.4pl1-6mdk.i586.rpm
448k MesaGLUT-6.5.1.tar.gz
400k plp
  •  搜尋資料

 grep命令會在輸入或指定的檔案中查詢包含匹配指定模式的字元的行。grep的輸出就是包含了匹配模式的行。

grep [options] pattern [file]

$ grep three file1
three
$ grep t file1
two
three
$
-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(或$ grep [tf] file1)
two
three
four
five
$

  •  壓縮資料

  

 

gzip是Linux上最流行的壓縮工具。gzip軟體包是GNU專案的產物。

  •  gzip:用來壓縮檔案。
  • gzcat:用來檢視壓縮過的文字檔案的內容。
  • gunzip:用來解壓檔案。

 

 gzip命令會壓縮你在命令列指定的檔案。也可以在命令列指定多個檔名甚至用萬用字元來一次性批量壓縮檔案。gzip命令會壓縮該目錄中匹配萬用字元的每個檔案。

$ gzip myprog
$ ls -l my*
-rwxrwxr-x 1 rich rich 2197 2007-09-13 11:29 myprog.gz
$ 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
$
  • 歸檔資料

 雖然zip命令能夠很好地將資料壓縮和歸檔進單個檔案,但它不是Unix和Linux中的標準歸檔工具。目前,Unix和Linux上最廣泛使用的歸檔工具是tar命令。tar命令是給整個目錄結構建立歸檔檔案的簡便方法。function引數定義了tar命令應該做什麼

tar function [options] object1 object2 ...
tar命令的功能
-A 將一個已有tar歸檔檔案追加到另一已有tar歸檔檔案
-c 建立一個新的tar歸檔檔案
-d 檢查歸檔檔案和檔案系統的不同之處;從已有tar歸檔檔案中刪除
-r 追加檔案到已有tar歸檔檔案末尾
-t 列出已有tar歸檔檔案的內容
-u 將比tar歸檔檔案中已有的同名檔案新的檔案追加到該tar歸檔檔案中
-x 從已有tar歸檔檔案中提取檔案

每個功能可用選項來針對tar歸檔檔案定義一個特定行為。表4-9列出了這些選項中能和tar命令一起使用的常見選項。

tar命令選項
-C dir 切換到指定目錄
-f file 輸出結果到檔案或者裝置file
-j 將輸出重定向給bzip2命令來壓縮內容
-p 保留所有檔案許可權
-v 在處理檔案時顯示檔案
-z 將輸出重定向給gzip命令來壓縮內容

下面的命令建立了名為test.tar的歸檔檔案,含有test和test2目錄內容

$ tar -cvf test.tar test/ test2/

列出tar檔案test.tar的內容(但並不提取檔案)

tar -tf test.tar

從tar檔案test.tar中提取內容。如果tar檔案是從一個目錄結構建立的,那整個目錄結構都會在當前目錄下重新建立。

tar -xvf test.tar

下載了開源軟體之後,你會經常看到檔名以.tgz結尾。這些是gzip壓縮過的tar檔案可以用命令tar -zxvf filename.tgz來解壓。 

  

 

相關文章