У меня есть сценарий удара с чем-то как
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
но я предпочитаю не делать этого... Есть ли иначе?
Причина Ваш подход не работает, состоит в том, что Вы читаете использование файла <
"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
.
/ корневая папка для корня только. Я полагаю, что только система может управлять файлами там. можно попробовать 'su', но я думаю, что Вы получите тот же результат.
, во-вторых: не рекомендуется запустить нормальные программы с полномочиями пользователя root.
при использовании sudo в командной строке, Вы предоставляете пароль и становитесь корнем. сценарий не может сделать этого. это - меры безопасности, чтобы обеспечить, чтобы кто-то на терминале внес изменения. также некоторые действия и папки доступны процессу корневой системы только.