Я хочу проверить, существует ли такой файл
[ -f /path/to/file/ ]
Однако я запускаю эту команду как обычный пользователь, и файл принадлежит пользователю root. Как я могу использовать sudo для этого?
sudo [ -f /path/to/file/ ]
не работает.
if sudo test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
Для завершения, с противоположной стороны, если вы хотите проверить из root, доступен ли файл или каталог для чтения для определенного пользователя, вы можете использовать
if sudo -u username test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
То, что вы описываете, должно работать нормально - если вы используете абсолютные пути и -f
(«Файл существует и является обычным файлом») - это действительно тест, который вы хотите выполнить.
Я вижу след /
в том, что вы разместили в своем вопросе - вы тестируете каталог? Которые должны быть -d
, или просто -e
(«Что-то существует с таким именем - независимо от типа»)
Также обратите внимание, что если что-то по пути не читается test
([
) должен быть в состоянии сказать вам, существует ли файл, принадлежащий пользователю root (например, [ -f /root/.ssh/known_hosts ]
вероятно, не удастся, потому что каталог /root/.ssh не работает (или, по крайней мере, не должно быть) читается обычным пользователем. [ -f /etc/crontab ]
должно получиться).
Добавляя к другим ответам, различие между тестом или ошибкой аутентификации sudo может быть выполнено путем первого запуска sudo true
. Большинство известных мне реализаций sudo не потребуют повторной аутентификации в течение короткого периода времени.
Например:
if sudo true; then
if sudo test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
else
echo "SUDO AUTHENTICATION FAILED"
fi