当我将 ls 的输出重定向到文件时,Bash 返回权限被拒绝错误

sUn*_*789 2 permissions command-line bash

我目前正在学习 shell 命令,其中一项练习是创建一个包含各种目录和子目录的结构。

我写道ls -laR > hello,它应该创建一个名为hello. 但是,bash: hello: permission denied即使我在开头输入 sudo ,我也会收到以下消息。

该命令在另一个 Linux 发行版中有效。另外,我几分钟前ls -la在要创建文件的目录中使用过,它给了我这个:

drwxr-xr-x 2 root root 4096 Nov 26 10:56 .
drwxr-xr-x 5 root root 4096 Nov 26 10:56 ..
Run Code Online (Sandbox Code Playgroud)

根据第一黑社会我有写作权限吗?

Rad*_*anu 13

因为 root 是您要创建hello文件的目录的所有者,并且来自同一组的用户而其他用户无权在该目录中写入,所以bash: hello: permission denied运行ls -laR > hello.

此外,当您运行在sudo它前面使用的相同命令时,您将得到完全相同的错误。这是因为输出重定向(>运算符)是由 shell 完成的,而不是由 完成ls,因此对其sudo没有影响。sudo仅对 有效ls -laR。为了防止这种情况,您必须以 root 身份登录:

sudo -i
Run Code Online (Sandbox Code Playgroud)

然后你可以使用重定向:

ls -laR > hello
Run Code Online (Sandbox Code Playgroud)

否则,您可以在具有 root 权限的子 shell 中运行您的 bash 命令:

sudo bash -c "ls -laR > hello"
Run Code Online (Sandbox Code Playgroud)

最后,另一个选项,而不是通过>操作符使用重定向,您可以使用tee命令:

ls -laR | sudo tee hello
Run Code Online (Sandbox Code Playgroud)

在这种情况下sudo,您不必使用ls命令,因为与 root 和所有其他用户来自同一组的用户在该目录中具有读取和执行权限。