Я недавно попытался переместить файл для перезаписи /dev/null
и обнаружил ошибку Permission denied
. Используя Ubuntu в течение последних нескольких лет, я знаю, что если я получу эту ошибку, мне нужно быть sudo
, чтобы вызвать команду, и тогда она завершится успешно. Это то, что я сделал, чтобы перезаписать /dev/null
.
Тем не менее, artbristol разместил там комментарий , в котором говорится, что слепое обращение sudo
для запуска команды не является хорошей привычкой, и мы должны знать, почему нам отказывают в разрешении выполнить эту команду, прежде чем продолжить. Я склонен согласиться с ним вместе со всеми людьми, которые активно поддержали этот комментарий. Но я не знаю, как поступить, чтобы узнать «почему» .
Недавно я наткнулся на этот ответ и попытался выполнить команду, как упомянуто (393222
- это индекс файла examples.desktop
в ~
):
$ find . -inum 393222 -exec nano {} \;
find: `./.gvfs': Permission denied
find: `./.cache/dconf': Permission denied
Выполнение вышеуказанной команды открыло файл examples.desktop
в nano
, но также дало Permission denied
для двух папок. Ниже приведены атрибуты двух папок (усеченный вывод ls -la
):
drwx------ 2 root root 4096 Mar 11 21:04 .gvfs
drwx------ 2 root root 4096 Mar 11 21:04 dconf
Есть ли какое-либо общее руководство, которому нужно следовать, чтобы узнать «почему» Я получаю ошибку «Отказано в доступе» при выполнении определенной команды?
Необходимо использовать мозг немного и задать себе вопрос:
Там не будет единственным ответом на это, поскольку "Разрешение, отклоненное" ошибки, превышает файловые системы, сети и режимы аутентификации (для именования всего три)... Нет только никакого единственного способа найти проблему... Кроме сказать, "у Вас, вероятно, нет разрешения сделать то, что Вы делаете".
Но мы можем посмотреть на Ваши примеры и разработать, где проблема находится в тех.
В mv testfile /dev/null
Вы читаете из ./testfile
и запись в /dev/
(для вытеснения /dev/null
). Это что mv
делает, когда Вы пытаетесь переместить файл в файл.
Быстрое stat testfile /dev/null /dev/
покажет Вам:
File: ‘testfile’
Size: 7944 Blocks: 16 IO Block: 4096 regular file
Device: fc01h/64513d Inode: 5284807 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ oli) Gid: ( 1000/ oli)
Access: 2014-03-19 11:35:42.027427288 +0000
Modify: 2014-03-19 12:25:17.343476867 +0000
Change: 2014-03-19 12:25:17.343476867 +0000
Birth: -
File: ‘/dev/null’
Size: 0 Blocks: 0 IO Block: 4096 character special file
Device: 5h/5d Inode: 31128501 Links: 1 Device type: 1,3
Access: (0666/crw-rw-rw-) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-03-18 14:33:16.742165089 +0000
Modify: 2014-03-18 14:33:16.742165089 +0000
Change: 2014-03-18 14:33:16.742165089 +0000
Birth: -
File: ‘/dev/’
Size: 4740 Blocks: 0 IO Block: 4096 directory
Device: 5h/5d Inode: 1025 Links: 17
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-03-20 09:51:04.408762425 +0000
Modify: 2014-03-20 09:51:04.396762425 +0000
Change: 2014-03-20 09:51:04.396762425 +0000
Birth: -
./testfile
Второй пример намного легче считать. От Вашего вывода:
drwx------ 2 root root 4096 Mar 11 21:04 .gvfs
drwx------ 2 root root 4096 Mar 11 21:04 dconf
Эти каталоги принадлежат корню, и они не дают разрешения ни для кого больше считать или ввести их. find
просто возвраты прочь, потому что это не имеет разрешения войти.
там какое-либо общее руководство для следования для знания, "почему" я получаю Разрешение Отклоненная ошибка при выполнении конкретной команды?
общее представление состоит в том, что те каталоги не принадлежат пользователю, с которым Вы раньше искали, и это находится также не в группе. Таким образом, команда сообщает Вам, что не может ввести тот каталог для выполнения находки. Внутри / домой существуют некоторые файлы, не принадлежащие пользователю.
можно использовать это:
find /home/ -uid 0
(или подобная команда: ls -la| awk '{ if ($3 == "root") print $9}'
) для нахождения всех файлов в / домой принадлежавшими корню. Регистрирует это сам не даст ошибку с находкой, просто каталоги, таким образом, Вы могли развернуть это до find /home/ -type d -uid 0
(-type f
для просто файлов).
относительно этого примера:
drwx------ 2 root root 4096 Mar 11 21:04 .gvfs
drwx------ 2 root root 4096 Mar 11 21:04 dconf
Ваша команда, в этом случае, должна была включать sudo
для предотвращения сообщения, так как те 2 не принадлежат имени пользователя, и и группа и другие исключены из r (ead). Так...
sudo find . -inum 393222 -exec nano {} \;
, Но уведомление о самом разрешении безопасно. Можно даже подавить сообщения об ошибках путем добавления 2>/dev/null
к находке.
И да, мы все согласимся, что любая команда должна быть исследована впереди. Существуют некоторые общие вещи искать хотя: как rm
или mv
, /dev/null
, /dev/random
и вещи как fork-бомбы (не предоставление примеров тех:)).
Все это зависит от того, что делает команда. Список очень длинен. Давайте возьмем Ваш пример сверху.
Вы пытаетесь использовать nano
открыть каталог, названный .gvfs. Если Вы не root
(через sudo
) затем Вы не сможете.
Посмотрите на полномочия файла слева.
Первый символ d
. Это означает, что .gvfs является каталогом. Открытие каталога в текстовом редакторе не собирается делать Вас много пользы, но это возможно все равно.
Следующие три символа rwx
. R=read, W=write и X=execute. Это означает что пользователь root
прочитал, пишут и выполняют полномочия на том каталоге.
root
имеют эти полномочия?Обычно существует 10 символов, которые Вы видите для разрешения файла. В этом случае они drwx------
.
После первого символа полномочия прочитаны в блоках 3. Первые 3 являются полномочиями владельца, следующие 3 являются полномочиями группы, и заключительные 3 являются мировыми полномочиями.
Так, каталог, как мы видим, принадлежит пользователю root
и атрибуты группы также root
как видно root root
бит. Поэтому только root
у пользователя есть любое разрешение сделать что-либо с .gvfs. Любой другой пользователь, который является членом root
у группы нет полномочий - как видно со вторым блоком 3 полномочий файла: ---
. То же идет для любого другого пользователя независимо от их состава группы как видно с третьим блоком 3 полномочий файла: ---
.
Если .gvfs имеет полномочия drwxrw-r--
, следующее будет применяться:
rwx
= владелец (root
) из каталога прочитал, пишут и выполняют полномочия на этом каталоге.
rw-
= любой пользователь в группе root
прочитал, пишут полномочия, но не выполняют разрешение.
r--
= у любого другого пользователя есть разрешение только для чтения. Никакая запись или не выполняет полномочия.
Каждый раз, когда Вы получаете Разрешение Отклоненная ошибка, необходимо знать то, что это - Вы, или команда, которую Вы выполняете, пытается сделать.
Иногда только root
имеет разрешение выполнить команду или только root
имеет разрешение выполнить инструкции команда, которую Вы выполняете, поскольку другой пользователь пытается сделать - такие как редактирование файла конфигурации системы.
Я надеюсь, что это не смутило Вас еще больше.