- Red Hat Linux 9實務自學手冊
- 李洋編著
- 12909字
- 2018-12-29 21:52:53
第3章 軟件包管理
Linux操作系統提供了RPM軟件包的管理,以實施對軟件包的查詢、安裝、卸載、升級和驗證;同時,它也提供了多種文件壓縮工具,使得用戶可以對某些文件進行壓縮,以減小文件占用的硬盤空間或方便網絡傳輸;并且,Linux也提供了對文件打包的功能,用戶可以使用其將若干文件或目錄打成一個軟件包。下面,本章將詳細介紹上述Red Hat Linux 9下各種常見的軟件包管理方式。
3.1 管理RPM包(實務4)
Red Hat Package Manager(簡稱RPM)工具包由于其使用簡單,操作方便,可以實現軟件的查詢、安裝、卸載、升級和驗證等功能,為Linux使用者節省大量時間,所以被廣泛應用于Linux下安裝、刪除軟件。RPM軟件包通常具有類似squid-2.5.STABLE1-2.i386.rpm的文件名。文件名中一般包括軟件包名稱(squid),版本號(2.5.STABLE1)、發行號(2)和硬件平臺(i386)。RPM命令的詳細使用說明可以在Linux終端使用man rpm命令顯示出來。
在實際的操作過程中,可能遇到如下的實際操作需求:
● 對待安裝的RPM軟件包進行查詢,了解其詳細信息;
● 對系統中沒有的RPM軟件包進行安裝,以完成實際應用需求;
● 針對RPM軟件包安裝過程中可能出現的問題,進行解決;
● 卸載系統中的RPM軟件包;
● 升級RPM軟件包;
● 驗證RPM軟件包;
● 使用Red Hat Linux 9的RPM包管理工具。
3.1.1 查詢RPM軟件包
在新軟件安裝之前,一般都要先查看一下這個軟件包里有什么內容。RPM軟件包的查詢是使用帶參數-q的rpm命令實現的,系統將會列出待查詢軟件包的詳細資料,包括含有多少個文件、各文件名稱、文件大小、創建時間、編譯日期等信息。
1.RPM軟件包查詢命方法及參數
RPM軟件包查詢命令的格式如下:
rpm {-q|--query} [select-options] [query-options]
其中,rpm是命令名稱,軟件包查詢可使用參數-q,也可用--query,這兩個參數必選其一。select-options是可選信息,query-options是查詢信息。RPM查詢所支持的參數有三類:詳細選項、信息選項和通用選項。
詳細選項包括:
● -p<file>:查詢軟件包的文件;
● -f<file>:查詢<file>屬于哪個軟件包;
● -a:查詢所有安裝的軟件包;
● --whatprovides<x>:查詢提供了<x>功能的軟件包;
● -g<group>:查詢屬于<group>組的軟件包;
● --whatrequires<x>:查詢所有需要<x>功能的軟件包。
信息選項用于顯示文件的一些屬性信息,如文件列表、文件功能等,信息選項參數主要有:
● <null>:顯示軟件包的全部標識;
● -i:顯示軟件包的概要信息;
● -l:顯示軟件包中的文件列表;
● -c:顯示配置文件列表;
● -d:顯示文檔文件列表;
● -s:顯示軟件包中文件列表及其狀態;
● --scripts:顯示安裝、卸載、校驗腳本;
● --queryformat(或--qf):以用戶指定的方式顯示查詢信息;
● --dump:顯示每個文件的所有已校驗信息;
● --provides:顯示軟件包提供的功能;
● --requires(或-R):顯示軟件包所需的功能。
通用選項主要有:
● -v:顯示附加信息;
● -vv:顯示調試信息;
● --root<path>:指定軟件安裝目錄;
● --rcfile<rcfile>:設置rpmrc文件為<rcfile>;
● --dbpath<path>:設置RPM資料庫存所在的路徑為<path>。
2.RPM軟件包查詢命令應用舉例
下面以軟件包為例,說明RPM查詢命令的使用。
(1)查詢系統所有已經安裝的軟件包
# rpm -qa bzip2-libs-1.0.2-8 glib-1.2.10-10 losetup-2.11y-9 shadow-utils-4.0.3-6 MAKEDEV-3.3.2-5 hotplug-2002_04_01-17 findutils-4.1.7-9 modutils-2.4.22-8 ... ...
(2)查詢系統是否存在指定軟件包
# rpm -qa |grep squid squid-2.5.STABLE1-2
(3)查詢文件所屬的軟件包
//查詢文件/etc/squid/squid.conf所屬的軟件包 #rpm -qf /etc/squid/squid.conf //顯示該文件屬于squid-2.5.STABLE1-2軟件包 squid-2.5.STABLE1-2
(4)查詢軟件包所包含的文件列表
//查詢已安裝軟件包squid所包含的文件列表 #rpm -ql squid //以下顯示該軟件包所包含的所有文件列表 /etc/logrotate.d/squid /etc/rc.d/init.d/squid /etc/squid /etc/squid/errors /etc/squid/mib.txt ... ...
(5)查詢軟件包概要信息
//查詢軟件包squid-2.5.STABLE1-2.i386.rpm的概要信息 # rpm -qi squid-2.5.STABLE1-2 //顯示概要信息如下 Name : squid Relocations: (not relocateable) Version : 2.5.STABLE1 Vendor: Red Hat, Inc. Release : 2 Build Date: 2003年01月25日 星期六 15時19分34秒 Install Date: 2008年07月10日 星期四 03時26分17秒 Build Host: porky.devel.re dhat.com Group : 系統環境/守護進程 Source RPM: squid-2.5.STABLE1-2.src. rpm Size : 3075793 License: GPL Signature : DSA/SHA1, 2003年02月24日 星期一 13時57分02秒, Key ID 219180cddb42a 60e Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla> Summary : Squid代理緩存服務器。 Description : Squid是一個萬維網客戶的高性能代理緩存服務器。 它支持FTP、gopher以及HTTP數據對象。與傳統 的緩存軟件不同,Squid只用一個非堵塞的I/O驅動 的進程來處理所有請求。Squid保存元數據,特別是 緩存在內存中的熱門對象;它還緩存DNS查尋,支 持非堵塞DNS查尋,并對失敗的請求實現負緩存。 Squid由一個主服務器程序squid,一個域名系統查尋 程序 (dnsserver),一個用來檢索FTP數據的程序 (ftpget), 以及一些管理和客戶工具組成。
3.1.2 安裝RPM軟件包
軟件包查詢完成后,用戶就可以進行軟件的實際安裝了。使用帶參數-i的RPM命令可以實現RPM軟件包的安裝,其命令格式如下:
rpm -i ( or --install) options file1.rpm ... fileN.rpm
其中-i表示欲安裝軟件包,options是安裝選項,file1.rpm到fileN.rpm表示待安裝的RPM軟件包名稱。
1.RPM安裝命令選項
帶-i參數RPM命令的詳細選項如下:
● -h(或者-hash):安裝時輸出hash記號(“#”);
● --test:只對安裝進行測試,并不實際安裝;
● --percent:以百分比的形式輸出安裝的進度;
● --excludedocs:不安裝軟件包中的文檔文件;
● --includedocs:安裝文檔;
● --replacepkgs:強制重新安裝已經安裝的軟件包;
● --replacefiles:替換屬于其他軟件包的文件;
● --force:忽略軟件包及文件的沖突;
● --noscripts:不運行預安裝和后安裝腳本;
● --prefix <path>:將軟件包安裝到由<path>指定的路徑下;
● --ignorearch:不校驗軟件包的結構;
● --ignoreos:不檢查軟件包運行的操作系統;
● --nodeps:不檢查依賴性關系;
● --ftpproxy <host>:用<host>作為FTP代理;
● --ftpport <port>:指定FTP的端口號為<port>。
通用選項類似于RPM查詢命令,這里不再詳述。
2.RPM軟件包安裝方式及實例
安裝方式主要包括如下幾種。
● 普通安裝:所謂普通安裝,就是指使用最多的安裝方式,采用一般的安裝參數ivh,表示顯示附加信息和安裝進度的#符號的安裝方式,舉例如下:
//安裝當前目錄下的squid軟件包 //顯示安裝過程的詳細信息 //用#號表示安裝進度 #rpm -ivh squid-2.5.STABLE1-2.i386.rpm Preparing... ########################################### [100%] 1:squid ########################################### [100%]
● 測試安裝,并不實際安裝:用戶對安裝不確定時可以先使用該種安裝方式測試安裝,如果沒有顯示錯誤信息再實際安裝,舉例如下:
#rpm - i test squid-2.5.STABLE1-2.i386.rpm
● 強制安裝:強制安裝軟件,忽略軟件包依賴性以及文件的沖突。如果對軟件包的依賴性很清楚,而且確實要忽視文件的沖突,可以選擇強制安裝。建議初學者不要使用這種安裝方式。
#rpm - ivh --force squid-2.5.STABLE1-2.i386.rpm
3.1.3 RPM軟件包安裝可能出現的問題
在安裝過程中,有可能出現如下幾種問題,需要特別注意。
● 重復安裝:如果用戶的軟件包已被安裝,將會出現以下信息:
#rpm -ivh squid-2.5.STABLE1-2.i386.rpm foo package foo-1.0-1 is already installed error: squid-2.5.STABLE1-2.i386.rpm cannot be installed
如果用戶仍要安裝該軟件包,可以在命令行上使用--replacepkgs選項,RPM將忽略該錯誤信息強行安裝。
● 文件沖突:如果用戶要安裝的軟件包中有一個文件已在安裝其他軟件包時安裝,會出現以下錯誤信息:
#rpm -ivh squid-2.5.STABLE1-2.i386.rpm foo /usr/bin/foo conflicts with file from bar-1.0-1 error: squid-2.5.STABLE1-2.i386.rpm cannot be installed
要想讓RPM忽略該錯誤信息,請使用--replacefiles命令行選項。
● 依賴關系:RPM軟件包可能依賴于其他軟件包,也就是說,要求在安裝了特定的軟件包之后才能安裝該軟件包。如果在用戶安裝某個軟件包時存在這種未解決的依賴關系,會產生以下信息:
#rpm -ivh bar-1.0-1.i386.rpm failed dependencies: foo is needed by bar-1.0-1
用戶必須安裝完所依賴的軟件包,才能解決這個問題。如果用戶想強制安裝,請使用--nodeps命令行選項,不推薦Linux初學者使用強制安裝方式安裝軟件包,因為強制安裝后的軟件包可能不能正常運行。
3.1.4 卸載RPM軟件包
如果某個軟件安裝后不再需要,或者為了騰出空間,RPM也提供了軟件卸載功能。卸載一般使用如下命令:
#rpm -e squid
說明
這里使用軟件包的名稱squid,而不是軟件包的文件名squid-2.5.STABLE1-2.i386.rpm。如果其他軟件包依賴于用戶要卸載的軟件包,卸載時則會產生類似如下的錯誤信息:
removing these packages would break dependencies:foo is needed by bar-1.0-1
若欲讓RPM忽略這個錯誤繼續卸載,可以使用--nodeps命令行選項。但并不提倡強制卸載,因為強制卸載后依賴于該軟件包的程序可能無法運行。
3.1.5 升級RPM軟件包
升級軟件包用于用較新版本軟件包替代舊版本軟件包,應使用帶-U參數的RPM命令完成,其命令格式如下:
#rpm -U options file1.rpm ... fileN.rpm
-U參數表明欲更新軟件,options是一些其他的參數選項,file1.rpm到fileN.rpm指明欲升級的軟件包名稱。例如:
//用軟件包squid-2.5.STABLE1-2.i386.rpm更新系統中squid軟件 //顯示更新過程的信息,用#指示安裝進度。 # rpm -Uvh squid-2.5.STABLE1-2.i386.rpm Preparing...###########################################[100%] package squid-2.5.STABLE1-2 is already installed
RPM將自動卸載已安裝的老板本的squid軟件包,用戶不會看到有關信息。事實上用戶可能總是使用-U來安裝軟件包,因為即便以往未安裝過該軟件包,也能正常運行。
3.1.6 驗證RPM軟件包
驗證軟件包是通過比較已安裝的文件和軟件包中的原始文件信息來進行的。驗證主要是比較文件的尺寸、MD5校驗碼、文件權限、類型、屬主和用戶組等。RPM采用帶參數-V的命令來驗證一個軟件包。用戶可以使用以下四種包選項來查詢待驗證的軟件包。
● 驗證單個軟件包:命令格式為rpm -V package-name。例如:
#rpm -V squid //驗證軟件包squid
● 驗證包含特定文件的軟件包:
# rpm -Vf /bin/vi //驗證/bin/vi文件的正確性 # //沒有任何顯示說明軟件完整無誤
● 驗證所有已安裝的軟件包:驗證已經安裝的所有軟件包是否正確。
# rpm -Va S.3....T c /etc/hotplug/usb.usermap S.3....T c /etc/sysconfig/pcmcia .......T c /etc/libuser.conf .......T c /etc/mail/sendmail.cf S.3....T c /etc/mail/statistics SM3....T c /etc/mail/submit.cf S.3....T c /usr/share/a2ps/afm/fonts.map S.3....T c /etc/sysconfig/rhn/rhn-applet SM3....T /usr/share/rhn/rhn_applet/rhn_applet.pyc SM3....T /usr/share/rhn/rhn_applet/rhn_applet_animation.pyc SM3....T /usr/share/rhn/rhn_applet/rhn_applet_dialogs.pyc SM3....T /usr/share/rhn/rhn_applet/rhn_applet_model.pyc SM3....T /usr/share/rhn/rhn_applet/rhn_applet_rpc.pyc SM3....T /usr/share/rhn/rhn_applet/rhn_applet_rpm.pyc SM3....T /usr/share/rhn/rhn_applet/rhn_utils.pyc S.3....T /usr/lib/qt-3.1/etc/settings/qtrc S.3....T /usr/lib/openoffice/share/fonts/truetype/fonts.dir
● 根據RPM文件來驗證軟件包:如果用戶擔心用戶的RPM數據庫已被破壞,就可以使用這種方式。
# rpm -Vp squid-2.5.STABLE1-2.i386.rpm
如果一切校驗正常將不會產生任何輸出。如果驗證有不一致的地方,就會顯示出相應信息。輸出格式是8位長字符串,“c”用以指配置文件,接著是文件名,8位字符的每一個用以表示文件與RPM數據庫中一種屬性的比較結果。“.”表示測試通過。其他字符則表示對RPM軟件包進行的某種測試失敗。各測試錯誤信息如表3-1所示。
表3-1 RPM驗證錯誤信息

3.1.7 使用添加/刪除應用程序管理RPM軟件包
Red Hat Linux 9也提供了與Windows安全類似的添加/刪除程序的功能,那就是“添加/刪除應用程序”,有時候也稱為軟件包管理器。可按如下步驟打開軟件包管理器:
(1)單擊【啟動程序】按鈕,Linux出現【啟動程序】菜單;
(2)單擊【系統設置】|【添加/刪除應用程序】菜單項,Linux出現【軟件包管理】窗口。
由打開【軟件包管理】窗口的過程可以看出,Red Hat Linux 9在軟件包管理器的名稱上出現了不一致,在菜單中稱為【添加/刪除應用程序】,但是在窗口中稱為【軟件包管理】。Red Hat公司為了迎合這些用戶的使用習慣,從其Red Hat Linux 9版本開始就在【啟動程序】菜單中將【軟件包管理器】命名為【添加/刪除應用程序】。
【軟件包管理器】窗口如圖3-1所示。該圖表明系統已經安裝了桌面系統的三個程序,分別是X Window窗口系統、GNOME桌面環境、KDE桌面環境;應用程序中顯示了已經安裝了編輯器類軟件,但是沒有安裝工程與科學類軟件。同時還顯示了這個操作系統已經占有的磁盤空間。

圖3-1 【軟件包管理器】窗口
● 添加Linux軟件包:如果Linux沒有安裝某個組件,或者Linux沒有安裝某個組件的全部軟件包而用戶希望安裝該組件的更多軟件包,則可通過【軟件包管理器】安裝想要的軟件包。如圖3-1所示系統,其沒有安裝【工程和科學】軟件包組件,若欲安裝該類組件,可以選中【工程和科學】復選框,Linux重新計算操作系統所占磁盤大小,并且【更新(U)】按鈕變得可以使用。單擊“細節”鏈接可以更改需要安裝組件的軟件包配置,單擊【更新(U)】按鈕,系統開始更新前的軟件依賴性檢查,Red Hat稱之為籌備系統更新,如圖3-2所示。

圖3-2 更新前的軟件依賴性檢查
如果檢查依賴性沒有出現問題,Linux將顯示可以安裝的RPM軟件包數量和安裝所需占用的磁盤空間,如圖3-3所示。單擊【繼續(T)】按鈕系統將自動完成所有安裝工作。

圖3-3 顯示可以安裝的RPM軟件包數量和安裝所需占用的硬盤空間
● 刪除Linux軟件包:如果Linux顯示某個組件已經安裝,用戶欲刪除該組件或該組件下某些軟件包,也可以使用【軟件包管理器】。例如,圖3-1所示的系統已經安裝了編輯器組件的兩個軟件包,如果不選中【編輯器】復選框,然后直接單擊【更新(U)】按鈕,系統將直接刪除編輯器組件中所有已經安裝軟件包。若用戶只想刪除編輯器組件中已經安裝的某個軟件包,如Emacs,可以單擊“細節”鏈接,系統顯示編輯器軟件包細節,如圖3-4 所示。該圖表明系統已經安裝了Emacs和vim-enhanced兩個軟件包,單擊【Emacs】復選框,使其不選中,再單擊【關閉】按鈕,回到如圖3-1 所示【軟件包管理器】窗口,單擊【更新(U)】按鈕系統將刪除Emacs軟件包。

圖3-4 編輯器軟件包細節
3.2 RPM軟件包的密鑰管理(實務5)
數字簽名(Digital Signature)是一種身份認證技術。軟件包增加數字簽名后,其他用戶可以通過校驗其簽名辨其真偽,從而判斷軟件包是否原裝和是否被修改過。RPM采用的數字簽名為PGP數字簽名。PGP(Pretty Good Privacy)是一個公鑰加密程序,應用時要產生一個密鑰對,一個為公開密鑰(對外公開),一個為私密密鑰(自己保留)。私密密鑰加密的文件任何有相應公開密鑰的人均可解密,而用公開密鑰加密的文件只有持有私密密鑰的人才可以解密。使用PGP公鑰加密法,用戶可以廣泛傳播公鑰,同時安全地保存好私鑰。由于只有用戶自己擁有私鑰,因此任何人都可以用用戶的公鑰加密寫給用戶的信息,并可以直接在不安全通道上傳輸,而不用擔心信息被竊聽。
3.2.1 下載與安裝PGP
PGP應用程序可以從http://www.pgpi.org/products/pgp/versions/freeware/unix/網站下載得到。Linux版本的下載文件為PGPcmdln_6.3.8.Lnx_FW.rpm.tar,可用下面的命令解壓此軟件包,并安裝PGP:
//將安裝軟件包tar文件解包 # tar xvzf PGPcmdln_6.3.8.Lnx_FW.rpm.tar PGPcmdln_6.3.8_Lnx_FW.rpm PGPcmdln_6.3.8_Lnx_FW.rpm.sig WhatsNew.htm WhatsNew.txt //顯示解包后的文件列表 # ll 總用量 2899 -rwx------1 root root 2955703 6月 15 23:24 PGPcmdln_6.3.8_Lnx_FW.rpm -rwx------1 root root 66 6月 15 23:24 PGPcmdln_6.3.8_Lnx_FW.rpm.sig -rwx------1 root root 2958462 6月 15 23:20 PGPcmdln_6.3.8.Lnx_FW.rpm.tar -rwx------1 root root 10981 6月 15 23:24 WhatsNew.htm -rwx------1 root root 8758 6月 15 23:24 WhatsNew.txt //安裝PGPcmdln # rpm -iv PGPcmdln_6.3.8_Lnx_FW.rpm Preparing packages for installation... pgp-6.3.8-rsaref658
3.2.2 RPM使用PGP產生簽名所需的配置
生成PGP密鑰對,用pgp -kg命令來產生新的密鑰對用于簽名,下面是部分程序運行顯示結果:
#pgp -kg Pretty Good Privacy(tm) Version 6.3.8 (c) 1999 Network Associates Inc. Uses the RSAREF(tm) Toolkit,which is copyright RSA Data Security,Inc. Export of this software may be restricted by the U.S. government. ...
在該過程中,系統需要用戶輸入一些配置信息,例如加密算法、主密鑰長度、設置用戶標志等,用戶可以安裝提示輸入相關內容。密鑰生成后,PGP會在用戶主目錄下建立一個.pgp的子目錄,用于存放密鑰相關的文件。下例列出了root用戶.pgp子目錄下的文件:
# ls ~/.pgp total 32 -rw-------1 root root 2117 Nov 8 17:10 PGPMacBinaryMappings.txt -rw-------1 root root 146 Nov 8 17:10 PGPgroup.pgr -rw-------1 root root 151 Nov 8 17:12 PGPsdkPreferences -rw-------1 root root0 Nov 8 17:10 pgp.cfg -rw-------1 root root0 Nov 8 17:10 pubring-bak-1.pkr -rw-------1 root root 897 Nov 8 17:12 pubring-bak-2.pkr -rw-------1 root root 897 Nov 8 17:12 pubring.pkr -rw-------1 root root 512 Nov 8 19:34 randseed.rnd -rw-------1 root root0 Nov 8 17:10 secring-bak-1.skr -rw-------1 root root 984 Nov 8 17:12 secring-bak-2.skr -rw-------1 root root 984 Nov 8 17:12 secring.skr
上述文件中,pubring.pkr為公開密鑰文件,secring.skr為私密密鑰文件。
3.2.3 配置RPM宏
RPM如果需要使用PGP數字簽名的功能,必須在/usr/lib/rpm/macros宏文件或者在用戶主目錄下的~/.rpmmacros文件中設置以下幾個宏:
● _signature:此宏定義數字簽名的類型,此類型只有一個pgp,RPM僅支持這一種數字簽名類型。其定義為:%_signature pgp;
● _pgpbin:此宏定義PGP執行程序名。其定義為:%_pgpbin /usr/bin/pg;
● _pgp_name:此宏定義使用哪個PGP用戶的公開密鑰進行簽名處理(PGP可建立屬于多個用戶的密鑰對)。其定義格式為:%_pgp_name yourname youremail。舉個例子:%_pgp_name中關村username@163.com;
● pgp_path:此宏定義RPM使用的簽名所在的目錄,如:%_pgp_path /root/.pgp。該宏定義RPM使用/root/.pgp目錄下的簽名。
3.2.4 使用RPM的PGP簽名選項
RPM的PGP簽名主要包括如下兩個選項。
● --resign:本選項用于為RPM軟件包重新簽名。如果原包沒有數字簽名,則為其添加簽名;如果已有簽名,則舊的簽名將統統刪除,之后再添加新的簽名。其用法為:
rpm --resign包裹文件1 [包裹文件2]…
● --addsign:本選項用于為RPM軟件包添加數字簽名(一個軟件包可以有多個數字簽名)。用法為:
rpm --addsign包裹文件1 [包裹文件2]…
3.2.5 添加數字簽名
數字簽名也可以在建包時添加,這時須使用--sign選項。-checksig:該選項用于校驗RPM包的數字簽名等內容,看其是否正常。用法為:
rpm--checksig [--nopgp] [--nogpg] [--nomd5] [--rcfile資源文件] 包裹文件 1 序列
可選項中,--nopgp選項指示RPM不校驗PGP簽名,--nogpg選項指示RPM不校驗GPG簽名,--nomd5選項指示RPM不校驗MD5檢查和,--rcfile選項則用于指定RPM所利用的資源配置文件。
# rpm --checksig lze-6.0-2.i386.rpm Pretty Good Privacy(tm) Version 6.3.8 (c) 1999 Network Associates Inc. Uses the RSAREF(tm) Toolkit,which is copyright RSA Data Security,Inc.Export of this software may be restricted by the U.S. government.lze-6.0-2.i386.rpm: pgp md5 OK
本例子為lze軟件包添加數字簽名,輸入密碼為MYPASS。此處校驗lze包的簽名時,RPM顯示pgp校驗OK和md5校驗OK,這表明lze包一切正常。
3.3 管理TAR包(實務6)
TAR命令是Linux下最常用的文件打包工具,可以將若干文件或若干目錄下打包成一個文件,既有利于文件管理,也方便壓縮和文件的網絡傳輸。TAR可以為文件和目錄創建檔案。利用TAR,用戶可以為某一特定文件創建檔案(備份文件),也可以在檔案中改變文件,或者向檔案中加入新的文件。
3.3.1 TAR命令語法及參數選項
TAR命令使用語法如下:
tar[主選項+輔選項]文件或者目錄
其中,主選項是必需的,表明tar命令要完成的操作,輔選項是輔助使用的,可以有也可以沒有。下面列出常用的主選項,并簡要說明其功能:
● -A,--catenate,--concatenate:將若干個tar文件合并成一個tar文件;
● -c,--create:創建一個新的tar文件;
● -d,--diff,--compare:比較tar文件或文件系統的不同之處;
● --delete:從tar文件中刪除文件,但不能從磁帶文件刪除;
● -r,--append:在tar文件尾部追加文件;
● -t,--list:顯示tar文件內容;
● -u,--update:更新tar文件;
● -x,--extract,--get:從tar文件中取出文件。
每次使用tar命令時,上述8個命令參數選項必須選擇一個,用以指明操作類型。下面列出tar命令的輔參數選項如下:
● --atime-preserve:轉儲文件時不改變文件的訪問時間;
● -b,--block-size N:指定塊大小;
● -B,--read-full-blocks:整塊讀;
● -C,--directory DIR:改變目錄;
● --checkpoint:當讀取tar文件時顯示目錄名;
● -f,--file [HOSTNAME:]F:使用tar文件還是設備;
● --force-local:表明tar文件是本地磁盤文件,即使含有冒號;
● -F,--info-script F --new-volume-script F:每處理完一卷磁帶后顯示信息;
● -G,--incremental:增量備份;
● -g,--listed-incremental F:增量備份;
● -h,--dereference:不轉儲符號鏈接。
● -i,--ignore-zeros:忽略tar文件中的0;
● -j,-I,--bzip:用bzip格式壓縮;
● --ignore-failed-read:遇到不可讀文件時不退出;
● -k,--keep-old-files:不覆蓋tar文件中原有文件;
● -K,--starting-file:起始文件;
● -l,--one-file-system:創建tar文件時不轉移文件系統;
● -L,--tape-length N:指明磁帶長度;
● -m,--modification-time:解包文件時不取出更改時間;
● -M,--multi-volume:是否操作多卷文件;
● -N,--after-date DATE,--newer DATE:指明打包文件的最早時間;
● -o,--old-archive,--portability:指明文件格式是V7還是ANSI;
● -O,--to-stdout:取出文件到標志輸出;
● -p,--same-permissions,--preserve-permissions:取出文件所有權限信息;
● -P,--absolute-paths:指明按絕對路徑操作;
● --preserve:保留文件的權限信息和文件順序;
● -R,--record-number:顯示記錄號;
● --remove-files:把文件加入到tar文件后即刪除原文件;
● -s,--same-order,--preserve-order:保持文件間順序;
● --same-owner:保留文件的owner信息;
● -S,--sparse:有效處理稀疏文件;
● -T,--files-from=F:獲取解包出來的文件名;
● --null:讀取以NULL結束的名稱;
● --totals:顯示創建的tar文件大小;
● -v,--verbose:顯示處理文件的詳細信息;
● -V,--label NAME:指明創建的tar文件名;
● --version:顯示tar版本;
● -V,--label NAME:指明tar文件名;
● --version:顯示tar程序版本;
● -w,--interactive,--confirmation:每一步操作都要用戶確定;
● -W,--verify:創建文件后驗證文件正確性;
● --exclude FILE:排除對某個文件的操作;
● -X,--exclude-from FILE:排除文件集合;
● -Z,--compress,--uncompress:壓縮或解壓縮;
● -z,--gzip,--ungzip:用gzip壓縮或解壓縮文件;
● --use-compress-program PROG:使用其他壓縮程序。
3.3.2 創建tar文件
創建一個tar文件要使用主參數選項c,并指明創建tar文件的文件名。下面假設當前目錄下有smart和xplns兩個子目錄以及cpuinfo.txt、smart.txt、tar.txt和tar_create.txt四個文件,smart目錄下有smartsuite-2.1-2.i386.rpm文件,xplns目錄下有xplns-cat-3.3.1-1、i386.rpm,xplns-elm-3.3.1-1.i386.rpm和xplns-img-3.3.1-1.i386.rpm三個文件。用ll -r命令顯示當前目錄下的文件信息如下:
#ll -r ./* -rwx------1 root root 7433 6月 12 21:25 ./tar.txt -rwx------1 root root 226 6月 12 21:25 ./tar_create.txt -rwx------1 root root 26 6月 12 21:25 ./smart.txt -rwx------1 root root 26 6月 12 21:25 ./cpuinfo.txt ./xplns: 總用量 1613 -rwx------1 root root 793828 6月 12 21:26 xplns-img-3.3.1-1.i386.rpm -rwx------1 root root 572471 6月 12 21:26 xplns-elm-3.3.1-1.i386.rpm -rwx------1 root root 1933576 6月 12 21:26 xplns-cat-3.3.1-1.i386.rpm ./smart: 總用量 17 -rwx------1 root root 34475 6月 12 21:25 smartsuite-2.1-2.i386.rpm
若要在該目錄下將所有文件打包成gong.tar文件,可以使用如下命令:
//將當前目錄下所有文件打包成gong.tar //參數c指明創建tar, //參數f指明是創建文件 //參數v指明顯示處理詳細過程 # tar cvf gong.tar ./* ./cpuinfo.txt ./smart/ ./smart/smartsuite-2.1-2.i386.rpm ./smart.txt ./tar_create.txt ./tar.txt ./xplns/ ./xplns/xplns-cat-3.3.1-1.i386.rpm ./xplns/xplns-elm-3.3.1-1.i386.rpm ./xplns/xplns-img-3.3.1-1.i386.rpm //顯示當前目錄下所有文件,從顯示結果可以發現,當前目錄下多了一個gong.tar文件,就是由 //剛才tar命令生成的 #ll 總用量 4927 -rwx------ 1 root root 3358720 6月 12 19:35 cpuinfo.txt -rwx------ 1 root root 6717440 6月 12 19:36 gong.tar drwx------ 1 root root 0 6月 8 21:37 smart -rwx------ 1 root root 26 6月 8 21:37 smart.txt -rwx------ 1 root root 226 6月 12 19:32 tar_create.txt -rwx------ 1 root root 7433 6月 12 17:13 tar.txt drwx------ 1 root root 4096 6月 12 19:34 xplns
3.3.3 顯示tar文件內容
對于一個已存在的tar文件,用戶可能想了解其內容,即該文件是由哪些文件和目錄打包而來的,這就要用帶t參數的tar命令。例如對于3.2.3節所述產生的gong.tar文件,若欲顯示其文件內容,可使用如下命令:
# tar tf gong.tar //顯示gong.tar文件內容 ./cpuinfo.txt ./smart/ ./smart/smartsuite-2.1-2.i386.rpm ./smart.txt ./tar_create.txt ./tar.txt ./xplns/ ./xplns/xplns-cat-3.3.1-1.i386.rpm ./xplns/xplns-elm-3.3.1-1.i386.rpm ./xplns/xplns-img-3.3.1-1.i386.rpm
3.3.4 向tar文件中添加一個文件
欲向已存在的一個tar文件中添加一個文件或目錄,可以使用帶-r主選項參數的tar命令,例如欲向3.2.3節所述產生的gong.tar文件中添加tar_t.txt文件,可以使用如下步驟。
(1)在文件gong.tar圖標上右鍵單擊鼠標,系統顯示快捷菜單,如圖3-5所示。

圖3-5 向tar文件中添加文件的快捷菜單
(2)單擊【添加到壓縮文件】菜單項,系統將顯示【添加文件或文件夾】對話框,如圖3-6所示,在對話框中輸入欲加入的文件或文件夾,或者單擊【瀏覽(B)】按鈕選擇某個文件或文件夾,若選中【僅添加新文件(N)】復選框,則當添加的文件或文件夾在tar文件中已經存在時,系統就不加入該文件或文件夾。單擊【增加(A)】按鈕即可完成添加工作。

圖3-6 添加文件或文件夾對話框
3.3.5 從tar文件中取出文件
在已經存在的tar文件中解包,可以使用帶主選項參數-x的tar命令實現。下面以3.2.3節所述產生的gong.tar文件為例,說明帶主選項參數-x的tar命令的用法。
//首先顯示當前目錄下文件列表,由顯示結果可見, //當前目錄下只有一個文件gong.tar。 #ll 總用量 3280 -rwx------ 1 root root 6717440 6月 12 21:12 gong.tar //對當前目錄下gong.tar文件解包 #tar xvf gong.tar ./cpuinfo.txt ./smart/ ./smart/smartsuite-2.1-2.i386.rpm ./smart.txt ./tar_create.txt ./tar.txt ./xplns/ ./xplns/xplns-cat-3.3.1-1.i386.rpm ./xplns/xplns-elm-3.3.1-1.i386.rpm ./xplns/xplns-img-3.3.1-1.i386.rpm //再顯示解包后當前目錄下所有文件 //由顯示結果可以看出,tar文件中所有文件均已解出 #ll 總用量 4927 -rwx------ 1 root root 3358720 6月 12 21:13 cpuinfo.txt -rwx------ 1 root root 6717440 6月 12 21:12 gong.tar drwx------ 1 root root 0 6月 12 21:13 smart -rwx------ 1 root root 26 6月 12 21:13 smart.txt -rwx------ 1 root root 226 6月 12 21:13 tar_create.txt -rwx------ 1 root root 7433 6月 12 21:13 tar.txt drwx------ 1 root root 4096 6月 12 21:13 xplns
3.4 管理壓縮包(實務7)
Linux下的壓縮工具有很多,下面列出Linux下常用的壓縮工具及其產生文件的后綴:
● gzip/gunzip:后綴名為.gz;
● compress/uncompress:后綴名為.Z;
● zip/unzip:后綴名為.zip;
● bzip2/bunzip2:后綴名為.bz2;
● lha:后綴名為.lzh。
Linux下壓縮工具中最常用的包括gzip、zip和bzip2三種,下面分別講述這三種最常用的壓縮工具。
3.4.1 gzip壓縮
對文件進行壓縮的目的有兩個:一是可以減少存儲空間;二是通過網絡傳輸文件時,可以減少傳輸的網絡開銷。gzip是Linux最常用的軟件壓縮工具,在Linux終端輸入man gzip命令降顯示gzip的幫助文檔。
該命令的使用形式為:gzip[選項]壓縮或解壓縮的文件名。
該命令的主要參數選項有:
● -c:將輸出寫到標準輸出上,并保留原有文件;
● -d:將壓縮文件解壓;
● -l:對每個壓縮文件,顯示字段:壓縮文件的大小,未壓縮文件的大小,壓縮比和未壓縮文件的名字;
● -r:遞歸地查找指定目錄并壓縮其中的所有文件或者是解壓縮;
● -t:測試,檢查壓縮文件是否完整;
● -v:對每一個壓縮和解壓的文件,顯示文件名和壓縮比;
● -num:用指定的數字num調整壓縮的速度,-1或--fast表示最快壓縮方法(低壓縮比),-9或--best表示最慢壓縮方法(高壓縮比)。系統默認值為6。
(1)用gzip壓縮文件:下面給出使用gzip命令壓縮文件的例子:
//顯示當前目錄先所有文件 #ll 總用量 5 -rwx------ 1 root root 26 6月 13 22:16 smart.txt -rwx------ 1 root root 226 6月 13 22:16 tar_create.txt -rwx------ 1 root root 7433 6月 13 22:16 tar.txt //壓縮當前目錄下的所有文件,并且顯示壓縮比,顯示已經替代原來的文件 #gzip -v * //-v參數表明顯示壓縮比和文件名 smart.txt: 0.0% -- replaced with smart.txt.gz tar_create.txt: 43.8% -- replaced with tar_create.txt.gz tar.txt: 68.3% -- replaced with tar.txt.gz //再顯示當前目錄所有文件 //可以發現所有文件都壓縮成了gz文件 #ll 總用量 3 -rwx------ 1 root root 54 6月 13 22:17 smart.txt.gz -rwx------ 1 root root 160 6月 13 22:17 tar_create.txt.gz -rwx------ 1 root root 2385 6月 13 22:17 tar.txt.gz
注意
gzip只能對單個文件壓縮,不能像Winzip和Winrar一樣,可以將多個文件壓縮成一個.zip文件或.rar文件。正因為如此,Linux才提供了tar命令,用于將若干文件或文件夾打包成一個文件,然后再壓縮成一個.gz文件。
(2)用gzip解壓縮文件:下面給出用gzip解壓縮文件的例子:
//顯示當前目錄下所有文件,從顯示結果可以看出, //當前目錄下有三個壓縮文件 # ll 總用量 3 -rwx------ 1 root root 54 6月 13 22:26 smart.txt.gz -rwx------ 1 root root 160 6月 13 22:26 tar_create.txt.gz -rwx------ 1 root root 2385 6月 13 22:26 tar.txt.gz //對當前目錄下所有壓縮的文件解壓,并列出詳細的信息。 #gzip -dv * smart.txt.gz: 0.0% -- replaced with smart.txt tar_create.txt.gz: 43.8% -- replaced with tar_create.txt tar.txt.gz: 68.3% -- replaced with tar.txt //再顯示當前目錄下的所有文件,從顯示結果看出, //所有的.gz壓縮文件都已經解壓縮了 # ll 總用量 5 -rwx------ 1 root root 26 6月 13 22:22 smart.txt -rwx------ 1 root root 226 6月 13 22:22 tar_create.txt -rwx------ 1 root root 7433 6月 13 22:22 tar.txt
(3)顯示壓縮文件的內容信息:可以用帶-l參數的gzip命令顯示gz文件的內容。這只是顯示文件內容,并不實際解壓縮文件。
# gzip -l * compressed uncompressed ratio uncompressed_name 54 26 0.0% smart.txt 160 226 43.8% tar_create.txt 2385 7433 68.3% tar.txt 2599 7685 66.5% (totals)
(4)在tar命令中嵌入壓縮命令:在tar命令中就可以直接嵌入gzip命令,從而直接將若干文件或文件夾處理成一個.tar.gz文件。在這個處理過程中,系統先將若干文件或文件夾打包成.tar,然后將生成的.tar文件壓縮成.tar.gz文件。先舉例如下:
//顯示當前目錄下所有文件 #ll -rwx------ 1 root root 26 6月 13 22:51 smart.txt -rwx------ 1 root root 226 6月 13 22:51 tar_create.txt -rwx------ 1 root root 7433 6月 13 22:51 tar.txt //將當前目錄下所有文件打包并壓縮成gong.tar.gz并顯示處理進度 # tar cvfz gong.tar.gz ./* ./smart.txt ./tar_create.txt ./tar.txt //再顯示當前目錄下所有文件, //從顯示結果可以看出,已經產生了gong.tar.gz文件 #ll 總用量 7 -rwx------ 1 root root 2704 6月 13 22:59 gong.tar.gz -rwx------ 1 root root 26 6月 13 22:51 smart.txt -rwx------ 1 root root 226 6月 13 22:51 tar_create.txt -rwx------ 1 root root 7433 6月 13 22:51 tar.txt
3.4.2 zip/unzip壓縮
zip程序位于/usr/bin目錄中,可將文件壓縮成.zip文件以節省硬盤空間,而當需要的時候又可將壓縮文件解壓縮。unzip命令用于將壓縮文件解壓。
(1)用zip命令壓縮文件或文件夾
在Linux下輸入man zip,系統顯示zip的幫助文檔。
zip命令的使用形式為:zip[選項]壓縮后文件名 待壓縮文件或文件夾。
其中:參數選項表明要完成的操作類型,壓縮后的文件名是某個合法的文件名,其后綴為zip,待壓縮文件或文件夾指明需要進行壓縮的文件或文件夾,可以是多個文件或文件夾。zip命令的參數選項如下:
● -1:最快壓縮,壓縮率最差;
● -9:最大壓縮,壓縮率最佳;
● -b:暫存文件的路徑。該參數常用于zip文件存在而硬盤現有空間不足時;
● -c:替新增或更新的文件增加一行注解;
● -d:從zip文件移出一個文件;
● -D:不要在zip文件中儲存文件的目錄信息;
● -f:以新文件取代現有文件;
● -F:修復已經損毀的壓縮文件;
● -g:將文件壓縮附加到zip文件中;
● -h:顯示輔助說明;
● -i:指定要加入的某些特定文件;
● -j:只儲存文件的名稱,不含目錄;
● -k:強迫使用MSDOS格式文件名;
● -L:顯示zip命令的版權;
● -m:將特定文件移入zip文件中,并且刪除特定文件;
● -n:不壓縮特定擴展名的文件;
● -o:將zip文件的時間設成最后修正zip文件的時間;
● -q:安靜模式,不會顯示相關信息和提示;
● -r:包括子目錄;
● -t:只處理mmddyy日期以后的文件;
● -T:測試zip文件是否正常;
● -u:只更新改變過的文件和新文件;
● -v:顯示版本信息或詳細資料;
● -x:不需要壓縮的文件;
● -y:將symbolic link壓縮,而不是壓縮所連接到的文件;
● -z:為zip文件增加注解;
● -#:設定壓縮速度。-0表示不壓縮,-1表示最快速度的壓縮,-9表示最慢速度的壓縮(最佳化的壓縮)。預設值為-6;
● -@:從標準輸入讀取文件名稱。
注意
使用zip命令可以將許多文件壓縮成一個文件,這與gzip是有區別的。
下面給出使用該命令壓縮文件或文件夾的例子:
//顯示當前目錄下所有文件和文件夾 #ll 總用量 9 drwx------ 1 root root 4096 6月 15 19:45 gzip drwx------ 1 root root 0 6月 12 21:25 smart -rwx------ 1 root root 26 6月 13 22:51 smart.txt -rwx------ 1 root root 226 6月 13 22:51 tar_create.txt -rwx------ 1 root root 7433 6月 13 22:51 tar.txt drwx------ 1 root root 4096 6月 13 22:13 xplns //將當前目錄下的所有文件和文件夾全部壓縮成gong.zip壓縮文件 //顯示壓縮過程中每個文件的壓縮比 //-r表示遞歸壓縮子目錄下所有文件 # zip -r gong.zip ./* adding: gzip/ (stored 0%) adding: gzip/gong.tar.gz (stored 0%) adding: smart/ (stored 0%) adding: smart/smartsuite-2.1-2.i386.rpm (deflated 5%) adding: smart.txt (stored 0%) adding: tar_create.txt (deflated 44%) adding: tar.txt (deflated 68%) adding: xplns/ (stored 0%) adding: xplns/xplns-cat-3.3.1-1.i386.rpm.gz (deflated 0%) adding: xplns/xplns-elm-3.3.1-1.i386.rpm.gz (deflated 0%) adding: xplns/xplns-img-3.3.1-1.i386.rpm.gz (deflated 0%) //再顯示當前目錄下所有文件 //可以發現壓縮文件gong.zip已經生成 #ll 總用量 1621 -rwx------1 root root 3301222 6月 15 19:49 gong.zip drwx------1 root root 4096 6月 15 19:45 gzip drwx------1 root root 0 6月 12 21:25 smart -rwx------1 root root 26 6月 13 22:51 smart.txt -rwx------1 root root 226 6月 13 22:51 tar_create.txt -rwx------1 root root 7433 6月 13 22:51 tar.txt drwx------1 root root 4096 6月 13 22:13 xplns
用帶-v參數選項可以查看zip文件的內容,這點類似于帶t參數選項的tar命令。只不過前者用于顯示壓縮的zip文件的內容,后者用于顯示tar文件的內容。與帶t參數選項的tar命令類似,帶v參數選項的zip命令也不實際解壓縮文件。用帶-v參數選項的zip命令舉例如下:
//顯示當前目錄下所有文件,從顯示結果可以看出,當前目錄下只有一個gong.zip文件 # ll 總用量 1612 -rwx------ 1 root root 3301222 6月 15 19:49 gong.zip //查看gong.zip文件的內容 # zip -v gong.zip zip info: local extra (21 bytes) != central extra (13 bytes): gzip/ zip info:local extra(21 bytes)!=central extra(13 bytes):gzip/gong.tar.gz zip info: local extra (21 bytes) != central extra (13 bytes): smart/ zip info: local extra (21 bytes) != central extra (13 bytes): smart.txt zip info: local extra (21 bytes) != central extra (13 bytes): tar_create.txt zip info: local extra (21 bytes) != central extra (13 bytes): tar.txt zip info: local extra (21 bytes) != central extra (13 bytes): xplns/
用帶-d參數選項的zip命令可以從zip壓縮文件中刪除某個文件,而使用帶-m的zip命令可以向zip壓縮文件添加某個文件,對帶-d和-m參數選項的zip命令舉例如下:
# zip -v gong.zip //顯示壓縮文件gong.zip的文件內容 zip info: local extra (21 bytes) != central extra (13 bytes): free.txt zip info: local extra (21 bytes) != central extra (13 bytes): smart.txt zip info: local extra (21 bytes) != central extra (13 bytes): tar_create.txt zip info: local extra (21 bytes) != central extra (13 bytes): tar.txt //刪除壓縮文件中smart.txt文件 # zip -d gong.zip smart.txt deleting: smart.txt //再顯示壓縮文件內容,可以發現文件刪除成功 # zip -v gong.zip zip info: local extra (21 bytes) != central extra (13 bytes): free.txt zip info: local extra (21 bytes) != central extra (13 bytes): tar_create.txt zip info: local extra (21 bytes) != central extra (13 bytes): tar.txt //向壓縮文件中gong.zip中添加rpm_info.txt文件 # zip -m gong.zip ./rpm_info.txt adding: rpm_info.txt (deflated 75%) //再顯示壓縮文件內容,可以發現文件添加成功 # zip -v gong.zip zip info: local extra (21 bytes) != central extra (13 bytes): free.txt zip info: local extra (21 bytes) != central extra (13 bytes): tar_create.txt zip info: local extra (21 bytes) != central extra (13 bytes): tar.txt zip info: local extra (21 bytes) != central extra (13 bytes): rpm_info.txt
(2)用unzip命令解壓縮文件
unzip命令用于擴展名為zip的壓縮文件的解壓縮,同時,Windows下用壓縮軟件Winzip壓縮的文件在Linux系統下也可以用unzip命令解壓縮。unzip命令的語法如下:
unzip [參數選項] 壓縮文件名.zip。
所有參數選項如下:
● -x:文件列表:解壓縮文件,但不包括指定的file文件;
● -v:查看壓縮文件目錄,但不解壓縮;
● -t:測試文件有無損壞,但不解壓縮;
● -d:目錄:把壓縮文件解壓縮到指定目錄下;
● -z:只顯示壓縮文件的注解;
● -n:不覆蓋已經存在的文件;
● -o:覆蓋已存在的文件且不要求用戶確認;
● -j:不重建文檔的目錄結構,把所有文件解壓縮到同一目錄下。
unzip命令的常用用法有以下三種。
① 簡單解壓縮文件:將壓縮文件解壓縮到當前目錄下;
//顯示當前目錄下所有文件,從顯示結果可以發現當前目錄下只有一個文件gong.zip # ll 總用量 7 -rwx------ 1 root root 13512 6月 15 20:44 gong.zip //將gong.zip解壓縮到當前目錄 # unzip gong.zip Archive: gong.zip inflating: free.txt inflating: tar_create.txt inflating: tar.txt inflating: rpm_info.txt //再顯示當前目錄下所有文件,從顯示結果可以發現, //gong.zip壓縮文件中所有文件已經成功解壓縮到當前目錄 # ll 總用量 32 -rwx------ 1 root root 230 6月 15 21:03 free.txt -rwx------ 1 root root 13512 6月 15 20:44 gong.zip -rwx------ 1 root root 40833 6月 15 21:03 rpm_info.txt -rwx------ 1 root root 226 6月 15 21:03 tar_create.txt -rwx------ 1 root root 7433 6月 15 21:03 tar.txt
② 解壓縮文件到指定目錄:將壓縮文件解壓縮到指定的目錄下,如果已有相同的文件存在,unzip命令不覆蓋原來的文件。
//解壓縮當前目錄下的text.zip壓縮文件, //-n參數選項指明不覆蓋原有文件 //-d /tmp指明將文件解壓縮到/tmp目錄下 #unzip -n text.zip -d /tmp
③ 查看壓縮文件目錄:類似于帶-v參數的zip命令,只顯示壓縮文件內容,并不實際解壓縮文件。
#unzip -v text.zip //顯示當前目錄下text.zip壓縮文件內容
3.4.3 bzip2壓縮
bzip2是一個無損壓縮軟件,具有高質量的數據壓縮能力。它能將文件壓縮到原來的10%~15%,而且壓縮速度和解壓縮速度都非常高,因此在Linux下得到廣泛使用。
bzip2從命令行讀入文件名和參數,每個文件都被名為“原始文件名.bz2”的壓縮文件替換。每個壓縮文件都具有與原文件相同的修改時間和權限,如果可能的話,還具有相同的屬主,因此在解壓縮時這些特性將正確地恢復。
(1)bzip2命令參數選項
● -c:將數據壓縮或解壓縮至標準輸出。
● -d:強制解壓縮。bzip2、bunzip2和bzcat實際上是同一個程序,進行何種操作將根據程序名確定。指定該選項后將不考慮這一機制,強制bzip2解壓縮。
● -z:和-d選項類似,強制進行壓縮操作,而不管輸入的是哪個程序名。
● -t:檢查指定文件的完整性,但并不對其解壓縮。實際上是對數據進行實驗性的解壓縮操作,而不輸出結果。
● -f:強制覆蓋輸出文件。通常bzip2不會覆蓋已經存在的文件。該選項還強制bzip2打破文件的硬鏈接,默認情況下bzip2不會這么做。
● -k:在壓縮或解壓縮時保留輸入文件(不刪除這些文件)。
● -s:在壓縮、解壓縮及檢查時減少內存用量。采用一種修正的算法進行壓縮和測試,每個數據塊僅需要2.5個字節。這意味著任何文件都可以在2300KB的內存中進行解壓縮,盡管速度只有通常情況下的一半。在壓縮時,-s將選定200KB的塊長度,內存用量也限制在200KB左右,代價是壓縮率會降低。總之,如果機器的內存較少(8MB或更少),則可對所有操作都采用-s選項。
● -q:壓制不重要的警告信息。屬于I/O錯誤及其他嚴重事件的信息將不會被壓制。
● -v:詳盡模式--顯示每個被處理文件的壓縮率。命令行中更多的-v選項將增加詳細的程度,使bzip2顯示出許多主要用于診斷目的信息。
● -L:顯示軟件版本,許可證條款及條件。
● -1to-9:在壓縮時將塊長度設為100KB、200KB、900KB。對解壓縮沒有影響。
(2)用bzip2命令壓縮文件
//顯示當前目錄下所有文件 # ll 總用量 32 -rwx------ 1 root root 230 6月 15 22:06 free.txt -rwx------ 1 root root 13512 6月 15 22:06 gong.zip -rwx------ 1 root root 40833 6月 15 22:06 rpm_info.txt -rwx------ 1 root root 226 6月 15 22:06 tar_create.txt -rwx------ 1 root root 7433 6月 15 22:06 tar.txt //用bzip2命令壓縮當前目錄下所有文件 //用bunzip2-z * 將獲得相同的效果 #bzip2 * //再顯示當前目錄下所有文件 //從顯示結果可以看出,所有文件都壓縮成了原文件名加bz2后綴的形式 # ll 總用量 15 -rwx------ 1 root root 157 6月 15 22:06 free.txt.bz2 -rwx------ 1 root root 13824 6月 15 22:06 gong.zip.bz2 -rwx------ 1 root root 9366 6月 15 22:06 rpm_info.txt.bz2 -rwx------ 1 root root 165 6月 15 22:06 tar_create.txt.bz2 -rwx------ 1 root root 2326 6月 15 22:06 tar.txt.bz2
(3)用bunzip2命令解壓縮文件
//顯示當前目錄下所有文件 # ll 總用量 15 -rwx------ 1 root root 230 6月 15 22:17 free.txt -rwx------ 1 root root 13824 6月 15 22:17 gong.zip.bz2 -rwx------ 1 root root 9366 6月 15 22:17 rpm_info.txt.bz2 -rwx------ 1 root root 165 6月 15 22:17 tar_create.txt.bz2 -rwx------ 1 root root 2326 6月 15 22:17 tar.txt.bz2 //用bunzip2命令解壓縮當前目錄下所有文件 //其中有一個文件free.txt不是以bz2為后綴 //從顯示結果可以看出,對free.txt文件解壓縮時報錯 # bunzip2 * bunzip2: Can't guess original name for free.txt -- using free.txt.out bunzip2: free.txt is not a bzip2 file. //再顯示當前目錄下所有文件,從顯示結果可以看出 //所有bz2文件都解壓縮成功 # ll 總用量 32 -rwx------ 1 root root 230 6月 15 22:17 free.txt -rwx------ 1 root root 13512 6月 15 22:18 gong.zip -rwx------ 1 root root 40833 6月 15 22:18 rpm_info.txt -rwx------ 1 root root 226 6月 15 22:18 tar_create.txt -rwx------ 1 root root 7433 6月 15 22:18 tar.txt
- Dreamweaver CS3+Flash CS3+Fireworks CS3創意網站構建實例詳解
- 手把手教你玩轉RPA:基于UiPath和Blue Prism
- 網上生活必備
- CorelDRAW X4中文版平面設計50例
- 大數據平臺異常檢測分析系統的若干關鍵技術研究
- Blender Compositing and Post Processing
- Blender 3D Printing by Example
- Building a BeagleBone Black Super Cluster
- Apache源代碼全景分析(第1卷):體系結構與核心模塊
- AMK伺服控制系統原理及應用
- Hands-On SAS for Data Analysis
- Deep Learning Essentials
- ARM體系結構與編程
- Mastering Microsoft Dynamics 365 Customer Engagement
- 工業控制系統安全