Różnica między $ LOGNAME a logname

12

kiedy echo $LOGNAMElub lognamepolecenia są uruchamiane normalnie uzyskują taki sam wynik, jak poniżej:

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

Czy jest jakaś różnica między nimi?

Pandya
źródło

Odpowiedzi:

17

Ze zmiennych środowiskowych ,

$LOGNAMEjest taki sam jak $USERco daje

Nazwa aktualnie zalogowanego użytkownika. Ta zmienna jest ustawiana przez system. Prawdopodobnie nie powinieneś zmieniać jego wartości ręcznie.

Od man logname

logname - wydrukuj nazwę użytkownika


Zużyte inaczej wykorzystane przez następujący przykład:

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

Tutaj możesz zobaczyć różnicę po zalogowaniu jako root w terminalu,

  • $LOGNAMEpodaje nazwę aktualnie zalogowanego użytkownika w terminalu (tj. root)
  • Natomiast lognamewydrukuj nazwę użytkownika, który zalogował się w sesji (tj. pandya)
Pandya
źródło
6

Nazwa dziennika narzędzia jest zepsuta w 16.04, najwyraźniej celowo, ponieważ możliwe jest zhakowanie zwracanej wartości, co może być wadą bezpieczeństwa. https://bugzilla.gnome.org/show_bug.cgi?id=747046 Używałem nazwy loga w niektórych skryptach i uznałem ją za przydatną, ponieważ zawsze zwracała tę samą wartość (moją nazwę logowania) bez względu na to, czy wywoływałem ją z mój własny poziom lub wywołanie sudo, podczas gdy zmienne środowiskowe $ USER i $ LOGNAME nie. Nie martwiłem się, że ktoś włamie się na mój komputer i zmodyfikuje wartość, którą zwraca. Niestety .... Znalazłem obejście. Jako taki utworzyłem plik w moim katalogu domowym

echo $USER > ~/.logname

Kiedy chcę uzyskać dostęp do mojej nazwy dziennika (np. Przypisując zmienną Bash g_logname), robię to w ten sposób:

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

Działa to dla mnie, zarówno jako ja, jak i na poziomie administratora poprzez sudo, który zachowuje przypisanie „~” jako mojego katalogu domowego. Mogę utworzyć plik .logname dla katalogu domowego każdego użytkownika w systemie. Tak, ktoś może włamać się na mój komputer i zmienić te pliki, ale tak naprawdę nie martwię się o to. Chcę tylko, żeby moje skrypty działały.

Randyman99
źródło