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.