cp -p 保留权限(mode)、所有者与所属组(ownership)、时间戳(atime/mtime/ctime),等价于 --preserve=mode,ownership,timestamps;而 -a 是归档模式,等价于 -dr --preserve=all,自动递归并保留符号链接、扩展属性、acl 等全部元数据。

用 cp -p 可以在复制时保留文件的权限、所有者、时间戳等关键属性,避免因权限丢失导致程序无法执行或服务启动失败。
哪些属性会被 -p 保留
-p 实际上是 --preserve=mode,ownership,timestamps 的简写,具体包括:
-
权限(mode):如
rwxr-xr--这类读写执行位 - 所有者与所属组(ownership):uid 和 gid 信息
- 时间戳:访问时间(atime)、修改时间(mtime)、状态变更时间(ctime)
-p 和 -a 的区别在哪
两者都保留属性,但适用场景不同:
-
-p适合单个文件或简单目录复制,不自动递归,复制目录需额外加-r -
-a是归档模式,等价于-dR --preserve=all,默认递归且保留符号链接、扩展属性、ACL 等全部元数据,更适合完整备份 - 普通文件复制用
-p足够;整目录迁移或备份优先选-a
实际使用注意事项
几个容易出错的点要留意:
- 复制目录时只加
-p不加-r会报错:omitting directory - 目标路径已存在同名文件时,
-p不影响覆盖行为,如需确认覆盖可叠加-i - 若当前用户无权修改目标文件的所有者(比如非 root),
-p中的 ownership 部分会静默失败,但权限和时间戳仍会保留 - 想验证是否保留成功,可用
ls -l和stat对比源与目标文件
常用组合示例
直接可运行的典型命令:
- 复制单个配置文件并保留权限:
cp -p nginx.conf /etc/nginx/ - 复制整个脚本目录并保留全部属性:
cp -ar scripts/ /backup/scripts/ - 安全覆盖前确认 + 保留属性:
cp -pi config.json /opt/app/











