Différence entre $ LOGNAME et logname

12

quand echo $LOGNAMEou les lognamecommandes s'exécutent normalement obtiennent le même résultat comme suit:

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

Alors, y a-t-il une différence entre eux?

Pandya
la source

Réponses:

17

À partir des variables d'environnement ,

$LOGNAMEest la même que celle $USERqui donne

Le nom de l'utilisateur actuellement connecté. Cette variable est définie par le système. Vous ne devriez probablement pas modifier sa valeur manuellement.

De man logname

logname - imprimer le nom de connexion de l'utilisateur


Expained différemment utilisé par l'exemple suivant:

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:~$

Ici, vous pouvez voir la différence après la connexion en tant que root dans le terminal,

  • $LOGNAMEdonne le nom de l' utilisateur actuellement connecté dans le terminal (ie root)
  • Tandis que le lognamenom de connexion de l'utilisateur imprimé qui s'est connecté à la session (ie pandya)
Pandya
la source
6

Le nom de l'utilitaire est rompu en 16.04, apparemment volontairement car il est possible de pirater la valeur qu'il renvoie, ce qui pourrait être une faille de sécurité. https://bugzilla.gnome.org/show_bug.cgi?id=747046 J'avais utilisé logname dans certains scripts et je l'ai trouvé utile car il renvoyait toujours la même valeur (mon nom de connexion) si je l'appelais depuis un mon propre niveau ou à partir d'une invocation sudo, contrairement aux variables d'environnement $ USER et $ LOGNAME. Je ne craignais pas que quelqu'un pirate mon ordinateur et modifie la valeur qu'il renvoie. Hélas .... J'ai trouvé une solution de contournement. J'ai créé un fichier dans mon répertoire personnel en tant que tel

echo $USER > ~/.logname

Lorsque je veux accéder à mon nom de journal (par exemple, l'attribution à une variable Bash g_logname), je le fais ainsi:

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

Cela fonctionne pour moi, que ce soit en tant que moi-même ou au niveau racine via sudo, qui conserve l'attribution de "~" comme répertoire personnel. Je peux créer un fichier .logname pour le répertoire personnel de chaque utilisateur du système. Oui, quelqu'un pourrait pirater mon ordinateur et modifier ces fichiers, mais cela ne m'inquiète pas vraiment. Je veux juste que mes scripts fonctionnent.

Randyman99
la source