Possibile duplicato:
Reindirizzamento di stdout a un file per il quale non disponi dell'autorizzazione di scrittura
echo "some words" >> /etc/apt/source.list
permission denied
sudo echo "some words" >> /etc/apt/source.list
anche il permesso di ritorno negato
Quindi penso che forse l'operatore append sia un altro comando, dovrei mettere sudo prima di esso, quindi provo
echo "some words" >> sudo /etc/apt/source.list
anche il permesso di ritorno negato
come devo svolgere questo compito?
Risposta accettata:
sudo sh -c 'echo "some words" >> /etc/apt/source.list'
Il motivo per cui sudo echo "alcune parole">> /etc/apt/source.list non funziona è perché sudo sta aumentando i privilegi del comando "echo" e non il reindirizzamento.
Il>> reindirizzamento fa sì che la shell corrente crei/aggiunga al file. Non riesce perché la tua shell non ha i permessi per farlo.
Il motivo per cui la mia risposta funziona è che stai eseguendo l'intera cosa (eco e reindirizzamento) in una nuova shell che è stata sudo. sh -c ...
invoca una nuova shell ed esegue il comando fornito in quella subshell. Il sudo prima di eseguire quella subshell con privilegi escalation.
Il secondo esempio sudo non ha senso, perché sudo richiede l'esecuzione di un comando e non è quello che stai passando. Scommetto che ora hai un file nella directory locale chiamato sudo con contenuti "alcune parole". Sentiti libero di eliminarlo 🙂