chown -R user:user .* 向后更改权限:这是正确的行为吗?

luc*_*one 8 filesystem permissions hidden-files chown

更改myfolder驻留在/. 我发出命令

sudo chown -R luca:luca /myfolder/.*
Run Code Online (Sandbox Code Playgroud)

我的目的是更改 .gitignore 中所有隐藏文件的所有权/myfolder

不幸的是,我意识到所有权/也发生了变化,这当然给我留下了一个破碎的系统。我认为这是因为..match .*,但对我来说仍然很奇怪。

更改父目录是正确的行为还是应该提交错误报告?

如果是我使用 chown 的错误,那么防止更改系统文件夹和文件的所有权的最佳做法是什么?

Emm*_*uel 5

请记住,命令行在执行之前由 shell 展开(解释)

sudo chown -R luca:luca /myfolder/.*
Run Code Online (Sandbox Code Playgroud)

首先解释为:

sudo chown -R luca:luca /myfolder/.  /myfolder/.. /myfolder/.adobe  /myfolder/.bash_history
Run Code Online (Sandbox Code Playgroud)

请注意/myfolder/..命令行中的

chown -R luca:luca /myfolder/..相当于 chown -R luca:luca /
让 chown 向后跑

使用echo /myfolder/.*时,用“*”来验证。


Jan*_*ary 5

出色地。root 的命令行非常强大。阅读其中一些经典著作。是的,.*匹配..正是我们想要的。点不是特殊字符。这是一个约定。按照惯例,在列出目录时,以点开头的文件在默认视图中是隐藏的——仅此而已。按照约定,通向当前目录的 inode 获取名称.,通向父目录的 inode 获取名称..

你应该做的是

chown -R luca:luca /myfolder
Run Code Online (Sandbox Code Playgroud)

我是否提到过以点开头的文件名没有什么特别之处?递归chown不这么认为。

现在,您也许可以通过将所有权更改回 root 来挽救某些功能。但从长远来看,您可能需要重新安装系统。

作为基本规则:

  1. 避免以 root 身份工作。
  2. 如果您以 root 身份工作,请在按 Enter 之前阅读每个命令两次。
  3. 如果您不确定扩展,请先使用“安全”命令(如echo .*)尝试它。
  4. 不要以 root 身份工作。
  5. 有许多任务可以使用图形界面安全地执行(您的问题就是此类任务的一个示例)。
  6. 我是否提到过您应该避免使用 root 帐户?

  • 好吧,那是我的错。在这种情况下,我认为`chown -R luca:luca /myfolder/.[^.]*` (2认同)
  • `echo .*` 是尝试扩展的好方法。它会准确地向您显示 shell 所看到的内容。`ls .*` 可能会有点混乱,因为它会进入目录(`ls -d .*` 可能更好,但也可以只使用 `echo .*`) (2认同)