Я хочу проверить, существует ли файл так
[ -f /path/to/file/ ]
Однако я запускаю эту команду как обычный пользователь, и файл принадлежит пользователю root. Как я могу использовать sudo для достижения этой цели.
sudo [ -f /path/to/file/ ]
не работает.
Ответы:
То, что вы описываете, должно работать нормально - если вы используете абсолютные пути, и
-f
(«Файл существует и является обычным файлом») - это действительно тест, который вы хотите выполнить.Я вижу трейлинг
/
в том, что вы разместили в своем вопросе - тестируете ли вы каталог? Это должно быть-d
или просто-e
(«Что-то существует с этим именем - независимо от типа»)Также обратите внимание, что если что-то по пути не является читабельным
test
([
), должно быть в состоянии сказать вам, существует файл, принадлежащий root или нет (например[ -f /root/.ssh/known_hosts ]
, вероятно, потерпит неудачу, потому что каталог /root/.ssh не существует (или, по крайней мере, не должен) не должен быть ) читаемым для обычного пользователя.[ -f /etc/crontab ]
должен преуспеть).источник
sudo
сбоя команды (неверный пароль, недопустимый в / etc / sudoers и т. Д.) Результат будет таким же, как если бы файл не существовал.sudo
работающей части :)тестовая страница
Для завершения, с другой стороны, если вы хотите проверить из корня, доступен ли файл или каталог для определенного пользователя, вы можете использовать
источник
В добавление к другим ответам, различие между ошибкой проверки или проверки подлинности sudo может быть выполнено при первом запуске
sudo true
. Большинство реализаций sudo, о которых я знаю, не требуют повторной аутентификации в течение короткого периода времени.Например:
источник