200字
tar
2025-10-10
2025-10-10

" Tape Archive " 的缩写,是一个用于创建和管理归档文件的命令行工具,可将多个文件或目录打包成单个归档文件(通常称为“tar包”),并支持结合压缩工具(如gzip、bzip2)进行压缩,是Linux系统中备份和文件传输的核心工具。

该命令不依赖特定压缩算法,主要负责归档功能,通过选项可灵活实现打包、解包、查看归档内容等操作,配合压缩工具后能高效减少存储空间和传输带宽。

 tar [选项] <归档文件名> <文件/目录1> <文件/目录2> ...

常用选项

  • -c:"create",创建新的归档文件,例如 tar -c -f archive.tar file1.txt 创建包含 file1.txtarchive.tar

  • -x:"extract",从归档文件中提取文件/目录,例如 tar -x -f archive.tar 提取 archive.tar 中的所有内容。

  • -f <归档文件名>:"file",指定归档文件的名称(必须紧跟文件名,通常作为最后一个选项),例如 tar -cf data.tar docs/ 明确指定归档文件为 data.tar

  • -t:"list",列出归档文件中的内容(不提取),例如 tar -tf archive.tar 查看 archive.tar 包含的文件和目录。

  • -v:"verbose",显示操作过程的详细信息(如文件名),例如 tar -cvf log.tar logs/ 会输出打包的每个文件路径。

  • -z:"gzip",通过 gzip 压缩/解压归档文件(生成 .tar.gz.tgz 格式),例如 tar -zcf backup.tar.gz data/ 用gzip压缩打包。

  • -j:"bzip2",通过 bzip2 压缩/解压归档文件(生成 .tar.bz2 格式),例如 tar -jcf archive.tar.bz2 docs/ 用bzip2压缩打包。

  • -J:"xz",通过 xz 压缩/解压归档文件(生成 .tar.xz 格式),例如 tar -Jcf file.tar.xz images/ 用xz压缩打包(压缩率更高,速度较慢)。

  • -C <目录>:"change directory",指定操作的目标目录(打包时切换到该目录,解包时将内容提取到该目录),例如 tar -xf archive.tar -C /tmp 将内容提取到 /tmp 目录。

  • --exclude <模式>:排除符合模式的文件/目录,例如 tar -cf backup.tar --exclude "*.log" data/ 打包 data/ 时排除所有 .log 文件。

  • --remove-files:打包后删除源文件(仅用于创建归档时),例如 tar -cf archive.tar --remove-files temp/ 打包 temp/ 后删除原文件。

  • -p:"preserve permissions",保留文件的原始权限和属性,例如 tar -xpf backup.tar 提取文件时保持原有权限(对备份系统文件重要)。

  • -h:"follow symlinks",打包符号链接指向的实际文件(而非链接本身),例如 tar -chf link.tar /usr/local/bin/app 打包符号链接 app 指向的真实程序。

  • -r:"append",向已存在的归档文件中添加新文件(仅支持未压缩的tar包),例如 tar -rf archive.tar new_file.txtarchive.tar 追加 new_file.txt

  • -u:"update",仅向归档文件添加比现有归档中更新的文件(仅支持未压缩的tar包),例如 tar -uf archive.tar modified_file.txtmodified_file.txt 比归档中版本新则更新。

参考示例

  • 示例1:创建基础tar包(不压缩) 执行 tar -cvf project.tar src/ docs/ README.md,将 src/ 目录、docs/ 目录和 README.md 文件打包到 project.tar,并显示打包的文件列表。

  • 示例2:创建gzip压缩的tar包 执行 tar -zcvf backup_20250818.tar.gz /var/log/nginx/,递归打包 /var/log/nginx/ 目录下的日志文件,用gzip压缩为 backup_20250818.tar.gz,并输出详细过程(适合日常日志备份)。

  • 示例3:创建bzip2压缩的tar包 执行 tar -jcvf data_archive.tar.bz2 /home/user/data/,用bzip2压缩打包 /home/user/data/ 目录,生成 .tar.bz2 格式文件(压缩率高于gzip,适合归档不常访问的大文件)。

  • 示例4:查看压缩归档文件内容 执行 tar -ztf backup.tar.gz,查看 backup.tar.gz 中包含的所有文件和目录结构(无需解压,快速确认归档内容)。

  • 示例5:解压tar包到指定目录 执行 tar -xzf software.tar.gz -C /opt/,将 software.tar.gz 解压到 /opt/ 目录(避免文件散落在当前目录,适合安装软件包)。

  • 示例6:解压单个文件从归档中 执行 tar -xf backup.tar docs/manual.pdf,从 backup.tar 中仅提取 docs/manual.pdf 文件(无需解压整个归档,节省时间)。

  • 示例7:打包时排除特定文件 执行 tar -zcvf website.tar.gz --exclude "*.git" --exclude "tmp/" /var/www/html/,打包网站目录时排除 .git 版本文件和 tmp/ 临时目录(避免冗余数据占用空间)。

  • 示例8:备份系统文件并保留权限 执行 sudo tar -zcpf system_backup.tar.gz /etc/ /usr/local/,用gzip压缩打包 /etc//usr/local/ 目录,并保留文件原始权限(适合系统配置备份)。

  • 示例9:在脚本中批量解压归档 脚本中执行 for tarfile in *.tar.bz2; do tar -jxf "$tarfile" -C /data/import/; done,循环解压当前目录下所有 .tar.bz2 文件到 /data/import/ 目录(适合批量数据导入)。

  • 示例10:打包符号链接指向的实际文件 执行 tar -chf app_backup.tar /usr/bin/python3,打包 /usr/bin/python3 符号链接指向的真实Python可执行文件(而非链接本身,确保归档包含实际程序)。

注意:压缩选项(-z/-j/-J)需与操作类型(-c/-x/-t)配合使用,例如创建压缩包用 -zcf,解压用 -zxf。归档文件名称通常包含压缩格式后缀(如 .tar.gz),便于识别解压方式。处理大文件时,-v 选项可能降低速度,脚本中可省略以提高效率。


评论