Diferencia entre $ LOGNAME y logname

12

cuando echo $LOGNAMEo los lognamecomandos ejecutados normalmente obtienen el mismo resultado como el siguiente:

pandya@pandya-desktop:~$ echo $LOGNAME
pandya
pandya@pandya-desktop:~$ logname
pandya

Entonces, ¿hay alguna diferencia entre ellos?

Pandya
fuente

Respuestas:

17

De las variables de entorno ,

$LOGNAMEes lo mismo $USERque da

El nombre del usuario actualmente conectado. Esta variable es establecida por el sistema. Probablemente no debería cambiar su valor manualmente.

De man logname

logname: imprime el nombre de inicio de sesión del usuario


Ampliado de manera diferente mediante el siguiente ejemplo:

pandya@pandya-desktop:~$ sudo su
root@pandya-desktop:/home/pandya# echo $LOGNAME
root
root@pandya-desktop:/home/pandya# logname
pandya
root@pandya-desktop:/home/pandya# exit
exit
pandya@pandya-desktop:~$

Aquí puede ver la diferencia después de iniciar sesión como root en la terminal,

  • $LOGNAMEda el nombre del usuario actualmente conectado en la terminal (es decir root)
  • Mientras que lognameimprime el nombre de usuario del usuario que inició sesión (es decir pandya)
Pandya
fuente
6

El nombre de registro de la utilidad está roto en 16.04, aparentemente a propósito porque es posible hackear el valor que devuelve, lo que podría ser una falla de seguridad. https://bugzilla.gnome.org/show_bug.cgi?id=747046 Había estado usando logname en algunos scripts, y lo encontré útil porque siempre devolvía el mismo valor (mi nombre de usuario) si lo llamaba desde un mi propio nivel o desde una invocación de sudo, mientras que las variables de entorno $ USER y $ LOGNAME no lo hacen. No me preocupaba que alguien pirateara mi computadora y modificara el valor que devuelve. Por desgracia ... he encontrado una solución. Creé un archivo en mi directorio de inicio como tal

echo $USER > ~/.logname

Cuando quiero acceder a mi nombre de registro (por ejemplo, asignar a una variable Bash g_logname), lo hago así:

declare g_logname="$(<~/.logname)";

Esto funciona para mí, ya sea como yo mismo o en el nivel raíz a través de sudo, que mantiene la asignación de "~" como mi directorio de inicio. Puedo crear un archivo .logname para el directorio de inicio de cada usuario en el sistema. Sí, alguien podría piratear mi computadora y cambiar estos archivos, pero no estoy realmente preocupado por eso. Solo quiero que mis guiones funcionen.

Randyman99
fuente