zoukankan      html  css  js  c++  java
  • tar

    一、简介

    • 作用:

    GNU ‘tar’ saves many files together into a single tape or disk archive

    GNU的tar作用是保存多个文件进一个备份或归档文件中。

    • 格式:

    tar [OPTION...] [FILE]...

    • 命令信息

    命令路径:/bin/tar

    执行命令权限:普通用户

    二、常用实例

    tar -cf archive.tar foo bar
            创建一个文件名为archive.tar的归档文件并把文件foo和bar加入这个归档文件中(没有使用压缩)
             这种方式解压后的文件修改了文件的Change时间信息和Access时间信息,Modify时间没有改变。
    tar -tvf archive.tar
            显示归档文件archive.tar中的文件。
    tar -xf archive.tar
            提取归档文件archive.tar文件到当前目录(没有使用压缩方式)。
             这种解压方式可以解压默认的tar/tar.gz/tar.bz结尾的压缩文件

    上面三个命令中的参数前面“-”可以有也可以没有。

    2.1、打包

    创建打包文件

    注意:不要用:tar -cpf ceshi.tar *,这样打包解压时会把解压文件全部解压到当前目录导致很混乱。

    不使用压缩(备份保存文件属性):
                        tar -cpf ceshi.tar ceshi/
                            把目录ceshi及目录内所有文件及目录打包到文件ceshi.tar中,并保留源文件权限属性信息。(但是Access、Change时间会改变,Modify时间不变)
                    使用压缩方式打包(此时会因为压缩消耗一定的cpu):
                        tar -cpjf ceshi.tar.bz ceshi/
                            用bzip2方式压缩归档文件。
                        tar -zcpf ceshi.tar.gz ceshi/
                            用gzip方式压缩归档文件。
                        tar -zcpf ceshi.tar.xz ceshi
                            用xz方式压缩归档文件。
                        创建以日期为名称的压缩包:
                            tar zcphf `date "+%Y%m%d".tar.gz` ceshi
                            
                            ll
                                -rw-r--r--.  1 root root  45465 Aug  3 22:56 20180803.tar.gz
                        过滤把ceshi目录下的jpg文件全部压缩:
                            tar zcphf `date "+%Y%m%d".tar.gz` ceshi/*.jpg
                        压缩修改日期在指定时间以后的文件:
                            tar -N "20180801" -cf ceshi.tar ceshi
                                把修改时间在2018年8月1日凌晨(即7月31日凌晨24:00以后)以后修改的文件都打包
                            tar -N "20180721 23:00:00" -cf ceshi.tar ceshi

    备份常用的方法:

    -g参数使用(centos6.6)测试没有发现效果:
        ll ceshi
            total 104
            drwxr-xr-x. 2 root root  4096 Aug  3 22:07 a
            -rw-r--r--. 1 root root     0 Aug  3 22:02 abc.log
            -rw-------. 1 root root 23229 Jul 21 05:11 anaconda-ks.cfg
            -rw-r--r--. 1 root root 21682 Aug  3 18:57 install.log
            -rw-r--r--. 1 root root  5890 Aug  3 18:57 install.log.syslog
            -rw-r--r--. 1 root root 15231 Jul 21 05:10 tar.txt
            -rw-r--r--. 1 root root     0 Aug  3 21:58 test.sh
            -rw-r--r--. 1 root root 27146 Jul 21 05:10 useradd.txt
        tar -g snapshot -cf ceshi.tar ceshi
        查看备份的结果:
        tar -tvf ceshi.tar
            drwxr-xr-x root/root        94 2018-08-03 22:07 ceshi/
            drwxr-xr-x root/root         1 2018-08-03 22:07 ceshi/a/
            上面备份结果发现只有文件目录备份结果没有文件的备份
        新建一个文件和目录,增量备份测试:
            mkdir ceshi/nihao
            touch ceshi/filetest.txt
            然后再次增量备份:
            tar -g snapshot -cf ceshi.tar ceshi
            然后再查看增量备份的结果:
            tar -tvf ceshi.tar
                drwxr-xr-x root/root       115 2018-08-03 22:10 ceshi/
                drwxr-xr-x root/root         1 2018-08-03 22:07 ceshi/a/
                drwxr-xr-x root/root         1 2018-08-03 22:10 ceshi/nihao/
                -rw-r--r-- root/root         0 2018-08-03 22:10 ceshi/filetest.txt
        然后删除一个文件再次增量备份测试:
            rm -rf ceshi/a
            tar -g snapshot -cf ceshi.tar ceshi
            tar -tvf ceshi.tar
                drwxr-xr-x root/root       112 2018-08-03 22:10 ceshi/
                drwxr-xr-x root/root         1 2018-08-03 22:10 ceshi/nihao/
            发现上面删除一个目录后增量备份不止没有这个目录,而且分解filetest.txt也没有了。
    -u参数来做增量备份:
        -u只能用于非压缩方式的备份。
        用-u来作参数时如果删除文件,备份的文件中不会删除对应的文件。但是更新文件时或增加新文件时会把新文件追加进压缩包中。这样会导致同一个名字的文件有多个但是解压时只会解压最新的文件。
        tar -uf ceshi.tar ceshi
        删除文件然后再备份测试:
            rm -rf ceshi/abc.log
            tar -uf ceshi.tar ceshi
            
            tar -tvf ceshi.tar
                drwxr-xr-x root/root       112 2018-08-03 22:10 ceshi/
                drwxr-xr-x root/root         1 2018-08-03 22:10 ceshi/nihao/
                -rw-r--r-- root/root      5890 2018-08-03 18:57 ceshi/install.log.syslog
                -rw-r--r-- root/root         0 2018-08-03 21:58 ceshi/test.sh
                -rw------- root/root     23229 2018-07-21 05:11 ceshi/anaconda-ks.cfg
                -rw-r--r-- root/root         0 2018-08-03 22:10 ceshi/filetest.txt
                -rw-r--r-- root/root     21682 2018-08-03 18:57 ceshi/install.log
                -rw-r--r-- root/root         0 2018-08-03 22:02 ceshi/abc.log
                -rw-r--r-- root/root     27146 2018-07-21 05:10 ceshi/useradd.txt
                -rw-r--r-- root/root     15231 2018-07-21 05:10 ceshi/tar.txt
            
            touch ceshi/abc.log
            tar -uf ceshi.tar ceshi
            tar -tvf ceshi.tar
                drwxr-xr-x root/root       112 2018-08-03 22:10 ceshi/
                drwxr-xr-x root/root         1 2018-08-03 22:10 ceshi/nihao/
                -rw-r--r-- root/root      5890 2018-08-03 18:57 ceshi/install.log.syslog
                -rw-r--r-- root/root         0 2018-08-03 21:58 ceshi/test.sh
                -rw------- root/root     23229 2018-07-21 05:11 ceshi/anaconda-ks.cfg
                -rw-r--r-- root/root         0 2018-08-03 22:10 ceshi/filetest.txt
                -rw-r--r-- root/root     21682 2018-08-03 18:57 ceshi/install.log
                -rw-r--r-- root/root         0 2018-08-03 22:02 ceshi/abc.log
                -rw-r--r-- root/root     27146 2018-07-21 05:10 ceshi/useradd.txt
                -rw-r--r-- root/root     15231 2018-07-21 05:10 ceshi/tar.txt
                -rw-r--r-- root/root         0 2018-08-03 22:21 ceshi/abc.log

    把新的文件追加到压缩包:

    把tar包中的所有文件追加到另一个tar包内:
        tar Af ceshi.tar 123.tar
            把123.tar内的文件追加到ceshi.tar内。
            A参数不能与压缩参数结合使用。
            
        tar -rf 123.tar 123.tar.gz
            把文件123.tar.gz追加到123.tar包的末尾。-r只能追加tar包不能与压缩参数混用。

    2.2、提取/解压

    通用方式解压提取文件:
        tar xf ceshi.tar.bz -C test/
            解压提取文件目录存放到test目录下
        或者
        tar -xf ceshi.tar
        tar xf ceshi.tar.bz
            解压提取文件ceshi放在当前目录
    使用指定压缩方式来解压:
        tar xjf ceshi.tar.bz -C test/
            用bzip2方式来解压文件。
        tar xzf ceshi.tar.gz -C test/
            用gzip方式来解压文件。
        tar xJf ceshi.tar.xz -C test/
            用xz方式来解压文件。

    2.3、查看文件

    通用方式解压提取文件:
        tar xf ceshi.tar.bz -C test/
            解压提取文件目录存放到test目录下
        或者
        tar -xf ceshi.tar
        tar xf ceshi.tar.bz
            解压提取文件ceshi放在当前目录
    使用指定压缩方式来解压:
        tar xjf ceshi.tar.bz -C test/
            用bzip2方式来解压文件。
        tar xzf ceshi.tar.gz -C test/
            用gzip方式来解压文件。
        tar xJf ceshi.tar.xz -C test/
            用xz方式来解压文件。

    三、参数说明

      

    常用参数
    序号 参数 作用 实例
    1 -A, --catenate, --concatenate 追加文件到归档文件  
    2 -c, --create 创建归档文件  
    3 -d, --diff, --compare 查找归档和文件系统之间的差异  
    4 --delete 从归档文件(非磁带)中删除文件  
    5 -r, --append 追加文件到归档文件末尾  
    6 -t, --list 列出归档文件内容  
    7 --test-label 测试归档文件卷标签并退出  
    8 -u, --update 仅追加比归档中副本更新的文件  
    9 -x, --extract, --get 从归档文件中提取文件  
    10 -C, --directory=DIR 改变目录  
    11 -f, --file=ARCHIVE 用文件归档或者设备归档  
    12 -j, --bzip2 通过bzip2压缩归档文件  
    13 -J, --xz 通过xz压缩归档文件  
    14 -p, --preserve-permissions 提取有关文件权限的信息(默认使用超级管理员)  
    15 -v, --verbose 显示文件处理过程  
    16 -z, --gzip 使用gzip压缩归档文件  
           
    操作修饰符:
    序号 参数 作用 实例
    1 --check-device 创建增量归档时检查设备编号(默认)  
    2 -g, --listed-incremental=FILE 处理新的gnu格式的增量备份  
    3 -G, --incremental 处理旧的gnu格式的增量备份  
    4 --ignore-failed-read 在不可读文件时,不要以非0退出  
    5 --level=NUMBER 所创建的增量列表归档的输出级别  
    6 -n, --seek 归档文件是可检索的。  
    7 --no-check-device 创建增量存档时不检查设备编号  
    8 --no-seek 归档文件是不可检索  
    9 --occurrence[=NUMBER] 仅处理归档中每个文件的第NUMBER个事件;仅当与以下子命令--delete,--diff,--extract或是--list中的一个联合使用时,此选项才有效。而且不管文件列表是以命令行形式给出或是通过-T选项指定的;NUMBER值默认为1  
    10 --sparse-version=MAJOR[.MINOR] 设置所使用离散格式的版本(隐含--sparse)  
    11 -S, --sparse 高效处理离散文件  
           
    覆盖控制:
    序号 参数 作用 实例
    1 -k, --keep-old-files 解压时不要替换存在的文件(通过报错)  
    2 --skip-old-files 当提取归档文件时不覆盖已经存在的文件(静默跳过)  
    3 --keep-newer-files 不要替换比归档中副本更新的已存在的文件  
    4 --no-overwrite-dir 保存已存在目录的元数据  
    5 --overwrite 解压时重写存在的文件  
    6 --overwrite-dir 解压时重写已存在目录的元数据(默认)  
    7 --recursive-unlink 解压目录之前先清除目录层次  
    8 --remove-files 在添加文件至归档后删除它们  
    9 -U, --unlink-first 在解压要重写的文件之前先删除它们  
    10 -W, --verify 在写入以后尝试校验归档  
           
    选择输出流:
    序号 参数 作用 实例
    1 --ignore-command-error 忽略子进程的退出代码  
    2 --no-ignore-command-error 将子进程的非零退出代码认为发生错误  
    3 -O, --to-stdout 解压文件至标准输出  
    4 --to-command=COMMAND 将解压的文件通过管道传送至另一个程序  
    5 --acls 保存ACLs到归档文件  
    6 --atime-preserve[=METHOD] 在输出的文件上保留访问时间,要么通过在读取(默认METHOD=replace)后还原时间,要不就不要在第一次(METHOD=system)设置时间  
    7 --delay-directory-restore 直到解压结束才设置修改时间和所解目录的权限  
    8 --group=NAME 强制将NAME作为添加文件的组的所有者  
    9 --mode=CHANGES 强制将所添加的文件(符号)更改为权限CHANGES  
    10 --mtime=DATE-OR-FILE 从DATE-OR-FILE中为添加的文件设置mtime  
    11 -m, --touch 不提取文件的修改时间(文件的修改访问时间都变为了当前解压时间)  
    12 --no-acls 不提取归档文件的ACLs  
    13 --no-delay-directory-restore 取消--delay-directory-restore的作用  
    14 --no-same-owner 修改提取文件的所有者信息,使用当前用户所有(默认用普通用户使用这个参数)  
    15 --no-same-permissions 从归档中解压权限时使用用户的umask(掩码位)(默认是普通用户服务)  
    16 --no-selinux 不提取SELinux内容  
    17 --no-xattrs 不提取xattrs的归档文件  
    18 --numeric-owner 总是以数字代表用户/组的名称  
    19 --owner=NAME 强制使用NAME作为添加文件的所有者  
    20 -p, --preserve-permissions, --same-permissions 提取有关文件权限的信息  
    21 --preserve 与-p和-s参数相同  
    22 --same-owner 尝试使用归档文件相同所有权限提取文件(默认是超级管理员)  
    23 -s, --preserve-order, --same-order 对要提取的名称进行排序以匹配归档  
    24 --selinux 将SELinux上下文保存到存档中  
    25 --xattrs 将user/root xattrs保存到存档中  
           
    设备选择和切换:
    序号 参数 作用 实例
    1 -f, --file=ARCHIVE 用文件归档或设备归档  
    2 --force-local 即使归档文件存在副本还是把它认为是本地归档  
    3 -F, --info-script=NAME, --new-volume-script=NAME 在每卷磁带最后运行脚本(隐含 -M)  
    4 -L, --tape-length=NUMBER 在写入NUMBER × 1024字节后改变磁带  
    5 -M, --multi-volume 创建/列出/解压多卷归档文件  
    6 --rmt-command=COMMAND 使用给定的rmt COMMAND代替rmt  
    7 --rsh-command=COMMAND 使用远程COMMAND代替rsh  
    8 --volno-file=FILE 更新/使用FILE的卷号  
           
    设备分块:
    序号 参数 作用 实例
    1 -b, --blocking-factor=BLOCKS 每条记录BLOCKS x 512字节  
    2 -B, --read-full-records 读入时重新分块(只对4.2BSD管道有效)  
    3 -i, --ignore-zeros 忽略归档中的零字节块(即文件结尾)  
    4 --record-size=NUMBER 指定每条记录NUMBER,即NUMBER x 512 bytes  
           
    归档格式选择:
    序号 参数 作用 实例
    1 -H, --format=FORMAT 用指定格式创建归档文件。
    上面归档格式可以使用:
    gnu    GNU tar 1.13.x format
    oldgnu GNU format as per tar <= 1.12
    pax    POSIX 1003.1-2001 (pax) format
    posix  same as pax
    ustar  POSIX 1003.1-1988 (ustar) format
    v7     old V7 tar format
     
    2 --old-archive, --portability 作用和--format=v7一样  
    3 --pax-option=keyword[[:]=value][,keyword[[:]=value]]... 控制pax关键字  
    4 -V, --label=TEXT 创建名为TEXT的逻辑卷来存储归档文件。在显示/提取时用TEXT来作为逻辑卷名字的通配符模式  
           
    压缩选项:
    序号 参数 作用 实例
    1 -a, --auto-compress 根据文件后缀决定压缩程序  
    2 -I, --use-compress-program=PROG 通过PROG来压缩(必须接受 -d)  
    3 -j, --bzip2 通过bzip2来压缩  
    4 -J, --xz 通过xz来压缩  
    5 --lzip 通过lzip来压缩  
    6 --lzma 通过lzam来压缩  
    7 --lzop 通过lzop来压缩  
    8 --no-auto-compress 和-a作用相反,不自动检查压缩程序  
    9 -z, --gzip, --gunzip, --ungzip 通过gzip压缩  
    10 -Z, --compress, --uncompress 通过压缩处理存档文件。  
           
    本地文件选项:
    序号 参数 作用 实例
    1 --add-file=FILE 将给定的文件添加到归档文件中  
    2 --backup[=CONTROL] 删除之前做备份,选择版本CONTROL  
    3 -C, --directory=DIR 改变目录到DIR(解压到指定目录时使用)  
    4 --exclude=PATTERN 排除文件,该匹配模式PATTERN  
    5 --exclude-backups 排除备份和锁文件  
    6 --exclude-caches 除了标记文件本身,排除包括CACHEDIR.TAG内容的目录  
    7 --exclude-caches-all 排除目录中的内容CACHEDIR.TAG  
    8 --exclude-caches-under 排除包含内容CACHEDIR.TAG的目录  
    9 --exclude-tag=FILE 除了文件FILE外,排除包含FILE的目录  
    10 --exclude-tag-all=FILE 排除所有目录包含的FILE  
    11 --exclude-tag-under=FILE 排除包含FILE的所有目录  
    12 --exclude-vcs 排除版本控制系统目录  
    13 -h, --dereference 根据文件软链接归档备份指向的文件  
    14 --hard-dereference 根据硬链接归档备份文档  
    15 -K, --starting-file=MEMBER-NAME 从归档中的MEMBER-NAME开始  
    16 --newer-mtime=DATE 当只有时间改变时比较日期和时间  
    17 --no-null 禁用前一个——null选项的效果  
    18 --no-recursion 避免在目录中自动递归  
    19 --no-unquote 不要取消用-T读取的文件名的引用  
    20 --null -T读取空终止的名称,禁用-C  
    21 -N, --newer=DATE-OR-FILE, --after-date=DATE-OR-FILE 只存储文件日期新的文件  
    22 --one-file-system 当创建归档文件时,在本地文件系统中  
    23 -P, --absolute-names 不要从文件名中去除前导' / ' s  
    24 --recursion 递归目录(默认)  
    25 --suffix=STRING 在删除前备份,重写通常的后缀。  
    26 -T, --files-from=FILE 要从文件中提取或创建的名称  
    27 --unquote 以-T读取的文件名(默认)  
    28 -X, --exclude-from=FILE 排除FILE中列出的模式  
           
    文件名称的转换:
    序号 参数 作用 实例
    1 --strip-components=NUMBER 在提取时从文件名中清除NUMBER个引导部分  
    2 --transform=EXPRESSION, --xform=EXPRESSION 使用sed replace表达式EXPRESSION转换文件名  
    3 --anchored 模式匹配文件名开始  
    4 --ignore-case 忽略字母大小写  
    5 --no-anchored 模式在任何' / '之后匹配(默认排除)  
    6 --no-ignore-case 不忽略字幕大小写(默认)  
    7 --no-wildcards 字符串逐字匹配(不适用通配符)  
    8 --no-wildcards-match-slash 不使用通配符匹配(能匹配'/')  
    9 --wildcards 用通配符(默认)  
    10 --wildcards-match-slash 通配符匹配(匹配'/')  
           
    信息输出:
    序号 参数 作用 实例
    1 --checkpoint[=NUMBER] 显示每个NUMBERth记录的进度消息(默认10)  
    2 --checkpoint-action=ACTION 在每个检查点执行操作  
    3 --index-file=FILE 发送详细输出到FILE。  
    4 -l, --check-links 只要不是所有链接都被输出就打印信息  
    5 --no-quote-chars=STRING 禁止引用STRING中的字符  
    6 --quote-chars=STRING 附加引用字符串中的字符  
    7 --quoting-style=STYLE 设置引用样式;请参阅下面的有效样式值  
    8 -R, --block-number 在存档中显示每个消息的块号  
    9 --show-defaults 显示tar默认  
    10 --show-omitted-dirs 当显示或提取时,列出所有不存在的目录  
    11 --show-transformed-names, --show-stored-names 在转换后显示文件或存档名称  
    12 --totals[=SIGNAL] 在归档结束后输出总共的字节数。使用SIGNAL传递时,用参数-输出。允许的信号包括:SIGHUP, SIGQUIT,  SIGINT,  SIGUSR1  and  SIGUSR2。也可以接受没有SIG前缀的名称  
    13 --utc  在UTC中打印文件修改日期  
    14 -v, --verbose 输出处理过程中相关信息  
    15 --warning=KEYWORD 警告控制  
    16 -w, --interactive, --confirmation 每次操作都要求确认  
           
    兼容性选项:
    序号 参数 作用 实例
    1 -o 创建归档时和--old-archive作用相同,提取文件时和--no-same-owner作用相同  
    2      
           
    其他选项:
    序号 参数 作用 实例
    1 -?, --help 显示帮助信息  
    2 --restrict 禁止使用一些潜在的有害选项  
    3 --usage 显示简单的使用说明帮助  
    4 --version 显示tar程序版本信息  
           
    默认选项:
    --format=gnu -f- -b20 --quoting-style=escape --rmt-command=/sbin/rmt --rsh-command=/usr/bin/rsh
           
    压缩选项中的backup参数可以接收的参数
    1 none, off 关闭备份  
    2 t, numbered 用数字备份  
    3 nil, existing 如果存在编号备份,则进行编号,否则使用简单备份  
    4 never, simple 永远使用简单备份  
           
    --quoting-style选项的有效参数为:
    1 literal    
    2 shell    
    3 shell-always    
    4 c    
    5 c-maybe    
    6 escape    
    7 locale    
    8 clocale    

    四、备注说明

    常见压缩包的解压方式:

    1

    *.tar

      tar –xvf 解压

    2

    *.gz

    gzip -d或者gunzip 解压

    3

    *.tar.gz

    *.tgz tar –xzf 解压

    4

    *.bz2

    bzip2 -d或者用bunzip2 解压

    5

    *.tar.bz2

    tar –xjf 解压

    6

    *.Z

     uncompress 解压

    7

    *.tar.Z

    tar –xZf 解压

    8

    *.rar

    unrar e解压

    9

    *.zip

    unzip 解压

  • 相关阅读:
    anchor-free : CornerNet 和 CenterNet 简要笔记
    图像分割中的loss--处理数据极度不均衡的状况
    python 装饰器
    python3 新特性
    VSCode Eslint+Prettier+Vetur常用配置
    JS lodash学习笔记
    JS 高端操作整理
    Vue 组件通信
    Vue 搭建vue-element-admin框架
    小程序 HTTP请求封装
  • 原文地址:https://www.cnblogs.com/mehome/p/9413884.html
Copyright © 2011-2022 走看看