На этот вопрос уже есть ответ:
В настоящее время я изучаю команды оболочки, одно из упражнений состоит в создании структуры с различными каталогами и подкаталогами.
Я написал ls -laR> hello
, предполагалось создать текстовый файл с именем hello
.
Однако я получаю следующее сообщение bash : hello: в разрешении отказано
, даже когда я набираю 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 ..
Согласно первой триаде у меня есть права писать?
Либо поместите файл hello в доступный для записи каталог, например, с помощью:
ls -laR > /tmp/hello
, либо, если вы действительно хотите создать файл в каталоге, который вам не принадлежит, выполните:
sudo sh -c "ls -laR > hello"
Поскольку root является владельцем каталога, в котором вы хотите создать файл hello
, а пользователи из той же группы, а другие пользователи не имеют разрешения на запись в этот каталог, вы получите ошибку bash: hello: permission denied
при запуске ls -laR > hello
.
Более того, вы получите точно такую же ошибку, когда запустите ту же команду, используя sudo
перед ней. Это связано с тем, что перенаправление вывода (оператор >
) выполняется оболочкой , а не ls
, поэтому sudo
не влияет на него. sudo
действует только на ls -laR
. Чтобы предотвратить это, вы должны войти в систему как root:
sudo -i
Затем вы можете использовать перенаправление:
ls -laR > hello
В противном случае вы можете запустить команду bash в подоболочке с привилегиями root:
sudo bash -c "ls -laR > hello"
Наконец, другой вариант, вместо того, чтобы использовать перенаправление через оператор >
, вы можете использовать команду tee
:
ls -laR | sudo tee hello
Вам не нужно использовать в этот случай sudo
для команды ls
, поскольку пользователи из той же группы с root и все другие пользователи имеют права на чтение и выполнение в этом каталоге.