¿Quién es el propietario del archivo si el archivo se crea con el comando sudo?

¿Quién es el propietario del archivo si el archivo se crea con el comando sudo?

Inicié sesión usando mi nombre de usuario ravbholua:

ravbholua@ravbholua-Aspire-5315:~$ echo $LOGNAME ravbholua

Creo un archivo llamado 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 era de esperar, el archivo anterior me tiene ( ravbholua) como propietario.

A continuación creo a2 usando sudo con echoel 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

El propietario soy sólo yo, es decir ravbholua.

Ahora creo a3 usando sudo nuevamente pero con vimel 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! ¿Cómo es que el dueño cambia ahora? No soy yo sino root. ¿Por qué tal variación con echoy vim! Es una sorpresa que concambio de comandos¿Cómo puede cambiar el propietario del archivo creado?

Respuesta1

El segundo ejemplo se ejecuta echobajo sudo, pero elredirecciónsucede bajo el caparazón original.

sudo bash -c "echo > a4"

Respuesta2

sudoes solo una orden.

Entonces, para tu primer ejemplo: sudo echo>a2

sudoes el comando. Y aunque tengas la redirección enfrentada al eco, eso no significa nada.

Por ejemplo: echo cat /etc/passwd > /tmp/foo no obtendrá el contenido de /etc/passwd en /tmp/foo. Sólo tendrás cat /etc/passwd. sudo no es diferente. La parte echo es sólo un argumento para sudo. sudo lo usa para ejecutar cosas, pero el shell no lo sabe.

Esa es una de las formas en las que acceder a sudo es muy diferente a hacer cosas como root.

Para su ejemplo donde usa sudo vim a3sudo se ejecuta vim a3como root. Y vim se ejecuta como root, por lo que el archivo es propiedad de root.

información relacionada