Linux系列之壓縮命令

  • 2022 年 8 月 10 日
  • 筆記

前言

Linux 有三個常用的壓縮命令:gzipbzip2tar 。本文介紹它們的區別和簡單用法。

壓縮文件

數據壓縮是去除數據中冗餘部分的過程,需要通過壓縮演算法完成。這些演算法可分為兩類:

  • 無損壓縮:保留原始文件中包含的所有數據。
  • 有損壓縮:在進行壓縮時刪除數據,以便應用更多的壓縮。當文件被恢復時,它與原始版本不一致,是一個近似值。JPEG和MP3是有損壓縮的例子。

gzip命令

該命令被用來壓縮一個或多個文件。它將原始文件替換為壓縮版本。

該命令的語法為gzip file

image.png

我們可以使用gunzip來解壓縮。

image.png

gzip有諸多選項,使用命令man gzip查看完整的列表。

如果想要查看壓縮的文本文件的內容,可以使用gunzip -c 或者 zcat進行查看。

image.png

image.png

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歸檔它們。

image.png

我們可以使用v選項(verbose)來獲得更詳細的列表。

image.png

我們可以在一個新的位置提取tar。請記住,除非我們是以超級用戶的身份進行操作,否則從歸檔中提取的文件和目錄的所有權是由執行恢復的用戶來承擔的,而不是原始的所有者。

image.png

tar默認使用相對路徑名而不是絕對路徑名。這是非常有用的,因為它允許我們提取歸檔到任何位置,而不是必須提取到它們的原始位置。

你可以通過在tar命令中加入尾部的路徑名來限制從歸檔文件中提取的內容,tar將只恢復指定的文件。你也可以指定多個路徑名。通配符通常情況下不被支援,但GUN版本的tar通過--wildcards選項支援它們。

tar xf ../playground2.tar --wildcards 'home/azureuser/playground/dir-*/file-A'

image.png

現代版本的GNU tar分別通過使用zj選項,來直接支援gzipbzip2壓縮。

image.png

T-files-from選項的縮寫,它向tar指出從哪裡讀取它的路徑名列表,以前我們告訴tar要使用的目錄或文件,但現在我們使用-選項,這讓tar知道要使用標準輸入或輸出作為要提取或歸檔的文件。-T選項起初有點令人困惑。這個命令是在說:

  • find playground/ -name 'file-A' 查找playground中與file-A相匹配的所有文件
  • | 將查找到的內容使用管道輸出到tar
  • tar czf playground 創建一個被gzip壓縮的tar,命名為playground.tgz
  • -T - 標準輸出的文件,這些文件來自管道查找命令的標準輸出。