GNU/Linux — 备份与还原管理

概述

备份:指的是将文件系统或者数据库中的数据进行复制,一旦发生错误或者灾难时,能及时方便地恢复系统的有效数据和正常运作。

备份方式 有:

  • 全量备份(也称完整备份):指把硬盘或数据库内的所有文件、文件夹或数据作一次性的复制。
    • 优点:最好,能更快的恢复数据。
    • 缺点:占用较大的硬盘空间。
  • 增量备份:指对上一次 全量备份增量备份 后更新的数据进行备份。其过程是这样的——比如第一天进行一次全部备份;第二天进行一次新增数据的备份,相对于全部备份来说;第三天在第二天的基础上再进行一次新增数据的备份,相对于第二天来说。以此类推。
    • 优点:占用空间较少。
    • 缺点:恢复数据麻烦,有多少增量备份就必须恢复多少次。
  • 差异备份:指 全量备份 后变更文件的备份。比如第一天全部备份;第二天备份新增数据;第三天备份第二天与第三天的新增数据;第四天备份第二天到第四天所有的新增数据。以此类推。
    • 优点:比全量备份占用空间少一些,恢复起来相比增量备份好些。
    • 缺点:时间越长,文件占用量越大。
  • 选择性备份(部分备份):备份系统的一部分
  • 冷备份:指系统处于停机或维护状态下的备份。备份的数据与系统中此时段的数据完全一致。
  • 热备份: 指系统处于正常运转状态下的备份。由于系统中的数据随时在更新,备份的数据相对于系统的真实数据有一定的滞后。
  • 异地备份:指在另外一个位置备份数据,避免因为火灾、自然灾害、盗窃等造成数据丢失与服务中断。例如银行主要机房或资料中心位于甲地,而在乙地建有同样的资料中心,平时会通过网络传输同步资料。当甲地因为各种原因无法运行时,乙地可接手运行。

备份需要系统管理员严格遵守规定。系统管理员在执行备份操作之前需要考虑以下问题:

  • 合适的媒介是什么?
  • 应该备份什么?
  • 有多少份?
  • 备份需要多长时间?
  • 方法?
  • 多久一次?
  • 自动或手动?
  • 存储在哪里?
  • 要保存多久?
  • 是否有成本问题需要考虑?

除了这些问题外,系统管理员还应该根据实际情况考虑性能、数据重要性、带宽消耗和维护复杂性等因素。

恢复方法

根据可用的实用程序,可以进行几种类型的恢复。

在某些关系数据库管理系统中,"recover"(有时在文档中使用 "recovery" )和 "restore" 的相应操作是不同的,这要求您查阅官方文档以获取更多信息。本基础文档不会详细介绍 RDBMS 的这一部分。

  • 完全恢复:数据恢复基于全量备份或 "全量备份+增量备份" 或 "全量备份+差异备份" 。
  • 选择性恢复:数据恢复基于选择性备份(部分备份)。

不建议在执行恢复操作之前直接删除当前活动操作系统中的目录或文件(除非您知道删除后会发生什么)。如果你不知道会发生什么,你可以在当前操作系统上执行 "快照" 操作。

提示
出于安全原因,建议您在执行恢复操作之前将还原的目录或文件存储在 /tmp/ 目录中,以避免旧文件(旧目录)覆盖新文件(新目录)的情况。

工具与相关技术

备份工具常见有 tarcpiodddump 等。

Replication:一种将一组数据从一个数据源复制到另外一个或多个数据源的备份技术,主要分为 同步复制异步复制。对于系统管理员新手来说,这属于备份的高级部分,因此本基础文档不会详细介绍这些内容。

命名惯例

使用命名惯例可以快速定位备份文件的内容,从而避免危险的恢复。

  • 目录名称;
  • 所使用的实用工具;
  • 所使用的选项;
  • 日期。
提示
备份的名称必须是一目了然的。
说明
在 GNU/Linux 世界中,除了 GUI 环境中的少数特例(如 .jpg、.mp4、.gif),大多数文件都没有扩展名的概念。人为添加后缀名的原因是为了方便人类用户识别。例如,如果系统管理员看到 .tar.gz.tgz 文件扩展名,那么他就知道如何处理该文件。

备份文件属性

单个备份文件可以包含以下属性:

  • 文件名(包括手动添加的后缀名);
  • 备份文件本身的 atime、ctime、mtime、btime (crtime);
  • 备份文件本身的文件大小;
  • 备份文件中的文件或目录的属性或特征将被部分保留。例如保留文件或目录的 mtime,但不保留 inode 号。

存储方法

有两种不同的存储方法:

  • 内部:将备份文件存储在当前工作磁盘上。
  • 外部:将备份文件存储在外部设备上。 外部设备可以是 USB 驱动器、CD、磁盘、服务器或 NAS 等。

dumprestore 概述

dump 会检查文件系统中的文件,确定哪些文件需要备份,并将这些文件复制到指定的磁盘、磁带或其他存储介质。restore 命令执行与 dump 相反的功能。

此实用程序适用于以下文件系统:

  • ext2
  • ext3
  • ext4
提示
针对 xfs 文件使用, 请使用 xfsdump

这是 该项目的首页。

在使用此实用程序之前,请执行以下命令进行安装:

Shell > dnf -y install dump

安装后,将释放出两个常用的命令工具:

  • dump
  • restore

dump 命令

此命令有两个主要用途:

  • 执行备份(转储)操作 – dump [option(s)] -f <File-Name> <File1> ...
  • 查看备份(转储)信息 – dump [-W | -w]

常见选项包括:

  • -<level> – 备份级别。在实际使用中,请将 "level" 替换为 0-9 之间的任何数字。数字 0 表示全量备份,而其他数字表示增量备份。
  • -f <File-Name> – 指定备份后的文件名和路径。
  • -u – 备份成功后,将备份时间记录在 /etc/dumpdates 文件中。当备份的对象是一个独立的分区时,可以使用 -u 选项。但是,当备份对象是非分区目录时,不能使用 -u 选项。
  • -v – 显示备份过程中的详细处理信息。
  • -W – 查看转储信息的选项。
  • -z[LEVEL] – 使用 zlib 库调整压缩级别,默认压缩级别为 2 。换句话说,您可以将备份文件压缩为 .gz 格式。压缩级别的可调范围为 1-9。
  • -j[LEVEL] – 使用 bzlib 库调整压缩级别,默认压缩级别为 2 。换句话说,您可以将备份文件压缩为 .bz2 格式。压缩级别的可调范围为 1-9。

dump 使用示例

  1. 对根分区执行全量备份:

    Shell > dump -0u -j3 -f /tmp/root-20241208.bak.bz2 /
    DUMP: Date of this level 0 dump: Sun Dec  8 19:04:39 2024
    DUMP: Dumping /dev/nvme0n1p2 (/) to /tmp/root-20241208.bak.bz2
    DUMP: Label: none
    DUMP: Writing 10 Kilobyte records
    DUMP: Compressing output at transformation level 3 (bzlib)
    DUMP: mapping (Pass I) [regular files]
    DUMP: mapping (Pass II) [directories]
    DUMP: estimated 14693111 blocks.
    DUMP: Volume 1 started with block 1 at: Sun Dec  8 19:04:41 2024
    DUMP: dumping (Pass III) [directories]
    DUMP: dumping (Pass IV) [regular files]
    DUMP: 20.69% done at 10133 kB/s, finished in 0:19
    DUMP: 43.74% done at 10712 kB/s, finished in 0:12
    DUMP: 70.91% done at 11575 kB/s, finished in 0:06
    DUMP: 93.23% done at 11415 kB/s, finished in 0:01
    DUMP: Closing /tmp/root-20241208.bak.bz2
    DUMP: Volume 1 completed at: Sun Dec  8 19:26:08 2024
    DUMP: Volume 1 took 0:21:27
    DUMP: Volume 1 transfer rate: 5133 kB/s
    DUMP: Volume 1 14722930kB uncompressed, 6607183kB compressed, 2.229:1
    DUMP: 14722930 blocks (14377.86MB) on 1 volume(s)
    DUMP: finished in 1287 seconds, throughput 11439 kBytes/sec
    DUMP: Date of this level 0 dump: Sun Dec  8 19:04:39 2024
    DUMP: Date this dump completed:  Sun Dec  8 19:26:08 2024
    DUMP: Average transfer rate: 5133 kB/s
    DUMP: Wrote 14722930kB uncompressed, 6607183kB compressed, 2.229:1
    DUMP: DUMP IS DONE
    
    Shell > ls -lh /tmp/root-20241208.bak.bz2
    -rw-r--r-- 1 root root 6.4G Dec  8 19:26 /tmp/root-20241208.bak.bz2
  2. 成功执行转储后,检查相关信息:

    Shell > cat /etc/dumpdates
    /dev/nvme0n1p2 0 Sun Dec  8 19:04:39 2024 +0800
    
    Shell > dump -W
    Last dump(s) done (Dump '>' file systems):
    /dev/nvme0n1p2        (     /) Last dump: Level 0, Date Sun Dec  8 19:04:39 2024
  3. 在全量备份的基础上实现增量备份:

    Shell > echo "jack" >> /tmp/tmpfile.txt
    
    Shell > dump -1u -j4 -f /tmp/root-20241208-LV1.bak.bz2 /
    DUMP: Date of this level 1 dump: Sun Dec  8 19:38:51 2024
    DUMP: Date of last level 0 dump: Sun Dec  8 19:04:39 2024
    DUMP: Dumping /dev/nvme0n1p2 (/) to /tmp/root-20241208-LV1.bak.bz2
    DUMP: Label: none
    DUMP: Writing 10 Kilobyte records
    DUMP: Compressing output at transformation level 4 (bzlib)
    DUMP: mapping (Pass I) [regular files]
    DUMP: mapping (Pass II) [directories]
    DUMP: estimated 6620898 blocks.
    DUMP: Volume 1 started with block 1 at: Sun Dec  8 19:38:58 2024
    DUMP: dumping (Pass III) [directories]
    DUMP: dumping (Pass IV) [regular files]
    DUMP: 38.13% done at 8415 kB/s, finished in 0:08
    DUMP: 75.30% done at 8309 kB/s, finished in 0:03
    DUMP: Closing /tmp/root-20241208-LV1.bak.bz2
    DUMP: Volume 1 completed at: Sun Dec  8 19:52:03 2024
    DUMP: Volume 1 took 0:13:05
    DUMP: Volume 1 transfer rate: 8408 kB/s
    DUMP: Volume 1 6620910kB uncompressed, 6600592kB compressed, 1.004:1
    DUMP: 6620910 blocks (6465.73MB) on 1 volume(s)
    DUMP: finished in 785 seconds, throughput 8434 kBytes/sec
    DUMP: Date of this level 1 dump: Sun Dec  8 19:38:51 2024
    DUMP: Date this dump completed:  Sun Dec  8 19:52:03 2024
    DUMP: Average transfer rate: 8408 kB/s
    DUMP: Wrote 6620910kB uncompressed, 6600592kB compressed, 1.004:1
    DUMP: DUMP IS DONE
    
    Shell > cat /etc/dumpdates
    /dev/nvme0n1p2 0 Sun Dec  8 19:04:39 2024 +0800
    /dev/nvme0n1p2 1 Sun Dec  8 19:38:51 2024 +0800
    
    Shell > dump -W
    Last dump(s) done (Dump '>' file systems):
    /dev/nvme0n1p2        (     /) Last dump: Level 1, Date Sun Dec  8 19:38:51 2024
  4. 对于非分区目录,只能使用全量备份(-0),不能使用 -u 选项:

    Shell > dump -0uj -f /tmp/etc-full-20241208.bak.bz2 /etc/
    DUMP: You can't update the dumpdates file when dumping a subdirectory
    DUMP: The ENTIRE dump is aborted.
    
    Shell > dump -0j -f /tmp/etc-full-20241208.bak.bz2 /etc/
    DUMP: Date of this level 0 dump: Sun Dec  8 20:00:38 2024
    DUMP: Dumping /dev/nvme0n1p2 (/ (dir etc)) to /tmp/etc-full-20241208.bak.bz2
    DUMP: Label: none
    DUMP: Writing 10 Kilobyte records
    DUMP: Compressing output at transformation level 2 (bzlib)
    DUMP: mapping (Pass I) [regular files]
    DUMP: mapping (Pass II) [directories]
    DUMP: estimated 28204 blocks.
    DUMP: Volume 1 started with block 1 at: Sun Dec  8 20:00:38 2024
    DUMP: dumping (Pass III) [directories]
    DUMP: dumping (Pass IV) [regular files]
    DUMP: Closing /tmp/etc-full-20241208.bak.bz2
    DUMP: Volume 1 completed at: Sun Dec  8 20:00:40 2024
    DUMP: Volume 1 took 0:00:02
    DUMP: Volume 1 transfer rate: 3751 kB/s
    DUMP: Volume 1 29090kB uncompressed, 7503kB compressed, 3.878:1
    DUMP: 29090 blocks (28.41MB) on 1 volume(s)
    DUMP: finished in 2 seconds, throughput 14545 kBytes/sec
    DUMP: Date of this level 0 dump: Sun Dec  8 20:00:38 2024
    DUMP: Date this dump completed:  Sun Dec  8 20:00:40 2024
    DUMP: Average transfer rate: 3751 kB/s
    DUMP: Wrote 29090kB uncompressed, 7503kB compressed, 3.878:1
    DUMP: DUMP IS DONE

    对 /etc/ 目录执行增量备份将导致错误:

    Shell > dump -1j -f /tmp/etc-incr-20241208.bak.bz2 /etc/
    DUMP: Only level 0 dumps are allowed on a subdirectory
    DUMP: The ENTIRE dump is aborted.

restore 命令

该命令的用法为 – restore <mode(flag)> [option(s)] -f <Dump-File>

mode (flag) 可以是以下的其中一个:

  • -C – 比较模式。Restore 读取备份并将其内容与磁盘上存在的文件进行比较,它主要用于在分区上执行备份后进行比较。在这种模式下,只会比较基于原始数据的更改。如果磁盘上有新数据,则无法检测和比较。
  • -i – 交互模式。此模式允许从转储中交互式还原文件。
  • -t – 列表模式。列出备份文件中的数据。
  • -r – 还原模式。如果是 "完全备份 + 增量备份" 的方式,则需要按照时间顺序依次还原。
  • -x – 提取模式。从备份文件中提取部分或全部文件。

restore 使用示例

  1. 从 /tmp/etc-full-20241208.bak.bz2 还原数据:

    Shell > mkdir /tmp/data/
    
    Shell > restore -t -f /tmp/etc-full-20241208.bak.bz2
    
    Shell > cd /tmp/data/ ; restore -r -f /tmp/etc-full-20241208.bak.bz2
    
    Shell > ls -l /tmp/data/
    total 4992
    drwxr-xr-x. 90 root root    4096 Dec  8 17:13 etc
    -rw-------   1 root root 5107632 Dec  8 20:39 restoresymtable

    如您所见,成功还原后会出现一个名为 restoresymtable 的文件。此文件是执行增量备份系统还原操作所依赖的重要文件。

  2. 在交互模式下处理备份文件:

    Shell > restore -i -f /tmp/etc-full-20241208.bak.bz2
    Dump tape is compressed.
    
    restore > ?

    在此模式下,您可以键入 "?" 键查看可用的交互式命令。

tar 概述

tar (tape archive) 是一种用于处理 GNU/Linux 和其他 UNIX 操作系统上的归档文件的工具。

将文件方便地存储在磁带上是 tar 的最初用途,"tar" 这个名字就是由此而来的。尽管该实用程序名为 tar,但它可以将归档输出定向到可用设备、文件或其他程序(使用管道),并可以访问远程设备或文件(作为存档)。

目前在现代 GNU/Linux 上使用的 tar 最初来自 GNU Project。您可以在 GNU 网站 上浏览和下载所有版本的 tar

请注意!不同发行版中的 tar 可能有不同的默认选项,需要使用者关注

# RockyLinux 8 和 Fedora 41
Shell > tar --show-defaults
--format=gnu -f- -b20 --quoting-style=escape --rmt-command=/etc/rmt --rsh-command=/usr/bin/ssh

使用 tar

当您使用 tar 时,请注意它有两种保存模式:

  • 相对模式(默认): 从文件中删除前导符 "/"。即使您添加了具有绝对路径的文件,在这种模式下,tar 也会删除前导符 "/"。
  • 绝对模式: 保留前导符 "/" 并将其作为文件名的一部分。要启用此保存模式,您需要使用 -P 选项。在此模式下,您必须将所有文件用绝对路径进行表示。出于安全性考虑,除非您有特殊的场景需要,否则在大多数情况下不应使用此保存模式。

当你使用 tar 时,你会遇到如 .tar.gz.tar.xz.tar.bz2 这样的后缀名,它们表示首先创建一个归档(将相关文件和目录归类为单个文件),然后用相关的压缩类型或压缩算法压缩文件。

压缩类型或压缩算法可以是 gzipbzip2xzzstd 等。

tar 允许从归档文件中提取单个文件或目录,也可以查看其内容或验证其完整性。

创建归档并使用压缩的用法是:

  • tar [option] [PATH] [DIR1] ... [FILE1] .... 例如 tar -czvf /tmp/Fullbackup-20241201.tar.gz /etc/ /var/log/

从归档中提取文件的用法是:

  • tar [option] [PATH] -C [dir]. 例如 tar -xzvf /tmp/Fullbackup-20241201.tar.gz -C /tmp/D1
技巧
当您从归档文件中提取文件时,tar 将根据手动添加的后缀名自动选择压缩类型。例如,对于 .tar.gz 文件,您可以直接使用 tar -xvf 而无需使用 tar-xvzf
要创建归档压缩文件,您 必须 选择压缩类型。
说明
在 GNU/Linux 世界中,除了 GUI 环境中的少数特例(如 .jpg、.mp4、.gif),大多数文件都没有扩展名的概念。人为添加后缀名的原因是为了方便人类用户识别。例如,如果系统管理员看到 .tar.gz.tgz 文件扩展名,那么他就知道如何处理该文件。

操作参数或类型

类型 说明
-A 将当前归档中的所有文件追加到另外一个归档的末尾。仅适用于 .tar 类型的归档非压缩文件
-c 创建归档。非常常用
-d 比较归档文件和相应的未归档文件之间的差异
-r 将文件或目录追加到归档的末尾。仅适用于 .tar 类型的归档非压缩文件
-t 列出归档的内容
-u 只将较新的文件追加到归档中。仅适用于 .tar 类型的归档非压缩文件
-x 从归档中提取。非常常用
--delete .tar 归档文件中删除文件或目录。仅适用于 .tar 类型的归档非压缩文件
提醒
在操作类型方面,为了保留用户的使用习惯,作者建议保留选项的前缀 “-“。当然,这不是必需的。这里的操作参数表示使用 tar 的主要功能是什么,换句话说,您必须选择上述类型中的其中一个。

常用辅助选项

选项 说明
-z 使用 gzip 作为压缩类型。创建归档和从归档中提取都适用
-v 显示处理细节
-f 指定用于归档的文件名(包括文件后缀名)
-j 使用 bzip2 作为压缩类型。创建归档和从归档中提取都适用
-J 使用 xz 作为压缩类型。创建归档和从归档中提取都适用
-C 从归档中提取文件后的保存位置
-P 使用绝对模式保存

其他未提及的辅助选项请参阅 man 1 tar

版本差异
在一些旧版本的 tar 中,option(s) 也被称为 key(s),这意味着使用带有 “-” 开头的选项可能会导致 tar 无法按预期工作。此时,您需要删除 “-” 前缀以使其正常工作。

关于选项样式

tar 提供了三种样式的选项:

  1. 传统样式的用法为:

    • tar {A|c|d|r|t|u|x}[GnSkUWOmpsMBiajJzZhPlRvwo] [ARG...].
  2. 简短选项样式的用法为:

    • tar -A [OPTIONS] ARCHIVE ARCHIVE
    • tar -c [-f ARCHIVE] [OPTIONS] [FILE...]
    • tar -d [-f ARCHIVE] [OPTIONS] [FILE...]
    • tar -t [-f ARCHIVE] [OPTIONS] [MEMBER...]
    • tar -r [-f ARCHIVE] [OPTIONS] [FILE...]
    • tar -u [-f ARCHIVE] [OPTIONS] [FILE...]
    • tar -x [-f ARCHIVE] [OPTIONS] [MEMBER...]
  3. 长选项样式的用法为:

    • tar {--catenate|--concatenate} [OPTIONS] ARCHIVE ARCHIVE
    • tar --create [--file ARCHIVE] [OPTIONS] [FILE...]
    • tar {--diff|--compare} [--file ARCHIVE] [OPTIONS] [FILE...]
    • tar --delete [--file ARCHIVE] [OPTIONS] [MEMBER...]
    • tar --append [-f ARCHIVE] [OPTIONS] [FILE...]
    • tar --list [-f ARCHIVE] [OPTIONS] [MEMBER...]
    • tar --test-label [--file ARCHIVE] [OPTIONS] [LABEL...]
    • tar --update [--file ARCHIVE] [OPTIONS] [FILE...]
    • tar --update [-f ARCHIVE] [OPTIONS] [FILE...]
    • tar {--extract|--get} [-f ARCHIVE] [OPTIONS] [MEMBER...]

一般来说,第二种方法更常用,符合大多数 GNU/Linux 用户的习惯。

压缩效率和使用频率

tar 本身没有压缩功能,因此它需要与其他压缩工具结合使用。压缩和解压缩会影响资源消耗。

以下是一组文本文件的压缩效率从最低到最高的排名:

  • compress (.tar.Z) – 不太受欢迎
  • gzip (.tar.gz.tgz) – 受欢迎
  • bzip2 (.tar.bz2.tb2 or .tbz) – 受欢迎
  • lzip (.tar.lz) – 不太受欢迎
  • xz (.tar.xz) – 受欢迎

tar 命名约定

以下是 tar 归档的命名约定示例:

主功能与辅助选项 文件 后缀名 说明
-cvf home home.tar 相对模式下的 /home,未使用压缩
-cvfP /etc etc.A.tar 绝对模式下的 /etc, 未使用压缩
-cvfz usr usr.tar.gz 相对模式下的 /usr,使用 gzip 压缩
-cvfj usr usr.tar.bz2 相对模式下的 /usr,使用 bzip2 压缩
-cvfPz /home home.A.tar.gz 绝对模式下的 /home,使用 gzip 压缩
-cvfPj /home home.A.tar.bz2 绝对模式下的 /home,使用 bzip2 压缩

您还可以将日期添加到文件名中。

使用示例

-c 类型

  1. 以相对模式归档并压缩 /etc/,后缀名为 .tar.gz

    Shell > tar -czvf /tmp/etc-20241207.tar.gz /etc/

    由于默认情况下 tar 在相对模式下工作,因此命令输出的第一行将显示以下内容:

    tar: Removing leading '/' from member names
  2. 归档 /var/log/ 并选择 xz 类型进行压缩:

    Shell > tar -cJvf /tmp/log-20241207.tar.xz /var/log/
    
    Shell > du -sh /var/log/ ; ls -lh /tmp/log-20241207.tar.xz
    18M     /var/log/
    -rw-r--r-- 1 root root 744K Dec  7 14:40 /tmp/log-20241207.tar.xz
  3. 估计文件大小而不生成归档:

    Shell > tar -cJf - /etc | wc -c
    tar: Removing leading `/' from member names
    3721884

    wc -c 命令的输出单位是字节。

  4. 切割大型 .tar.gz 文件:

    Shell > cd /tmp/ ; tar -czf - /etc/  | split -d -b 2M - etc-backup20241207.tar.gz.
    
    Shell > ls -lh /tmp/
    -rw-r--r-- 1 root root 2.0M Dec  7 20:46 etc-backup20241207.tar.gz.00
    -rw-r--r-- 1 root root 2.0M Dec  7 20:46 etc-backup20241207.tar.gz.01
    -rw-r--r-- 1 root root 2.0M Dec  7 20:46 etc-backup20241207.tar.gz.02
    -rw-r--r-- 1 root root  70K Dec  7 20:46 etc-backup20241207.tar.gz.03

    第一个 "-" 表示 tar 的输入参数,而第二个 "-" 告诉 tar 将输出重定向到 stdout

    要提取这些切割的小文件,您可以使用以下操作:

    Shell > cd /tmp/ ; cat etc-backup20241207.tar.gz.* >> /tmp/etc-backup-20241207.tar.gz
    
    Shell > cd /tmp/ ; tar -xvf etc-backup-20241207.tar.gz -C /tmp/dir1/

-x 类型

  1. 下载 Redis 源代码并将其提取到 /usr/local/src/ 目录:

    Shell > wget -c https://github.com/redis/redis/archive/refs/tags/7.4.1.tar.gz
    
    Shell > tar -xvf 7.4.1.tar.gz -C /usr/local/src/
  2. 从归档压缩文件中仅提取一个文件

    Shell > tar -xvf /tmp/etc-20241207.tar.gz etc/chrony.conf

-A-r 类型

  1. 将一个.tar 文件追加到另一个 .tar 文件中:

    Shell > tar -cvf /tmp/etc.tar /etc/
    
    Shell > tar -cvf /tmp/log.tar /var/log/
    
    Shell > tar -Avf /tmp/etc.tar /tmp/log.tar

    这意味着将 log.tar 中的文件(成员)追加到 etc.tar 中。

  2. 将文件或目录追加到 .tar 文件中:

    Shell > tar -rvf /tmp/log.tar /etc/chrony.conf
    tar: Removing leading `/' from member names
    /etc/chrony.conf
    tar: Removing leading `/' from hard link targets
    
    Shell > tar -rvf /tmp/log.tar /tmp/dir1
    注意
    无论使用 -A 还是 -r选项,都要注意相关归档文件的保存方式。此外,-A-r 不适用于归档压缩文件。

-t 类型

  1. 查看归档内容:

    Shell > tar -tvf /tmp/log.tar
    
    Shell > tar -tvf /tmp/etc-20241207.tar.gz | less

-d 类型

  1. 比较文件差异:

    Shell > cd / ; tar -dvf /tmp/etc.tar etc/chrony.conf
    etc/chrony.conf
    
    Shell > cd / ; tar -dvf /tmp/etc-20241207.tar.gz etc/

    对于使用相对模式的保存方式,当使用 -d 类型时,请将文件路径切换为 "/"。

-u 类型

  1. 如果同一文件有多个版本,可以使用 -u 类型:

    Shell > touch /tmp/tmpfile1
    
    Shell > tar -rvf /tmp/log.tar /tmp/tmpfile1
    
    Shell > echo "File Name" >> /tmp/tmpfile1
    
    Shell > tar -uvf /tmp/log.tar /tmp/tmpfile1
    
    Shell > tar -tvf /tmp/log.tar
    ...
    -rw-r--r-- root/root         0 2024-12-07 18:53 tmp/tmpfile1
    -rw-r--r-- root/root        10 2024-12-07 18:54 tmp/tmpfile1

--delete 类型

  1. 您还可以使用 --delete 删除 .tar 文件中的文件或目录:

    Shell > tar --delete -vf /tmp/log.tar tmp/tmpfile1
    
    Shell > tar --delete -vf /tmp/etc.tar etc/motd.d/

    删除时,将从归档中删除所有同名文件。

通用术语

一些网站常会提到两个术语:

  • tarfile – 指未压缩的归档文件,如 .tar 文件
  • tarball – 指压缩的归档文件, 如 .tar.gz.tar.xz
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇