Obter variável de ambiente de outro usuário [fechado]

23

Existe uma maneira de ver a variável de ambiente de outro usuário? Eu quero fazer isso como root, então as permissões não serão um problema, eu acho.

Para o próprio usuário, eu uso echo $PATHor set | grep PATH(ou setquando não lembro o nome da variável). O que seria uma instrução semelhante para outro usuário?

Para o que vale a pena, eu estou no Ubuntu Server 13.04.


fonte
4
Os usuários não têm variáveis ​​de ambiente, os processos têm. É comum que os processos executados por um usuário nem todos tenham o mesmo ambiente. Que problema você está tentando resolver?
Gilles 'SO- stop be evil'
@ Gilles, por exemplo, quero saber qual pasta MAIL um usuário possui. Eu poderia fazer login como esse usuário e, em seguida echo $MAIL, fazer , mas pensei que poderia haver um atalho.
3
Isso ainda não define a pergunta de maneira útil (e, por exemplo, a resposta que você aceitou pode ou não funcionar, dependendo de muitos fatores). Você está procurando o local padrão da caixa de correio? Você está procurando o local onde o usuário realmente recebe seu correio local (que pode ser diferente e não existir, se o usuário tiver um .forward)? Os usuários geralmente definem algumas variáveis ​​em seus .profileou outros arquivos de configuração e não há como enumerar todas elas com segurança. Novamente, que problema você está tentando resolver?
Gilles 'SO- stop be evil'

Respostas:

20

Outra opção é usar env. Execute isso como root:

sudo -Hiu $user env | grep $var

Por exemplo

sudo -Hiu terdon env | grep HOME
HOME=/home/terdon
terdon
fonte
11
Quando efetuo login como root e executo este comando para o meu nome de usuário padrão, recebo HOME=/root. Esse é o diretório home do root, mas é não meu diretório home padrão. Se você deseja conhecer o ambiente que um usuário específico obteria ao efetuar login, será necessário executar os scripts de inicialização do shell de login desse usuário específico (e lembre-se de que o shell de login dele pode ser diferente do shell de login).
Uwe
@Uwe em que sistema? Isso funciona bem para mim. Você quer dizer que efetua rootlogin a partir do gerenciador de login? Funciona bem se eu largar para um tty e efetuar login como root.
terdon
Eu estou em uma máquina Debian. Faço login como uwe, abro um xterm, corro env | grep HOMEe consigo HOME=/home/uwe; Eu executo sue, em seguida, mais uma vez env | grep HOMEe pego HOME=/root, então corro sudo -u uwe env | grep HOMEe ainda pego HOME=/root.
Uwe
@wewe estranho. Eu também estou em uma máquina Debian (LMDE), fiz exatamente o mesmo processo que você descreveu (até usado em xtermvez do meu terminal habitual) e obtive o resultado esperado.
terdon
De acordo com o manual, sudodefine a variável HOME apenas se a -Hopção estiver presente ou se a entrada correspondente /etc/sudoersestiver configurada. Parece que nossos arquivos sudoers diferem. Enfim, provavelmente é uma boa ideia usar -Haqui, e possivelmente também -i.
Uwe
2

Para um usuário, você pode fazer assim:

su - <username> -c '. ~/.profile; echo $PATH'

Listar $ PATH de todos os usuários:

for user in $(cat /etc/passwd | awk -F: '{print $1}'); do
  su - $user -c '. ~/.profile; printf "%s\n" "$PATH"'
done

@Camil Staps

. ~/.profileé, portanto, um truque que aprendo com minha pessoa favorita, Peteris Krumins. Ele explicou o truque aqui . Talvez a versão mais recente do bash tivesse construído com opção NON_INTERACTIVE_LOGIN_SHELLS.

cuonglm
fonte
Obrigado! Pois $PATHtambém funciona sem a . ~/.profile; peça - para que serve?
@CamilStaps O que você quer dizer com "funciona"? Sim, você obtém um valor $PATHmesmo sem fornecimento ~/.profile, mas certamente não é o que você deseja (= o valor que esse usuário veria ao fazer login). Até o fornecimento ~/.profilenão é totalmente confiável, pois o usuário pode usar um shell cujo arquivo de inicialização é diferente ~/.profile.
Uwe
@ Eu tenho a mesma saída sem, mas acho que é apenas uma coincidência então.
Você está assumindo que o usuário não está usando o csh.
Glenn Jackman
@CamilStaps A primeira pergunta é se esse usuário em particular modifica seu PATH nele ~/.profile. Mas, em qualquer caso, o comportamento de sudopode ser bastante configurado /etc/sudoers(consulte minha discussão com terdon); portanto, quando nossos sistemas se comportam de maneira diferente, isso provavelmente é causado por diferenças nos arquivos de configuração.
Uwe
0

da raiz você pode su -para o usuário e, em seguida, grep a variável de ambiente que deseja ver:

su - <username> -c 'echo $PATH'

Raza
fonte
por algum motivo, isso não funciona para mim, mesmo que o comando seja executado como um usuário diferente. Acabei usando "env", então sth como runuser -l <username> -c "env | grep <var>" | cut -d '=' -f 2funciona bem para mim. Se você não é root, precisa prefixar o comando com sudo.
Andrei-Niculae Petre