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
备份常用的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | -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 |
把新的文件追加到压缩包:
1 2 3 4 5 6 7 | 把 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、提取/解压
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <strong>通用方式解压提取文件:< /strong > tar xf ceshi. tar .bz -C test / 解压提取文件目录存放到 test 目录下 或者 tar -xf ceshi. tar tar xf ceshi. tar .bz 解压提取文件ceshi放在当前目录 <strong>使用指定压缩方式来解压:< /strong > 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、查看文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 通用方式解压提取文件: 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 解压 |
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律