Невозможно прочитать в /root каталог, хотя sudo
У меня есть скрипт bash с чем-то вроде
while read -r name value
do
....something
done < "test"
Я запускаю этот скрипт как обычный пользователь.
Теперь я хотел сохранить этот файл в /root
домашний каталог и прочитайте его оттуда.
дела
while read -r name value
do
....something
done < "/root/path/to/file"
конечно я получаю ошибку: ./script: ine xy: /root/path/to/file: Permission Denied
Чем я пытался
while sudo read -r name value
do
....something
done < "/root/path/to/file"
Но это дает мне: sudo: read: unknown command
Почему я не могу прочитать файл в /root
домашний каталог, хотя я использую sudo
?
РЕДАКТИРОВАТЬ
Я попытался немного дальше и обнаружил, что я не могу даже сделать
$> sudo echo "test" /root/.test
[sudo] Password for user:
-bash: /root/.test: Permission Denied
РЕДАКТИРОВАТЬ 2
Он работает так, как я хочу, если я запускаю полный скрипт с sudo ./myscript
но я предпочитаю не делать этого... Есть ли другой способ?
2 ответа
Почему это не работает?
Ваш подход не работает, потому что вы читаете файл, используя <
"stdin" означает, что ваша оболочка отвечает за чтение файла, и вы запустили его с помощью обычного пользователя, поэтому у него нет необходимых прав для чтения файла. Теперь вы должны знать, что работает read
использование команды sudo
не поможет, не говоря уже о том, что это встроенная оболочка, которую нельзя запустить с помощью sudo
, лайк cd
и т.п.
Как мне заставить его работать?
Единственное, что вам нужно сделать, это как-то прочитать файл vi root
или пользователь / группа с необходимыми привилегиями. Таким образом, вы можете сделать это следующим образом:
sudo cat /root/txt | while read -r name value;
do
some command
done
только в этом случае cat
будет работать с sudo
,
Тем не менее, лучшая практика - поместить ваш скрипт в /usr/local/bin
так что у каждого есть доступ к нему.
Также обратите внимание, что когда вы хотите перенаправить что-то /root/example
вы должны использовать sudo tee
:
echo test | sudo tee file
или запустить весь скрипт, используя sudo
,
Папка /root предназначена только для root. Я считаю, что только система может манипулировать файлами там. вы можете попробовать с `su', но я думаю, что вы получите тот же результат.
во-вторых: не рекомендуется запускать нормальные программы с привилегиями root.
когда вы используете sudo в командной строке, вы вводите пароль и становитесь пользователем root. скрипт не может этого сделать. это мера безопасности, чтобы гарантировать, что кто-то в терминале вносит изменения. также некоторые действия и папки доступны только процессу корневой системы.