Linux打包和压缩

压缩和解压缩

主要针对单个文件压缩,而非目录

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 <Script文件>][-K <文件>][-L <媒体容量>][-N <日期时间>][-T <范本文件>][-V <卷册名称>][-X <范本文件>][-<设备编号><存储密度>][--after-date=<日期时间>][--atime-preserve][--backuup=<备份方式>][--checkpoint][--concatenate][--confirmation][--delete][--exclude=<范本样式>][--force-local][--group=<群组名称>][--help][--ignore-failed-read][--new-volume-script=<Script文件>][--newer-mtime][--no-recursion][--null][--numeric-owner][--owner=<用户名称>][--posix][--erve][--preserve-order][--preserve-permissions][--record-size=<区块数目>][--recursive-unlink][--remove-files][--rsh-command=<执行指令>][--same-owner][--suffix=<备份字尾字符串>][--totals][--use-compress-program=<执行指令>][--version][--volno-file=<编号文件>][文件或目录...]

选项

-A或--catenate 新增文件到已存在的备份文件。
-b<区块数目>或--blocking-factor=<区块数目> 设置每笔记录的区块数目,每个区块大小为12Bytes。-B或--read-full-records 读取数据时重设区块大小。
-c或--create 建立新的备份文件。
-C<目的目录>或--directory=<目的目录> 切换到指定的目录。
-d或--diff或--compare 对比备份文件内和文件系统上的文件的差异。
-f<备份文件>或--file=<备份文件> 指定备份文件。
-F<Script文件>或--info-script=<Script文件> 每次更换磁带时,就执行指定的Script文件。
-g或--listed-incremental 处理GNU格式的大量备份。
-G或--incremental 处理旧的GNU格式的大量备份。
-h或--dereference 不建立符号连接,直接复制该连接所指向的原始文件。
-i或--ignore-zeros 忽略备份文件中的0 Byte区块,也就是EOF。
-k或--keep-old-files 解开备份文件时,不覆盖已有的文件。
-K<文件>或--starting-file=<文件> 从指定的文件开始还原。
-l或--one-file-system 复制的文件或目录存放的文件系统,必须与tar指令执行时所处的文件系统相同,否则不予复制。
-L<媒体容量>或-tape-length=<媒体容量> 设置存放每体的容量,单位以1024 Bytes计算。
-m或--modification-time 还原文件时,不变更文件的更改时间。
-M或--multi-volume 在建立,还原备份文件或列出其中的内容时,采用多卷册模式。
-N<日期格式>或--newer=<日期时间> 只将较指定日期更新的文件保存到备份文件里。
-o或--old-archive或--portability 将资料写入备份文件时使用V7格式。
-O或--stdout 把从备份文件里还原的文件输出到标准输出设备。
-p或--same-permissions 用原来的文件权限还原文件。
-P或--absolute-names 文件名使用绝对名称,不移除文件名称前的"/"号。
-r或--append 新增文件到已存在的备份文件的结尾部分。
-R或--block-number 列出每个信息在备份文件中的区块编号。
-s或--same-order 还原文件的顺序和备份文件内的存放顺序相同。
-S或--sparse 倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件。
-t或--list 列出备份文件的内容。
-T<范本文件>或--files-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让tar解开或建立符合设置条件的文件。
-u或--update 仅置换较备份文件内的文件更新的文件。
-U或--unlink-first 解开压缩文件还原文件之前,先解除文件的连接。
-v或--verbose 显示指令执行过程。
-V<卷册名称>或--label=<卷册名称> 建立使用指定的卷册名称的备份文件。
-w或--interactive 遭遇问题时先询问用户。
-W或--verify 写入备份文件后,确认文件正确无误。
-x或--extract或--get 从备份文件中还原文件。
-X<范本文件>或--exclude-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让ar排除符合设置条件的文件
-z或--gzip或--ungzip 通过gzip指令处理备份文件。
-Z或--compress或--uncompress 通过compress指令处理备份文件。
-<设备编号><存储密度> 设置备份用的外围设备编号及存放数据的密度。
--after-date=<日期时间> 此参数的效果和指定"-N"参数相同。
--atime-preserve不变更文件的存取时间。
--backup=<备份方式>或--backup 移除文件前先进行备份。
--checkpoint读取备份文件时列出目录名称。
--concatenate此参数的效果和指定"-A"参数相同。
--confirmation此参数的效果和指定"-w"参数相同。
--delete从备份文件中删除指定的文件。
--exclude=<范本样式> 排除符合范本样式的文件。
--group=<群组名称> 把加入设备文件中的文件的所属群组设成指定的群组。
--help在线帮助。--ignore-failed-read忽略数据读取错误,不中断程序的执行。
--new-volume-script=<Script文件> 此参数的效果和指定"-F"参数相同。
--newer-mtime只保存更改过的文件。
--no-recursion不做递归处理,也就是指定目录下的所有文件及子目录不予处理。
--null从null设备读取文件名称。
--numeric-owner以用户识别码及群组识别码取代用户名称和群组名称。
--owner=<用户名称> 把加入备份文件中的文件的拥有者设成指定的用户。
--posix将数据写入备份文件时使用POSIX格式。
--preserve此参数的效果和指定"-ps"参数相同。
--preserve-order此参数的效果和指定"-A"参数相同。
--preserve-permissions此参数的效果和指定"-p"参数相同。
--record-size=<区块数目> 此参数的效果和指定"-b"参数相同。
--recursive-unlink解开压缩文件还原目录之前,先解除整个目录下所有文件的连接。
--remove-files文件加入备份文件后,就将其删除。
--rsh-command=<执行指令> 设置要在远端主机上执行的指令,以取代rsh指令。
--same-owner尝试以相同的文件拥有者还原文件。
--suffix=<备份字尾字符串> 移除文件前先行备份。
--totals备份文件建立后,列出文件大小。
--use-compress-program=<执行指令> 通过指定的指令处理备份文件。
--version显示版本信息。
--volno-file=<编号文件> 使用指定文件内的编号取代预设的卷册编号。

(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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350