Linux 之打包备份命令 tar 详解
文章
林里克斯
实验平台:
CentOS Linux release 7.6.1810 (Core)
tar Version:
tar (GNU tar) 1.26
一、参数详解
$ tar --help
示例:
tar -cf archive.tar foo bar #将 foo bar 文件打包至 archive.tar 包
tar -tvf archive.tar #详细列出 archive.tar 包中的所有文件
tar -xf archive.tar #从 archive.tar 中解压所有文件
参数详解:
主运行模式
-A, --catenate, --concatenate #合并 2 个 tar 包
-c, --create #创建一个新的 tar 包
-d, --diff, --compare #找出 tar 包系统和文件系统之间的差异,对比 tar 包内和文件系统上的文件的差异
--delete #从 tar 包中删除
-r, --append #将文件追加到 tar 包的末尾
-t, --list #列出 tar 包的内容
--test-label #测试 tar 包卷标并退出
-u, --update #仅在 tar 包中附加比复制更新的文件
-x, --extract, --get #从 tar 包中提取文件,解压文件
操作修饰符:
--check-device #创建增量时检查设备编号
-g, --listed-incremental=FILE #处理新的 GNU 格式增量备份
-G, --incremental #处理旧的GNU格式增量备份
--ignore-failed-read #对不可读文件不使用非零值退出
--level=NUMBER #已创建的列表-增量 tar 包的转储级别
-n, --seek #
--no-check-device #创建时不检查设备编号增量档案
--no-seek #存档不可用
--occurrence[=NUMBER] process only the NUMBERth occurrence of each file
in the archive; this option is valid only in
conjunction with one of the subcommands --delete,
--diff, --extract or --list and when a list of
files is given either on the command line or via
the -T option; NUMBER defaults to 1
--sparse-version=MAJOR[.MINOR]
set version of the sparse format to use (implies
--sparse)
-S, --sparse #倘若一个文件内含大量的连续 0 字节,则将此文件存成稀疏文件
覆写控制:
-k, --keep-old-files #解 tar 包时不替换现有文件
--keep-directory-symlink #在提取情况下保留指向目录的现有符号链接。
--keep-newer-files #不替换更新于的现有文件。他们的存档副本
--no-overwrite-dir #保留现有目录的元数据
--overwrite #解压时覆盖现有文件
--overwrite-dir #在以下情况下覆盖现有目录的元数据。提取(默认)
--recursive-unlink #解压缩目录之前清空层次结构
--remove-files #将文件添加到 tar 包后将其删除
--skip-old-files #解压时不要替换现有文件,默默地跳过它们
-U, --unlink-first #在提取之前删除每个文件
-W, --verify #写入备份文件后,确认文件正确无误
选择输出流:
--ignore-command-error #忽略退出代码
--no-ignore-command-error #将非零退出代码视为错误
-O, --to-stdout #将文件提取到标准输出
--to-command=COMMAND #通过管道将提取的文件传送到另一个程序
文件属性的处理:
--atime-preserve[=METHOD] #保留转储文件的访问时间
--delay-directory-restore #延迟设置修改时间和提取目录的权限直到结束
--group=NAME #强制 NAME 作为添加文件的组
--mode=CHANGES #强制(符号)模式更改已添加文件
--mtime=DATE-OR-FILE #为 DATE-OR-FILE 中添加的文件设置 mtime
-m, --touch #还原文件时,不变更文件的更改时间
--no-delay-directory-restore
#取消 --DELAY-DIRECTORY-RESTORE 的效果
--no-same-owner #自己解压文件(默认为普通用户)
--no-same-permissions #在提取权限时应用用户的umask。来自存档(普通用户默认)
--numeric-owner #用户/组名称始终使用数字
--owner=NAME #强制将名称作为已添加文件的所有者
-p, --preserve-permissions, --same-permissions
#提取有关文件权限的信息,用原来的文件权限还原文件。(超级用户默认)
--preserve #与 -p 和 -s 相同
--same-owner #尝试提取所有权与相同的文件。存在于存档中(超级用户默认)
-s, --preserve-order, --same-order
#成员参数的列出顺序。存档中的文件
扩展文件属性的处理:
--acls #启用 POSIX ACL 支持
--no-acls #禁用 POSIX ACL 支持
--no-selinux #禁用 SELinux 上下文支持
--no-xattrs #禁用扩展属性支持
--selinux #启用 SELinux 上下文支持
--xattrs #启用扩展属性支持
--xattrs-exclude=MASK #指定 xattr 键的排除模式
--xattrs-include=MASK #指定 xattr 键的包含模式
设备选择和切换:
-f, --file=ARCHIVE #指定 tar 包名字
--force-local #归档文件是本地的,即使它有冒号。tar 包有冒号时,直接解压会报错,需要加上此参数。
-F, --info-script=NAME, --new-volume-script=NAME
#每次更换磁带时,就执行指定的Script文件,隐含 -M
-L, --tape-length=NUMBER #设置存放每体的容量,单位以 1024 Bytes 计算
-M, --multi-volume #创建/列出/提取多卷归档,还原备份文件或列出其中的内容时,采用多卷册模式
--rmt-command=COMMAND #使用给定的 RMT 命令代替 RMT
--rsh-command=COMMAND #使用远程命令而不是 rsh
--volno-file=FILE #使用/更新文件中的卷号
装置封锁:
-b, --blocking-factor=BLOCKS #设置每笔记录的区块数目,每个区块大小为 12Bytes
-B, --read-full-records #阅读时重新阻塞(对于4.2BSD管道)
-i, --ignore-zeros #忽略备份文件中的 0 Byte 区块,也就是EOF
--record-size=NUMBER #每条记录的字节数,为 512 的倍数
存档格式选择:
-H, --format=FORMAT #创建给定格式的档案
FORMAT is one of the following:
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
--old-archive, --portability
same as --format=v7
--pax-option=keyword[[:]=value][,keyword[[:]=value]]...
control pax keywords
--posix same as --format=posix
-V, --label=TEXT #建立使用指定的卷册名称的备份文件
Compression options:
-a, --auto-compress #使用存档后缀确定压缩率
-I, --use-compress-program=PROG
#通过PROG过滤(必须接受-d)
-j, --bzip2 #通过 bzip2 打包 ($ tar -cjf busybox.tar.bz2 busybox)
-J, --xz #通过 xz 打包
--lzip #通过 lzip 打包
--lzma #通过 lzma 打包
--lzop
--no-auto-compress #不要使用后缀来确定 tar 包格式
-z, --gzip, --gunzip, --ungzip #通过 gzip 指令处理 tar 包
-Z, --compress, --uncompress #通过 compress (压缩)指令处理 tar 包
Local file selection:
--add-file=FILE #将给定的FILE添加到存档中(如果其名称有用,以短划线开头)
--backup[=CONTROL] #备份之前删除,选择版本 CONTROL
-C, --directory=DIR #切换到指定的目录
--exclude=PATTERN #排除以 PATTERN 形式给出的文件
--exclude-backups #排除备份和锁定文件
--exclude-caches 排除包含以下内容的目录的内容 CACHEDIR.TAG,标签文件本身除外
--exclude-caches-all #排除包含 CACHEDIR.TAG 的目录
--exclude-caches-under #排除包含以下(CACHEDIR.TAG)内容的目录下的所有内容
--exclude-tag=FILE 排除包含 FILE 的目录的内容,除了 FILE 本身
--exclude-tag-all=FILE #排除包含 FILE 的目录
--exclude-tag-under=FILE 排除目录下的所有内容包含文件
--exclude-vcs #排除版本控制系统目录
-h, --dereference #跟踪符号链接;存档并转储它们。
--hard-dereference #遵循硬链接;存档并转储他们的文件
-K, --starting-file=MEMBER-NAME
#从成员 MEMBER-NAME 开始阅读
--newer-mtime=DATE #比较仅更改数据时的日期和时间
--no-null #禁用前一个 --null 选项的效果
--no-recursion #避免在目录中自动下降
--no-unquote #不要取消引用用 -T 读取的文件名
--null #-T 读取以空值结尾的名称,禁用 -C
-N, --newer=DATE-OR-FILE, --after-date=DATE-OR-FILE
#仅存储更新于日期或文件的文件
--one-file-system #创建归档时保留在本地文件系统中
-P, --absolute-names #文件名使用绝对名称,不移除文件名称前的 "/" 号
--recursion #递归到目录中(默认)
--suffix=STRING #删除前备份,覆盖通常的后缀('~'除非被环境变量覆盖)
-T, --files-from=FILE #指定范本文件,其内含有一个或多个范本样式,让 tar 解开或建立符合设置条件的文件
--unquote #用 -T 读取的无引号文件名(默认)
-X, --exclude-from=FILE #指定范本文件,其内含有一个或多个范本样式,让 tar 排除符合设置条件的文件
File name transformations:
--strip-components=NUMBER strip NUMBER leading components from file
names on extraction
--transform=EXPRESSION, --xform=EXPRESSION
use sed replace EXPRESSION to transform file
names
File name matching options (affect both exclude and include patterns):
--anchored patterns match file name start
--ignore-case ignore case
--no-anchored patterns match after any `/' (default for
exclusion)
--no-ignore-case case sensitive matching (default)
--no-wildcards verbatim string matching
--no-wildcards-match-slash wildcards do not match `/'
--wildcards use wildcards (default)
--wildcards-match-slash wildcards match `/' (default for exclusion)
Informative output:
--checkpoint[=NUMBER] display progress messages every NUMBERth record
(default 10)
--checkpoint-action=ACTION execute ACTION on each checkpoint
--full-time print file time to its full resolution
--index-file=FILE send verbose output to FILE
-l, --check-links print a message if not all links are dumped
--no-quote-chars=STRING disable quoting for characters from STRING
--quote-chars=STRING additionally quote characters from STRING
--quoting-style=STYLE set name quoting style; see below for valid STYLE
values
-R, --block-number #在每条消息中显示存档中的块号,列出每个信息在备份文件中的区块编号
--show-defaults #显示 tar 默认值
--show-omitted-dirs 列出或提取时,列出每个目录与搜索条件不匹配
--show-transformed-names, --show-stored-names
#转换后显示文件或档案名称
--totals[=SIGNAL] #处理档案后打印总字节数
--utc #UTC中的打印文件修改时间
-v, --verbose #详细列出已处理的文件
--warning=KEYWORD #警告控制
-w, --interactive, --confirmation
#遭遇问题时先询问用户
Compatibility options:
-o 创建时,与 --old-archive 相同;和 --no-same-owner 相同
Other options:
-?, --help #打印帮助信息
--restrict #禁止使用某些潜在有害的选项
--usage #简短说明
--version #打印版本信息
二、使用详解
1.将文件追加到 tar
包里 (-r)
$ tar -cf test.tar test
$ tar -tvf test.tar
drwxr-xr-x jarbo/jarbo 0 2021-02-05 10:54 test/
-rw-rw-r-- jarbo/jarbo 0 2021-02-05 10:46 test/1.txt
-rw-rw-r-- jarbo/jarbo 20480 2021-02-05 10:53 test/2.txt
$ tar -rf test.tar busybox
$ tar -tvf test.tar
drwxr-xr-x jarbo/jarbo 0 2021-01-05 15:49 busybox/sysklogd/
-rw-r--r-- jarbo/jarbo 1706 2020-12-30 00:46 busybox/sysklogd/syslogd_and_logger.c
-rw-r--r-- jarbo/jarbo 8323 2020-12-30 00:46 busybox/sysklogd/klogd.c
-rw-r--r-- jarbo/jarbo 133 2021-01-05 15:48 busybox/sysklogd/.lib.a.cmd
-rw-r--r-- jarbo/jarbo 18348 2020-12-30 00:46 busybox/LICENSE
-rw-r--r-- jarbo/jarbo 7708 2020-12-30 00:46 busybox/Makefile.flags
drwxr-xr-x jarbo/jarbo 0 2021-01-05 15:49 busybox/docs/
···
2.将 2
个 tar
包合并 (-A)
$ tar -tvf test.tar
drwxr-xr-x jarbo/jarbo 0 2021-02-05 10:54 test/
-rw-rw-r-- jarbo/jarbo 0 2021-02-05 10:46 test/1.txt
-rw-rw-r-- jarbo/jarbo 20480 2021-02-05 10:53 test/2.txt
$ tar -Af test.tar busybox.tar
$ tar -tvf test.tar
drwxr-xr-x jarbo/jarbo 0 2021-01-05 15:49 busybox/sysklogd/
-rw-r--r-- jarbo/jarbo 1706 2020-12-30 00:46 busybox/sysklogd/syslogd_and_logger.c
-rw-r--r-- jarbo/jarbo 8323 2020-12-30 00:46 busybox/sysklogd/klogd.c
-rw-r--r-- jarbo/jarbo 133 2021-01-05 15:48 busybox/sysklogd/.lib.a.cmd
-rw-r--r-- jarbo/jarbo 18348 2020-12-30 00:46 busybox/LICENSE
-rw-r--r-- jarbo/jarbo 7708 2020-12-30 00:46 busybox/Makefile.flags
drwxr-xr-x jarbo/jarbo 0 2021-01-05 15:49 busybox/docs/
···
-A
和-r
参数区别:tar -A
需要2
个原有tar
包.tar -r
需要一个原有存档保存到另外一个原有存档的结尾处.
3.解压 bz2
压缩包
$ tar -xjf busybox-1.33.0.tar.bz2
tar (child): bzip2: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
#解压 bz2 压缩包需要依赖 bzip2
安装 bzip2
$ sudo yum -y install bzip2
解压
$ tar -xjf busybox-1.33.0.tar.bz2
#不会再报错
或
$ bzip2 -d busybox-1.33.0.tar.bz2
$ bunzip2 busybox-1.32.1.tar.bz2
#也需要安装 bzip2 才可以,这种方式会将原有的 bz2 压缩包解压为一个 tar 包,再使用 tar xf 来解压
4.解压 tar
包报错 resolve failed
的解决方法
$ tar xf db_backup_2020-09-23T06:13:27Z.tgz
tar: Cannot connect to db_backup_2020-09-23T06: resolve failed
#由于压缩文件名字里面有":",所以会被识别成一个地址
解决方法:加上参数 --force-local
来忽略冒号
$ tar xf db_backup_2020-09-23T06:13:27Z.tgz --force-local
Over~
版权协议须知!
本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
1391 0 2021-02-05
博主卡片
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。
现在时间 2024-12-28
今日天气
站点统计
- 文章总数:241篇
- 分类总数:29个
- 评论总数:12条
- 本站总访问量 353451 次
@xiaozi 最后的分享的镜像下载地址打不开 服务器没有开机吗?
@yuanyuan 为什么我的4b安装centos7.9 插上tf卡 显示不兼...
@Wong arrhenius 牛比
@MakerFace 厉害了!
@TongSir 老哥 更新下我的友链链接 https://blog.ton...