2022年12月31日 星期六

LINUX 壓縮指令整理,如何在 Linux 上壓縮文件

LINUX 壓縮指令整理,如何在 Linux 上壓縮文件

有許多工具可用於在 Linux 系統上壓縮文件,但它們的行為方式或產生的壓縮級別各不相同。在這篇文章中,我們比較了其中的五個。

5種壓縮方法與教學

Linux 上有很多用於壓縮文件的命令。最新和最有效的方法之一是xz,但它們都具有節省磁盤空間和保留文件供以後使用的優點。在這篇文章中,我們比較了壓縮命令並指出了顯著差異。

tar

tar 命令不是專門的壓縮命令。它通常用於將多個文件合併為一個文件,以便於傳輸到另一個系統或將文件作為相關組進行備份。它還提供壓縮作為一項功能,這很有意義,並且可以添加z壓縮選項來實現這一點。 當使用z選項將壓縮添加到tar命令時,tar 使用gzip進行壓縮。 您可以使用tar像壓縮一個文件一樣輕鬆地壓縮單個文件,儘管這與直接使用gzip相比沒有什麼特別的優勢。要為此使用tar,只需像使用“tar cfz newtarfile 文件名”命令識別一組文件一樣識別文件,如下所示:
$ tar cfz bigfile.tgz bigfile
            ^            ^
            |            |
            +- 新文件 +- 要壓縮的文件
$ ls -l bigfile*
-rw-rw-r-- 1 shs shs 103270400 4 月 16 日 16:09 大文件
-rw-rw-r-- 1 shs shs 21608325 Apr 16 16:08 bigfile.tgz
請注意文件大小的顯著減少。 如果您願意,可以使用tar.gz擴展名,這可能會使文件的特徵更加明顯,但大多數 Linux 用戶可能會認為tgz的含義相同 – tar和gz的組合表示該文件是一個壓縮的 tar 文件。壓縮完成後,您將同時獲得原始文件和壓縮文件。 要將多個文件收集在一起並在一個命令中壓縮生成的“tar ball”,請使用相同的基本語法,但將文件指定為一組而不是單個文件。這是一個例子:
$ tar cfz bin.tgz bin/* 
          ^        ^ 
          |        |-- 要包含的文件
          新文件

zip

zip命令創建一個壓縮文件,同時保持原始文件不變。語法很簡單,除了與tar一樣,您必須記住原始文件應該是命令行的最後一個參數。
$ zip ./bigfile.zip bigfile
更新:bigfile(縮小 79%)
$ ls -l bigfile bigfile.zip
-rw-rw-r-- 1 shs shs 103270400 4 月 16 日 11:18 bigfile
-rw-rw-r-- 1 shs shs 21606889 Apr 16 11:19 bigfile.zip

gzip

gzip命令使用起來非常簡單。您只需鍵入“gzip”,然後鍵入要壓縮的文件的名稱。與上述命令不同,gzip將“就地”加密文件。換句話說,原始文件將被加密文件替換。
$ gzip bigfile
$ ls -l bigfile*
-rw-rw-r-- 1 shs shs 21606751 Apr 15 17:57 bigfile.gz

bzip2 

與gzip命令一樣,bzip2將“就地”壓縮您選擇的文件,只留下原始文件。
$ bzip bigfile
$ ls -l bigfile*
-rw-rw-r-- 1 shs shs 18115234 4 月 15 日 17:57 bigfile.bz2

xz 

作為壓縮命令團隊的新成員,xz在壓縮文件方面處於領先地位。與前兩個命令一樣,您只需向命令提供文件名。同樣,原始文件被壓縮到位。
$ xz bigfile
$ ls -l bigfile*
-rw-rw-r-- 1 shs shs 13427236 4 月 15 日 17:30 bigfile.xz

對於大文件,您可能會注意到xz比其他壓縮命令運行時間更長,但壓縮結果非常可觀。

比較

雖然大家都愛比大小 OwO,但是“大小不是一切”。因此,讓我們比較文件大小以及在製定壓縮文件計劃時要考慮的其他一些問題。 下面顯示的統計數據都與壓縮單個文件有關——bigfile——在上面顯示的示例命令中使用。該文件是一個很大且相當隨機的文本文件。壓縮率在某種程度上取決於文件​​的內容。


各種壓縮方式大小比較

比較時,上面顯示的各種壓縮命令產生了以下結果。百分比表示壓縮文件與原始文件的比較情況。
-rw-rw-r-- 1 shs shs 103270400 4 月 16 日 14:01 大文件
---------------------------------------------- ----
-rw-rw-r-- 1 shs shs 18115234 4 月 16 日 13:59 bigfile.bz2 ~17%
-rw-rw-r-- 1 shs shs 21606751 Apr 16 14:00 bigfile.gz ~21%
-rw-rw-r-- 1 shs shs 21608322 4 月 16 日 13:59 bigfile.tgz ~21%
-rw-rw-r-- 1 shs shs 13427236 4 月 16 日 14:00 bigfile.xz ~13%
-rw-rw-r-- 1 shs shs 21606889 Apr 16 13:59 bigfile.zip ~21%
xz命令獲勝,最終只有原始文件大小的 13%,但所有這些壓縮命令都顯著減小了原始文件的大小。


是否替換原文件

bzip2、gzip和xz命令都用壓縮版本替換原始文件。tar和zip命令不行。


壓縮時間

大小以外,時間也是問題OuO,不過我們喜歡快一點的,xz命令似乎比其他命令花費更多時間來加密文件。對於大文件,大概時間是: 命令運行時
tar 4.9 秒
zip 5.2 秒
bzip2 22.8 秒
gzip 4.8 秒
xz 50.4 秒
減壓時間可能比壓縮時間小得多。


文件權限

無論您在原始文件上設置了什麼權限,壓縮文件的權限都將基於您的umask設置,但保留原始文件權限的bzip2除外。


與 Windows 的兼容性

zip命令創建一個可以在 Windows 系統以及 Linux 和其他 Unix 系統上使用(即解壓縮)的文件,而無需安裝其他可能可用或可能不可用的工具。


解壓縮教學

解壓縮文件的命令與壓縮文件的命令類似。在運行上面顯示的壓縮命令後,這些命令將用於解壓縮大文件。
tar: tar xf bigfile.tgz
zip: unzip bigfile.zip
gzip: gunzip bigfile.gz
bzip2: bunzip2 bigfile.gz2
xz: xz -d bigfile.xz or unxz bigfile.xz


運行您自己的壓縮比較

如果您想自己運行一些測試,請獲取一個大但可替換的文件並使用上面顯示的每個命令壓縮它——最好使用一個新的子目錄。如果您想將xz包含在測試中,您可能必須先安裝它。此腳本可以使比較更容易,但可能需要幾分鐘才能完成。
#!/bin/bash

# ask user for filename
echo -n "filename> "
read filename

# you need this because some commands will replace the original file
cp $filename $filename-2

# clean up first (in case previous results are still available)
rm $filename.*

tar cvfz ./$filename.tgz $filename > /dev/null
zip $filename.zip $filename > /dev/null
bzip2 $filename
# recover original file
cp $filename-2 $filename
gzip $filename
# recover original file
cp $filename-2 $filename
xz $filename

# show results
ls -l $filename.*

# replace the original file
mv $filename-2 $filename

沒有留言:

張貼留言