tar -cf 仅打包不压缩,生成 .tar 文件,体积不变但保留权限、链接等元数据,是 linux 归档标准;gzip 不支持目录,zip 不保留权限,故 tar 更可靠。

tar -cf 就行,不加压缩参数就是纯打包,生成 .tar 文件**。它不压缩、不减小体积,只把文件夹“合”成一个归档文件,速度快、兼容性好,适合快速归档或后续手动压缩。
为什么不用 gzip 或 zip 单独打包?
因为 gzip 只能压缩单个文件,不能直接处理目录;zip 虽然能递归打包目录,但默认不保留 Linux 权限(如可执行位、属主信息),且解压时可能改写时间戳。而 tar 原生支持目录、符号链接、权限、时间戳等元数据,是 Linux 归档的事实标准。
tar -cf 的实际用法和常见坑
核心命令形如:tar -cf archive.tar folder/。注意几个关键点:
-
-f必须紧跟文件名,且要放在所有选项的最后,否则会报错tar: You must specify one of the '-Acdtrux' options - 路径末尾加不加
/不影响打包内容,但建议加上,避免因路径歧义误打当前目录 - 如果不加
-v,命令静默执行,成功与否全靠$?判断或ls确认 - 默认不递归进入挂载点(如
/proc、/sys),但若目标目录含 bind mount,需加--one-file-system避免跨设备错误
需要保留权限和软链接时加什么参数?
日常打包配置文件、项目源码或系统备份时,权限和链接结构不能丢。这时必须加:
-
-p:保留文件权限、UID/GID、时间戳等属性。缺省时普通用户打包后解包可能丢失chmod设置 -
-h(可选):对符号链接,不是存链接本身,而是存它指向的真实文件内容(即“跟随链接”)
例如完整命令:tar -cpf etc_backup.tar /etc。不加 -p,还原后 /etc/shadow 可能变成 644 权限,直接导致系统无法登录。
打包时跳过某些子目录或临时文件
比如要打包 /var/log 但不想包含 /var/log/journal 和所有 *.gz 日志,用 --exclude:
- 路径匹配基于归档内的相对路径,所以
--exclude=journal在tar -cf logs.tar /var/log中生效,但--exclude=/var/log/journal无效 - 支持 shell glob,如
--exclude='*.log'、--exclude='cache/*' - 多个
--exclude可叠加,顺序无关;但注意通配符需引起来,防止 shell 提前展开
示例:tar -cf log_archive.tar --exclude=journal --exclude='*.gz' /var/log
tar 打包行为依赖当前工作目录和路径写法**。比如你在 /home/user 下执行 tar -cf a.tar project,归档内路径就是 project/...;但执行 tar -cf a.tar ./project,结果一样;而用绝对路径 tar -cf a.tar /home/user/project,归档内会带完整绝对路径(解包时可能覆盖根目录下同名文件)。除非明确需要,否则一律用相对路径启动打包。











