Jak uzyskać nazwę aktywnego użytkownika za pomocą wiersza poleceń w systemie OS X?

94

Jak uzyskać nazwę aktywnego użytkownika za pomocą wiersza poleceń w systemie OS X?

Lawrence Johnston
źródło

Odpowiedzi:

196

Ponieważ 'whoami' jest przestarzałe, prawdopodobnie jest bardziej kompatybilne z przyszłością:

id -un
Kent
źródło
2
W jakim sensie „whoami” jest przestarzałe? Kto stwierdził, że jest przestarzały?
Jonathan Leffler
2
@Jonathan: Strona podręcznika dla systemu whoamiLeopard potwierdza, że ​​została zastąpiona przez id.
Naaff
Agh! Dlaczego zmieniają coś, co istnieje od zarania dziejów?
dmckee --- kociak ex-moderator
29
Kim jestem żeby mówić? <boom-chacka>
kent
27

Jeśli chcesz wyświetlić pełną nazwę (zamiast nazwy użytkownika), dodaj -Fflagę:

$ id -F
Andrew Havens
Andrzej
źródło
1
-F jest nielegalną opcją w Mavericks - kiedy to zaczęło działać?
Eli B.
11

kim jestem

EDYTOWAĆ

Narzędzie whoami zostało przestarzałe przez narzędzie id (1) i jest równoważne id -un. Polecenie id -pjest zalecane do normalnego użytku interaktywnego.

dfa
źródło
11

Jestem prawie pewien, że terminal w OS X jest taki sam jak unix, więc polecenie wyglądałoby tak:

whoami

W tej chwili nie mam przy sobie Maca, więc ktoś mnie poprawi, jeśli się mylę.

UWAGA - whoaminarzędzie zostało przestarzałe i jest równoważne id -un. Daje ci aktualnego użytkownika

Eric Koslow
źródło
10

Via tutaj

Sprawdzenie właściciela / dev / console wydaje się działać dobrze.

stat -f "%Su" /dev/console

Lawrence Johnston
źródło
1
Działa to świetnie, jeśli jesteś podłączony do komputera i chcesz sprawdzić, czy użytkownik jest zalogowany lokalnie. Jeśli tak nie jest, polecenie zwróci „root”.
Tim Dearborn
4

Jeśli chcesz wiedzieć, kto jest aktualnie zalogowany do systemu:

$ w
 15:56:14 w górę o 5 dni, 20:58, 6 użytkowników, średnie obciążenie: 0,43, 0,53, 0,50
LOGIN TTY UŻYTKOWNIKA @ IDLE JCPU PCPU CO
me pts / 2 Fri19 1: 03m 0,98s 0,98s - / bin / bash
me pts / 3 09:55 6: 00m 0,43s 0,43s / bin / bash
me pkt / 5 15:56 0,00s 0,23s 0,00sw

(Pochodzi z systemu Linux; formatowanie w systemie OS X może być nieco inne, ale informacje powinny być mniej więcej takie same).

Może być wiele sesji logowania; W końcu UNIX został zaprojektowany jako system dla wielu użytkowników.

ephemient
źródło
4

Możesz także użyć lognamepolecenia z podręcznika BSD General Commands Manual w systemie Linux lub MacOS, aby zobaczyć nazwę użytkownika aktualnie zalogowanego użytkownika, nawet jeśli użytkownik wykonuje sudooperację. Jest to przydatne, na przykład, podczas modyfikowania crontab użytkownika podczas instalowania pakietu dla całego systemu z sudo:crontab -u $(logname)

Na man logname:

LOGNAME(1)

NAME
    logname -- display user's login name
Adam Link
źródło
1
To zdecydowanie najczystsze i najłatwiejsze rozwiązanie. Działa niezależnie od tego, który użytkownik wykonuje polecenie.
Maxime Viargues
2

Na pytanie nie ma pełnej odpowiedzi, IMHO. Spróbuję wyjaśnić: Mam wpis w tabeli crontab, który planuje procedurę poleceń powłoki bash, która z kolei wykonuje pewne czyszczenie moich plików; a po zakończeniu wysyła do mnie powiadomienie za pomocą centrum powiadomień OS X (z poleceniem osascript -e 'display notification ...). Jeśli ktoś (np. Moja żona lub córka) przełączy na nią obecnego użytkownika komputera, pozostawiając mnie w tle, skrypt cron zawiedzie podczas wysyłania powiadomienia.

Tak więc, kto jest aktualnym użytkownikiem, to znaczy Czy inne osoby stały się efektywnymi użytkownikami, pozostawiając mnie w tle ? Czy stat -f "%Su" /dev/consolezwraca bieżącą nazwę aktywnego użytkownika ?

Odpowiedź brzmi tak; więc teraz mój skrypt powłoki crontab został zmodyfikowany w następujący sposób:

...
if [ "$(/usr/bin/stat -f ""%Su"" /dev/console)" = "loreti" ]
then /usr/bin/osascript -e \
  'display notification "Cleanup done" sound name "sosumi" with title "myCleanup"'
fi
Maurizio Loreti
źródło
2

uzyskanie nazwy użytkownika w terminalu MAC jest łatwe ...

Zwykle używam whoamiw terminalu ...

Na przykład w tym przypadku potrzebowałem tego do zainstalowania serwera Tomcat ...

wprowadź opis obrazu tutaj

Alireza
źródło
2

Istnieją dwa sposoby-

whoami

lub

echo $USER
Manas Sharma
źródło
1

Możesz również pobrać go ze zmiennych środowiskowych, ale to prawdopodobnie nie jest bezpieczne, więc poszedłbym z odpowiedzią Andrew.

printenv USER

Jeśli chcesz pobrać go z aplikacji, takiej jak Node, łatwiej jest pobrać go ze zmiennych środowiskowych, takich jak

process.env.USER.

Co byłoby fajne
źródło
1

Zdefiniuj „aktywnego użytkownika”.

Jeśli pytanie brzmi `` kto jest zalogowanym użytkownikiem '', to `` kim jestem '' lub `` whoami '' jest w porządku (chociaż udzielają różnych odpowiedzi - `` whoami '' zgłasza tylko nazwę użytkownika; `` kim jestem '' '' raportuje na terminalu i czas logowania).

Jeśli pytanie brzmi „który identyfikator użytkownika jest efektywnym identyfikatorem powłoki”, często lepiej jest użyć „id”. Raport ten zawiera informacje na temat rzeczywistego i efektywnego identyfikatora użytkownika i identyfikatora grupy, a także dodatkowych identyfikatorów grup. Może to mieć znaczenie, jeśli w powłoce działa SUID lub SGID.

Jonathan Leffler
źródło