Назад | Перейти на главную страницу

Как я могу использовать sudo, чтобы проверить, существует ли файл?

Я хочу проверить, существует ли такой файл

[ -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