Quem é o proprietário do arquivo se o arquivo for criado usando o comando sudo?

Quem é o proprietário do arquivo se o arquivo for criado usando o comando sudo?

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 echoo 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 vimo 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 echoe vim! É uma surpresa que commudança de comandoscomo o proprietário do arquivo criado pode ser alterado.

Responder1

O segundo exemplo é executado echoem 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 a3o sudo, é executado vim a3para você como root. E o vim é executado como root, então o arquivo pertence ao root.

informação relacionada