打包即将许多个文件和目录合并保存为一个整体的包文件以方便传递或携带。而压缩操作可以进一步降低打包好的包文件所占用的磁盘空间。Linux中最常用的打包命令为tar。最常用的压缩命令有两个gzip、bzip2用gzip制作的压缩文件通常使用扩展名“.gz”用bzip2制作的压缩文件通常使用扩展名“.bz2”。bzip2的压缩效率比gzip更高但是它们都只能针对单个文件进行压缩与解压所以通常都是先通过tar命令将多个文件或目录打包成一个包文件然后再通过gzip或bzip2进行压缩如*.tar.gz和*.tar.bz2就属于这种先打包再压缩的文件。在实际使用中一般都是通过tar命令来调用gzip或bzip2进行压缩或解压而很少去单独使用gzip或bzip2命令。
1、linux下压缩、解压以.gz结尾文件
压缩文件
命令格式:gzip [参数] [文件或者目录]
命令功能:压缩文件压缩后的文件名以".gz"为扩展名
命令参数:
-c或--stdout或--to-stdout 把压缩后的文件输出到标准输出设备不去更动原始文件。即保留源文件
-l或--list 列出压缩文件的相关信息。
-n或--no-name 压缩文件时不保存原来的文件名称及时间戳记。
-N或--name 压缩文件时保存原来的文件名称及时间戳记。
-q或--quiet 不显示警告信息。
-t或--test 测试压缩文件是否正确无误。
-r或--recursive 递归处理将指定目录下的所有文件及子目录一并处理。
-v或--verbose 显示指令执行过程。
-V或--version 显示版本信息。
使用实例:
[root@localhost case]# lsgzip gzip1 gzip2[root@localhost case]# gzip gzipgzip1[root@localhost case]# lsgzip1 gzip2 gzip.gz[root@localhost case]# gzip -c gzip1 > gzio1.gz[root@localhost case]# lsgzio1.gz gzip1 gzip2 gzip.gz[root@localhost case]#
解压文件
命令格式:gunzip [参数] [文件或者目录]
命令功能:解压文件名以".gz"为扩展名的文件
命令参数:
-c或--stdout或--to-stdout把解压后的文件输出到标准输出设备。
-l或--list列出压缩文件的相关信息。
-t或--test测试压缩文件是否正确无误。
使用实例:
[root@localhost case]# lsgzio1.gz gzip.gz[root@localhost case]# gunzip gzio1.gz [root@localhost case]# gunzip -c gzip.gz > gzip[root@localhost case]# lsgzio1 gzip gzip.gz[root@localhost case]#
2、linux下压缩、解压以.zip结尾文件
压缩文件
命令格式:zip [参数] [压缩后的文件名] [压缩文件的路径]
命令功能:压缩文件压缩后的文件名以".zip"为扩展名
命令参数:
-A 调 整可执行的自动解压缩文件。
-b<工作目录> 指 定暂时存放文件的目录。-c 替 每个被压缩的文件加上注释。-d 从 压缩文件内删除指定的文件。-D 压 缩文件内不建立目录名称。-f 此 参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。-F 尝 试修复已损坏的压缩文件。-g 将 文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。-h 在 线帮助。-i<范本样式> 只 压缩符合条件的文件。-j 只 保存文件名称及其内容,而不存放任何目录名称。-J 删 除压缩文件前面不必要的数据。-k 使 用MS-DOS兼容格 式的文件名称。-l 压 缩文件时,把LF字符 置换成LF+CR字 符。-ll 压 缩文件时,把LF+CR字 符置换成LF字符。-L 显 示版权信息。-m 将 文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。-n<字尾字符串> 不 压缩具有特定字尾字符串的文件。-o 以 压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。-q 不显 示指令执行过程。-r 递 归处理,将指定目录下的所有文件和子目录一并处理。-S 包 含系统和隐藏文件。-t<日期时间> 把 压缩文件的日期设成指定的日期。-T 检 查备份文件内的每个文件是否正确无误。-u 更 换较新的文件到压缩文件内。-v 显 示指令执行过程或显示版本信息。-V 保 存VMS操作系统的文 件属性。-w 在 文件名称里假如版本编号,本参数仅在VMS操 作系统下有效。-x<范本样式> 压 缩时排除符合条件的文件。-X 不 保存额外的文件属性。-y 直 接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之 类的系统下有效。-z 替 压缩文件加上注释。-$ 保 存第一个被压缩文件所在磁盘的卷册名称。-<压缩效率> 压 缩效率是一个介于1-9的 数值。使用实例:
[root@localhost case]# touch zip1 zip2 [root@localhost case]# mkdir zipdir[root@localhost case]# lszip1 zip2 zipdir[root@localhost case]# zip zip1.zip zip1 adding: zip1 (stored 0%)[root@localhost case]# lszip1 zip1.zip zip2 zipdir[root@localhost case]# zip -r zip.zip zip2 zipdir/ adding: zip2 (stored 0%) adding: zipdir/ (stored 0%)[root@localhost case]# lszip1 zip1.zip zip2 zipdir zip.zip[root@localhost case]#
解压文件
命令格式:unzip [参数] [文件]
命令功能:解压文件名以".zip"为扩展名的文件
命令参数:
-c 将 解压缩的结果显示到屏幕上,并对字符做适当的转换
-p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换-f 更 新现有的文件-u 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中 的其他文件解压缩到目录中。-l 显 示压缩文件内所包含的文件-t 检 查压缩文件是否正确、是否损坏,但不解压;unzip -t test.zip-v 执 行是时显示详细的信息。或查看压缩文件目录,但不解压。
-z 仅 显示压缩文件的备注文字
-a 对 文本文件进行必要的字符转换-b 不 要对文本文件进行字符转换-C 压 缩文件中的文件名称区分大小写-j 不 处理压缩文件中原有的目录路径-L 将 压缩文件中的全部文件名改为小写-M 将 输出结果送到more程 序处理-n 解 压缩时不要覆盖原有的文件-o 不 必先询问用户,unzip执 行后覆盖原有文件
-P<密码> 使 用zip的密码选项。-q 执 行时不显示任何信息-s 将 文件名中的空白字符转换为底线字符-V 保 留VMS的文件版本信 息-X 解 压缩时同时回存文件原来的UID/GID-d<目录> 指 定文件解压缩后所要存储的目录[root@Lepus soft]# unzip master.zip -d /app/
-x<文件> 指 定不要处理.zip压 缩文件中的哪些文件
-Z unzip -Z等 于执行zipinfo指 令使用实例:
[root@localhost case]# lszip1.zip zip.zip[root@localhost case]# unzip zip.zip Archive: zip.zip extracting: zip2 creating: zipdir/[root@localhost case]# lszip1.zip zip2 zipdir zip.zip[root@localhost case]#
3、linux下压缩、解压以.bz2结尾文件
压缩文件
命令格式:bzip2 [参数] [文件]
命令功能:bzip2压缩完文件后会产生.bz2的压缩文件并删除原始的文件。
命令参数:
-k或--keep bzip2在压缩或解压缩后会删除原始的文件。若要保留原始文件请使用此参数。
-f或--force bzip2在压缩或解压缩时若输出文件与现有文件同名预设不会覆盖现有文件。若要覆盖请使用此参数。
-t或--test 测试.bz2压缩文件的完整性。
-z或--compress 强制执行压缩。
-d或--decompress 执行解压缩。
-压缩等级 压缩时的区块大小与 gzip 同样的都是在计算压缩比的参数 -9 最佳 -1 最快
-c或--stdout 将压缩与解压缩的结果送到标准输出。
使用实例:
[root@localhost case]# lsbzip1 bzip2[root@localhost case]# bzip2 bzip1 [root@localhost case]# lsbzip1.bz2 bzip2[root@localhost case]# bzip2 -k bzip2 [root@localhost case]# lsbzip1.bz2 bzip2 bzip2.bz2[root@localhost case]#
解压文件
命令格式:bunzip2 [参数] [文件]
命令功能:解压文件名以".bz2"为扩展名的文件
命令参数:
-f或--force 解压缩时若输出的文件与现有文件同名时预设不会覆盖现有的文件。若要覆盖请使用此参数。-k或--keep 在解压缩后预设会删除原来的压缩文件。若要保留压缩文件请使用此参数。-s或--small 降低程序执行时内存的使用量。-v或--verbose 解压缩文件时显示详细的信息。-l,--license,-V或--version 显示版本信息。
使用实例:
[root@localhost case]# lsbzip1.bz2 bzip2.bz2[root@localhost case]# bunzip2 bzip1.bz2 [root@localhost case]# lsbzip1 bzip2.bz2[root@localhost case]# bunzip2 -k bzip2.bz2 [root@localhost case]# lsbzip1 bzip2 bzip2.bz2[root@localhost case]#
4、linux下压缩、解压以.tar.*结尾文件
.tar.*结尾的文件是先用tar打包,再调用相应的压缩程序进行压缩,linux中常见的有两种,*.tar.gz和*.tar.bz2就属于这种先打包再压缩的文件
打包命令tar
命令格式:tar [参数] [文件、目录列表]
命令功能:对文件、目录进行打包备份
命令参数:
-c :建立一个新的压缩文件(create 的意思)
-x :解开一个压缩文件
-t :查看 tarfile 里面的文件,特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在,因为不可能同时压缩与解压缩。
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个
-C [目录] :解压文件到某一指定目录,目录需存在
-z :是否同时具有 gzip 的属性?即调用gzip进行压缩-j :是否同时具有 bzip2 的属性?即调用bzip2进行压缩-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!-f :使用档名,请留意,在 f 之后要立即接档名!不要再加参数! 例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成 『 tar -zcvPf tfile sfile』才对喔!-p :使用原文件的原来属性(属性不会依据使用者而变)-P :可以使用绝对路径来压缩!-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!--exclude FILE:在压缩的过程中,不要将 FILE 打包!多个文件写多个exclude,最好用相对路径
文件路径要写成--exclude=queryweb/logs,不能写成--exclude=queryweb/logs/格式,不然无法排除log目录
--remove-files 压缩后删除源文件
[root@localhost remote]# tar -zcvf 2016-12-29.tar.gz *.log --remove-files
使用实例:
打包
[root@localhost case]# touch file1 file2[root@localhost case]# mkdir dir1 dir2[root@localhost case]# cp file1 file2 dir1[root@localhost case]# cp file2 dir2[root@localhost case]# lsdir1 dir2 file1 file2[root@localhost case]# tar -cvf file1.tar file1file1[root@localhost case]# lsdir1 dir2 file1 file1.tar file2[root@localhost case]# tar -cvf dir1.tar dir1 dir2dir1/dir1/file2dir1/file1dir2/dir2/file2[root@localhost case]# lsdir1 dir1.tar dir2 file1 file1.tar file2[root@localhost case]#
查看包内包含的文件
[root@localhost case]# tar -tvf dir1.tar drwxr-xr-x root/root 0 2014-09-06 05:45 dir1/-rw-r--r-- root/root 0 2014-09-06 05:45 dir1/file2-rw-r--r-- root/root 0 2014-09-06 05:45 dir1/file1drwxr-xr-x root/root 0 2014-09-06 05:45 dir2/-rw-r--r-- root/root 0 2014-09-06 05:45 dir2/file2[root@localhost case]#
打包时排除某一文件
[root@localhost case]# tar --exclude=file1 -cvf dirfile2.tar dir1dir1/dir1/file2[root@localhost case]# tar -tvf dirfile2.tar drwxr-xr-x root/root 0 2014-09-06 05:45 dir1/-rw-r--r-- root/root 0 2014-09-06 05:45 dir1/file2[root@localhost case]# ll dir1total 0-rw-r--r-- 1 root root 0 Sep 6 05:45 file1-rw-r--r-- 1 root root 0 Sep 6 05:45 file2[root@localhost ~]# tar cvf ProxyServer1.tar.gz ProxyServer --exclude=ProxyServer/lib[root@localhost ~]# tar cvf ProxyServer2.tar.gz ProxyServer --exclude=ProxyServer/derby.log[root@localhost ~]#
解包
[root@localhost case]# lsdir1.tar dirfile2.tar file1.tar[root@localhost case]# tar -xvf dir1.tar dir1/dir1/file2dir1/file1dir2/dir2/file2[root@localhost case]# lsdir1 dir1.tar dir2 dirfile2.tar file1.tar[root@localhost case]# mkdir dir3[root@localhost case]# tar -xvf dirfile2.tar -C dir3/dir1/dir1/file2[root@localhost case]# ll dir3/total 4drwxr-xr-x 2 root root 4096 Sep 6 05:45 dir1[root@localhost case]#
打包、压缩成.tar.gz结尾的文件
[root@localhost case]# lsfile[root@localhost case]# tar -zcvf file.tar.gz filefile[root@localhost case]# lsfile file.tar.gz[root@localhost case]#
解压.tar.gz结尾的文件
[root@localhost case]# lsfile.tar.gz[root@localhost case]# tar -zxvf file.tar.gz file[root@localhost case]# lsfile file.tar.gz[root@localhost case]#
解压tar包中某个文件
[root@localhost src]# tar zxvpf queryweb20170327.tar.gz queryweb/webapps/commodity
这里的queryweb/webapps/commodity这个路径是压缩包里的路径,可以通过tar -tf 来列出来的路径,前面不要再加一个“/”,否则就报错了
打包、压缩成.tar.bz2结尾的文件
[root@localhost case]# lsfile[root@localhost case]# tar -jcvf file.tar.bz2 filefile[root@localhost case]# lsfile file.tar.bz2[root@localhost case]#
解压.tar.bz2结尾的文件
[root@localhost case]# lsfile.tar.bz2[root@localhost case]# tar -jxvf file.tar.bz2 file[root@localhost case]# lsfile file.tar.bz2[root@localhost case]#
查看文件的大小
[root@localhost case]# du -h file.tar.bz2 4.0K file.tar.bz2[root@localhost case]#
jar
打包压缩war、解压war包和jar命令
-c 创建war包
-v 显示过程信息
-f 指定 JAR 文件名,通常这个参数是必须的
-M 不产生所有项的清单(MANIFEST〕文件,此参数会忽略 -m 参数
-0 这个是阿拉伯数字,只打包不压缩的意思
-t 列出 JAR 文件包的内容列表
-x 展开 JAR 文件包的指定文件或者所有文件
-u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)
打包jar -cvf project.war /project_a
解压jar -xvf project.war 解压到当前目录
RAR解压---unar
[root@localhost ~]# yum -y install unar
[root@localhost ~]# unar -h
-output-directory (-o) 指定解压后存放的位置,默认为当前目录,如果设置设置-,即不创建文件,而是采用标准输出。
-force-overwrite (-f) 解压时强制覆盖已经存在的文件,默认情况下会询问用户。-force-rename (-r) 解压时,如果目标文件已经存在,则重命名新解压的文件。-force-skip (-s) 解压时,如果目标文件已经存在,则直接跳过该文件,不覆盖。-force-directory (-d) 解压时,总是创建一个新目录存放解压内容。默认设置是如果超过一层文件或者目录才会创建。-no-directory (-D) 解压时,不创建一个新目录存放解压内容。而是直接解压。-password (-p) 指定解压密码-encoding (-e) 指定解压文件名的编码,如果不指定,程序将自动检测。使用"help" 或者 "list" 参数获取支持的编码.-password-encoding (-E) 指定密码的编码,如果不指定,程序将自动检测。-indexes (-i) 指定需要解压的文件或者目录。-no-recursion (-nr) 不解压其他压缩文件. 例如,当解压一个 .tar.gz 文件,只解压 .gz文件而不是它的内容。-copy-time (-t) 解压时保留文件的时间属性。-quiet (-q) 静默模式-version (-v) 查询该软件版本.-help (-h) 显示帮助信息.压缩文件dhcpsrv.rar
[root@localhost ~]# unar dhcpsrv.rar
dhcpsrv.rar: RAR dhcpsrv1.7/dhcpsrv.ini (118 B)... OK. dhcpsrv1.7/DHCPsrvV1.7.exe (25600 B)... OK. dhcpsrv1.7/ (dir)... OK.Successfully extracted to "./dhcpsrv1.7".[root@localhost ~]#如果解压后发现文件名乱码,增加参数-e UTF-8,使用命令查询支持的编码格式unar -e list
[root@localhost ~]# unar -e UTF-8 dhcpsrv.rar
dhcpsrv.rar: RAR dhcpsrv1.7/dhcpsrv.ini (118 B)... OK. dhcpsrv1.7/DHCPsrvV1.7.exe (25600 B)... OK. dhcpsrv1.7/ (dir)... OK.Successfully extracted to "./dhcpsrv1.7".[root@localhost ~]#如果还是乱码,试试使用gb18030
解压加密rar文件
[root@localhost ~]# unar -password 123 dhcpsrv.rar
总结
1、*.tar 用 tar -xvf 解压
2、*.gz 用 gzip -d或者gunzip 解压
3、*.tar.gz和*.tgz 用 tar -xzf 解压
4、*.bz2 用 bzip2 -d或者用bunzip2 解压
5、*.tar.bz2用tar -xjf 解压
6、*.Z 用 uncompress 解压
7、*.tar.Z 用tar -xZf 解压
8、*.rar 用 unrar e解压
9、*.zip 用 unzip 解压