" Tape Archive " 的缩写,是一个用于创建和管理归档文件的命令行工具,可将多个文件或目录打包成单个归档文件(通常称为“tar包”),并支持结合压缩工具(如gzip、bzip2)进行压缩,是Linux系统中备份和文件传输的核心工具。
该命令不依赖特定压缩算法,主要负责归档功能,通过选项可灵活实现打包、解包、查看归档内容等操作,配合压缩工具后能高效减少存储空间和传输带宽。
tar [选项] <归档文件名> <文件/目录1> <文件/目录2> ...常用选项
-c:"create",创建新的归档文件,例如tar -c -f archive.tar file1.txt创建包含file1.txt的archive.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.txt向archive.tar追加new_file.txt。-u:"update",仅向归档文件添加比现有归档中更新的文件(仅支持未压缩的tar包),例如tar -uf archive.tar modified_file.txt若modified_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选项可能降低速度,脚本中可省略以提高效率。