Obtendo “permissão negada” ao tentar anexar texto a um arquivo usando sudo [duplicado]

7

Estou usando o Amazon Linux. Eu estou tentando acrescentar algum texto em um arquivo. O arquivo é de propriedade de root. Eu pensei em usar "sudo", eu poderia acrescentar o texto necessário, mas estou recebendo "permissão negada", veja abaixo

[myuser@mymachine ~]$ ls -al /etc/yum.repos.d/google-chrome.repo
-rw-r--r-- 1 root root 186 Jul 31 15:50 /etc/yum.repos.d/google-chrome.repo
[myuser@mymachine ~]$ sudo echo -e "[google-chrome]\nname=google-chrome\nbaseurl=http://dl.google.com/linux/chrome/rpm/stable/\$basearch\nenabled=1\ngpgcheck=1\ngpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub" >> /etc/yum.repos.d/google-chrome.repo
-bash: /etc/yum.repos.d/google-chrome.repo: Permission denied

Como posso ajustar minha declaração para que eu possa anexar o texto necessário no arquivo?

    
por Dave 31.07.2017 / 17:54

2 respostas

19

Você precisa usar o utilitário tee para redirecionar ou anexar fluxos a um arquivo que precisa de algumas permissões, como:

echo something | sudo tee /etc/file

ou para acrescentar

echo something | sudo tee -a /etc/file

porque, por padrão, seu shell está sendo executado com suas próprias permissões de usuário e o redirecionamento > ou >> será feito com as mesmas permissões do usuário. Você está executando o echo usando sudo e redirecionando sem root de permissão.

Como alternativa, você também pode obter um shell de root e tentar o redirecionamento normal:

sudo -i
echo something >> /etc/pat/to/file
exit

ou sudo -s para um shell que não seja de login.

você também pode executar um shell não interativo usando o acesso root:

sudo bash -c 'echo something >> /etc/somewhere/file'
    
por 31.07.2017 / 17:55
2

A explicação dada na resposta anterior é basicamente correta. O comando antes do redirecionamento é executado com privilégios elevados, mas não o redirecionamento em si.

Aqui está outro método que fará o que você quer. Não foi mencionado aqui ou nas respostas ao pergunta que esta é uma duplicata de . Eu incluo aqui para completar.

sudo su -c 'echo -e "some\ntext" >> /other/file'
    
por 01.08.2017 / 02:18