壓縮、解壓縮和歸檔工具
壓縮:拿時間換空間
壓縮比:壓縮前與壓縮後體積大小的比例,壓縮後的文件體積越小壓縮比越大;壓縮後的文件大小與源文件的大小越接近壓縮比越小
壓縮操作很耗CPU
壓縮工具
早期的壓縮、解壓縮的工具:compress/uncompress;壓縮後的文件以“.Z” 的格式結尾
v gzip/gunzip/zcat
Ü 壓縮後的文件以“.gz”的格式結尾
v bzip2/bunzip2/bzcat
Ü 壓縮後的文件以“.bz2”的格式結尾
v xz/unxz/xzcat
Ü 壓縮後的文件以“.xz”的格式結尾
v lzma/unlzma
Ü 壓縮後的文件以“.lzma”的格式結尾
v zip/unzip
Ü 壓縮後的文件以“.zip”的格式結尾
v 歸檔工具:tar、cpio
壓縮工具
支持壓縮文件,不支持壓縮目錄
gzip/gunzip
v 依靠後綴名識別壓縮文件
語法:gzip 文件...
gzip 選項… 文件…
gzip [OPTION]... FILE ...
選項:
-c FILE…:將結果輸出到標準輸出>;而不是默認以.gz的文件中(保留源文件)
gzip -c FILE > /PATH/TO/SOMEFILE.gz
[root@localhost tmp]# gzip -c test.txt > test.gz
[root@localhost tmp]# ls -l test.*
-rw-r--r--. 1 root root 421 6月 19 14:39 test.gz
-rw-r--r--. 1 root root 899 6月 19 14:39 test.txt
[root@localhost tmp]# gzip -d -c test.gz > test.new
[root@localhost tmp]# ls -l test.*
-rw-r--r--. 1 root root 421 6月 19 14:39 test.gz
-rw-r--r--. 1 root root 899 6月 19 14:40 test.new
-rw-r--r--. 1 root root 899 6月 19 14:39 test.txt
-d FILE…:解壓縮;相當於gunzip
-#:指定壓縮比;默認爲6
數字越大,壓縮比越高
-1:壓縮速度快;壓縮比低
-9:壓縮速度慢;壓縮比高
-r:壓縮文件或遞歸壓縮目錄中的每一個文件
-f:強制覆蓋輸出文件和壓縮鏈接
-l:壓縮文件列表內容
-a:使用ASCII文字模式
-n:不保存或恢復原始名稱和時間戳
-N:保存或恢復原來的名稱和時間戳
-q:抑制所有警告
-S:在壓縮文件上使用後綴SUF
-t:測試壓縮文件的完整性
-v:顯示詳細信息
-V:顯示版本號
gzip保留源文件的壓縮方法
壓縮單個文件保留源文件
gzip -c FILE1 > NEW.gz
向壓縮文件裏追加內容
gzip -c FILE2 >> NEW.gz
同時壓縮多個文件並保留源文件
cat FILE1 [FILE2]... | gzip > NEW.gz
gzip -c FILE1 [FILE2]... > NEW.gz
重新壓縮壓縮文件以獲得更好的壓縮效果
gzip -cd OLD.gz | gzip > NEW.gz
壓縮文件
[root@localhost tmp]# gzip test.txt test2.txt
解壓文件
[root@localhost tmp]# gzip –d test.txt test2.txt
壓縮文件並保留源文件
[root@zhangdaifu tmp]# cp {/etc/fstab,/etc/issue,/etc/inittab} ./
[root@zhangdaifu tmp]# ls
fstab inittab issue
[root@zhangdaifu tmp]# ls -l
total 12
-rw-r--r-- 1 root root 396 Oct 19 16:19 fstab
-rw-r--r-- 1 root root 511 Oct 19 16:19 inittab
-rw-r--r-- 1 root root 23 Oct 19 16:19 issue
[root@zhangdaifu tmp]# gzip -c ./{fstab,issue} > file.gz
[root@zhangdaifu tmp]# ls -l
total 16
-rw-r--r-- 1 root root 221 Oct 19 16:20 file.gz
-rw-r--r-- 1 root root 396 Oct 19 16:19 fstab
-rw-r--r-- 1 root root 511 Oct 19 16:19 inittab
-rw-r--r-- 1 root root 23 Oct 19 16:19 issue
[root@zhangdaifu tmp]# zcat file.gz
/dev/vda1 / ext3
../..省略部分內容
\S
Kernel \r on an \m
[root@zhangdaifu tmp]# gzip -c ./inittab >> file.gz
[root@zhangdaifu tmp]# zcat file.gz
/dev/vda1 / ext3
../..省略部分內容
\S
Kernel \r on an \m
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#
[root@zhangdaifu tmp]# cat ./{inittab,issue,fstab} | gzip > file2.gz
[root@zhangdaifu tmp]# ls
file2.gz file.gz fstab inittab issue
[root@zhangdaifu tmp]# ls -l
total 20
-rw-r--r-- 1 root root 451 Oct 19 16:24 file2.gz
-rw-r--r-- 1 root root 537 Oct 19 16:21 file.gz
-rw-r--r-- 1 root root 396 Oct 19 16:19 fstab
-rw-r--r-- 1 root root 511 Oct 19 16:19 inittab
-rw-r--r-- 1 root root 23 Oct 19 16:19 issue
[root@zhangdaifu tmp]# zcat file2.gz
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#
\S
Kernel \r on an \m
../..省略部分內容
gunzip是gzip的硬鏈接;用法選項和gzip一樣
zcat 查看.gz壓縮包內容
不顯式展開的前提下查看文本文件內容
語法:zcat gzip壓縮文件
zcat的選項和gzip一樣
bzip2/bunzip2
語法:bzip2文件...
bzip2 選項... 文件...
bzip2 [OPTION]... FILE...
選項:
-k(keep):保留原文件
-d:解壓縮
-#:指定壓縮比;默認爲6,數字越大壓縮比越大(1-9)
-q:靜默整個過程
-s:減少內存使用,用於壓縮、解壓和測試。文件被解壓和測試
-z:強制壓縮
--repetitive-best:若文件中有重複出現的資料時,可利用此選項提高壓縮效果
--repetitive-fast:若文件中有重複出現的資料時,可利用此選項加快執行效果
其餘選項和gzip一樣
bzcat查看.bz2壓縮包內容
語法:bzcat bzip2壓縮文件
[root@zhangdaifu tmp]# bzip2 -k ./{inittab,issue,fstab}
[root@zhangdaifu tmp]# ls
file2.gz file.gz fstab fstab.bz2 inittab inittab.bz2 issue issue.bz2
[root@zhangdaifu tmp]# ls -l
total 32
-rw-r--r-- 1 root root 451 Oct 19 16:24 file2.gz
-rw-r--r-- 1 root root 537 Oct 19 16:21 file.gz
-rw-r--r-- 1 root root 396 Oct 19 16:19 fstab
-rw-r--r-- 1 root root 186 Oct 19 16:19 fstab.bz2
-rw-r--r-- 1 root root 511 Oct 19 16:19 inittab
-rw-r--r-- 1 root root 349 Oct 19 16:19 inittab.bz2
-rw-r--r-- 1 root root 23 Oct 19 16:19 issue
-rw-r--r-- 1 root root 61 Oct 19 16:19 issue.bz2
[root@zhangdaifu tmp]# bzcat issue.bz2
\S
Kernel \r on an \m
xz/unxz/xzcat(RHEL5/CentOS5不支持)
v 擴展名 .xz
語法:unxz 選項... 文件...
xz [OPTION]... FILE...
選項:
-d:解壓縮
-k:保留原文件
-#:指定壓縮比;默認爲6,數字越大壓縮比越大(1-9)
-F:指定壓縮格式;默認爲xz
其他選項和用法和gzip的一樣
xzcat 查看.xz壓縮包內容
語法:xzcat [xzun壓縮文件]
[root@zhangdaifu tmp]# xz -k ./{inittab,issue,fstab}
[root@zhangdaifu tmp]# ls -l
total 44
-rw-r--r-- 1 root root 451 Oct 19 16:24 file2.gz
-rw-r--r-- 1 root root 537 Oct 19 16:21 file.gz
-rw-r--r-- 1 root root 396 Oct 19 16:19 fstab
-rw-r--r-- 1 root root 186 Oct 19 16:19 fstab.bz2
-rw-r--r-- 1 root root 208 Oct 19 16:19 fstab.xz
-rw-r--r-- 1 root root 511 Oct 19 16:19 inittab
-rw-r--r-- 1 root root 349 Oct 19 16:19 inittab.bz2
-rw-r--r-- 1 root root 372 Oct 19 16:19 inittab.xz
-rw-r--r-- 1 root root 23 Oct 19 16:19 issue
-rw-r--r-- 1 root root 61 Oct 19 16:19 issue.bz2
-rw-r--r-- 1 root root 80 Oct 19 16:19 issue.xz
[root@zhangdaifu tmp]# xzcat inittab.xz
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#
歸檔(打包)命令
v 歸檔:把多個文件打包(合併)成一個文件
v 支持文件,支持目錄
zip 通用壓縮工具
zip是個既能壓縮又能歸檔的工具,和前面幾個工具不同的是,zip工具支持壓縮目錄,且zip命令沒有專門的選項用於解壓縮
語法:zip 壓縮後的名稱 源文件或目錄
zip 選項 壓縮後的名稱 源文件或目錄
選項:
-d:從壓縮文件中刪除指定的文件
-r:遞歸處理;將指定目錄下的所有文件和子目錄一併處理
-#:指定壓縮比;默認爲6,數字越大壓縮比越大(1-9)
-F:修復已損壞的壓縮文件
-P PASSWORD:加密zip文件
-T:測試壓縮文件的完整性
-y:直接壓縮軟鏈接 ;而不是所指向的文件
-z:給壓縮文件添加註釋
-t 日期時間:把壓縮文件的日期設成指定的日期
-u:更換較新的文件到壓縮文件內
-v:顯示執行過程
-q:不顯示執行過程
更多:http://www.runoob.com/linux/linux-comm-zip.html
解壓縮:unzip zip壓縮後的文件名
tar 歸檔文件或目錄,不刪除源文件
語法:tar [選項...] 壓縮後的名稱 要壓縮的文件或目錄
tar zcf today.tar.gz today
tar [OPTION...] [FILE]...
v tar命令支持2種格式的選項
v tar歸檔後的文件需手動指明後綴名 {.tar|.tar.gz|.tar.bz2…}
v 歸檔後的後綴:.tar
v 歸檔並壓縮的後綴:.tar.XXX
v 歸檔完成後通常需要壓縮,結合(調用)此前的壓縮工具聯合歸檔,就能實現壓縮多個文件了
選項:可以合併使用;選項前也可以不用加“-”
創建歸檔
-c:創建新歸檔 .tar格式
-f /PATH/TO/SOMEFILE.tar FILE...:指明歸檔文件;操作歸檔文件時必用此選項(此選項後必須跟歸檔文件,而不能跟其他選項)
-r:追加文件到已有tar歸檔文件末尾;不支持對壓縮文件追加
--exclude FILE:不打包指定的文件
--remove-files:創建完歸檔後,刪除源文件;不推薦
歸檔並壓縮(調用壓縮工具)
-z:調用gzip進行壓縮
-zcf /PATH/TO/SOMEFILE.tar.gz FILE...
解壓縮並展開歸檔:-zxf /PATH/TO/SOMEFILE.tar.gz
-j:調用bzip2進行壓縮
-J:調用unxz進行壓縮
-p:打包時,保留源文件或目錄的權限(僅root)
-P:打包時,保留源文件或目錄的絕對路徑
--delete FILE:從tar包裏刪除指定文件
查看歸檔文件中的文件列表
-t:列出歸檔內容
-f:指明歸檔文件
-tf /PATH/TO/SOMEFILE.tar
-z,-j,-J
--delete:從歸檔文件中刪除文件
解開歸檔
-x:從已有tar歸檔文件中提取文件
-f:指明要解壓的歸檔文件
-xf /PATH/FROM/SOMEFILE.tar
-C /PATH/TO/DIRNAME:解壓後的目錄(默認爲當前目錄)
-xf /PATH/FROM/SOMEFILE.tar -C /PATH/TO/SOMEDIR
-z:調用gzip進行解壓縮
-j:調用bzip2進行解壓縮
-J:調用unxz進行解壓縮
注意:在解開歸檔時,調用壓縮工具的選項可以不寫;tar命令會自動識別
-v:顯示過程
other
-d:檢查歸檔文件和文件系統的不同之處
-A:將一個已有tar歸檔文件追加到另一個已有tar歸檔文件
-u:將比tar歸檔文件中已有的同名文件較新的文件追加到該tar歸檔文件中
注:在創建歸檔時壓縮必須使用{-z|-j|-J}選項調用壓縮工具,而在解壓歸檔文件時可以省略壓縮選項
Error
tar: Removing leading `/' from member names
其原因是tar默認爲相對路徑,使用絕對路徑的話就會報這個錯,可以使用-P選項(注意大寫)來解決這個問題
tar命令示例
# tar xf redis-5.0.0.tar.gz -C /tmp
# tar Jcf redis.tar.xz /tmp/redis-5.0.0/
# tar tf redis.tar.xz
不打包指定文件(支持通配符)
# tar zcvf data.tar.gz * --exclude sync_batch.sh
創建完歸檔刪除源文件
# tar -jcvf data.tar.bz2 data.tar.gz --remove-files
# tar -jcvf data.tar.bz2 && rm –rf data.tar.gz
只提取tar包裏的單個文件(支持通配符)或目錄
# tar xf TAR包 TAR包裏的文件
# tar xf kernel_compilation.tar.xz kernel_compilation/.config
# tar tf etc-2018-12-07.tar.xz etc/fstab
注意:只能提取到tar包所在目錄下,而不能提取到指定目錄下
cpio
STDIN | cpio
壓縮歸檔命令對比
命令 | 壓縮/解壓後默認是否保留源文件 | 壓縮對象 | 解壓後壓縮包是否消失 |
gzip | 否 | 文件 | 是 |
bzip2 | 可以保留 | 文件 | 可以保留 |
zip | 是 | 文件或目錄 | 是 |
tar | 是 | 文件或目錄 | 否 |