O segundo exemplo executa echo sob sudo , mas o redirecionamento acontece sob o shell original.
sudo bash -c "echo > a4"
Eu fiz o login usando meu nome de usuário ravbholua :
ravbholua @ ravbholua-Aspire-5315: ~ $ echo $ LOGNAME Ravbholua
Eu crio o arquivo chamado a1 :
ravbholua@ravbholua-Aspire-5315:~$ echo>a1
ravbholua@ravbholua-Aspire-5315:~$ ll a1
-rw-rw-r-- 1 ravbholua ravbholua 1 Oct 8 09:57 a1
Como esperado, o arquivo acima tem-me ( ravbholua ) como proprietário.
Em seguida, crio a2 usando sudo com o comando echo :
ravbholua@ravbholua-Aspire-5315:~$ sudo echo>a2
ravbholua@ravbholua-Aspire-5315:~$ ll a2
-rw-rw-r-- 1 ravbholua ravbholua 1 Oct 8 09:57 a2
O proprietário é somente eu, ou seja, ravbholua .
Agora eu crio o a3 usando o sudo novamente, mas com o comando vim :
ravbholua@ravbholua-Aspire-5315:~$ sudo vim a3
ravbholua@ravbholua-Aspire-5315:~$ ll a3
-rw-r--r-- 1 root root 10 Oct 8 09:57 a3
Oh! Por que o dono muda agora? Não sou eu, mas raiz.
Por que tal variação com echo e vim !
É uma surpresa que com mudança de comandos como o dono do arquivo criado pode mudar.
sudo é apenas um comando.
Então, para o seu primeiro exemplo:
sudo echo>a2
sudo é o comando. E enquanto você tem o redirecionamento contra o eco, isso não significa nada.
Por exemplo:
%código%
Você não obterá o conteúdo de / etc / passwd em / tmp / foo. Você só terá echo cat /etc/passwd > /tmp/foo . sudo não é diferente. A parte do eco é apenas um argumento para o sudo. o sudo o usa para executar coisas, mas o shell não sabe disso.
Essa é uma das maneiras pelas quais o acesso ao sudo é muito diferente de fazer as coisas como root.
Para o seu exemplo, onde você usa cat /etc/passwd sudo executa sudo vim a3 para você como root. E o vim é executado como root, então o arquivo é de propriedade do root.