最好是所有的chmod都使用--preserve-root参数。 特别是在递归修改文件属性的时候,这个参数尤为重要。 为什么呢?这里必须要划重点:防止误操作根路径/。下面的操作在任何时候都不要执行,会直接摧毁操作系统:
翅膀特殊符号(翅膀特殊符号大全复制)
上面的操作,和执行“rm-rf/”有类似的功效。 如果在执行命令时,添加参数--preserve-root,程序就会拒绝执行。
问题来了,不是每个人都会记得添加这个参数,也不会有人在每次执行chmod的时候都记得添加这个参数。怎么办呢? 我们可以使用alias,修改chmod的命令默认带参数--preserve-root。
当然,可以在/etc/bashrc或者用户的.bashrc文件中添加此命令。
环境变量一般通过三个文件设置:/etc/profile,bashrc,~/.bash_profile.
权限
八进制
符号
read+write+execute
4+2+1=7
rwx
read+write
4+2+0=6
rw-
read+execute
4+0+1=5
r-x
read
4+0+0=4
r--
write+execute
0+2+1=3
-wx
write
0+2+0=2
-w-
execute
0+0+1=1
--x
如果想要修改文件夹下所有的文件权限,且目标权限是一致的,可以使用-R或者--recursive参数。 为了明确哪些文件的权限发生了变化,最好添加另外一个参数:--changes或者-c 命令格式:
示例:
上面的例子,文件夹dir1的权限也被更改了。如果不想修改参数文件夹的权限,只是修改其子文件的权限,可以通过以下命令:
在上面的示例中,我们都是通过八进制来标识权限,也可以通过符号标识来标识权限。符号标识的意义,以及和八进制的映射关系,可以参考上面的表格。 示例:
1上面的示例会更改一个文件夹下的文件、文件夹属性。如果需要修改多个文件夹下的文件或文件夹,则需要多次执行chmod命令。 2chmod不能区分文件和文件夹。如果只想更改子文件夹,或者子文件,只使用chmod命令是做不到的。 3类似地,如果您想更改特定命名语法的某些文件或目录的权限,chmod自己不能处理这样的情况。
因此,需要使用find命令过滤需要修改的文件、文件夹。 chmod不能直接接收find的过滤结果,需要通过使用exec或者xargs对接信息。 使用了find,chmod命令不再需要--recursive或者-R参数。find的结果会逐条传递给chmod。
find命令语法:
PATH是目标文件夹。 OPTIONS是find命令的参数。例如通过类型搜索用-type,通过名称搜索用-name。 注意结尾:{};。这个是必不可少的,{}表示命令的参数即为所找到的文件,命令的末尾必须以“;”结束,”{}”和”;”之间必须有一个空格。 示例:
当然,也可以使用符号来修改权限:
只修改文件夹的属性:
和exec类似,通过xargs将find结果传递给chmod。 命令格式:
-print0让find的结果打印到标准输出,每个结果都通过ASCIINUL字符:‘\000’分割。 -0告知xargs每个输入都通过ASCIINUL字符:‘\000’来分割。 下面示例,将指定文件夹下的属性都改成644:
同样,也可以通过符号。
发表评论