CentOS Linux 常用命令整理(压缩和解压,更新于 2018 年 12 月 15 日)

更多 CentOS Linux 常用命令整理请点击这里

前言:

Linux 常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。

汇总:

( 1 ).tar 格式
解包:# tar xvf FileName.tar
打包:# tar cvf FileName.tar DirName(注:tar 是打包,不是压缩!)

( 2 ).gz 格式
解压 1:# gunzip FileName.gz
解压 2:# gzip -d FileName.gz
压  缩:# gzip FileName

( 3 ).tar.gz 格式
解压:# tar zxvf FileName.tar.gz
压缩:# tar zcvf FileName.tar.gz DirName

( 4 ).bz2 格式
解压 1:# bzip2 -d FileName.bz2
解压 2:# bunzip2 FileName.bz2
压  缩:# bzip2 -z FileName

( 5 ).tar.bz2 格式
解压:# tar jxvf FileName.tar.bz2
压缩:# tar jcvf FileName.tar.bz2 DirName

( 6 ).bz 格式
解压1:# bzip2 -d FileName.bz
解压2:# bunzip2 FileName.bz

( 7 ).tar.bz 格式
解压:# tar jxvf FileName.tar.bz

( 8 ).Z 格式
解压:# uncompress FileName.Z
压缩:# compress FileName

( 9 ).tar.Z 格式
解压:# tar Zxvf FileName.tar.Z
压缩:# tar Zcvf FileName.tar.Z DirName

( 10 ).tgz 格式
解压:# tar zxvf FileName.tgz

( 11 ).tar.tgz 格式
解压:# tar zxvf FileName.tar.tgz
压缩:# tar zcvf FileName.tar.tgz FileName

( 12 ).zip 格式
解压:# unzip FileName.zip
压缩:# zip FileName.zip DirName

( 13 ).lha 格式
解压:# lha -e FileName.lha
压缩:# lha -a FileName.lha FileName

( 14 ).rar 格式
解压:# rar a FileName.rar
压缩:# rar e FileName.rar

tar 命令(压缩):

tar 是 Linux 中最常用的解压缩命令。tar 命令可用于处理后缀名为 tar 、tar.gz 、tgz 、.tar.Z 、tar.bz2 的文件。

涉及参数说明:

-A 或 –catenate :新增文件到以存在的备份文件;
-B :设置区块大小;
-c 或 –create :建立新的备份文件;
-C <目录> :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
-d :记录文件的差别;
-x 或 –extract 或 –get :从压缩的文件中提取文件;
-t 或 –list :列出备份文件的内容;
-z 或 –gzip 或 –ungzip :通过 gzip 指令处理备份文件;
-Z 或 –compress 或 –uncompress :通过 compress 指令处理备份文件;
-f <备份文件> 或 –file=<备份文件> :指定备份文件;
-v 或 –verbose :显示指令执行过程;
-r :添加文件到已经压缩的文件;
-u :添加改变了和现有的文件到已经存在的压缩文件;
-j :支持 bzip2 解压文件;
-l :文件系统边界设置;
-k :保留原有文件不覆盖;
-m :保留文件不被覆盖;
-w :确认压缩文件的正确性;
-p 或 –same-permissions :用原来的文件权限还原文件;
-P 或 –absolute-names :文件名使用绝对名称,不移除文件名称前的 “ / ” 号;
-N <日期格式> 或 –newer=<日期时间> :只将较指定日期更新的文件保存到备份文件里;
–exclude=<范本样式> :排除符合范本样式的文件;
–delete :删除包中文件;
–strip-components :去除目录;
–add-file :向包中添加文件;
–remove-files :打包后删除源文件。
1 、归档 tar 包,不压缩:
tar -cvf test.tar test1.log test2.log # 归档多个文件
tar -cvf test.tar test/*  # 归档 test 目录下所有文件
tar -cvf test.tar *.log   # 归档所有以 .log 结尾的文件

由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。

2 、归档并压缩为 tar.gz 或 tar.bz2 :

这种方式打包对文件进行了压缩:

tar -zcvf test.tar.gz file1 file2  # 打包,并以 gzip 压缩
tar -jcvf test.tar.bz2 file1 file2 # 打包,并以 bzip2 压缩
3 、查看压缩包中的文件:

如果不想解压,只是想查看压缩包中的文件内容,可以使用 -t 参数:

tar -tvf test.tar # 可查看 test 包中有哪些文件
4 、打包后删除源文件:

有时候在打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用 –remove-files 选项:

tar -zcvf test.tar.gz test.log --remove-files
5 、打包除指定目录或文件以外的文件:

对于某些目录下的文件,可能只需要打包部分文件,因此可以使用 –exclude 选项排除一些不需要打包的文件:

tar -zcvf test.tar.gz --exclude=test/*.log test/* # 打包 test 目录下所有文件,排除以 .log 结尾的文件

这里用到了 –exclude 选项,支持通配符和正则表达式,因此也非常强大。

6 、向压缩包中更新文件:

例如,压缩包中已经打入了 test 以及其他文件,现在你只想更新压缩包中的 test 文件,那么你可以使用 –add-file 选项:

tar -tf test.tar --add-file=test # 只针对 tar 包
7 、向 tar 包中增加文件:

向 tar 包中增加文件可使用 -r 参数:

tar -rf test.tar testfile # 在 test.tar 包中增加文件,只针对 tar 包
8 、删除压缩包中的文件:

在不解压的情况下,可使用 –delete 选项删除包中的文件:

tar --delete -f test.tar test1 # 从 test.tar 中删除 test1 文件

tar 命令(解压):

1 、解压 tar.gz 和 tar 包到当前目录:
tar -xvf test.tar.gz
tar -xvf test.tar
2 、解压到指定目录:
tar -xvf test.tar.gz -C dir
tar -xvf test.tar -C dir
3 、解压包中指定的文件:

例如 test.tar.gz 包中文件情况如下:

1.txt
log/
log/1.log
log/2.log
log/2.log
log/4.log
log/5.log

如果我们只需要解压出 log 目录下的 1.log ,只需要执行下面的命令:

tar -xvf test.tar.gz log/1.log
tar -xvf test.tar.gz log/1.log -C test # 将 1.log 解压到 test 目录
4 、解压时去掉目录结构:

压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):

tar -xvf test.tar.gz --strip-components=1 # 去掉一层目录
5 、解压时不覆盖原文件:

当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用 -k 参数(会抛出错误信息):

tar -xvkf test.tar.gz
6 、特别提醒:

前面所提到的解压或者压缩带的 f 参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。

zip 命令(压缩):

zip 和 unzip 命令主要用于处理 zip 包。

涉及参数说明:

选项:

-A :调整可执行的自动解压缩文件;
-b <工作目录> :指定暂时存放文件的目录;
-c :替每个被压缩的文件加上注释;
-d :从压缩文件内删除指定的文件;
-D :压缩文件内不建立目录名称;
-f :此参数的效果和指定 “ -u ” 参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中;
-F :尝试修复已损坏的压缩文件;
-g :将文件压缩后附加在已有的压缩文件之后,而非另行建立新的压缩文件;
-h :在线帮助;
-i <范本样式> :只压缩符合条件的文件;
-j :只保存文件名称及其内容,而不存放任何目录名称;
-J :删除压缩文件前面不必要的数据;
-k :使用 MS-DOS 兼容格式的文件名称;
-l :压缩文件时,把 LF 字符置换成 LF + CR 字符;
-ll :压缩文件时,把 LF + cp 字符置换成 LF 字符;
-L :显示版权信息;
-m :将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中;
-n <字尾字符串> :不压缩具有特定字尾字符串的文件;
-o :以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同;
-q :不显示指令执行过程;
-r :递归处理,将指定目录下的所有文件和子目录一并处理;
-S :包含系统和隐藏文件;
-t <日期时间> :把压缩文件的日期设成指定的日期;
-T :检查备份文件内的每个文件是否正确无误;
-u :更换较新的文件到压缩文件内;
-v :显示指令执行过程或显示版本信息;
-V :保存 VMS 操作系统的文件属性;
-w :在文件名称里假如版本编号,本参数仅在 VMS 操作系统下有效;
-x <范本样式> :压缩时排除符合条件的文件;
-X :不保存额外的文件属性;
-y :直接保存符号连接,而非该链接所指向的文件,本参数仅在 UNIX 之类的系统下有效;
-z :替压缩文件加上注释;
-$ :保存第一个被压缩文件所在磁盘的卷册名称;
-<压缩效率>:压缩效率是一个介于 1 ~ 9 的数值。

1 、压缩文件:
zip -r test.zip test/  # 打包 test 目录下的文件
zip -rj test.zip test/ # 打包 test 目录下的文件,且压缩包不带 test 目录
2 、指定压缩率打包文件:
zip -r8 test.zip test/* # 数值( 1 - 9 )越大,压缩率越高,耗时越长
3 、打包符号链接文件:

前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数 -y :

zip -ry test.zip test
4 、向压缩包中增加或更新文件:

有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数 -u :

zip -u test.zip test2 # 向 test.zip 包中增加 test2 文件
5 、压缩时加密:

压缩时如果需要对压缩包进行加密,可使用 -P 参数:

zip -r test.zip test1 test -P 66666 # 使用密码 66666 加密
6 、删除压缩包的特定文件:
zip -d test.zip test # 删除 test.zip 包中的 test 文件

unzip 命令(解压):

涉及参数说明:

选项:

-c :将解压缩的结果显示到屏幕上,并对字符做适当的转换;
-f :更新现有的文件;
-l :显示压缩文件内所包含的文件;
-p :与 -c 参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换;
-t :检查压缩文件是否正确;
-u :与 -f 参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中;
-v :显示压缩包文件内的详细信息,但不解压;
-z :仅显示压缩文件的备注文字;
-a :对文本文件进行必要的字符转换;
-b :不要对文本文件进行字符转换;
-C :压缩文件中的文件名称区分大小写;
-j :不处理压缩文件中原有的目录路径;
-L :将压缩文件中的全部文件名改为小写;
-M :将输出结果送到 more 程序处理;
-n :解压缩时不要覆盖原有的文件;
-o :不必先询问用户,unzip 执行后覆盖原有的文件;
-P <密码> :使用 zip 的密码选项;
-q :执行时不显示任何信息;
-s :将文件名中的空白字符转换为底线字符;
-V :保留 VMS 的文件版本信息;
-X :解压缩时同时回存文件原来的 UID / GID;
-d <目录> :指定文件解压缩后所要存储的目录;
-x <文件> :指定不要处理 .zip 压缩文件中的哪些文件;
-Z :unzip-Z 等于执行 zipinfo 指令。

1 、解压压缩包:
unzip test.zip -d dir    # 将 test.zip 解压到 dir 目录
unzip -o test.zip -d dir # 将 test.zip 解压到 dir 目录,且直接覆盖原有的文件
unzip -n test.zip -d dir # 将 test.zip 解压到 dir 目录,如果已有相同的文件存在,不要覆盖原有的文件
2 、解压包中指定的文件:

如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:

unzip -o test.zip "1.log" -d dir # 解压包中的 1.log 文件到 dir 目录
unzip -o test.zip "*.log" -d dir # 解压包中所有的 log 文件
3 、查看压缩包中的文件信息:
unzip -l test.zip # 可以看到压缩包中的文件名,日期等信息
unzip -v test.zip # 查看更多信息,例如 CRC 校验信息等

示例:

[root@host temp]$ unzip -v test.zip
Archive:  test.zip
 Length   Method    Size  Ratio   Date   Time   CRC-32    Name
--------  ------  ------- -----   ----   ----   ------    ----
       3  Stored        3   0%  11-08-17 09:53  5fc0d40c  1.txt
       3  Stored        3   0%  11-08-17 09:53  d74debda  2.txt
       4  Stored        4   0%  11-08-17 09:53  5a82fd08  3.txt
--------          -------  ---                            -------
      10               10   0%                            3 files
4 、同时解压多个 zip 文件:

同时解压当前文件夹下的 abc12.zip 、abc23.zip 、abc34.zip :

unzip abc\*.zip
5 、解压时去掉目录结构:

压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用 -j 参数:

zip -oj test.zip -d ./temp
6 、解压 jar 包:

jar 包是 java 归档包,但同样可用 unzip 解压查看里面的文件:

unzip -o java.jar -d dir

gzip 命令:

涉及参数说明:

-a 或 —— ascii :使用 ASCII 文字模式;
-d 或 –decompress 或 —-uncompress :解开压缩文件;
-f 或 ——force :强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接;
-h 或 ——help :在线帮助;
-k :保留源文件;
-l 或 ——list :列出压缩文件的相关信息;
-L 或 ——license :显示版本与版权信息;
-n 或 –no-name :压缩文件时,不保存原来的文件名称及时间戳记;
-N 或 ——name :压缩文件时,保存原来的文件名称及时间戳记;
-q 或 ——quiet :不显示警告信息;
-r 或 ——recursive :递归处理,将指定目录下的所有文件及子目录一并处理;
-S 或 <压缩字尾字符串> 或 —-suffix<压缩字尾字符串> :更改压缩字尾字符串;
-t 或 ——test :测试压缩文件是否正确无误;
-v 或 ——verbose :显示指令执行过程;
-V 或 ——version :显示版本信息;
-<压缩效率> :压缩效率是一个介于 1 ~ 9 的数值,预设值为 “ 6 ” ,指定愈大的数值,压缩效率就会愈高;
–best:此参数的效果和指定 “ -9 ” 参数相同;
–fast:此参数的效果和指定 “ -1 ” 参数相同。

tar 命令带有 -z 参数,并且打包成 tar.gz 文件时,便调用 gzip 进行了压缩。gzip 对文本的压缩率约有 60 % ~ 70 % ,压缩包文件常以 gz 为后缀。使用 -k 参数保留源文件:

gzip -k ./*   # 对当前目录下所有文件进行压缩,每个文件一个 gz 包
gzip -rkv ./* # 递归压缩

查看当前文件夹下每个压缩包的信息,并不解压:

gzip -l *

解压也很简单:

gzip -dv test.gz

bzip2 命令:

tar 命令使用 -j 参数将文件打包为 tar.bz2 时,便调用了 bzip2 进行压缩。bzip2 压缩或解压后,会将源文件删除。如果需要保留源文件,可使用 -k 参数:

bzip2 -zk test      # 压缩 test 文件
bzip2 -dk test.bz2  # 解压

rar / unrar 命令:

rar 和 unrar 命令并非 Linux 发行版自带命令,需要另外安装。常见用法如下:

rar a test.tar test  # 将 test 文件压缩为 test.rar
rar e test.rar       # 解压 test.rar
unrar x test.rar     # 解压 test.rar

压缩率比较:

压缩率一般来说:tar.bz2 > tar.gz > zip > tar

压缩率越高,压缩以及解压的时间也就越长。

总结:

对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。有任何补充或建议,欢迎留言。

 

参考自:

  • http://man.linuxde.net/
  • https://www.huyanbing.me/2018/10/19/64149.html

这篇文章对你有帮助吗?

相关文章

发表评论?

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据