Как добавить строку в файл с правами только на запись root и продолжить выполнение скрипта


9

Я пытаюсь выучить скрипты bash. Я работаю над практической проблемой, и в какой-то момент мне нужно добавить строку в файл, который требует rootразрешения на запись.

Код выглядит так:

# some code
echo "add this line to the code" >> fileName
# some code

Можно ли как-то заставить скрипт запрашивать пароль root, проверять пароль и при успешной аутентификации изменять файл? Затем сценарий должен вернуться в режим пользователя и продолжить выполнение команды.

Ответы:


13

На sudoстранице руководства есть совет, который объясняет, как сделать что-то подобное. Вот мой однострочник:

#!/usr/bin/bash
sudo sh -c "echo \"add this line to the code\" >> fileName"

Очевидно, что сначала вы должны настроить своего пользователя на получение sudoпривилегий. shОболочка используется из - за перенаправления к корневому принадлежит файл. Я также должен был избежать кавычек, используемых для echoкоманды.


2

su доступно на большинстве систем Unix и должно работать:

su root -c 'echo "add this line to the code" >> fileName'

В отличие от sudo, пароли, похоже, не кэшируются su.
Райн Эверетт

@Ryne Everett: я не знаком с судо. Но поведение su на самом деле соответствует сценарию OP. Большую часть времени я использую «su» наоборот: переход от пользователя root к другому. В этом случае пароль не требуется.
чудо173

1

Вы можете использовать teeс sudo:

echo "add this line to the code" | sudo tee -a filename > /dev/null

echoВыходные данные перенаправляются с |( pipe ) на sudo tee. в этом случае teeчитает из стандартного ввода и записывает в стандартный вывод любой заданный файл filename. -a(или --append) делает teeдобавление к файлам, без него файлы будут перезаписаны. При teeзапуске sudoон открывает файлы с рут-правами. Наконец, > /dev/nullподавляет teeвывод в стандартный вывод .

Одно из преимуществ использования teeвместо того , чтобы просто начать всю команду , включая перенаправление с su -cили в sudo sh -cтом, что вам не придется менять цитирование исходной команды в любом случае (Цитируя строки уже содержащие цитаты можно получить довольно уродливые в разы).


0

Попробуйте это Эта команда доступна в Unix и Linux.

sudo sh -c "echo 'add this line to the code' >> fileName"


-2

Сделал бы трюк:

ssh host "sudo su root -c 'echo "add this line to the code" >> /etc/hosts'"

Почему ssh? Вам не нужно suс sudoи ни вам нужно указать , rootкак это по умолчанию. В целом, немного больше объяснений было бы неплохо, поскольку ОП хотел узнать что-то, а не просто решить проблему.
Adaephon

Я думаю, что у вас возникнут проблемы с двойными кавычками
miracle173
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.