你遇到的问题是:用 cp 命令复制文件后,文件权限从原来的 755 变成了 750。
原因可能有以下几种:
1. umask 设置影响
umask 是 Linux 下控制新建文件/目录默认权限的机制。
当你用 cp 复制文件时,如果没有加 -p 参数,目标文件的权限会受到当前 shell 的 umask 影响。
比如你的脚本里有 umask 027,这会导致新建文件/目录权限去掉 group 的写权限和 other 的所有权限。
- 755(rwxr-xr-x)
- umask 027 会去掉 group 的 w,other 的所有权限
- 结果就是 750(rwxr-x—)
2. cp 命令参数
cp默认不会保留原文件权限。- 如果你想保留原文件的权限、属主、时间戳等信息,应该加
-p参数:
cp -p 源文件 目标文件
3. 脚本或环境自动修改
你提供的 chmod_file.sh 脚本里有对目录和文件的权限修改(比如 chmod 750 "$dir"),如果你复制后又执行了这个脚本,也会把权限改成 750。
解决方法
-
复制时保留权限
用cp -p复制文件:cp -p 源文件 目标文件 -
检查 umask 设置
查看当前 shell 的 umask:umask如果是 027,说明新建文件/目录默认权限会比 755 少一些。
-
检查脚本是否有 chmod 操作
如果有自动化脚本(比如你发的chmod_file.sh),看看里面是否有把权限改成 750 的逻辑。
总结:
你遇到的权限变化,最常见的原因是 umask 设置和 cp 没有加 -p 参数。
建议用 cp -p,并检查是否有脚本自动修改权限。
是的,cp -rfp 是可以的,参数含义如下:
-r:递归复制目录及其内容(如果是目录的话必须加)-f:强制覆盖目标文件(如果目标已存在则直接覆盖)-p:保留原文件的权限、时间戳、属主等信息
所以,如果你想递归复制目录,并且保留权限、时间戳等信息,推荐用:
cp -rfp 源路径 目标路径
如果只是复制单个文件,cp -fp 就可以了,不需要 -r。
注意:
-p参数是关键,它能保留原有的权限(比如 755),否则会受到 umask 影响。- 如果你复制的是目录,必须加
-r。
总结:
- 复制文件并保留权限:
cp -fp 源文件 目标文件 - 递归复制目录并保留权限:
cp -rfp 源目录 目标目录
2744

被折叠的 条评论
为什么被折叠?



