Linux中用tar保留绝对路径和文件权限需同时使用-P(大写)和-p(小写):-P确保路径以/开头原样保存与还原,-p保留权限、属主、属组等元数据,二者缺一不可。

Linux 中用 tar 保留绝对路径和文件权限,关键就两个选项:-P(大写 P)和 -p(小写 p),缺一不可。
保留绝对路径:必须加 -P
默认情况下,tar 会自动去掉路径开头的 /,把 /etc/hosts 当作 etc/hosts 处理——解包时就放在当前目录下,而不是还原到系统根目录。要让 tar 原样保存并还原绝对路径,必须显式使用 -P(注意是大写):
tar -cPvf backup.tar /etc/hosts /usr/local/bin/myscript- 解包时也需带 -P:
tar -xPvf backup.tar,否则即使打包时用了 -P,解包仍可能拒绝写入系统目录(尤其非 root 用户) - 不加 -P,哪怕路径写的是
/home/user/data,也会被当作相对路径处理
保留权限、属主属组:必须加 -p
权限(rwx)、所有者(uid)、所属组(gid)、时间戳等元数据,默认不会被保留。加 -p(小写)才能完整保存:
-
tar -cpPvf backup.tar /etc/nginx/—— 同时启用权限保留 + 绝对路径 - 解包时同样需要 -p:
tar -xpPvf backup.tar,否则即使源文件是 755 或 root:root,解出的文件也可能变成 644、属于当前用户 - 若以普通用户身份解包到系统目录(如
/etc),即使加了 -p 和 -P,也因权限不足无法恢复属主,此时需sudo
常见组合与压缩场景
实际使用中,常把 -p 和 -P 和压缩选项一起用。注意顺序无关紧要,但推荐按惯例排列(操作+详细+文件名+其他):
- 打包并 gzip 压缩,保留绝对路径与权限:
tar -cpPzvf backup.tar.gz /var/log/nginx/ /etc/crontab - 解压时同样要带全:
tar -xpPzvf backup.tar.gz - 只打包不压缩(.tar)但要保权限路径:
tar -cpPvf config-backup.tar /etc/systemd/system/*.service
注意事项
这两个选项看似简单,但容易踩坑:
- -P 和 -p 是独立生效的:只加 -P 不加 -p → 路径对了,但权限全变 644、属主变成你;只加 -p 不加 -P → 权限保留了,但所有文件都解到当前目录下
- 非 root 用户打包
/etc类目录时,-p 能记录 uid/gid,但解包时若没权限写系统目录,会报错或跳过属主设置 - 部分旧版 tar 对 -P 支持较弱,建议用 GNU tar(主流发行版默认)


















