Intereting Posts

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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