it-swarm-ru.tech

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

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

echo "something" >> /etc/config_file

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

Sudo echo "something" >> /etc/config_file

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

257
hsribei

Правильный инструмент для правильной задачи: ' tee '

tee - read from standard input and write to standard output and files

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

% echo "output" | Sudo tee -a file

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

  • Вы не выполняете Bash с правами администратора
  • Только часть «запись в файл» запускается с расширенными разрешениями
  • Цитирование сложной команды намного проще
372
akira

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

Sudo bash -c "somecommand >> somefile"
47
Ignacio Vazquez-Abrams

У Судо появляется суб-Шелл:

Sudo sh -c "echo 'Java_HOME=/usr/lib/jvm/Java-6-Sun' >> /etc/profile"

В этом примере Sudo запускает «sh» с остальными в качестве аргументов.

(это показано в качестве примера на справочной странице Sudo)

26
Doug Harris

Я обычно использую Shell ЗДЕСЬ документ with Sudo tee -a . Что-то вроде:

Sudo tee -a /etc/profile.d/Java.sh << 'EOF'
# configures Java
JAVA_HOME=/usr/lib/jvm/Java-8-Oracle
export Java_HOME
export PATH=$PATH:$Java_HOME/bin
EOF
6
Nicholas Sushkin

На мой взгляд, лучшим в этом случае является дд:

Sudo dd of=/etc/profile <<< END
Java_HOME=/usr/lib/jvm/Java-6-Sun
END
4
user316693

Здесь может быть проблема с Sudo и перенаправлением. Используйте текстовый редактор по вашему выбору, чтобы добавить строку.

Sudo nano /etc/profile

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

su
echo ‘Java_HOME=/usr/lib/jvm/Java-6-Sun’ >> /etc/profile
exit
3
Bobby

Используйте ex - путь:

Sudo ex +'$put =\"FOO\"' -cwq /etc/profile

и замените FOO вашей переменной для добавления.

В некоторых системах (например, OS X) файл /etc/profile имеет 444 разрешения, поэтому, если вы все еще получаете разрешение отклонено , сначала проверьте и исправьте разрешение:

Sudo chmod 644 /etc/profile

затем попробуйте еще раз.

0
kenorb

Это не сработает, вы пытаетесь перенаправить (используя >>) вывод Sudo. Что вы действительно хотите сделать, это перенаправить вывод echo. Я предлагаю вам просто использовать ваш любимый редактор и добавить эту строку вручную в /etc/profile. Это дает дополнительное преимущество: вы можете проверить, устанавливает ли /etc/profile уже Java_HOME.

0
innaM