Не мог читать в / корневом каталоге даже при том, что sudo

У меня есть сценарий удара с чем-то как

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 но я предпочитаю не делать этого... Есть ли иначе?

1
задан 21 June 2017 в 15:14

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.

1
ответ дан 7 December 2019 в 12:32

/ корневая папка для корня только. Я полагаю, что только система может управлять файлами там. можно попробовать 'su', но я думаю, что Вы получите тот же результат.

, во-вторых: не рекомендуется запустить нормальные программы с полномочиями пользователя root.

при использовании sudo в командной строке, Вы предоставляете пароль и становитесь корнем. сценарий не может сделать этого. это - меры безопасности, чтобы обеспечить, чтобы кто-то на терминале внес изменения. также некоторые действия и папки доступны процессу корневой системы только.

2
ответ дан 7 December 2019 в 12:32

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

Похожие вопросы: