關於Linux的文件操作,這里匯總一下打包和壓縮的一些命令,以及命令使用的詳情。
打包(歸檔)和壓縮
歸檔,也稱為打包,指的是一個文件或目錄的集合,而這個集合被存儲在一個文件中。歸檔文件沒有經過壓縮,因此,它占用的空間是其中所有文件和目錄的總和。通常,歸檔總是會和系統(數據)備份聯系在一起。
和歸檔文件類似,壓縮文件也是一個文件和目錄的集合,且這個集合也被存儲在一個文件中,但它們的不同之處在於,壓縮文件采用了不同的存儲方式,使其所占用的磁盤空間比集合中所有文件大小的總和要小。
壓縮是指利用算法將文件進行處理,已達到保留最大文件信息,而讓文件體積變小的目的。其基本原理為,通過查找文件內的重復字節,建立一個相同字節的詞典文件,並用一個代碼表示。比如說,在壓縮文件中,有不止一處出現了 "C語言中文網",那么,在壓縮文件時,這個詞就會用一個代碼表示並寫入詞典文件,這樣就可以實現縮小文件體積的目的。由於計算機處理的信息是以二進制的形式表示的,因此,壓縮軟件就是把二進制信息中相同的字符串以特殊字符標記,只要通過合理的數學計算,文件的體積就能夠被大大壓縮。把一個或者多個文件用壓縮軟件進行壓縮,形成一個文件壓縮包,既可以節省存儲空間,有方便在網絡上傳送。
如果你能夠理解文件壓縮的基本原理,那么很容易就能想到,對文件進行壓縮,很可能損壞文件中的內容,因此,壓縮又可以分為有損壓縮和無損壓縮。無損壓縮很好理解,指的是壓縮數據必須准確無誤;有損壓縮指的是即便丟失個別的數據,對文件也不會造成太大的影響。有損壓縮廣泛應用於動畫、聲音和圖像文件中,典型代表就是影碟文件格式 mpeg、音樂文件格式 mp3 以及圖像文件格式 jpg。
采用壓縮工具對文件進行壓縮,生成的文件稱為壓縮包,該文件的體積通常只有原文件的一半甚至更小。需要注意的是,壓縮包中的數據無法直接使用,使用前需要利用壓縮工具將文件數據還原,此過程又稱解壓縮。
Linux 下,常用歸檔命令有 2 個,分別是 tar 和 dd(相對而言,tar 的使用更為廣泛);常用的壓縮命令有很多,比如 gzip、zip、bzip2 等。
Linux tar打包命令詳解
Linux 系統中,最常用的歸檔(打包)命令就是 tar,該命令可以將許多文件一起保存到一個單獨的磁帶或磁盤中進行歸檔。不僅如此,該命令還可以從歸檔文件中還原所需文件,也就是打包的反過程,稱為解打包。注:使用 tar 命令歸檔的包通常稱為 tar 包(tar 包文件都是以“.tar”結尾的)。
tar 命令最初被用來在磁帶上創建備份,現在可以在任何設備上創建備份。利用 tar 命令可以把一大堆的文件和目錄打包成一個文件,這對於備份文件或是將幾個文件組合成為一個文件進行網絡傳輸是非常有用的。
tar命令做打包操作
當 tar 命令用於打包操作時,該命令的基本格式為:
[root@localhost ~]#tar [選項] 源文件或目錄
選項:
選項 | 含義 |
---|---|
-c | 將多個文件或目錄進行打包。 |
-A | 追加 tar 文件到歸檔文件。 |
-f 包名 | 指定包的文件名。包的擴展名是用來給管理員識別格式的,所以一定要正確指定擴展名; |
-v | 顯示打包文件過程; |
例如我們要打包文件:
#把config.xml打包為 config.xml.tar文件 [root@localhost ~]# tar -cvf config.xml.tar config.xml
選項 "-cvf" 一般是習慣用法,可以忽略“-”,記住打包時需要指定打包之后的文件名,而且要用 ".tar" 作為擴展名
tar命令也可以打包多個文件或目錄,只要用空格分開即可。例如:
#把anaconda-ks.cfg文件和/tmp目錄打包成ana.tar文件包 [root@localhost ~]# tar -cvf ana.tar anaconda-ks.cfg /tmp/
tar打包並壓縮
聲明一點,壓縮命令不能直接壓縮目錄,必須先用 tar 命令將目錄打包,然后才能用 gzip 命令或 bzip2 命令對打包文件進行壓縮。
tar命令做解打包操作
當 tar 命令用於對 tar 包做解打包操作時,該命令的基本格式如下:
[root@localhost ~]#tar [選項] 壓縮包
選項:
選項 | 含義 |
---|---|
-x | 對 tar 包做解打包操作。 |
-f | 指定要解壓的 tar 包的包名。 |
-t | 只查看 tar 包中有哪些文件或目錄,不對 tar 包做解打包操作。 |
-C 目錄 | 指定解打包位置。 |
-v | 顯示解打包的具體過程。 |
其實解打包和打包相比,只是把打包選項 "-cvf" 更換為 "-xvf",例如我們要解包config.xml.tar
#解打包到當前目錄下 [root@localhost ~]# tar -xvf config.xml.tar
如果使用 "-xvf" 選項,則會把包中的文件解壓到當前目錄下。如果想要指定解壓位置,則需要使用 "-C(大寫)" 選項。例如:
#把文件包test.tar解打包到/tmp/目錄下 [root@localhost ~]# tar -xvf test.tar -C /tmp
如果只想查看文件包中有哪些文件,則可以把解打包選項 "-x" 更換為測試選項 "-t"。例如:
[root@localhost ~]# tar -tvf test.tar
tar命令做 打包壓縮 和 解壓縮解打包 操作
你可能會覺得 Linux 實在太不智能了,一個打包壓縮,居然還要先打包成 ".tar" 格式,再壓縮成 ".tar.gz" 或 ".tar.bz2" 格式。其實 tar 命令是可以同時打包壓縮的,前面的講解之所打包和壓縮分開,是為了讓大家了解在 Linux 中打包和壓縮的不同。當 tar 命令同時做打包壓縮的操作時,其基本格式如下:
[root@localhost ~]#tar [選項] 壓縮包 源文件或目錄
此處常用的選項有以下 2 個,分別是:
-
- -z:壓縮和解壓縮 ".tar.gz" 格式;
-
- -j:壓縮和解壓縮 ".tar.bz2"格式。
例如:壓縮與解壓縮 ".tar.gz"格式
#把/temp/目錄直接打包壓縮為".tar.gz"格式,通過"-z"來識別格式,"-cvf"和打包選項一致 [root@localhost ~]# tar -zcvf tmp.tar.gz /tmp/
解壓縮也只是在解打包選項 "-xvf" 前面加了一個 "-z" 選項。
#解壓縮與解打包".tar.gz"格式 [root@localhost ~]# tar -zxvf tmp.tar.gz
前面的選項 "-C" 用於指定解壓位置、"-t" 用於查看壓縮包內容,在這里同樣適用。
例如:壓縮與解壓縮 ".tar.bz2" 格式。
和".tar.gz"格式唯一的不同就是"-zcvf"選項換成了 "-jcvf",如下所示:
#打包壓縮為".tar.bz2"格式,注意壓縮包文件名 [root@localhost ~]# tar -jcvf tmp.tar.bz2 /tmp/ #解壓縮與解打包".tar.bz2"格式 [root@localhost ~]# tar -jxvf tmp.tar.bz2
Linux zip命令:壓縮文件或目錄
我們經常會在 Windows 系統上使用 “.zip”格式壓縮文件,其實“.zip”格式文件是 Windows 和 Linux 系統都通用的壓縮文件類型,屬於幾種主流的壓縮格式(zip、rar等)之一,是一種相當簡單的分別壓縮每個文件的存儲格式,本節要講的 zip 命令,類似於 Windows 系統中的 winzip 壓縮程序,其基本格式如下:
[root@localhost ~]#zip [選項] 壓縮包名 源文件或源目錄列表
注意,zip 壓縮命令需要手工指定壓縮之后的壓縮包名,注意寫清楚擴展名,以便解壓縮時使用。
選項:
選項 | 含義 |
-r | 遞歸壓縮目錄,及將制定目錄下的所有文件以及子目錄全部壓縮。 |
-m | 將文件壓縮之后,刪除原始文件,相當於把文件移到壓縮文件中。 |
-v | 顯示詳細的壓縮過程信息。 |
-q | 在壓縮的時候不顯示命令的執行過程。 |
-壓縮級別 | 壓縮級別是從 1~9 的數字,-1 代表壓縮速度更快,-9 代表壓縮效果更好。 |
-u | 更新壓縮文件,即往壓縮文件中添加新文件。 |
例子:zip 命令的基本使用
#壓縮 [root@localhost ~]# zip ana.zip anaconda-ks.cfg
壓縮命令同時壓縮多個文件
#同時壓縮多個文件到test.zip壓縮包中 [root@localhost ~]# zip test.zip install.log install.log.syslog
使用 zip 命令壓縮目錄,需要使用“-r”選項,例如:
#壓縮目錄 [root@localhost ~]# zip -r dir1.zip dir1
Linux unzip命令:解壓zip文件
unzip 命令可以查看和解壓縮 zip 文件。該命令的基本格式如下:
[root@localhost ~]# unzip [選項] 壓縮包名
選項:
選項 | 含義 |
-d 目錄名 | 將壓縮文件解壓到指定目錄下。 |
-n | 解壓時並不覆蓋已經存在的文件。 |
-o | 解壓時覆蓋已經存在的文件,並且無需用戶確認。 |
-v | 查看壓縮文件的詳細信息,包括壓縮文件中包含的文件大小、文件名以及壓縮比等,但並不做解壓操作。 |
-t | 測試壓縮文件有無損壞,但並不解壓。 |
-x 文件列表 | 解壓文件,但不包含文件列表中指定的文件。 |
不論是文件壓縮包,還是目錄壓縮包,都可以直接解壓縮,例如:
#解壓縮 [root@localhost ~]# unzip dir1.zip
使用 -d 選項手動指定解壓縮位置,例如:
#把壓縮包解壓到指定位置 [root@localhost ~]# unzip -d /tmp/ ana.zip
Linux gzip命令:壓縮文件或目錄
gzip 是 Linux 系統中經常用來對文件進行壓縮和解壓縮的命令,通過此命令壓縮得到的新文件,其擴展名通常標記為“.gz”。注意:gzip 命令只能用來壓縮文件,不能壓縮目錄,即便指定了目錄,也只能壓縮目錄內的所有文件。
gzip 命令的基本格式如下:
[root@localhost ~]# gzip [選項] 源文件
命令中的源文件,當進行壓縮操作時,指的是普通文件;當進行解壓縮操作時,指的是壓縮文件。該命令常用的選項及含義如下表 所示。
選項 | 含義 |
---|---|
-c | 將壓縮數據輸出到標准輸出中,並保留源文件。 |
-d | 對壓縮文件進行解壓縮。 |
-r | 遞歸壓縮指定目錄下以及子目錄下的所有文件。 |
-v | 對於每個壓縮和解壓縮的文件,顯示相應的文件名和壓縮比。 |
-l | 對每一個壓縮文件,顯示以下字段:
|
-數字 | 用於指定壓縮等級,-1 壓縮等級最低,壓縮比最差;-9 壓縮比最高。默認壓縮比是 -6。 |
例:基本壓縮
#壓縮instal.log 文件 [root@localhost ~]# gzip install.log
保留源文件壓縮
在使用 gzip 命令壓縮文件時,源文件會消失,從而生成壓縮文件。這時候如果不想讓源文件消失:
#使用-c選項,但是不讓壓縮數據輸出到屏幕上,而是重定向到壓縮文件中,這樣可以縮文件的同時不刪除源文件 [root@localhost ~]# gzip -c anaconda-ks.cfg >anaconda-ks.cfg.gz
壓縮目錄
#建立測試目錄,並在里面建立幾個測試文件 [root@localhost ~]# mkdir test [root@localhost ~]# touch test/test1 [root@localhost ~]# touch test/test2 [root@localhost ~]# touch test/test3 #壓縮目錄,並沒有報錯 [root@localhost ~]# gzip -r test/ #但是查看發現test目錄依然存在,並沒有變為壓縮文件 [root@localhost ~]# ls anaconda-ks.cfg anaconda-ks.cfg.gz install.log.gz install.log.syslog test [root@localhost ~]# ls test/ testl .gz test2.gz test3.gz
gzip命令不會打包目錄,而是把目錄下所有的子文件分別壓縮,在 Linux 中,打包和壓縮是分開處理的。而 gzip 命令只會壓縮,不能打包,所以才會出現沒有打包目錄,而只把目錄下的文件進行壓縮的情況。
Linux gunzip命令:解壓縮文件或目錄
gunzip 是一個使用廣泛的解壓縮命令,它用於解壓被 gzip 壓縮過的文件(擴展名為 .gz)。
對於解壓被 gzip 壓縮過的文件,還可以使用 gzip 自己,即 gzip -d 壓縮包。gunzip 命令的基本格式為:
[root@localhost ~]# gunzip [選項] 文件
選項:
選項 | 含義 |
---|---|
-r | 遞歸處理,解壓縮指定目錄下以及子目錄下的所有文件。 |
-c | 把解壓縮后的文件輸出到標准輸出設備。 |
-f | 強制解壓縮文件,不理會文件是否已存在等情況。 |
-l | 列出壓縮文件內容。 |
-v | 顯示命令執行過程。 |
-t | 測試壓縮文件是否正常,但不對其做解壓縮操作。 |
例:直接解壓縮文件。
[root@localhost ~]# gunzip install.log.gz
當然,"gunzip -r"依然只會解壓縮目錄下的文件,而不會解打包。要想解壓縮".gz"格式,還可以使用 "gzip -d"命令,例如:
[root@localhost ~]# gzip -d anaconda-ks.cfg.gz
要解壓縮目錄下的內容,則需使用 "-r" 選項,例如:
[root@localhost ~]# gunzip -r test/
注意,如果我們壓縮的是一個純文本文件,則可以直接使用 zcat 命令在不解壓縮的情況下查看這個文本文件中的內容。例如:
[root@localhost ~]# zcat anaconda-ks.cfg.gz
Linux bzip2命令:壓縮文件(.bz2格式)
bzip2 命令同 gzip 命令類似,只能對文件進行壓縮(或解壓縮),對於目錄只能壓縮(或解壓縮)該目錄及子目錄下的所有文件。當執行壓縮任務完成后,會生成一個以“.bz2”為后綴的壓縮包。".bz2"格式是 Linux 的另一種壓縮格式,從理論上來講,".bz2"格式的算法更先進、壓縮比更好;而 ".gz"格式相對來講的時間更快。
bzip2 命令的基本格式如下:
[root@localhost ~]# bzip2 [選項] 源文件
選項:
選項 | 含義 |
---|---|
-d | 執行解壓縮,此時該選項后的源文件應為標記有 .bz2 后綴的壓縮包文件。 |
-k | bzip2 在壓縮或解壓縮任務完成后,會刪除原始文件,若要保留原始文件,可使用此選項。 |
-f | bzip2 在壓縮或解壓縮時,若輸出文件與現有文件同名,默認不會覆蓋現有文件,若使用此選項,則會強制覆蓋現有文件。 |
-t | 測試壓縮包文件的完整性。 |
-v | 壓縮或解壓縮文件時,顯示詳細信息。 |
-數字 | 這個參數和 gzip 命令的作用一樣,用於指定壓縮等級,-1 壓縮等級最低,壓縮比最差;-9 壓縮比最高 |
注意,gzip 只是不會打包目錄,但是如果使用“-r”選項,則可以分別壓縮目錄下的每個文件;而 bzip2 命令則根本不支持壓縮目錄,也沒有“-r”選項。
例:直接壓縮文件
#壓縮成".bz2"格式,此壓縮命令會在壓縮的同時刪除源文件。 [root@localhost ~]# bzip2 anaconda-ks.cfg
壓縮的同時保留源文件
#壓縮 [root@localhost ~]# bzip2 -k install.log.syslog
Linux bunzip2命令:bz2格式的解壓縮命令
要解壓“.bz2”格式的壓縮包文件,除了使用“bzip2 -d 壓縮包名”命令外,還可以使用 bunzip2 命令。bunzip2 命令的使用和 gunzip 命令大致相同,bunzip2 命令只能用於解壓文件,即便解壓目錄,也是解壓該目錄以及所含子目錄下的所有文件。
bunzip2 命令的基本格式為:
[root@localhost ~]# bunzip2 [選項] 源文件
選項:
選項 | 含義 |
---|---|
-k | 解壓縮后,默認會刪除原來的壓縮文件。若要保留壓縮文件,需使用此參數。 |
-f | 解壓縮時,若輸出的文件與現有文件同名時,默認不會覆蓋現有的文件。若要覆蓋,可使用此選項。 |
-v | 顯示命令執行過程。 |
-L | 列出壓縮文件內容。 |
先試試使用 gunzip2 命令來進行解壓縮,例如:
[root@localhost ~]# bunzip2 anaconda-ks.cfg.bz2
".bz2" 格式也可以使用 "bzip2 -d 壓縮包" 命令來進行解壓縮,例如:
[root@localhost ~]# bzip2 -d install.log.syslog.bz2
和 ".gz" 格式一樣,".bz2" 格式壓縮的純文本文件也可以不解壓縮直接查看,使用的命令是 bzcat。例如:
[root@localhost ~]# bzcat install.log.syslog.bz2