Cuando utilizamos una distro como Debian/Ubuntu o Fedora/CentOS por largo tiempo, usualmente tendemos a olvidarnos de su como tal dada la forma tan automática en que lo usamos. Muchos de ustedes se habrán preguntado por qué algunos usan su y otros su -. ¿Cuál es la diferencia?
Viendo las páginas man podemos encontrar que “-” o “-l” o la opción “--login” provee un entorno similar al que el usuario experimenta cuando hace un login directo.
Esto hace referencia a los login shells. Estos es el shell lanzado cuando un usuario hace login. Lo que diferencia un login shell de un shel regular, a pesar de que se ven exactamente iguales en el prompt, son los diferentes conjuntos de scripts/ficheros de configuración que son ejecutados antes de que el prompt salga en el terminal.
Tomando como ejemplo a bash, cuando ejecutamos un comando regular en bash, el fichero ejecutado es ~/.bashrc el cual llama a /etc/bashrc. Y cuando es un login shell (bash -l), el orden de ejecución es /etc/profile, ~/.bash_profile el cual llama otros ficheros internamente.
El punto clave es que esa diferencia de configuración en estos ficheros lleva a diferentes conductas del shell. Una de las grandes diferencias lo constituye la inicialización de la variable PATH en ~/.bash_profile (default behaviour). Entonces, hasta que habras un login shell, no tendrás la variable PATH esperada.
Ejemplo 1
[shredder12]$ su
password:
[root]# fdisk -l
fdisk: command not found
[root]# echo $PATH
/usr/bin/:/bin:/usr/local/bin/:
Ejemplo 2
[shredder12]$ su -
password:
[root]# fdisk -l
“trabaja perfectamente”
[root]# echo $PATH
/usr/bin/:/usr/sbin:/bin/:sbin:/usr/local/bin:/usr/local/sbin:
Como podemos ver la variable de entorno PATH no fue configurada correctamente. los directorios */sbin no fueron incluidos en el primer ejemplo. Esto se debe a que hereda la variable PATH del usuario anterior (shredder12). Finalmente, tenemos un shell de root que no se comporta como usuario root.
Fuente: Linuxers
No hay comentarios:
Publicar un comentario