zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    多线程学习
    Redis学习2
    Redis学习1
    封装
    创建对象内存分析
    稀疏数组
    反转数组、冒泡排序
    可变参数
    .net core 3.x Web Api + Docker个人练手项目
    .net 性能优化手段
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/3489969.html
Copyright © 2011-2022 走看看