Linux数据归档和解压缩tar,cpio,gzip,bzip,lzma,zip命令使用

转载: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
posted @ 2013-12-25 08:53  摩斯电码  阅读(3398)  评论(0编辑  收藏  举报