Linux系列之壓縮命令
- 2022 年 8 月 10 日
- 筆記
前言
Linux 有三個常用的壓縮命令:gzip
、bzip2
和 tar
。本文介紹它們的區別和簡單用法。
壓縮文件
數據壓縮是去除數據中冗餘部分的過程,需要通過壓縮演算法完成。這些演算法可分為兩類:
- 無損壓縮:保留原始文件中包含的所有數據。
- 有損壓縮:在進行壓縮時刪除數據,以便應用更多的壓縮。當文件被恢復時,它與原始版本不一致,是一個近似值。JPEG和MP3是有損壓縮的例子。
gzip命令
該命令被用來壓縮一個或多個文件。它將原始文件替換為壓縮版本。
該命令的語法為gzip file
。
我們可以使用gunzip
來解壓縮。
gzip有諸多選項,使用命令man gzip
查看完整的列表。
如果想要查看壓縮的文本文件的內容,可以使用gunzip -c
或者 zcat
進行查看。
bzip2命令
該命令與gzip
類似,但使用了不同的壓縮演算法,並以壓縮速度為代價實現更高的壓縮水平。
用來壓縮的命令:
bzip2 sample.txt
用來解壓縮的命令:
bunzip2 sample.txt.bz2
bzip2
也有幾個受支援的選項。
歸檔文件
歸檔是將許多文件收集起來,並將它們打包在一起成為一個大文件的過程。
tar命令
tar
程式是歸檔文件中的經典工具。如果你看到一個以.tar
為擴展名的文件名,它表示一個普通的tar
歸檔文件,如果它以.tgz
結尾,它表示一個被gzip
壓縮過的歸檔文件。
tar
有幾種模式。請記住,模式必須總是先被指定。
模式 | 描述 |
---|---|
c | 從文件和/或目錄的列表中創建一個歸檔。 |
x | 提取一個歸檔。 |
r | 將指定的路徑名,添加到歸檔的末尾。 |
t | 列出歸檔的內容。 |
我已經創建了幾個文件夾和文件,我可以用tar cf playground.tar playground
歸檔它們。
我們可以使用v
選項(verbose)來獲得更詳細的列表。
我們可以在一個新的位置提取tar。請記住,除非我們是以超級用戶的身份進行操作,否則從歸檔中提取的文件和目錄的所有權是由執行恢復的用戶來承擔的,而不是原始的所有者。
tar
默認使用相對路徑名而不是絕對路徑名。這是非常有用的,因為它允許我們提取歸檔到任何位置,而不是必須提取到它們的原始位置。
你可以通過在tar
命令中加入尾部的路徑名來限制從歸檔文件中提取的內容,tar
將只恢復指定的文件。你也可以指定多個路徑名。通配符通常情況下不被支援,但GUN版本的tar
通過--wildcards
選項支援它們。
tar xf ../playground2.tar --wildcards 'home/azureuser/playground/dir-*/file-A'
現代版本的GNU tar
分別通過使用z
和j
選項,來直接支援gzip
和bzip2
壓縮。
T
是-files-from
選項的縮寫,它向tar
指出從哪裡讀取它的路徑名列表,以前我們告訴tar
要使用的目錄或文件,但現在我們使用-
選項,這讓tar
知道要使用標準輸入或輸出作為要提取或歸檔的文件。-T
選項起初有點令人困惑。這個命令是在說:
find playground/ -name 'file-A'
查找playground
中與file-A
相匹配的所有文件|
將查找到的內容使用管道輸出到tar
tar czf playground
創建一個被gzip
壓縮的tar
,命名為playground.tgz
-T -
標準輸出的文件,這些文件來自管道查找命令的標準輸出。