Unterschied zwischen $ LOGNAME und logname

11

Wenn echo $LOGNAMEoder lognameBefehle normalerweise ausgeführt werden, erhalten Sie dasselbe Ergebnis wie folgt:

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

Gibt es einen Unterschied zwischen ihnen?

Pandya
quelle

Antworten:

16

Aus Umgebungsvariablen ,

$LOGNAMEist das gleiche wie $USERwas gibt

Der Name des aktuell angemeldeten Benutzers. Diese Variable wird vom System festgelegt. Sie sollten den Wert wahrscheinlich nicht manuell ändern.

Von man logname

logname - Anmeldename des Druckers


Im folgenden Beispiel anders verwendet :

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

Hier sehen Sie Unterschiede nach der Anmeldung als root im Terminal,

  • $LOGNAMEgibt den Namen des aktuell im Terminal angemeldeten Benutzers an (dh root)
  • Während der lognameAnmeldename des Druckbenutzers, der sich in der Sitzung angemeldet hat (dh pandya)
Pandya
quelle
5

Das Dienstprogramm logname wurde in 16.04 unterbrochen, anscheinend absichtlich, weil es möglich ist, den zurückgegebenen Wert zu hacken, was eine Sicherheitslücke sein könnte. https://bugzilla.gnome.org/show_bug.cgi?id=747046 Ich habe in einigen Skripten logname verwendet und fand es nützlich, weil es immer den gleichen Wert (meinen Anmeldenamen) zurückgab, unabhängig davon, ob ich es von einem aus anrief meine eigene Ebene oder von einem Sudo-Aufruf, während die Umgebungsvariablen $ USER und $ LOGNAME dies nicht tun. Ich habe mir keine Sorgen gemacht, dass sich jemand in meinen Computer hackt und den zurückgegebenen Wert ändert. Leider ... habe ich eine Problemumgehung gefunden. Ich habe eine Datei in meinem Home-Verzeichnis als solche erstellt

echo $USER > ~/.logname

Wenn ich auf meinen Lognamen zugreifen möchte (z. B. einer Bash-Variablen g_logname zuweisen), gehe ich folgendermaßen vor:

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

Dies funktioniert für mich, ob als ich selbst oder auf der Root-Ebene durch sudo, das die Zuweisung von "~" als mein Home-Verzeichnis beibehält. Ich kann eine .logname-Datei für das Home-Verzeichnis jedes Benutzers auf dem System erstellen. Ja, jemand könnte sich in meinen Computer hacken und diese Dateien ändern, aber ich mache mir darüber keine großen Sorgen. Ich möchte nur, dass meine Skripte funktionieren.

Randyman99
quelle