1

Я пытаюсь изменить имя хоста Gentoo, используя учетную запись sudoer. Я использую следующую процедуру:

  1. sudo rm -f /etc/conf.d/hostname
  2. sudo touch /etc/conf.d/hostname
  3. sudo echo "hostname=foo" >> /etc/conf.d/hostname
  4. sudo /etc/init.d/net.lo restart

Только шаг 3 не проходит. Это вызывает permission error . Так что я хотел бы знать, почему я получаю это? Сначала я попытался остановить сетевой сервис, но без изменений.

2 ответа2

2

Сбой, потому что >> интерпретируется оболочкой обычного пользователя; только echo запускается как root .

Простой способ обойти это - запустить команду в интерактивной корневой оболочке:

$ sudo su -
# echo "hostname=foo" > /etc/conf.d/hostname
# /etc/init.d/net.lo restart
# exit
$

Обратите внимание, что вам не нужна команда touch , и если вы просто используете > вы также можете обойтись без rm , так как > перезапишет содержимое файла.

0

Правильный способ сделать это:

echo "hostname=foo" |  sudo tee -a /etc/conf.d/hostname > /dev/null

Вам не нужен sudo для запуска echo , но вы не можете применить sudo к перенаправлению, поэтому вместо этого направьте его в tee (сплиттер вывода), в режиме добавления (-a , действует как >>), а затем можете выводить (потому что вы не заинтересованы в этом), перенаправив его в /dev/null .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .