Невозможно прочитать в /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. скрипт не может этого сделать. это мера безопасности, чтобы гарантировать, что кто-то в терминале вносит изменения. также некоторые действия и папки доступны только процессу корневой системы.

Другие вопросы по тегам