当从 /root 运行标题中的命令时,它会以某种方式跳转到 / 并更改所有文件的所有权,我之所以注意到这一点,是因为 /proc 的错误消息弹出了。
也许我老了,但 . 和 .. 不应该被任何命令忽略吗?据我所知,它们是因为文件系统而存在的,没有其他用途。
运行 Debian Wheezy 并应用最新更新。
答案1
也许我老了,但 . 和 .. 不应该被任何命令忽略吗?据我所知,它们是因为文件系统而存在的,没有其他用途。
这毫无意义,因为你特意用 来输入名字.
和..
chown chown <...> .*
。在这种情况下,为什么认为chown
你没有做你想做的事?
这些名称被提供给 chown,因为 shell 根据您为其提供的 shell glob 扩展条件扩展了它们,该条件与当前目录中的所有其他点目录相匹配.
。..
由于您指示chown
以递归方式工作,因此它会深入到这些目录以及它们下面的任何目录。这意味着它“深入到”..
然后从那里继续工作。
您可以自己尝试一下,echo .*
看看输入到 chown 命令行中的名称。将echo *
其与shopt dotglob
on 和 off 的输出(分别shopt -s dotglob
用于打开和shopt -u dotglob
关闭)进行比较。使用ls
而不是echo
查看第一级递归。
有充分的理由甚至在或chown -R
上运行。最明显的做法似乎是提取一个档案,该档案包含错误的文件所有权信息以及单个目录中的所有文件;在这种情况下,从未压缩的目录中执行的操作是完全合理的,将所有权重置为系统上的合理内容。.
..
chown -R abc:xyz .
如果您希望 shell 不扩展.*
到.
,..
那么您需要确保它为您的特定 shell 正确设置。例如,引用 GNU bash 4.2.37(1)-release(撰写本文时 Debian Wheezy 上的最新版本,amd64 架构上的 Debianbash
软件包版本4.2+dfsg-0.1+deb7u3
)手册页:
格洛比格诺尔
用冒号分隔的模式列表,定义路径名扩展要忽略的文件名集。如果与路径名扩展模式匹配的文件名也与 GLOBIGNORE 中的某个模式匹配,则会将其从匹配列表中删除。
请记住,Unix 哲学的一部分是“相信用户知道他们在做什么”。
答案2
- 点 (.) 不能被忽略,因为是当前目录
- 双点 (..)(上层目录)不会被忽略,因为它与通配符匹配
但如果你以这种方式执行,你将不会得到这样的效果
chown -R root:root *
如果您只想更改隐藏文件、目录,请尝试以下操作:
find . -regex '.*/\..*' -exec chown root:root {} \;