Я хочу перевірити, чи існує такий файл
[ -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