Como inserir texto em um arquivo de propriedade da raiz usando o sudo? [duplicado]

26

A execução de um comando como sudo echo 'text' >> /file.txt falha com:

bash: /file.txt: Permission denied
    
por Tshepang 25.11.2010 / 20:22

2 respostas

49

Isso não funciona porque o redirecionamento é executado pelo shell, não pelo comando ao qual se aplica. Mas o seu shell não está rodando como root, somente echo 'text' é.

Um truque comum quando você precisa ter permissões de root para gravar em um arquivo, mas não para gerar os dados, é usar tee :

echo 'text' | sudo tee -a /file.txt

tee imprime o texto para stdout também. Para silenciá-lo, para que ele se comporte de maneira mais semelhante ao acréscimo de shell ( >> ), direcione o stdout para /dev/null :

echo 'text' | sudo tee -a /file.txt > /dev/null

Se você precisa de permissões de root para gerar os dados, você pode executar dois comandos sudo separados ou executar um shell dentro de sudo e fazer o redirecionamento lá (cuidado com as citações).

sudo echo 'text' | sudo tee -a /file.txt
sudo sh -c 'echo "text" >>/file.txt'

Ao sobrescrever em vez de anexar, se você estiver acostumado com o shell recusando-se a truncar um arquivo existente com o operador > ( set -o noclobber ), lembre-se de que essa proteção não será aplicada. sudo sh -c 'echo >/etc/passwd' e sudo tee /etc/passwd sobrescreverão /etc/passwd , você precisaria de sudo sh -o noclobber -c 'echo >/etc/passwd' para essa configuração de noclobber para também ser aplicada à sh iniciada por sudo .

    
por 25.11.2010 / 21:55
7

Você está dizendo para abrir um arquivo e anexar a saída do comando sudo echo 'text' a ele, o que obviamente não funciona, já que o seu bash é executado como não-raiz. Interativamente, geralmente corro sudo -s para contornar isso (desde então, o shell é executado como root e pode abrir o arquivo). Como alternativa, você pode executar sudo sh -c "echo 'text' >> /file.txt" , que também funciona, mas é um pouco trabalhoso com toda a interpolação / escape que pode interferir se você tiver expressões complicadas.

    
por 25.11.2010 / 20:32