cp 带权限复制
在 Linux 里用 cp 带权限复制,核心就是加 -p 或 -a 参数。不加参数时,目标文件权限会按 umask 重新计算,比如原本 755 的脚本复制后可能变成 644,导致执行时报权限不足。
📋 常用参数
-p(保留基础属性):保留权限、属主和时间戳。适合复制单个文件或脚本,如 cp -p deploy。sh /opt/backup/。
-a(归档模式,推荐):等于 -dR --preserve=all,递归复制目录、保留权限/属主/时间戳/符号链接/扩展属性/SELinux 上下文,还不破坏硬链接关系。备份或迁移目录时用它最稳,如 cp -a /srv/app/ /backup/app/。
-r(仅递归):只递归复制目录结构,不保留权限,目标文件权限按 umask 重建。用 cp -r 复制目录时,子文件权限可能全变,需留意。
🆚 -p 和 -a 怎么选
表格
场景 推荐 原因
复制单个文件,只关心权限和时间戳 -p 更轻量,够用
复制整个目录、备份或迁移 -a 一次搞定递归+全部属性,避免遗漏
复制含符号链接的目录 -a 保留链接本身,不展开成目标文件
上线可执行文件 cp -p 或 rm && mv 避免权限丢失导致服务启动失败
⚠️ 注意事项
保留属主需要 root:普通用户执行 cp -p 或 -a 时,属主可能变成当前用户,只有 root 才能完整保留原属主。
ACL 和扩展属性:若文件系统有 ACL 或 SELinux 上下文,cp -a 能带上;但目标分区挂载需支持 ACL,否则会报 Operation not supported。
复制目录时目标已存在:cp -a /srv/app/ /backup/app/ 若 /backup/app/ 已存在,结果会是 /backup/app/app/,脚本里易踩坑。
生产环境 SELinux:复制系统目录时可能需调整 SELinux 上下文,否则提示权限不足。
- 点赞
- 收藏
- 关注作者
评论(0)