Entrei usando meu nome de usuário ravbholua
:
ravbholua@ravbholua-Aspire-5315:~$ echo $LOGNAME ravbholua
Eu crio um 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 me tem ( ravbholua
) como proprietário.
Em seguida, crio a2 usando sudo com echo
o comando:
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 sou apenas eu, ou seja ravbholua
.
Agora eu crio a3 usando sudo novamente, mas com vim
o comando:
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! como é que o proprietário muda agora. Não sou eu, mas root. Por que tal variação com echo
e vim
! É uma surpresa que commudança de comandoscomo o proprietário do arquivo criado pode ser alterado.
Responder1
O segundo exemplo é executado echo
em sudo
, mas oredirecionamentoacontece sob o shell original.
sudo bash -c "echo > a4"
Responder2
sudo
é apenas um comando.
Então, para o seu primeiro exemplo:
sudo echo>a2
sudo
é o comando. E embora você tenha o redirecionamento contra o eco, isso não significa nada.
Por exemplo:
echo cat /etc/passwd > /tmp/foo
você não obterá o conteúdo de /etc/passwd em /tmp/foo. Você só terá cat /etc/passwd
. sudo não é diferente. A parte do eco é apenas um argumento para o sudo. 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 coisas como root.
Para o seu exemplo, onde você usa sudo vim a3
o sudo, é executado vim a3
para você como root. E o vim é executado como root, então o arquivo pertence ao root.