Próbuję dodać wiersz do pliku hosts na komputerze Mac, wykonując polecenie w jednym wierszu na terminalu.
Myślałem, że będzie to łatwe przy użyciu sudo, ale zwraca „odmowa uprawnień”, gdy próbuję dodać >>
do pliku hosts, ale działa, jeśli spróbuję zastąpić >
zawartość hostów.
sudo echo test >> /etc/hosts
-bash: /etc/hosts: Permission denied
$
sudo echo test > /etc/hosts
Password:
$
System operacyjny jest aktualny.
Odpowiedzi:
To dlatego, że
echo
jest uruchamiany jako root, ale powłoka faktycznie wykonuje przekierowanie. Aby to zadziałało, musisz utworzyć nową powłokę:Edycja: Nie widziałem faktu, że
>
przekierowanie działa; Nie umiem tego wyjaśnić.źródło
tee
ponieważ ze względu na bezpieczeństwo zezwalanie na wykonywanie podpowłokisudo
jest i powinno być blokowane w większości środowisk produkcyjnych.Zamiast uruchamiać echo przez przekierowanie, które będzie uruchamiane jako bieżący użytkownik, a nie root, ponieważ echo jest uruchamiane w twoim przykładzie, użyj tee, jak sugeruje Steve Buzonas
Sudo jest teraz stosowane do polecenia tee. „-A” dołącza się do pliku
Spowoduje to również wyprowadzenie tee na standardowe wyjście. Jeśli nie chcesz widzieć „testu” w swoim terminalu, dodaj także:
> /dev/null
na końcu tego wiersza.źródło
Aby upewnić się, że najpierw utworzono nową linię, użyłem tego:
źródło