Додавання рядка до файлу хостів, отримання дозволу відмовлено під час використання sudo - Mac


14

Я намагаюся додати рядок у файл хостів на моєму Mac, виконуючи команду однієї лінії на терміналі.

Я думав, що це буде легко за допомогою sudo, але він повертає "дозвіл відхилено", коли я намагаюся додати >>до файлу хостів, але це працює, якщо я спробую замінити >вміст хостів.

sudo echo test >> /etc/hosts
-bash: /etc/hosts: Permission denied
$

sudo echo test > /etc/hosts
Password:
$ 

ОС актуальна.


просто скористайтеся текстовим редактором (розпочато з судо ), щоб змінити / etc / hosts
MrSmith42

1
Я хочу створити сценарій, який допоможе автоматизувати це, тому текстовий редактор не допоможе в цьому випадку.
Монетний двір

Відповіді:


17

Це тому echo, що він запускається як корінь, але оболонка є тією, яка насправді виконує перенаправлення. Для цього вам потрібно покласти нову оболонку:

sudo -- sh -c "echo test >> /etc/hosts"

Редагувати: я не бачив факту, що >переспрямовування працює; Я не можу цього пояснити.


Я вважаю, що варто відзначити цю утиліту, teeтому що дозволити виконання передплатки з- sudoза та має бути заблоковано в більшості виробничих середовищ з міркувань безпеки.
Стів Бузонас

9

Замість того, щоб запустити echo через переспрямування, яке буде запускатися як ваш поточний користувач, а не root, оскільки ехо запускається у вашому прикладі, використовуйте tee, як пропонує Стів Бузонас

 echo 'test' | sudo tee -a /etc/hosts

Тепер судо застосовується до команди трійника. '-A' додається до файлу

Це також виведе трійник до стандартного виходу. Якщо ви не хочете бачити "тест" у своєму терміналі, також додайте: > /dev/nullв кінці цього рядка.


1

Щоб переконатися, що новий рядок створений спочатку, я використав це:

sudo -- sh -c "echo  \ \ >> /etc/hosts";sudo -- sh -c "echo 127.0.0.1  testdomain.com >> /etc/hosts"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.