压缩和解压缩
主要针对单个文件压缩,而非目录
compresse 和 uncompress
此工具来自于ncompress包,此工具目前已经很少使用
对应的文件是 .Z 后缀
格式
compress Options [file ...]
uncompress file.Z #解压缩
常用选项
-d 解压缩,相当于uncompress
-c 结果输出至标准输出,不删除原文件
-v 显示详情
范例
[22:14:48 root@centos7 ~]#compress anaconda-ks.cfg
[22:15:21 root@centos7 ~]#ls
anaconda-ks.cfg.Z test1.log
[22:15:23 root@centos7 ~]#compress -d anaconda-ks.cfg.Z
zcat file.Z 不显式解压缩的前提下查看文本文件内容
范例
[22:18:24 root@centos7 ~]#zcat anaconda-ks.cfg.Z > a.txt
gzip和unzip
来自于 gzip 包
对应的文件是 .gz 后缀
格式
gzip [OPTION]... FILE ...
常用选项
-k keep, 保留原文件,CentOS 8 新特性
-d 解压缩,相当于gunzip
-c 结果输出至标准输出,保留原文件不改变
-# 指定压缩比,#取值为1-9,值越大压缩比越大
范例
[22:22:42 root@centos7 ~]#gzip a.txt
[22:23:29 root@centos7 ~]#ll -h
total 104K
-rw-------. 1 root root 1.6K Jul 29 08:32 anaconda-ks.cfg
-rw-r--r--. 1 root root 100K Aug 10 22:21 a.txt.gz
-rw-r--r--. 1 root root 0 Aug 10 19:37 test1.log
#解压缩
[22:26:53 root@centos7 ~]#gunzip a.txt.gz
#不显式解压缩的前提下查看文本文件内容
[22:27:04 root@centos7 ~]#zcat a.txt.gz > a.txt
#指定压缩等级
[22:29:07 root@centos7 ~]#gzip -6 a.txt
#保留源文件
[22:29:07 root@centos7 ~]#gzip -k a.txt
范例
gzip -c messages >messages.gz
gzip -c -d messages.gz > messages
zcat messages.gz > messages
cat messages | gzip > m.gz
bzip2和bunzip2
来自于 bzip2 包
对应的文件是 .bz2 后缀
格式
bzip2 [OPTION]... FILE ...
常用选项
-k keep, 保留原文件
-d 解压缩
-c 结果输出至标准输出,保留原文件不改变
-# 1-9,压缩比,默认为9
范例
bunzip2 file.bz2 解压缩
bzcat file.bz2 不显式解压缩的前提下查看文本文件内容
xz和unxz
来自于 xz 包
对应的文件是 .bz2 后缀
选项
-k keep, 保留原文件
-d 解压缩
-c 结果输出至标准输出,保留原文件不改变
-# 压缩比,取值1-9,默认为6
范例
unxz file.xz 解压缩
xzcat file.xz 不显式解压缩的前提下查看文本文件内容
zip和unzip
zip 可以实现打包目录和多个文件成一个文件并压缩,但可能会丢失文件属性信息,如:所有者和组信息,一般建议使用 tar 代替
分别来自于 zip 和 unzip 包
选项
-A:调整可执行的自动解压缩文件;
-b<工作目录>:指定暂时存放文件的目录;
-c:替每个被压缩的文件加上注释;
-d:从压缩文件内删除指定的文件;
-D:压缩文件内不建立目录名称;
-e:加密;
-f:此参数的效果和指定“-u”参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中;
-F:尝试修复已损坏的压缩文件;
-g:将文件压缩后附加在已有的压缩文件之后,而非另行建立新的压缩文件;
-h:在线帮助;
-i<范本样式>:只压缩符合条件的文件;
-j:只保存文件名称及其内容,而不存放任何目录名称;
-J:删除压缩文件前面不必要的数据;
-k:使用MS-DOS兼容格式的文件名称;
-l:压缩文件时,把LF字符置换成LF+CR字符;
-ll:压缩文件时,把LF+cp字符置换成LF字符;
-L:显示版权信息;
-m:将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中;
-n<字尾字符串>:不压缩具有特定字尾字符串的文件;
-o:以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同;
-p:管道;
-P:指定密码加密压缩;
-q:不显示指令执行过程;
-r:递归处理,将指定目录下的所有文件和子目录一并处理;
-S:包含系统和隐藏文件;
-t<日期时间>:把压缩文件的日期设成指定的日期;
-T:检查备份文件内的每个文件是否正确无误;
-u:更换较新的文件到压缩文件内;
-v:显示指令执行过程或显示版本信息;
-V:保存VMS操作系统的文件属性;
-w:在文件名称里假如版本编号,本参数仅在VMS操作系统下有效;
-x<范本样式>:压缩时排除符合条件的文件;
-X:不保存额外的文件属性;
-y:直接保存符号连接,而非该链接所指向的文件,本参数仅在UNIX之类的系统下有效;
-z:替压缩文件加上注释;
-$:保存第一个被压缩文件所在磁盘的卷册名称;
-<压缩效率>:压缩效率是一个介于1~9的数值。
范例
#打包并压缩
[08:26:49 root@centos7 data]# zip etc.zip /etc/
#不包括目录本身,只打包目录内的文件和子目录
[08:26:49 root@centos7 data]cd /etc/sysconfig; zip -r /root/sysconfig.zip *
#默认解压至当前目录
[08:26:49 root@centos7 data]# unzip /backup/sysconfig.zip
#解压缩至指定目录,如果指定目录不存在,会在其父目录(必须事先存在)下自动生成
[08:26:49 root@centos7 data]# unzip /backup/sysconfig.zip -d /tmp/config
# 其它压缩方式
[08:26:49 root@centos7 data]# cat /var/log/messages | zip messages -
# -p表示管道
[08:26:49 root@centos7 data]#unzip -p message.zip > message
范例:交互式加密和解密
[08:56:11 root@centos7 ~]#zipEnter password:
Verify password:
adding: anaconda-ks.cfg (deflated 46%)
adding: a.txt (deflated 100%)
adding: test1.log (stored 0%)
[08:56:41 root@centos7 ~]#unzip root.zip
Archive: root.zip
[root.zip] anaconda-ks.cfg password:
范例: 非交互式加密和解密
[09:07:02 root@centos7 ~]#zip -P 123456 root.zip *
adding: anaconda-ks.cfg (deflated 46%)
adding: a.txt (deflated 100%)
adding: test1.log (stored 0%)
[09:07:41 root@centos7 ~]#mv root.zip /tmp/
[09:07:55 root@centos7 ~]#cd /tmp/
[09:07:59 root@centos7 tmp]#unzip -P 123456 root.zip
Archive: root.zip
inflating: anaconda-ks.cfg
inflating: a.txt
extracting: test1.log
打包和解包
tar
tar 即 Tape ARchive 磁带归档,可以对目录和多个文件打包一个文件,并且可以压缩,保留文件属性不丢失,常用于备份功能,推荐使用
对应的文件是 .tar 后缀
格式
tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <区块数目>][-C <目的目录>][-f <备份文件>][-F
选项
-A或--catenate 新增文件到已存在的备份文件。
-b<区块数目>或--blocking-factor=<区块数目> 设置每笔记录的区块数目,每个区块大小为12Bytes。-B或--read-full-records 读取数据时重设区块大小。
-c或--create 建立新的备份文件。
-C<目的目录>或--directory=<目的目录> 切换到指定的目录。
-d或--diff或--compare 对比备份文件内和文件系统上的文件的差异。
-f<备份文件>或--file=<备份文件> 指定备份文件。
-F
(1)创建归档,保留权限
tar -cpvf /PATH/FILE.tar FILE...
(2)追加文件至归档:注:不支持对压缩文件追加
tar -rf /PATH/FILE.tar FILE...
(3) 查看归档文件中的文件列表
tar -t -f /PATH/FILE.tar
(4) 展开归档
tar xf /PATH/FILE.tar
tar xf /PATH/FILE.tar -C /PATH/
(5) 结合压缩工具实现:归档并压缩
-z 相当于gzip压缩工具
-j 相当于bzip2压缩工具
-J 相当于xz压缩工具
范例
[09:34:50 root@centos7 ~]#tar jcvf etc.tar.bz2 /etc/
[09:34:50 root@centos7 ~]#tar Jcvf etc.tar.bz2 /etc/
[09:34:50 root@centos7 ~]#tar gcvf etc.tar.bz2 /etc/
[09:34:50 root@centos7 ~]#ll -h
total 125M
-rw-r--r--. 1 root root 8.2M Aug 11 09:34 etc.tar.bz2
-rw-r--r--. 1 root root 9.4M Aug 11 09:30 etc.tar.gz
-rw-r--r--. 1 root root 6.7M Aug 11 09:32 etc.tar.xz
#只打包目录内的文件,不所括目录本身
[09:39:57 root@centos7 etc]#cd /etc/
[09:39:57 root@centos7 etc]#tar zcvf /root/etc.tar.gz ./
#利用 tar 进行文件复制
[root@centos8 ~]#tar c /data/ | tar x -C /backup
[09:43:15 root@centos7 etc]#tar c /data/ | tar x -C /backup
tar: Removing leading `/' from member names
[09:44:17 root@centos7 etc]#ls /backup/
data etc2020-08-09
--exclude 排除文件
范例
tar zcvf /root/a.tgz --exclude=/app/host1 --exclude=/app/host2 /app
-T 选项指定输入文件
-X 选项指定包含要排除的文件列表
范例
tar zcvf mybackup.tgz -T /root/includefilelist -X /root/excludefilelist
split
split 命令可以分割一个文件为多个文件
范例
#分割大的 tar 文件为多份小文件
split -b Size –d tar-file-name prefix-name
示例:
split -b 1M mybackup.tgz mybackup-parts
#切换成的多个小分文件使用数字后缀
split -b 1M –d mybackup.tgz mybackup-parts
将多个切割的小文件合并成一个大文件
cat mybackup-parts* > mybackup.tar.gz
cpio
cpio 是历史悠久的打包和解包工具,不过目前也已较少使用
cpio 命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以“.cpio”或者“.tar”结尾的文件
格式
cpio [选项] > 文件名或者设备名
cpio [选项] < 文件名或者设备名
常用选项
-o output模式,打包,将标准输入传入的文件名打包后发送到标准输出
-i input模式,解包,对标准输入传入的打包文件名解包到当前目录
-t 预览,查看标准输入传入的打包文件中包含的文件列表
-O filename 输出到指定的归档文件名
-A 向已存在的归档文件中追加文件
-I filename 对指定的归档文件名解压
-F filename 使用指定的文件名替代标准输入或输出
-d 解包生成目录,在cpio还原时,自动的建立目录
-v 显示打包过程中的文件名称
范例
#将etc目录备份
find ./etc -print | cpio -ov > bak.cpio
#将/data内容追加bak.cpio
find /data | cpio -oA -F bak.cpio
#内容预览
cpio –tv < etc.cpio
#解包文件
cpio –idv < etc.cpio