Я хочу перевірити, чи існує такий файл
[ -f /path/to/file/ ]
Однак я виконую цю команду як звичайний користувач, а файл належить root. Як я можу використовувати судо для цього.
sudo [ -f /path/to/file/ ]
не працює.
Я хочу перевірити, чи існує такий файл
[ -f /path/to/file/ ]
Однак я виконую цю команду як звичайний користувач, а файл належить root. Як я можу використовувати судо для цього.
sudo [ -f /path/to/file/ ]
не працює.
Відповіді:
Те, що ви описуєте, має працювати добре - доки ви використовуєте абсолютні шляхи, і -f
("Файл існує та є звичайним файлом") - це справді тест, який ви хочете виконати.
Я бачу крок /
у тому, що ви розмістили у своєму запитанні - чи ви протестуєте каталог? Це має бути -d
, або просто -e
("Щось існує з цією назвою - незалежно від типу")
Також зауважте, що якщо щось по дорозі не читається test
( [
), ви повинні мати можливість повідомити вам про те, чи існує файл, що належить root, чи ні (наприклад [ -f /root/.ssh/known_hosts ]
, ймовірно, не вдасться, оскільки каталог /root/.ssh не є (або принаймні не повинен бути нечитабельним звичайним користувачем. [ -f /etc/crontab ]
повинен досягти успіху).
sudo
команда не вдається (неправильний пароль, не дозволено в / etc / sudoers тощо), це дасть такий самий результат, як якщо б файл не існував.
sudo
частину, що працює :)
if sudo test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
Для завершення речей, на протилежному боці, якщо ви хочете перевірити з кореня, чи файл чи каталог читається для певного користувача, який ви можете використовувати
if sudo -u username test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
Додавши до інших відповідей, розрізнити тест або тестування автентичності судо можна за допомогою першого запуску 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