Как добавить в файл как sudo?

Я хочу сделать:

echo "something" >> /etc/config_file

Но, так как только у пользователя root есть разрешение записи в этот файл, я не могу сделать этого. Но следующее также не работает.

sudo echo "something" >> /etc/config_file

Есть ли способ добавить в файл в той ситуации, не имея необходимость сначала открывать его с a sudo'd редактор и затем добавление нового содержания вручную?

276
задан 03.01.2019, 02:05

5 ответов

Использовать tee -a (или tee --append) с sudo

tee - read from standard input and write to standard output and files
[...]
   -a, --append
      append to the given FILEs, do not overwrite
[...]

Таким образом, Ваша команда становится

echo "something" | sudo tee -a /etc/config_file

Преимущества tee по выполняющемуся Bash с административными полномочиями

  • Вы не выполняете Bash с административными полномочиями
  • Только 'запись в файл' расстается выполнения с усовершенствованными полномочиями
  • Заключение в кавычки сложной команды намного легче
399
ответ дан 07.12.2019, 07:39

Имейте икру sudo подоболочка:

sudo sh -c "echo 'JAVA_HOME=/usr/lib/jvm/java-6-sun' >> /etc/profile"

В этом примере sudo выполняет "sh" с остальными как аргументы.

(это показывается примером в sudo странице справочника),

26
ответ дан 07.12.2019, 07:39

Может быть проблема с sudo здесь и перенаправлением. Используйте текстовый редактор по Вашему выбору вместо этого для добавления строки.

sudo nano /etc/profile

Или, Вы могли попробовать su вместо этого

su
echo ‘JAVA_HOME=/usr/lib/jvm/java-6-sun’ >> /etc/profile
exit
3
ответ дан 07.12.2019, 07:39

Это не будет работать, Вы пытаетесь перенаправить (использование >>) вывод sudo. То, что Вы действительно хотите сделать, перенаправить вывод echo. Я предлагаю, чтобы Вы просто использовали своего любимого редактора и добавили ту строку вручную к /etc/profile. Это обладает дополнительным преимуществом, которое можно проверить ли /etc/profile уже наборы JAVA_HOME.

0
ответ дан 07.12.2019, 07:39

Перенаправление выполняется в текущей оболочке. Чтобы сделать перенаправление с поднятыми полномочиями, необходимо выполнить саму оболочку с поднятыми полномочиями:

sudo bash -c "somecommand >> somefile"
50
ответ дан 07.12.2019, 07:39

Теги

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