- Linux从初学到精通
- 张勤 鲜学丰等编著
- 810字
- 2020-08-27 03:01:39
4.5 压缩与归档命令
对于不经常使用的文件或在进行备份时,很多人都习惯先将这些文件进行压缩。在Windows中有非常多的压缩软件,如WinRAR、WinZIP等,Linux中同样也提供了很多种方法进行压缩。下面是在Linux中常用的一些与压缩相关的命令。
4.5.1 gzip:压缩文件
gzip是GNU zip的缩写,gzip是一个GNU自由软件的文件压缩程序。gzip的作者是Jean-loup Gailly和Mark Adler。1992年10月31日第一次公开发布,版本号是0.1。gzip的基础是DEFLATE,DEFLATE是LZ77与哈夫曼编码的一个组合体。DEFLATE最初是作为LZW及其他受专利保护的数据压缩算法的替代版本而设计的,当时那些专利限制了压缩及其他一些流行的归档工具的应用。该命令语法如下。
gzip [-cdflNnqtvr] [-压缩比] [--bast|--fast] [-S <压缩字尾字符串>] 要压缩的文件
常用指数:
常用选项:
● 要压缩的文件:需要压缩的文件。
● -c:把压缩后的文件输出到标准输出设备(有关标准输出设备见9.2.6),不去改变原始文件。默认情况下,gzip会将文件直接压缩后加上“.gz”扩展名,而不保留原来的文件。可以使用“>”等特殊字符将压缩后的结果导向一个新的文件。
● -d:解开压缩文件。
● -f:强行压缩文件,不管文件名或硬链接是否存在,以及该文件是否是符号链接。如不使用该选项,则压缩后加上“.gz”扩展名的文件若存在,gzip会一一询问用户,确认是否要覆盖已有的文件。至于硬链接和符号链接,gzip默认是不处理的,加上该选项后,gzip命令会读取该链接所指向的文件,并将其压缩。
● -l:显示压缩文件的相关信息。
● -N:压缩文件时,存储原来文件名称及时间,这也是gzip默认的。
● -n:压缩文件时,不存储原来文件名称及时间,这也是gzip默认的。
● -q:不显示警告信息。
● -t:测试压缩文件是否正确。
● -r:递归处理,将指定目录下所有文件及子目录一并处理。
● -v:显示命令执行过程。
● -压缩比:压缩比是一个介于1~9的数值,9表示压缩比最大;1表示压缩速度最快。默认值为6。
● --bast:相当于“-9”。
● --fast:相当于“-1”。
● --S<压缩字尾字符串>:更改压缩后文件的扩展名,gzip默认的扩展名是“.gz”,可以通过该选项指定其他扩展名。
gzip是一个广泛使用的压缩程序,文件被压缩后,默认其文件名后会加上“.gz”,源文件将被删除。下面看几个gzip命令的例子。
● 使用gzip压缩当前目录下的install.log文件。
[root@srv ~]# gzip install.log
● 被gzip压缩后,原文件就没有了,只保留了压缩文件。
[root@srv ~]# ll i* total 28 -rw-r--r--1 root root 7810 Jan 29 19:31 install.log.gz
● 使用gzip压缩当前目录下的install.log.syslog文件,使用“-c”和“>”可以给压缩文件一个新的名称,而保留回来的文件。
[root@srv ~]# gzip -c install.log.syslog > install.log.syslog.gz
[root@srv~]# ll i*
total 32
-rw-r--r--1 root root 3738 Jan 29 19:30 install.log.syslog
-rw-r--r--1 root root 915 Feb 7 12:05 install.log.syslog.gz
● 使用gzip解压当前目录下的install.log.gz文件。
[root@srv ~]# gzip -d install.log.gz
4.5.2 bzip2:压缩文件
bzip2是Julian Seward开发的开源数据压缩算法及程序。Julian Seward在1996 年7 月第一次公开发布了bzip2 0.15版,在随后几年中这个压缩工具稳定性得到改善并且日渐流行,Julian Seward在2000年晚些时候发布了1.0版。bzip2比传统的gzip或ZIP的压缩效率更高,但是bzip2的压缩速度较慢。与RAR或ZIP等其他不同的是,bzip2只是一个数据压缩工具,而不是归档工具,在这一点上bzip2与gzip类似。程序本身不包含用于多个文件、加密或者文档切分的工具。该命令语法如下。
bzip2 [-cdfktvz] [-压缩比] 要压缩的文件
常用指数:
常用选项:
● 要压缩的文件:需要压缩的文件。
● -c:将压缩与解压的结果送到标准输出设备(有关标准输出设备见9.2.6)。
● -d:执行解压操作。
● -f:bzip2在压缩或解压时,如果输出文件与现有文件同名则不会覆盖,使用该选项后则会覆盖。
● -k:bzip2在压缩或解压后,会删除源文件,如果使用该选项则会保留源文件。
● -t:测试“.bz2”的完整性。
● -v:显示执行过程。
● -z:强制执行压缩。
● -压缩比:压缩比是一个介于1~9的数值,9表示压缩比最大;1表示压缩速度最快。
bzip2在压缩时如果不加任何选项,在压缩完成后会产生“.bz2”的压缩文件并删除源文件。下面看几个bzip2命令的例子。
● 使用bzip2压缩当前目录下install.log文件。
[root@srv ~]# bzip2 install.log
● 使用bzip2解压当前目录下install.log.bz2文件。
[root@srv ~]# bzip2 -d install.log.bz2
4.5.3 tar:压缩备份
类UNIX操作系统上的打包工具,可以将多个文件合并为一个文件,打包后的文件扩展名为“.tar”。tar在打包时默认情况下并不进行压缩的tar文件,但是可以通过选项使其在打包的同时进行压缩。该命令语法如下。
tar [-AchikmMOpPrstuwxzjv] [-f <备份文件>] [-K <文件>] [-T <范本文件>] [-L <媒体容量>] [-N <日期时间>] [-V <卷名称>] [-X <范本文件>] [--delete] [--ignore-failed-read] [--no-recursion] [--numeric-owner] [--owner=<用户名>] [-C <目录>] [文件或目录]
常用指数:
常用选项:
● 文件或目录:要打包的文件或目录。
● -A:新增打包文件到已存在的打包文件之后。
● -c:建立新的备份文件。
● -h:不建立符号链接,直接复制该链接所指向的文件。
● -i:忽略备份文件中的0Byte区块。
● -k:解开打包文件时,不覆盖已存在的文件。
● -m:解包文件和变更文件的读取时间。
● -M:在建立、解开打包文件或列出其中内容时,采用多卷模式。
● -O:把从打包文件里还原的文件输出到标准输出设备。
● -p:用原来的文件权限还原文件。
● -P:文件名使用绝对名称,不移除文件名前的“/”。
● -r:新增文件到已存在的备份文件结尾部分。
● -s:还原文件的顺序和打包文件内的存放顺序相同。
● -t:列出备份文件内容。
● -u:仅置换备份文件内的文件更新的文件。
● -w:处理每个文件时,均要求用户确认。
● -x:从备份文件中还原文件。
● -z:通过gzip命令处理备份文件。
● -j:通过bzip2命令处理备份文件。
● -v:显示执行过程。
● -f<备份文件>:指定备份文件。
● -K<文件>:从指定的文件开始备份。
● -T <范本文件>:指定范本文件,其内含有一个或多个范本样式,让tar解开或建立符合设定条件的文件。
● -L<媒体容量>:指定存储媒体的容量,单位以1024Bytes计算。如容量为1000,则能够存放的空间为1024000Bytes。
● -N<日期时间>:只将较指定日期更新的文件存储到备份文件中。
● -V<卷名称>:建立使用指定的卷名称的备份文件。
● -X<范本文件>:指定范本文件,其内含有一个或多个范本样式,让tar排除符合条件的文件。
● -C<目录>:指定解包的目录。
● --delete:从备份文件中删除指定的文件。
● --ignore-failed-read:忽略数据读取错误,不中断程序的执行。
● --no-recursion:不做递归处理,也就是指定目录下的所有文件及目录不予处理。
● --numeric-owner:以用户编号及组编号取代用户名及组名称。
● --owner=<用户名>:把加入备份文件的所有者改为指定用户。
在使用tar命令时,使用“z”或“j”参数可以对打包的文件进行gzip或bzip2的压缩,一般使用gzip压缩后文件的扩展名为“.tar.gz”或“.tgz”;使用bzip2压缩后文件的扩展名为“.tar.bz2”或“.tbz”。如果在使用tar命令时使用了“f”参数指定文件名时,该参数必须出现在所有参数的最后面。下面看几个tar命令的例子。
● 将/boot目录打包并使用gzip方式压缩,打包后文件名为boot.tar.gz。
[root@srv ~]# tar -cvzf boot.tar.gz /boot
● 将/boot目录打包并使用bzip2方式压缩,打包后文件名为boot.tar.bz2。
[root@srv ~]# tar -cvjf boot.tar.bz2 /boot
● 将boot.tar.gz文件解压到当前目录。
[root@srv ~]# tar -xvzf boot.tar.gz
● 将boot.tar.bz2文件解压到当前目录。
[root@srv ~]# tar -xvjf boot.tar.bz2
4.5.4 zip/uzip:ZIP文件压缩与解压
ZIP文件格式是一种流行的数据压缩和文档储存的文件格式,原名Deflate,发明者为菲尔·卡茨(Phil Katz),他于1989年1月公布了该格式的资料。ZIP通常使用后缀名“.zip”,ZIP文件格式的MIME格式为“application/zip”。目前ZIP格式属于几种主流的压缩格式之一,其竞争者包括RAR格式及开放源码的7-Zip格式。从性能上比较,RAR及7-Zip格式较ZIP格式压缩率较高,而7-Zip由于提供了免费的压缩工具而逐渐在更多的领域得到应用。在Linux中使用zip命令压缩文件;使用unzip解压文件,该命令语法如下。
zip [-AcdDfFgjJmoqrTuvXyz] [-b <工作目录>] [-i <范本样式>] [-x <范本样式>] [-n <字尾字符 串>] [-压缩比] [压缩文件] [文件…]
常用指数:
常用选项:
● 文件…:需要处理的文件。
● 压缩文件:需要压缩的文件。
● -A:调整可执行的自动解压文件。
● -c:替每个被压缩的文件加上注释,zip会显示提示符号一一访问用户,不加注释的文件可以按回车键略过。
● -d:从压缩文件内删除指定的文件。
● -D:压缩文件内不建立目录名称。默认zip命令会在压缩文件内单独建立目录的名称。
● -f:此参数与“-u”参数类似,但不仅更新已有的文件,如果某些文件原本不存在于压缩文件内,使用该参数会一并将其加入压缩文件中。
● -F:尝试修复已损坏的压缩文件。
● -g:将文件压缩后附加在已有的压缩文件之后,而非另行建立新压缩文件。如果附加操作失败,zip会尝试恢复原先的压缩文件,此参数一旦失败,则该压缩文件将无法使用。
● -j:只存储文件名及其内容,而不存放任何目录名称。默认zip命令会存储文件与当前目录的相对路径名称。
● -J:删除在压缩文件前面不必要的数据,如自动解压文件的文件头。
● -m:将文件压缩并加入压缩文件后,删除原始文件。
● -o:以压缩文件内拥有最新修改时间的文件为准,将压缩文件的修改时间设置成和该文件一样。
● -q:不显示命令执行过程。
● -r:递归处理,将指定目录下的所有文件及子目录一并处理。
● -T:检查备份内每个文件是否正确无误。
● -u:更换较新的文件到压缩文件内。利用该参数可以把较新的文件(以修改时间为准)压缩后,加入压缩文件中,替换原本压缩文件里较旧的文件。
● -v:显示命令执行过程。
● -X:不存储额外的文件属性,如所有者和拥有组。
● -y:直接存储符号链接,而非该链接所指向的文件。
● -z:替压缩文件加上注释,zip会显示提示符号询问用户,在注释最后输入“EOF”控制字符(或按【Ctrl+D】组合键)即可。
● -b<工作目录>:指定暂时存放文件的目录。
● -i <范本样式>:只压缩符合条件的文件,用户可以配置范本文件,让zip只压缩符合指定条件的文件。
● -x <范本样式>:排除符合条件的文件,用户可以配置范本文件,让zip压缩时排除符合指定条件的文件。
● -n <字尾字符串>:不压缩具有特定字尾的文件,某些文件已经过特殊编码大幅缩减文件大小,如GIF文件、JPEG文件,再使用zip对其压缩几乎没有任何效果,使用本参数能指定这类文件的字尾字符串,两个之间用“:”分隔,如“.gif:.jpg”。
● -压缩比:压缩比是一个介于1~9的数值,9表示压缩比最大;1表示压缩速度最快。默认值为6。
unzip [-cflptuvzabCMnoqX] [.zip文件] [文件] [-d <目录>] [-x <文件>] [-P <密码>]
常用指数:
常用选项:
● .zip文件:指定“.zip”压缩文件。
● 文件:指定要处理“.zip”压缩文件中的哪些文件。
● -c:将解压的结果显示在屏幕上,并对字符做适当的转换。
● -f:更新现有的文件。unzip会检查压缩文件中有哪些文件与当前目录中的文件重复,如果压缩文件中的文件较新,则解压这些较新的文件到目录中,覆盖目录中较旧的文件。
● -l:显示压缩文件内包含的文件。
● -p:与“-c”参数类似,会将解压的结果显示到屏幕上,但不会执行任何转换。
● -t:检查压缩文件是否正确。
● -u:与“-f”参数类似,但是除了更新现有文件外,也会将压缩文件中的其他文件解压到目录中。
● -v:执行时显示详细信息。
● -z:仅显示压缩的备注文件。
● -a:对文本文件进行必要的字符转换。
● -b:不对文本文件进行必要的字符转换。
● -C:压缩文件中的文件名区分大小写。
● -M:将输入结果送到more程序处理(有关more见4.6)。
● -n:解压时不要覆盖原有文件。
● -o:不必先询问用户,unzip直接覆盖原有文件。
● -q:执行时不显示任何信息。
● -X:解压的同时回收文件原来的UID、GID(有关UID、GID见第5章)。
● -d<目录>:指定文件解压后要存储的目录,默认为当前目录。
● -x<文件>:指定不要处理“.zip”文件中的哪些文件。
● -P<密码>:使用zip的密码选项。
在Linux中zip/unzip这两个命令可以实现“.zip”文件的创建和解压,下面看几个zip/unzip命令的例子。
● 将当前目录jack.docx压缩成jackbak.zip文件。
[root@srv ~]# zip jackbak jack.docx
adding: jack.docx (deflated 100%)
● 将当前目录下的doc目录及其下的所有文件和子目录压缩成docbak.zip文件。
[root@srv ~]# zip -r docbak doc/
adding: doc/ (stored 0%)
adding: doc/jack.docx (deflated 100%)
adding: doc/house.xlsx (deflated 100%)
● 将doc.zip文件的所有内容解压到当前目录。
[root@srv ~]# unzip doc.zip
Archive: doc.zip
creating: doc/
inflating: doc/jack.docx
inflating: doc/house.xlsx
4.5.5 rar/unrar:RAR文件压缩与解压
RAR(RAR官方网站:http://www.rarlab.com/)是一种专利文件格式,用于数据压缩与归档打包,开发者尤金·罗谢尔(Eugene Roshal),所以RAR的全名是:Roshal ARchive。首个公开版本RAR 1.3发布于1993年。尤金·罗谢尔毕业于俄罗斯车里雅宾斯克工业大学(Chelyabinsk Technical University),也是FAR文件管理器的作者。他开发程序压缩/解压RAR文件,最初用于DOS,后来移植到其他平台。主要的Windows版本编码器,称为WinRAR,以共享软件的形式发行。不过Roshal公开了解码器源码,UnRAR解码器许可证允许有条件自由发布与修改(条件:不许发布编译RAR兼容编码器),而RAR编码器一直是有专利的。在RHEL 5.x中并没有提供RAR文件的压缩与解压功能,所以必须先使用安装RAR工具,具体操作步骤如下。
● 下载rar for Linux。
[root@srv ~]# wget http://www.rarlab.com/rar/rarlinux-3.8.0.tar.gz
● 将rar for Linux解包到“/usr/local”目录。
[root@srv ~]# tar -zxvf rarlinux-3.9.2b1.tar.gz -C /usr/local
● 为了使用方便建立rar/unrar的符号链接。
[root@srv ~]# ln -s /usr/local/rar/rar /usr/local/bin/rar [root@srv ~]# ln -s /usr/local/rar/unrar /usr/local/bin/unrar
● 使用YUM方式安装“glibc”(在使用YUM前需配置YUM源,方法见8.3,也可以见使用3.1.7中的方法配置后,再学习8.3)。
[root@srv ~]# yum -y install glibc
在Linux中使用rar命令压缩文件;使用unrar解压文件,该命令语法如下。
rar <命令> [<选项…>] 压缩文件 [文件...] [<解压缩路径>]
常用指数:
常用选项:
● 文件:要压缩的文件。
● 压缩文件:需要压缩或解压的文件。
● 解压缩路径:解压文件到指定目录。
● 命令:执行rar命令时所做的操作。
● 选项:执行rar命令时操作的选项。
命令包括以下几个:
● a:添加文件到压缩文件。
● c:添加压缩文件注释,注释的大小最大不能超过62000字节。
● cf:添加文件备注。
● ch:改变压缩文件参数。
● cw:向指定文件写入文件备注。
● d:从文件中删除文件。
● e:解压缩文件到当前目录,不创建任何子目录。
● f:刷新压缩文件中的文件,更新这些文件自被打包之后产生的变化,不在压缩文件中增加新的文件。
● x:解压缩到完整路径。
选项包括以下几个:
● -df:压缩后删除原文件。
● -hp<密码>:加密文件数据和文件头部。
● -m<0..5>:设置压缩等级,0表示存储,5表示压缩最大,默认为3。
● -r:对子目录进行递归操作。
● -sfx[名称]:创建SFX档案。
● -v<大小>[k,b]:指定分卷压缩文件的大小。
● -y:设定所有回答为yes。
unrar的命令和rar具有同样的功能,而且unrar只包含了rar的一部分命令,因此使用rar就可以完成所有操作。下面看几个unrar命令的例子。
● 将当前目录的jack.docx文件压缩成jackbak.rar文件。
[root@srv ~]# rar a jackbak.rar jack.docx
RAR 3.80 Copyright (c) 1993-2008 Alexander Roshal 16 Sep 2008
Shareware version Type RAR -? for help
Evaluation copy. Please register.
Creating archive jackbak.rar
Adding jack.docx OK
Done
● 将当前目录下的doc目录及其下的所有文件和子目录压缩成docbak.rar文件。
[root@srv ~]# rar a -r docbak.rar doc
RAR 3.80 Copyright (c) 1993-2008 Alexander Roshal 16 Sep 2008
Shareware version Type RAR -? for help
Evaluation copy. Please register.
Updating archive docbak.rar
Adding doc/jack.docx OK
Adding doc/renee.xlsx OK
Adding doc OK
Done
● 将docbak.rar文件的所有内容解压到当前目录。
[root@srv ~]# rar x docbak.rar
RAR 3.80 Copyright (c) 1993-2008 Alexander Roshal 16 Sep 2008
Shareware version Type RAR -? for help
Extracting from docbak.rar
Extracting jack.docx OK
Creating doc OK
Extracting doc/jack.docx OK
Extracting doc/renee.xlsx OK
All OK
4.5.6 7-Zip:7z文件压缩与解密
7-Zip(7-Zip官方网站:http://www.7-zip.org/)是一个开源的数据压缩程序,主要用在Windows、类UNIX操作系统。7-Zip主体在GNU LGPL下发布,加密部分使用AES的代码,使用BSD License发布,解压RAR部分使用RAR特定的许可协议。7-Zip默认的格式是其自行开发的7z格式,扩展名为“.7z”。7z格式包含多种算法,最常使用的就是Bzip2及Igor Pavlov开发的LZMA。LZMA算法比起其他常见的传统压缩算法,如Zip、RAR来说相对较新,压缩率也比较高。7z格式本地的使用Unicode来存储文件名称,可以避免不同系统间压缩解压乱码的问题。7-Zip支持众多的压缩/未压缩的文件格式,如ZIP、CAB、RAR、ARJ、Z、gzip、bzip2、LLHA、tar、cpio、rpm。从4.42版开始支持CD/DVD镜像格式ISO,另外因为授权问题,不再支持ACE格式。
7-Zip也是目前最普及的开放源代码压缩程序。在RHEL 5.x中并没有提供7-Zip文件的压缩与解压功能,所在必须先使用安装7-Zip工具,具体操作步骤如下。
● 下载7-Zip for Linux。
[root@srv ~]# wget ftp://rpmfind.net/linux/dag/redhat/el5/en/i386/dag/RPMS/p7zip-4.61-1.el5.rf.i386.rpm
● 安装7-Zip工具。
[root@srv ~]# rpm -ivh /p7zip-4.61-1.el5.rf.i386.rpm
在Linux中使用7za命令压缩/解压“.7z”文件,该命令语法如下。
7za <命令> [<选项>...] 压缩文件 [<参数变量>...]
常用指数:
常用选项:
● 压缩文件:需要压缩或解压的文件。
● 命令:执行7za命令时所做的操作。
● 选项:执行7za命令时操作的选项。
<命令>包括以下几个:
● a:添加文件到压缩文件。
● d:从压缩文件删除文件。
● e:从压缩文件中释放文件到当前目录中,或者通过“-o”选项指定目录。该命令会将所有被释放的文件放置到一个文件夹。如果想使用完整路径释放文件,用户必须使用 “x”命令。7-Zip在覆盖现有文件时会提示用户如何进行下一步操作,除非用户自定义了“-y”选项。7-Zip所支持的回应包括:“y”是、“n”否、“a”将所有的询问以YES来对待、“s”将所有的询问以NO来对待、“q”退出程序。
● l:列出压缩文件内容。
● t:测试压缩文件文件的完整性。
● u在压缩文件中使用较新的文件替换掉较旧的文件。
● x:在当前目录中,使用完整路径从压缩档案中释放文件,或者通过“-o”选项指定目录。
<选项>包括以下几个:
● --:在命令行中使“--”后的选项开关“-”都失效。这样就允许在命令行中使用文件名以“-”开头的文件。
● -ai [<r[-|0]>] <@{listfile}|!{wildcard}>:指定附加文件,包括压缩档案文件名及通配符。此选项可同时附加多个类型。“<r[-|0]>”指定通配符及文件名,该选项在这里必须使用。如果此选项未被指定,那么将自动使用递归(有关递归参见“-r”选项)。<@{listfile} | !{wildcard}>指定要处理的文件的文件名、通配符或文件列表。{listfile}指定文件列表的文件名;{wildcard}指定通配符或文件名。
● -ao[a|s|u]:指定在释放期间如何覆盖硬盘上现有的同名文件。“-aoa”表示直接覆盖现有文件而没有任何提示;“-aos”表示跳过现有文件,其不会被覆盖;“-aou”表示如果相同文件名的文件已存在,将自动重命名被释放的文件,如“charles.docx”将被自动重命名为“charles_1.docx”;“-aot”表示如果相同文件名的文件已存在,将自动重命名现有的文件。
● -ax[<r[-|0]>]<@{listfile}|!{wildcard}>:排除文件名。
● -i[<r[-|0]>]<@{listfile}|!{wildcard}>:指定附加文件或一类文件。
● -o:指定释放文件的输出文件夹,该选项只能和释放命令配合使用。
● -p:设置密码。
● -r[-|0]:把命令行中的通配符及文件名以指定的方法对待。“-r”表示开启递归子目录,对于e、l、t、x这些操作命令,会默认使用此选项;“-r-”表示关闭递归子目录,对于a、d、u等所有需扫描磁盘文件的命令,会默认使用此选项;“-r0”表示开启递归子目录。但只应用于通配符。
● -t{压缩类型}:指定压缩文件格式,可以是:zip、7z、rar、cab、gzip、bzip2、tar,默认值是7z格式。
● -v{大小}[b|k|m|g]:指定分卷大小,可以使用字节、KB、MB、GB(1 GB = 1024 MB)。可以同时指定多个“-v”选项。
● -w:为文件压缩设置临时的工作目录。
● -x[<r[-|0]>]<@{listfile}|!{wildcard}>:指定某一文件或某一类文件从操作中排除。
● -y:使7-Zip执行命令时的大多数提示选择同意。
在“-i”、“-ai”、“-x”、“-ax”都可以通过{listfile}指定文件列表文件名;{wildcard}指定通配符或文件名。文件列表文件名可以对要操作的文件进行批量操作,在文件中的文件名必须用空格或另起一行隔开,如使用空格隔开,每一个文件必须加引号,如建立一个“lf.txt”的文件内容如下则表示要操作的文件为“/My doc”目录中所有扩展名为“docx”的文件和“/media”目录下所有扩展名为“mp3”的文件。7-Zip支持和Windows相类似的通配符:“*”表示任意个字符;“?”表示任何一个字符。
"/My doc/*.docx" /media/*.mp3
下面看几个7-Zip命令的例子。
● 将“/boot”下所有内容以ZIP格式压缩为“bootbak.zip”文件。
[root@srv ~]# 7za a -tzip -r bootbak.zip /boot/*
● 将“/etc”下所有内容以7z格式压缩为“charles.7z”文件,并对其进行分卷,第一个分卷为10MB,第二个为15MB,剩下全部为20 MB。
[root@srv ~]# 7za a charles.7z -r /etc -v10m -v15m -v20m
● 从压缩文件“bootbak.zip”中释放所有文件到当前目录。
[root@srv ~]# 7za x bootbak.zip
● 从压缩文件“bootbak.zip”中释放所有扩展名为“*.conf”的文件到“/root”目录。
[root@srv ~]# 7za x bootbak.zip -r -o/root *.conf
4.6文本查看命令
Linux大部分配置都是通过修改配置文件实现,Linux中的日志也是文本格式,所以在使用Linux过程中经常需要查看文本文件,Linux提供了很多用于文本文件查看的命令,下面是在Linux中常用的一些与文本查看相关的命令。在这些文本查看的命令中需要查找的文件名并不是一个必需的参数,因为在Linux中可以通过管道(有关管道见9.2.6)使这些命令用于显示其他一些命令的输出结果。
4.6.1 cat:显示文件内容
cat命令用于显示文件内容,该命令语法如下。
cat [-bEsT] [文件…]
常用指数:
常用选项:
● 文件…:要显示的文件。
● -b:显示文件内容时,在所有非空白行的开头标上编号,编号从1开始依次累加。● -E:在每一行的最后标上“$”。
● -s:当内容某部分的空白行超过一行时,则该处只以一行空白行表示。
● -T:将制表符(Ta b)以“^I”显示。
cat命令会读取指定文件的内容,并输出到标准输出设备。下面看几个cat命令的例子。
● 显示“/etc/rc.d/rc.local”文件内容。
[root@srv ~]# cat /etc/rc.d/rc.local
#!/bin/sh
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
提示
在Linux中还有一个tac命令,也是用于显示文件内容,但该命令是从文件的最后一行开始显示。
4.6.2 head:显示文件内容的最前部分
head命令用于显示文件内容的最前部分,该命令语法如下。
head [-qv] [-c <显示数目>] [-[n] <显示行数>] [文件…]
常用指数:
常用选项:
● 文件…:要显示的文件。
● -q:不显示文件名称。
● -v:显示文件名称。
● -c <显示数目>:指定要显示多少数据,单位以Byte计算,也可以在指定的数字后面加上b、k和m。
● -n <显示行数>:设置要显示多少行内容。也可以通过“+”号表示从指定的行数开始显示,如“+10”表示从该文件的第10行开始显示,直到文件结束。
head命令会读取指定的文件内容,并将其内容最前的部分输入到标准输出设备。如不通过“-n”指定行数,默认将显示最前的10行。下面看几个head命令的例子。
● 显示“/etc/fstab”文件前2行的内容。
[root@srv ~]# head -2 /etc/fstab
LABEL=/ / ext3 defaults 1 1
LABEL=/tmp /tmp ext3 defaults 1 2
4.6.3 tail:显示文件内容的末尾部分
tail命令用于显示文件内容的末尾部分,该命令语法如下。
tail [-fqv] [-c <显示数目>] [-[n] <显示行数>] [文件…]
常用指数:
常用选项:
● 文件…:要显示的文件。
● -q:不显示文件名称。
● -v:显示文件名称。
● -c <显示数目>:指定要显示多少数据,单位以Byte计算,也可以在指定的数字后面加上b、k和m。
● -n <显示行数>:设置要显示多少行内容。也可以通过“+”号表示从指定的行数开始显示,如“+10”表示从该文件的倒数第10行开始显示,直到文件结束。
tail命令会读取指定的文件内容,并将其内容末尾的部分输入到标准输出设备。如不通过“-n”指定行数,默认将显示末尾的10行。tail命令是一个经常会被用到的命令,很多时候在查看Linux日志时会使用到该命令。下面看几个tail命令的例子。
● 显示“/var/log/messages”最后3行的内容。
[root@srv ~]# tail -3 /var/log/messages
Feb 10 01:12:05 srv tpvmlpd[4017]: device type not supported
Feb 10 01:12:20 srv tpvmlpd[4018]: device type not supported
Feb 10 01:12:20 srv tpvmlpd[2695]: aborting
4.6.4 more:逐页显示文件内容
more命令用于逐页显示文件内容,该命令语法如下。
more [-dfpsu] [-<行数>] [+/<字符串>] [+<行数>] [文件…]
常用指数:
常用选项:
● 文件…:要显示的文件。
● -d:在下方显示“Press space to continue,’q’to quite.”,用户如果按错键,则会显示“Press‘h’for instructions.”。
● -f:在计算行数时,以实际的行数来计算,而不是使用自动换行后的行数。
● -p:在显示每页内容时,不采用滚动画面的方式,而是先将屏幕清空后再显示该页内容。
● -s:如果出现连接的空白行,则将其合并为一行。
● -u:在有些文本文件中,有的字符有下画线,使用该选项则不显示下画线。
● -<行数>:指定每次要求显示的行数。
● +/<字符串>:在文件中查找指定的字符串,然后显示字符中所在页的内容。
● +<行数>:从指定的行数开始显示。
more命令可以将文件内容显示在屏幕上,每次显示一页内容。当使用more命令时,会进入more命令浏览模式,在最下方会显示当前所在位置是各文件的百分比(如下所示)。可以通过回车键向下逐滚动;空格键向上翻一屏幕;“b”键向下翻一屏幕;“q”键退出。
[root@srv ~]# more /var/log/messages
Feb 10 02:24:21 srv gpm[3319]: Started gpm successfully. Entered daemon mode.
Feb 10 02:24:22 srv tpvmlpd[3348]: device type not supported
Feb 10 02:24:24 srv avahi-daemon[3409]: Found user 'avahi' (UID 70) and group 'avahi'
(GID 70).
detected, consider installing nss-mdns!
--More--(80%)
4.6.5 less:逐页显示文件内容
less命令用于逐页显示文件内容,该命令语法如下。
less [-dfgGiImMnNrsS] [-y <前卷行数>] [-z <显示行数>] [-p <范本样式>] [-O <输出文件>] [-o <输出文件>] [-j <行数编号>] [-h <回卷行数>] [文件…]
常用指数:
常用选项:
● 文件…:要显示的文件。
● -d:忽略错误信息。
● -f:强制开启特殊文件,所谓特殊文件是指外围设备文件、目录或二进制文件。
● -g:只反白显示当前符合查找条件的字符串。通常less会反白显示所有符合查找条件的字符串。
● -G:不反白显示当前符合查找条件的字符串。
● -i:在查找时忽略字符大小字差别。
● -I:与“-i”选项效果类似,但就算查找的内容是大小写字符混杂也一概忽略。
● -m:在屏幕下面使用与more命令类似的百分比模式。
● -M:与“-m”选项效果类似,还会显示当前所有行及总行数。
● -n:忽略行数编号。
● -N:显示行数编号。
● -r:显示控制字符。
● -s:当内容某部分空白行超过一行时,则该处仅以一行表示。
● -S:当某列内容超过显示画面的宽度时,直接将超出的部分去掉。
● -y<前卷行数>:设置最大前卷行数。
● -z<显示行数>:改变画面显示行数,默认值视终端类型而定。如果所指定的显示行数为负数,如“-8”,而终端原本可以显示30行,则less命令将使用22行来显示。
● -p<范本样式>:从指定的范本样式处开始显示。
● -o<输出文件>:将less命令读入的数据输入成文件存储。当指定的文件存在时会询问用户是否覆盖。该选项只适用于从管道导入的数据。
● -O<输出文件>:与“-o”选项效果类似,但当指定的文件存在时不会询问用户是否覆盖。
● -j<行数编号>:设置目标行的行号,如设置为12时,则要查找的字符串从画面上第13行开始。
● -h<回卷行数>:设置最大回卷行数,如果超过该行数将会重新刷新画面。
less命令与more命令类似,但less命令功能更强大。在很多时候必须使用less命令,如管道。当使用less命令时,会进入less命令浏览模式。可以通过回车键向下逐步滚动;空格键向上翻一屏幕;“b”键向下翻一屏幕;“q”键退出;“/<字符串>”键向下查找指定内容;“?<字符串>”键向上查找指定内容;“n”键继续查找下一个。
[root@srv ~]# ll /etc | less
total 3408
drwxr-x--- 3 root root 4096 Jan 29 19:16 audisp
drwxr-x--- 2 root root 4096 Jan 29 19:16 audit
-rw-r--r-- 1 root root 0 Jan 29 19:16 cron.deny
drwxr-xr-x 2 root root 4096 Jul 15 2006 cron.hourly
:
4.6.6 grep:查找并显示符合条件的内容
grep命令用于查找并显示符合条件内容,该命令语法如下。
grep [-aciInqvwxE] [-显示行数] [-e <范本样式>] [-f <范本文件>] [-d <进行操作>] [范本样式] [文 件或目录…]
常用指数:
常用选项:
● 文件或目录…:要显示的文件或文件所在的目录。
● 范本样式:要查找的内容。
● -显示行数:除了显示符合范本样式的行之外,还显示该行前后指定的行数。如指定为5,表示会显示该行往前及往后各5行的内容。
● -a:将二进制文件以文本文件查找。
● -c:计算符合范本样式的行数。使用本选项将不会显示合乎条件行的内容,而会显示每个文件里共有几行符合范本样式。
● -i:忽略字符大小写区别,包括范本样式和指定要查找的文件名称。
● -I:列出文件内容符合指定范本样式的文件名。
● -n:在显示符合范本样式的行之前,标示出该行的行数。
● -q:不显示任何信息。
● -v:反向查找。如指定查找内容为“charles”,使用了该选项后,会显示文件中不包括“charles”的内容。
● -w:只显示全字符合的行,如查找“charles”,原本只需要包括这个字符串就会显示,但使用了该选项后,必须是全字符合的内容,也就是说“charles”必须是完整的单词。
● -x:只显示完全符合的行,如查找“charles”,原本只需要包括这个字符串就会显示,但使用了该选项后,必须完全满足要查找的内容,也就是说“charles”必须是单独的一行才会显示。
● -E:默认情况下,grep命令只支持基本的正则表达式,该选项使grep命令支持扩展正则表达式。
● -e<范本样式>:指定字符串作为寻找文件内容的范本样式。该选项与直接指定范本样式并无不同,但对于以“-”为首的指定字符串来说,可以有效避免与选项混淆,
导致grep命令发生错误。
● -f<范本文件>:指定范本文件,其中含有一个或多个范本样式,让grep命令查找符合范本条件的内容。指定的范本文件格式为每行一个范本样式。
● -d <进行操作>:当指定要查找的是目录而非文件时,必须使用该选项,否则grep命令将返回信息并停止操作。有3个进行操作可以设定:“read”默认值,表示grep命令会把目录当做一般文件进行查找字符串;“recures”递归处理,表示将该目录下的所有文件及子目录一并处理;“skip”表示略过该目录不进行处理。
grep命令用于查找内容包含指定范本样式的文件,如果发现某文件的内容符合所指定的范本样式,默认grep命令会把含有范本样式的那一行显示出来。grep命令是一个非常有用的使用,经常被使用在那些只需要显示大量文本中符合条件内容的时候,该命令也经常配合管道对某些命令的输入结果进行过滤。下面看几个grep命令的例子。
● 显示/etc/fstab文件中包含字符串“ext3”的行。
[root@srv ~]# grep ext3 /etc/fstab
● 对目录“/doc”中所有扩展名为“.txt”的文件内容中寻找并显示包含字符串“charles”的行,查找时不区分大小写。
[root@srv ~]# grep -I charles /doc/*.txt
● 在当前目录中,查找包含字符串“charles”的文件,在查找过程中遇到子目录时,并不查找此目录中的文件。
[root@srv ~]# grep -d skip charles *
在使用grep命令时除了可以使用一般的范本样式外,还可以使用正则表达式,下面看几个grep命令使用正则表达式的例子。
● 在当前目录的“charles.txt”文件中显示所有以小写字母开头的行,并显示其行号。
[root@srv ~]# grep -n "^[a-z]" charles.txt
● 在当前目录的“charles.txt”文件中显示所有非空行,并显示其行号。
[root@srv ~]# grep -nv "^$" charles.txt
● 在当前目录的“charles.txt”文件中显示所有以“/.$”(“\”是一个转义符)结尾的行,并显示其行号。
[root@srv ~]# grep -n "\.$" charles.txt
● 在当前目录的“charles.txt”文件中显示所有以“g”开头,中间两个任意字符,以“d”结尾的行,并显示其行号。
[root@srv ~]# grep -n "g..d" charles.txt
● 在当前目录的“charles.txt”文件中显示所有连续3个a的行,并显示其行号。
[root@srv ~]# grep -n "a\{3\}" charles.txt
● 在当前目录的“charles.txt”文件中显示所有包含一个以“g”开头、以“d”结尾,在“g”和“d”之间包括一个以上“o”的单词的行,并显示其行号。
[root@srv ~]# grep -E -n "go+d" charles.txt
● 在当前目录的“charles.txt”文件中显示所有包含一个以“g”开头、以“d”结尾,在“g”和“d”之间包括有空的或一个“o”的单词的行,并显示其行号。
[root@srv ~]# grep -E -n "go?d" charles.txt
● 在当前目录的“charles.txt”文件中显示所有包含一个“gd”或“good”单词的行,并显示其行号。
[root@srv ~]# grep -E -n "gd|good" charles.txt
● 在当前目录的“charles.txt”文件中显示所有包含一个以“A”开头、以“C”结尾,在“A”和“C”之间包括一个以上“xyz”的单词的行,并显示其行号。
[root@srv ~]# grep -E -n "A(xyz)+C" charles.txt
● 在当前目录的“charles.txt”文件中显示包含“jack”或“house”的行,其中“|”表示或者的意思。
[root@srv ~]# grep -E "jack|house" charles.txt
如果在使用grep命令时,要查找的内容中包括一些特殊字符,如“$”、“.”、“'”、“"”、“*”、“[”、“]”、“^”、“|”、“\”、“+”、“?”、“,”时,默认情况下会造成grep命令无法执行或查找的内容不对,这时就需要对这些字符使用“\”进行转义,让grep命令知道这是要查找的内容而不是一个特殊字符。在下面的例子中就是显示“charles.txt”文件中包括“Charles.Logan”的行。
[root@srv ~]# grep "Charles\.Logan" charles.txt
grep允许使用国际字符模式匹配或匹配模式的类名形式。类名形式包括:“[[:upper:]]”等同于“[A-Z]”、“[[:lower:]]”等同于“[a-z]”、“[[:digit:]]”等同于“[0-9]”、“[[:alnum:]]”等同于“[0-9 A-Z a-z]”、“[[:space:]]”等同于空格或Tab键、“[[:alpha:]]”等同于“[a-zA-Z]”。在下面的例子中就是显示“charles.txt”文件中以“Charles”开头,后面接一个大写字母的行。
[root@srv ~]# grep "Charles[[:upper:]]" charles.txt
提示
在Linux中有一个“egrep”命令,该命令相当于“grep-E”的别名。如果希望使用扩展正则表达时,也可以使用“egrep”命令。