更改文件夹的所有权不起作用!

A H*_*A H 6 permissions command-line directory environment-variables chown

我正在尝试通过键入以下任一内容来更改文件夹和子文件夹的所有权:

sudo chown $user -R /usr/bin/.folder/
sudo chown $user -R /usr/bin/folder/
sudo chown $user -R /usr/bin/.folder
sudo chown $user -R /usr/bin/folder
Run Code Online (Sandbox Code Playgroud)

但我得到输出:

chown: missing operand after '/usr/bin/.folder/'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Eli*_*gan 11

为什么小写$user不起作用

为了澄清和扩展其他 所说的,shell 和环境变量区分大小写。userUSER是不同的变量,所以它们的内容(分别是which$user$USERexpand to)可能不同。通常,没有user定义调用的变量并将$user其扩展为空,而您想要的是$USER将扩展为您的用户名的变量。

echo命令通常适用于检查变量的值:

$ echo "$user"

$ echo "$USER"
ek
Run Code Online (Sandbox Code Playgroud)

对于值不包含任何空格的变量,可以删除引号而不影响输出。
所以echo $USER如果我愿意,我可以使用。

另一种选择,对于 chown

您可能知道自己的用户名,因此您可以使用它代替$USER. 如果这样做,请确保省略$符号

例如,由于我的用户名是ek,我可以使用:

sudo chown ek -R /usr/bin/.folder/
Run Code Online (Sandbox Code Playgroud)

为什么会出现错误

您可能想知道为什么会收到特定的错误消息:

chown: missing operand after '/usr/bin/.folder/'
Run Code Online (Sandbox Code Playgroud)

该消息实际上是提供信息的,因为当您在扩展变量的命令中看到类似这样的消息时,它表明您的一个或多个扩展变量可能无意中为空或未设置。

你运行了sudo chown $user -R /usr/bin/.folder/,因为user可能是未定义的,$user扩展为空,它相当于运行:

sudo chown -R /usr/bin/.folder/
Run Code Online (Sandbox Code Playgroud)

您可能知道,该-R选项chown对目录树中的每个文件进行操作。由于$user扩展为/usr/bin/.folder/是 的第一个非选项参数chown,因此被解释为指定所需所有权的参数(例如用户名)。/usr/bin/.folder是不是为有效语法,但没有报告特定错误,因为不同的错误停止chown第一:有没有更多的参数,所以没有指定任何chown操作

换句话说,如果我 run sudo chown $USER -R /usr/bin/.folder/,它会扩展为sudo chown ek -R /usr/bin/.folder/chown以这种方式解释它的参数:

  • ek: 用户名,因为还没有传递用户名参数
  • -R: 递归选项(前导-chown知道它是一个选项参数的原因)
  • /usr/bin/.folder/: 要更改所有权的文件或目录,因为用户名已经通过

但是,如果我运行sudo chown $user -R /usr/bin/.folder,它将扩展为sudo chown -R /usr/bin/.folder/chown以这种方式解释其参数:

  • -R: 递归选项
  • /usr/bin/.folder/: 用户名,因为还没有传递用户名参数

进一步阅读

欲了解更多信息,您可能对以下内容感兴趣:


ATR*_*ATR 5

请使用$USER代替$user

sudo chown $USER -R /usr/bin/.folder/
Run Code Online (Sandbox Code Playgroud)


mur*_*uru 2

user变量可能为空。尝试$USER