Aggiungendo una riga nel file hosts, ottenendo il permesso negato quando si usa sudo - Mac


13

Sto cercando di aggiungere una riga nel file hosts sul mio Mac eseguendo un comando a una riga sul terminale.

Ho pensato che sarebbe stato facile usando sudo, ma restituisce "permesso negato" quando provo ad aggiungere >>al file hosts, ma funziona se provo a sostituire >il contenuto degli host.

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

sudo echo test > /etc/hosts
Password:
$ 

Il sistema operativo è aggiornato.


usa semplicemente un editor di testo (iniziato con sudo ) per modificare il tuo / etc / hosts
MrSmith42

1
Voglio creare uno script che aiuti ad automatizzare questo, quindi un editor di testo non sarebbe d'aiuto in questo caso.
Menta

Risposte:


16

Questo perché echoviene eseguito come root, ma la shell è quella che esegue effettivamente il reindirizzamento. È necessario generare una nuova shell affinché funzioni:

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

Modifica: non ho visto il fatto che il >reindirizzamento funziona; Non posso spiegarlo.


Sento che vale la pena notare l'utilità teeperché consentire l'esecuzione di una subshell sudoè e dovrebbe essere bloccato nella maggior parte degli ambienti di produzione per motivi di sicurezza.
Steve Buzonas,

9

Invece di eseguire l'eco attraverso un reindirizzamento che verrà eseguito come utente corrente, non come root come l'eco viene eseguito nell'esempio, utilizzare tee come suggerisce Steve Buzonas

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

Il sudo ora viene applicato al comando tee. '-A' si aggiunge al file

Ciò consentirà anche di produrre tee sull'output standard. Se non vuoi vedere 'test' nel tuo terminale, aggiungi anche: > /dev/nullalla fine di quella riga.


1

Per assicurarmi che prima fosse stata creata una nuova linea, ho usato questo:

sudo -- sh -c "echo  \ \ >> /etc/hosts";sudo -- sh -c "echo 127.0.0.1  testdomain.com >> /etc/hosts"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.