Obtener variable de entorno de otro usuario [cerrado]

23

¿Hay alguna manera de ver la variable de entorno de otro usuario? Quiero hacer eso como root, así que supongo que los permisos no serán un problema.

Para el usuario mismo, uso echo $PATHo set | grep PATH(o setcuando no recuerdo el nombre de la variable). ¿Cuál sería una instrucción similar para otro usuario?

Por lo que vale, estoy en Ubuntu Server 13.04.


fuente
44
Los usuarios no tienen variables de entorno, los procesos sí. Es común que los procesos ejecutados por un usuario no tengan todos el mismo entorno. ¿Que problema estas tratando de resolver?
Gilles 'SO- deja de ser malvado'
@Gilles, por ejemplo, quiero saber qué carpeta de CORREO tiene un usuario. Podría iniciar sesión como ese usuario y luego hacerlo echo $MAIL, pero pensé que podría haber un acceso directo.
3
Eso todavía no define la pregunta de manera útil (y, por ejemplo, la respuesta que ha aceptado puede o no funcionar dependiendo de muchos factores). ¿Estás buscando la ubicación predeterminada del buzón? ¿Está buscando la ubicación donde el usuario realmente recibe su correo local (que puede ser diferente, y puede no existir, si el usuario tiene un .forward)? Los usuarios a menudo establecen algunas variables en sus .profileu otros archivos de configuración, y no hay forma de enumerarlas todas de manera confiable. De nuevo, ¿qué problema estás tratando de resolver?
Gilles 'SO- deja de ser malvado'

Respuestas:

20

Otra opción es usar env. Ejecute esto como root:

sudo -Hiu $user env | grep $var

Por ejemplo

sudo -Hiu terdon env | grep HOME
HOME=/home/terdon
terdon
fuente
1
Cuando inicio sesión como root y ejecuto este comando para mi nombre de usuario estándar, obtengo HOME=/root. Ese es el directorio inicial de la raíz, pero es no mi directorio estándar. Si desea conocer el entorno que obtendría un usuario en particular cuando inicie sesión, debe ejecutar los scripts de inicio del shell de inicio de sesión de este usuario en particular (y recuerde que su shell de inicio de sesión puede ser diferente de su shell de inicio de sesión).
Uwe
@Uwe en qué sistema? Funciona bien para mí. ¿Quiere decir que rootinicia sesión desde el administrador de inicio de sesión? Funciona bien si me dejo caer en un tty e inicio sesión como root.
terdon
Estoy en una máquina Debian. Me conecto como uwe, abro un xterm, corro env | grep HOMEy obtengo HOME=/home/uwe; Ejecuto suy luego una vez más env | grep HOMEy obtengo HOME=/root, luego corro sudo -u uwe env | grep HOMEy sigo obteniendo HOME=/root.
Uwe
@uwe extraño. También estoy en una máquina Debian (LMDE), hice exactamente el mismo proceso que describiste (incluso usé en xtermlugar de mi terminal habitual) y obtuve el resultado esperado.
terdon
De acuerdo con el manual, sudoestablece la variable INICIO solo si la -Hopción está presente o si la entrada correspondiente /etc/sudoersestá establecida. Parece que nuestros archivos sudoers difieren. De todos modos, probablemente sea una buena idea usar -Haquí, y posiblemente también -i.
Uwe
2

Para un usuario, puede hacer lo siguiente:

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

Lista $ PATH de todos los usuarios:

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

@Camil Staps

. ~/.profileEs un truco que aprendo de mi persona favorita, Peteris Krumins. Explicó el truco aquí . Tal vez la versión bash posterior tenía construcción con opción NON_INTERACTIVE_LOGIN_SHELLS.

Cuonglm
fuente
¡Gracias! Porque $PATHtambién funciona sin la . ~/.profile; parte: ¿para qué sirve?
@CamilStaps ¿Qué quieres decir con "funciona"? Sí, obtienes un valor $PATHincluso sin abastecimiento ~/.profile, pero es casi seguro que no sea el que deseas (= el valor que este usuario vería cuando iniciara sesión). Incluso el abastecimiento ~/.profileno es totalmente confiable, ya que el usuario puede usar un shell cuyo archivo de inicio es diferente ~/.profile.
Uwe
@Uwe obtuve la misma salida sin, pero supongo que es solo una coincidencia entonces.
Está asumiendo que el usuario no está usando csh.
Glenn Jackman
@CamilStaps La primera pregunta es si ese usuario en particular modifica su RUTA en ~/.profileabsoluto. Pero en cualquier caso, el comportamiento de sudose puede configurar bastante en /etc/sudoers(vea mi discusión con terdon), por lo que cuando nuestros sistemas se comportan de manera diferente, probablemente sea causado por diferencias en los archivos de configuración.
Uwe
0

desde la raíz puede su -al usuario y luego grep la variable de entorno que desea ver:

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

Raza
fuente
Por alguna razón, esto no funciona para mí, incluso si el comando se ejecuta como un usuario diferente. Terminé usando "env", así que algo runuser -l <username> -c "env | grep <var>" | cut -d '=' -f 2funciona bien para mí. Si no es root, necesita prefijar el comando con sudo.
Andrei-Niculae Petre