来自 coreutils 手册
2.10 遍历符号链接
当还指定
--recursive
( ) 选项时,以下选项修改 chown 和 chgrp 遍历层次结构的方式。-R
如果指定了多个以下选项,则仅最后一个生效。这些选项指定处理目录的符号链接是否需要仅对符号链接进行操作,还是需要对以该目录为根的层次结构中的所有文件进行操作。这些选项独立于
--dereference
和--no-dereference
(-h
),它们控制是否修改符号链接或其引用。
-H
如果指定--recursive
( ) 并且命令行参数是目录的符号链接,则遍历它。-R
-L
在递归遍历中,遍历遇到的目录的每个符号链接。
-P
不要遍历任何符号链接。如果未指定-H
、-L
或 ,则这是默认值-P
。
在“这些选项独立于
--dereference
and--no-dereference
(-h
),控制是否修改符号链接或其引用”中,“这些选项”和“--dereference
和--no-dereference
”分别做什么,它们有何不同?-H
对和对的描述-L
似乎对我说的是同一件事。这两个选项有何不同?
谢谢。
答案1
标志-h
(又名--no-dereference
)是一个很好用的标志。假设我们有这样的设置:
$ ln -s /etc/passwd /tmp/foobar
$ sudo chown fred /tmp/foobar
因为--dereference
是默认值,这实际上会改变/etc/passwd
......这可能不是你想要的:-) 该-h
标志将使它改变符号链接所有权。因此,您应该养成使用 的习惯-h
,特别是在递归更改所有权的情况下。即做chmod -hR
而不是chmod -R
。
该-H
标志仅适用于您在命令行上列出的目录符号链接。该-L
选项适用于找到的所有目录符号链接,包括递归 期间子目录中的符号链接chown
。