转载:http://www.1987.name/659.html
数据压缩归档和备份是系统管理的日常工作,定期备份不可小视,归档和压缩对于系统管理员或是普通用户来说都经常用到的操作,有很多中压缩格式,需要结合不同的使用方法才能达到最佳的压缩效果。
使用tar归档
tar命令可以用来归档文件,用它可以将多个文件保存为单个文件,同时保留所有文件的属性,比如所有者、权限等。
常用选项
-a
自动判断压缩格式-c
建立一个压缩文件的参数指令。-x
解开一个压缩文件的参数指令。-t
查看tarfile里面的文件。-r
向归档文件中追加文件。-d
比较归档文件与文件系统的内容。-u
通过检查时间戳来更新归档文件中的内容。-z
调用gzip来压缩归档文件,与-x联用时调用gzip完成解压缩。-j
调用bzip2来压缩归档文件。-v
解压缩的过程中显示文件。-f
使用归档名,归档名必须紧跟在-f之后。-p
使用原文件的原来属性(属性不会依据使用者而变)。-P
可以使用绝对路径来压缩。-N yyyy/mm/dd
比日期yyyy/mm/dd还要新的才会被归档。-C
指定需要将文件提取到哪个目录。-A
合并多个归档文件。-X
排除文件列表中的文件名。--exclude FILE
排除FILE。--exclude-vcs
排除版本控制系统目录。
常见用法
用-c
选项创建归档文件,-f
是指定归档文件名:
tar -cf test.tar f1 f2 f3 f4 f5...
使用-r
追加选项向归档文件中追加文件:
tar -rvf test.tar new_file
使用-t
查看归档文件里面的内容:
tar -tf test.tar
使用-v
或者-vv
可以显示详细的内容信息:
tar -tvvf inotify-tools-3.14.tar.gz
drwxrwxrwx 1000/1000 0 2010-03-14 21:53:46 inotify-tools-3.14/
-rw-r--r-- 1000/1000 39 2010-03-12 21:53:47 inotify-tools-3.14/AUTHORS
...
-rwxr-xr-x 1000/1000 18615 2010-03-12 21:53:47 inotify-tools-3.14/depcomp
使用-x
将归档文件提取出来:
tar -xf test.tar
使用-C
指定需要将文件提取到/data/test
下:
tar -xf test.tar -C /data/test
在归档文件中提取指定的文件:
tar -xvf test.tar file1 file5
在tar中使用stdin和stdout
在归档时,可以将stdout指定为输出文件,这样另一个命令就可以通过管道符将它作为stdin,并进行其他处理:
tar -cf - file1 file2 file3 | tar -xvf - -C /data/test
拼接两个归档文件
使用-A
选项拼接两个归档文件,拼接后的文件名是test1.tar:
tar -Af test1.tar tet2.tar
通过时间戳来更新归档文件中的内容,使用-u
选项指明只有比归档文件中的同名文件更新的时候才进行添加:
tar -uvvf 1.tar ddd
-rw-r--r-- root/root 4 2013-01-05 14:46:36 ddd
使用-d
来比较归档文件和文件系统中的差别:
tar -df 1.tar aaa
aaa: Mod time differs
aaa: Size differs
aaa: Mod time differs
aaa: Size differs
使用--delete
从归档文件中删除文件:
tar -f test.tar --delete file1 file2...
通过--exclude
从归档文件中排除部分文件:
tar -cf test.tar * --exclude "*.jpg"
将需要排除的文件写入列表文件同时配合-X
选项排除它们:
cat list
file1
file2
tar -cf test.tar * -X list
这样是排除了file1和file2两个文件。
排除版本控制系统目录
通常使用tar归档文件来分发源码,大多数源码都是使用版本控制系统进行维护,常见的有subversion、git、mercurial、cvs等,版本控制系统中的代码目录包含用来管理版本的特殊目录,比如.svn、.git。为了在归档时排除这些目录,可以使用tar命令的--exclude-vcs
选项排除它们。
tar --exclude-vcs -czvvf source_code.tar.gz svn_dir
打印归档后文件总字节数
tar -cf 3.tar * --totals
Total bytes written: 40960 (40KiB, 21MiB/s)
压缩归档文件
归档文件通常被压缩成以下格式之一:
- file.tar.gz (
-z
选项指定gzip格式) - file.tar.bz2 (
-j
选项指定bunzip2格式) - file.tar.lzma (
--lzma
指定lzma格式)
使用cpio归档
cpio是类似于tar的归档格式,也可以保留文件属性,一般用于RPM软件包、Linux内核initramfs文件。cpio是以绝对路径进行归档,进行提取时cpio会使用绝对路径提取内容,不像tar那样会去除路径开头/转换为相对路径,常用的选项有:
-o
指定输出。-v
打印归档文件列表。-i
指定输出。-t
列出归档文件中的内容。-d
提取归档文件内容。
cpio是用过stdin获取输入文件名,后将归档文件写入stdout,需要将stdout重定向到一个文件来接受cpio的输出:
echo file1 file2 file3 | cpio -ov > test.cpio
列出cpio归档文件中的内容:
cpio -it < test.cpio
从cpio归档文件中提取文件:
cpio -id < test.cpio
cpio在覆盖文件时候不会显示提示信息,会直接覆盖。
使用gunzip或gzip解压缩
gzip是Linux下常用的压缩格式,gzip、gunzip、zcat都可以处理gzip格式压缩文件。gzip只能够压缩单个文件,不能压缩多个文件。gzip在压缩时候会删除原文件,并生成一个压缩后的.gz文件。
使用gzip命令压缩文件filename:
gzip test.txt
ls
test.txt.gz
列出压缩文件的属性信息:
gzip -l test.txt.gz
compressed uncompressed ratio uncompressed_name
34 53 101.9% test.txt
使用gunzip解压.gz
文件:
gunzip test.txt.gz
ls
test.txt
从stdin读取并写入到stdout:
cat filename | gzip -c > file.gz
结合tar压缩归档文件,-a
是根据文件扩展名自动判断压缩格式:
tar -czvf test.tar.gz *
tar -cavf test.tar.gz *
使用zcat命令
直接读取gzip格式文件:
zcat test.txt.gz
this is a test line
gzip可以指定压缩率,一共有9个级别:
- 1级的压缩率最低,压缩速度最快。
- 9级的压缩率最高,压缩速度最慢。
gzip -9 test.jpg
使用bunzip或bzip解压缩
bunzip2是另一种与gzip类似的压缩技术,能够生成比gzip跟小(压缩比更高)的文件。压缩后会生成一个.bz2文件。也会删除原文件生成新文件。压缩率和gzip相同。
使用bzip2进行压缩:
bzip2 filename
ls
filename.bz2
解压bzip2文件:
bunzip2 filename.bz2
结合tar压缩归档文件:
tar -cjvf test.tar.bz2 *
tar -cavf test.tar.bz2 *
使用lzma压缩
lzma是一个交新的压缩工具,比gzip和bzip2有更好的压缩率,不过大多数Linux发行版没有安装,需要自行安装。使用方法基本和gzip、bzip2一样。
用lzma压缩文件:
lzma filename
或者加上压缩等级,这样生成的压缩包更小
lzma -9 filename
上面的这种压缩方法默认会删除filename文件,如果想保留原始文件可以加上-k,如下
lzma -k -9 filename
ls
filename.lzma
上面的这些的方法只能压缩文件,无法压缩文件夹,可以先用tar将文件夹打包,然后再用lzma进行压缩即可
tar -cf dir.tar dir
lzma -9 dir.tar
会生成文件 dir.tar.lzma
如果要解压,可以使用tar一次性完成 tar -xf dir.tar.lzma --lzma -C ./
用unlzma加压文件:
unlzma filename.lzma
结合tar压缩归档文件:
tar -cvf --lzma test.tar.lzma *
tar -cavf test.tar.lzma *
用zip归档和压缩
ZIP是种流行的压缩格式,很多平台都可以使用。压缩后会另外生成.zip
扩展名的压缩文件。
压缩
命令选项
-A
调整可执行的自动解压缩文件。-b<工作目录>
指定暂时存放文件的目录。-c
替每个被压缩的文件加上注释。-d
从压缩文件内删除指定的文件。-D
压缩文件内不建立目录名称。-f
此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。-F
尝试修复已损坏的压缩文件。-g
将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。-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的数值。
常见用法
对文件采用zip格式进行压缩:
zip file.zip file
用-r
选项对目录和我呢见进行递归操作:
zip -r test.zip dir file...
用-u
选项更新压缩文件中的内容:
zip file.zip -u new_file
从压缩文件中删除内容:
zip -d file.zip file.txt
解压
使用unzip命令解压缩zip文件。
命令选项
-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压缩文件中的哪些文件。
常见用法
要从zip文件中提取内容:
unzip file.zip
列出压缩文件中的内容:
unzip -l test.zip
验证压缩文件是否完整:
unzip -t test.zip