Czy istnieje sposób, aby zobaczyć zmienną środowiskową innego użytkownika? Chcę to zrobić jako root, więc uprawnienia nie będą stanowić problemu.
Dla samego użytkownika używam echo $PATH
lub set | grep PATH
(lub set
gdy nie pamiętam nazwy zmiennej). Jaka byłaby podobna instrukcja dla innego użytkownika?
Za to, co jest warte, jestem na Ubuntu Server 13.04.
echo $MAIL
, ale pomyślałem, że może istnieć skrót..forward
)? Użytkownicy często ustawiają kilka zmiennych w swoich.profile
lub innych plikach konfiguracyjnych i nie ma sposobu, aby wiarygodnie je wszystkie wyliczyć. Znowu, jaki problem próbujesz rozwiązać?Odpowiedzi:
Inną opcją jest użycie
env
. Uruchom to jakoroot
:Na przykład
źródło
HOME=/root
. To jest katalog domowy root, ale to nie jest mój standardowy katalog domowy. Jeśli chcesz poznać środowisko, które uzyskałby dany użytkownik, gdy się zaloguje, musisz uruchomić skrypty startowe powłoki logowania tego konkretnego użytkownika (i pamiętaj, że jego powłoka logowania może różnić się od powłoki logowania).root
z poziomu menedżera logowania? Działa dobrze, jeśli upuszczę do tty i zaloguję się jakoroot
.env | grep HOME
i zaczynamHOME=/home/uwe
; Wykonuję,su
a potem jeszcze razenv | grep HOME
i dostajęHOME=/root
, a potem biegamsudo -u uwe env | grep HOME
i wciąż dostajęHOME=/root
.xterm
zamiast mojego zwykłego terminala) i otrzymałem oczekiwany wynik.sudo
ustawia zmienną HOME tylko wtedy, gdy-H
opcja jest obecna lub jeśli/etc/sudoers
ustawiony jest odpowiedni wpis w . Wygląda na to, że nasze pliki sudoers różnią się. W każdym razie to prawdopodobnie dobry pomysł, aby użyć-H
tutaj, a być może również-i
.W przypadku jednego użytkownika możesz wykonać następujące czynności:
Lista $ PATH wszystkich użytkowników:
@Camil Staps
. ~/.profile
jest to zatem sztuczka, której uczę się od mojej ulubionej osoby, Peteris Krumins. Wyjaśnił sztuczkę tutaj . Może później wersja bash miała budowanie z opcjąNON_INTERACTIVE_LOGIN_SHELLS
.źródło
$PATH
to działa również bez. ~/.profile;
części - po co to jest?$PATH
nawet bez pozyskiwania~/.profile
, ale prawie na pewno nie jest to, czego chcesz (= wartość, którą zobaczyłby ten użytkownik, gdy się zalogował). Nawet pozyskiwanie~/.profile
nie jest w pełni niezawodne, ponieważ użytkownik może użyć powłoki, której plik startowy jest inny niż~/.profile
.~/.profile
w ogóle modyfikuje swoją ŚCIEŻKĘ . Ale w każdym razie zachowaniesudo
może być dość dużo skonfigurowane w/etc/sudoers
(patrz moja dyskusja z terdon), więc kiedy nasze systemy zachowują się inaczej, jest to prawdopodobnie spowodowane różnicami w plikach konfiguracyjnych.z poziomu root możesz
su -
do użytkownika, a następnie grep zmienną środowiskową, którą chcesz zobaczyć:su - <username> -c 'echo $PATH'
źródło
runuser -l <username> -c "env | grep <var>" | cut -d '=' -f 2
działa dobrze dla mnie. Jeśli nie jesteś rootem, musisz poprzedzić komendę za pomocąsudo
.