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 echo
el 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 vim
el 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 echo
y vim
! Es una sorpresa que concambio de comandos¿Cómo puede cambiar el propietario del archivo creado?
Respuesta1
El segundo ejemplo se ejecuta echo
bajo sudo
, pero elredirecciónsucede bajo el caparazón original.
sudo bash -c "echo > a4"
Respuesta2
sudo
es solo una orden.
Entonces, para tu primer ejemplo:
sudo echo>a2
sudo
es 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 a3
sudo se ejecuta vim a3
como root. Y vim se ejecuta como root, por lo que el archivo es propiedad de root.