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

Возможный дубликат:
Sudo невозможно записать в / etc / profile

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

  • Как получить внешний IP-адрес (через NAT) из командной строки Windows?
  • Можно ли добавить параметр контекстного меню проводника Windows, чтобы запустить командную строку в выбранном каталоге?
  • Как загрузить файлы Dropbox с помощью команды wget?
  • Есть ли способ скопировать пути файлов из всех открытых открытых файлов Windows? (Для сохранения и восстановления сеанса Windows во время перезапуска)
  • Windows XP - расширение «Открыть терминал здесь»?
  • Командная строка Commmand для копирования всего каталога (включая папку каталога) в другой каталог
  • echo "something" >> /etc/config_file

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

     sudo echo "something" >> /etc/config_file 

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

  • Ошибка ввода: нет никакого механизма сценария для расширения файла ".vbs"
  • Используйте USB-цифровую клавиатуру с телефонным набором текста?
  • Как найти имя / dev моего устройства USB
  • Нажатие моей подсказки PS1 по ssh
  • Удаление файлов старше 1 месяца, но оставить файлы, созданные в первый день месяца
  • Cd (сменить каталог) в мой домашний каталог на Windows
  • 8 Solutions collect form web for “Как добавить в файл как sudo?”

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

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

    Таким образом, ваша

     % echo "output" | sudo tee -a file 

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

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

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

     sudo bash -c "somecommand >> somefile" 

    Попросите sudo создать суб-оболочку:

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

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

    (Это показано в качестве примера на странице sudo man)

    Там может быть проблема с sudo здесь и перенаправление. Вместо этого используйте текстовый редактор, чтобы добавить строку.

     sudo nano /etc/profile 

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

     su echo 'JAVA_HOME=/usr/lib/jvm/java-6-sun' >> /etc/profile exit 

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

     sudo dd of=/etc/profile <<< END JAVA_HOME=/usr/lib/jvm/java-6-sun END 

    Я обычно использую shell HERE document с 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 

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

    Использовать ex -way:

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

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

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

     sudo chmod 644 /etc/profile 

    Затем повторите попытку.

    Давайте будем гением компьютера.