tar 是 Linux 中常用的一种存档格式,它可以将多个文件或目录压缩成单个文件进行分发,还可以创建和解压 tar 存档。本文将讲解如何使用 tar 命令在 Linux 中创建、解压和管理 tar 存档,以及一些常见的 tar 命令选项。
1. tar 命令基础语法
tar 命令基础语法:
tar [选项] [文件名]
选项是可选的,可以用来指定 tar 命令的操作和设置。如果没有选项,则 tar 命令会以默认方式执行。文件名是要处理的文件或目录的名称。
下面是一些最常用的 tar 命令选项:
- -c:创建新的存档文件(Create)。
- -x:从存档文件中提取文件(eXtract)。
- -t:列出存档文件中的内容(lisT)。
- -v:显示 tar 命令执行的详细信息(Verbose)。
- -f:指定存档文件的名称(File)。
- -z:在创建或提取存档文件时使用 gzip 压缩算法来进行压缩或解压缩(gzip)。
- -j:在创建或提取存档文件时使用 bzip2 压缩算法来进行压缩或解压缩(bzip2)。
- -C:指定 tar 命令的工作目录(Change directory)。
2. tar 命令的常用操作
2.1 创建 tar 存档文件
使用 tar 命令创建存档文件,格式如下:
tar -cvf archive_name.tar file1 file2 file3 ...
例如,要将/etc
目录中的所有文件和子目录打包成一个名为etc_backup.tar
的 tar 存档文件,可以执行以下命令:
tar -cvf etc_backup.tar /etc
上述命令会创建一个名为etc_backup.tar
的 tar 存档文件,并将/etc
目录中的所有文件和子目录添加到该文件中。如果您想查看 tar 命令执行的详细信息,请将 -v
选项添加到命令行中。
tar -cvvf etc_backup.tar /etc
在创建 tar 存档文件时,还可以同时压缩存档文件。例如,要使用 gzip 压缩新创建的存档文件,可以执行以下命令:
tar -czvf etc_backup.tar.gz /etc
上述命令会创建一个名为 etc_backup.tar.gz
的 gzip 压缩的 tar 存档文件,并将 /etc
目录中的所有文件和子目录添加到该文件中。
类似地,如果要使用 bzip2 压缩算法来创建 tar 存档文件,则可以使用以下命令:
tar -cjvf etc_backup.tar.bz2 /etc
上述命令将创建一个名为etc_backup.tar.bz2
的 bzip2 压缩的 tar 存档文件,并将/etc
目录中的所有文件和子目录添加到该文件中。
有时,还需要将 tar 存档文件压缩成 xz 格式。在 Linux 系统中,通常使用 xz-utils 软件包提供相关功能。要使用 xz 压缩算法创建 tar 存档文件,可以使用以下命令:
tar -cJvf etc_backup.tar.xz /etc
注意,xz 压缩算法相对于 gzip 和 bzip2 压缩算法具有更高的压缩比,但是在压缩和解压缩时需要消耗更多的 CPU 和内存资源。
2.2 解压 tar 存档文件
使用 tar 命令解压存档文件,格式如下:
tar -xvf archive_name.tar
例如,要从之前创建的etc_backup.tar
存档文件中提取文件,可以执行以下命令:
tar -xvf etc_backup.tar
上述命令会将存档文件解压缩到当前目录。如果要将存档文件解压缩到不同目录,则可以使用 -C
选项指定目标目录:
tar -xvf etc_backup.tar -C /tmp
上述命令会将存档文件解压缩到 /tmp
目录下。
如果存档文件是经过 gzip、bzip2 或 xz 压缩的,则必须指定相应的压缩算法来解压存档文件,例如:
tar -xzvf etc_backup.tar.gz
tar -xjvf etc_backup.tar.bz2
tar -xJvf etc_backup.tar.xz
2.3 列出存档文件的内容
要查看 tar 存档文件的内容列表,可以使用以下命令:
tar -tvf archive_name.tar
例如,要查看之前创建的 etc_backup.tar
文件中的内容列表,可以执行以下命令:
tar -tvf etc_backup.tar
上述命令将显示存档文件中包含的所有文件和目录的列表。
类似于解压缩 tar 存档文件时,如果存档文件是经过 gzip、bzip2 或 xz 压缩的,则必须指定相应的压缩算法来列出存档文件的内容列表:
tar -tzvf etc_backup.tar.gz
tar -tjvf etc_backup.tar.bz2
tar -tJvf etc_backup.tar.xz
3. tar 命令的高级用法
3.1 使用通配符来压缩多个文件
有时,您可能需要将符合某些条件的多个文件压缩成一个 tar 存档文件。在这种情况下,可以使用通配符来指定要压缩的文件,例如:
tar -cvf my_files.tar /path/to/files/*
上述命令将压缩 /path/to/files
目录下的所有文件和子目录,并将存档文件保存为 my_files.tar
。
3.2 排除指定文件或目录
有时,您可能需要在创建 tar 存档文件时排除某些文件或目录。例如,您可能不想在存档文件中包含指定类型的文件、某个特定目录或某个特定文件。在这种情况下,可以使用 --exclude
选项来排除文件或目录。
例如,要在创建存档文件时排除所有以 .mp3
结尾的文件,可以执行以下命令:
tar -czvf backup.tar.gz /path/to/files --exclude '*.mp3'
上述命令将创建一个名为 backup.tar.gz
的压缩 tar 存档文件,并排除所有以 .mp3
结尾的文件。您还可以使用多个 --exclude
选项来指定多个文件或目录以排除它们。
3.3 将存档文件直接发送到远程服务器
使用 tar 命令创建存档文件后,可以将其发送到远程计算机以备份数据。在 Linux 系统中,可以使用 ssh
命令将存档文件发送到远程计算机。
例如,假设您已经创建了名为 backup.tar.gz
的存档文件,并且要将其发送到具有 IP 地址 192.168.1.100
的远程计算机上的 /backup
目录中,可以执行以下命令:
ssh user@192.168.1.100 'mkdir -p /backup' && \
cat backup.tar.gz | ssh user@192.168.1.100 'cd /backup && tar -xz'
上述命令将创建一个名为 backup.tar.gz
的 tar 存档文件,并使用管道符将它发送到远程计算机。在远程计算机上,先在 /backup
目录中创建一个新目录(如果不存在),然后运行 tar
命令解压缩存档文件。
3.4 将存档文件分割成多个部分
有时,存档文件可能很大,难以在单个文件中存储或传输。在这种情况下,可以使用 --multi-volume
选项将存档文件分割成多个部分。
例如,要将一个名为 archive.tar.gz
的存档文件分割成每个部分为 10MB 大小的多个文件,可以执行以下命令:
tar -czvf - /path/to/archive | split -b 10m -d - archive.tar.gz.
上述命令将使用管道符将压缩的存档文件发送到 split
命令中,并将其分割成多个 10MB 大小的文件,每个部分的文件名以 archive.tar.gz.
开头,并以数字结尾(例如,archive.tar.gz.00,archive.tar.gz.01 等)。
3.5 将多个存档文件合并为单个文件
有时,可能需要将多个已经存在的存档文件合并成一个单独的存档文件,以便进行更方便的管理和传输。在这种情况下,可以使用 --concatenate
选项将多个存档文件合并为单个文件。
例如,要将两个名为archive1.tar.gz
和archive2.tar.gz
的存档文件合并为一个名为combined_archive.tar.gz
的存档文件,可以执行以下命令:
cat archive1.tar.gz archive2.tar.gz > combined_archive.tar.gz
上述命令将使用cat
命令将两个存档文件的内容串联在一起,并将结果输出到combined_archive.tar.gz
文件中。
3.6 创建增量备份
在进行数据备份时,通常会希望使用最少的时间和资源来创建备份文件。在这种情况下,可以使用 --incremental
选项创建增量备份,该选项只备份与上次备份之间的更改。
例如,要创建一个增量备份,可以先在指定目录(例如/backup
)中创建一个新的快照:
tar -czvf /backup/snapshot.tar.gz /path/to/files
然后,在下一次备份时,可以使用--listed-incremental
选项指定增量备份文件(例如/backup/incremental_backup.snar
),以便 tar 命令仅备份与上次备份之间的更改。例如:
tar -czvf backup.tar.gz --listed-incremental=/backup/incremental_backup.snar /path/to/files
上述命令将使用 shell 提供的通配符来压缩/path/to/files
目录中的所有文件和子目录,并使用--listed-incremental
选项指定增量备份文件的名称。如果您需要在多个备份之间存储差异,则可以使用--incremental
选项来创建增量备份。