Як додати рядок до файлу, який має лише дозвіл на кореневу запис, і продовжити виконання сценарію


9

Я намагаюся навчитися писати баш сценаріїв. Я працюю над практичною проблемою, і в один момент мені потрібно додати рядок до файлу, який вимагає rootдозволу на запис.

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

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

Чи можна якось змусити скрипт запитати корінний пароль, перевірити пароль і при успішній автентифікації змінити файл? Потім сценарій повинен повернутися в режим користувача та продовжити виконання команди.

Відповіді:


13

На sudoсторінці man є підказка, яка пояснює, як зробити щось подібне. Ось мій одноразовий:

#!/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

@Ryne Everett: Я не знайомий із судо. Але поведінка "су" насправді є такою, якою потрібно сценарій ОП. Більшу частину часу я використовую "su" навпаки: перехід від root на іншого користувача. У цьому випадку пароль не потрібен всім.
чудо173

1

Ви можете використовувати 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є те, що вам не доведеться жодним чином змінювати цитування початкової команди (Цитування рядків, які вже містять лапки, часом може бути досить потворним).


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як це за замовчуванням. Загалом, трохи більше пояснень було б непогано, оскільки ОП хотіла чогось навчитися, а не просто вирішити проблему.
Адаефон

Думаю, ви зіткнетесь з вами подвійними цитатами
чудо173
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.