다른 사용자의 환경 변수 가져 오기


23

다른 사용자의 환경 변수를 볼 수있는 방법이 있습니까? 루트로 그렇게하고 싶습니다. 그래서 권한은 문제가되지 않습니다.

사용자 자신을 위해 echo $PATH또는 set | grep PATH(또는 set변수 이름을 기억하지 못하는 경우)을 사용합니다. 다른 사용자에게 유사한 지침은 무엇입니까?

가치가있는 것은 Ubuntu Server 13.04입니다.


4
사용자에게는 환경 변수가없고 프로세스에는 없습니다. 한 사용자가 실행 한 프로세스가 모두 동일한 환경을 갖는 것은 아닙니다. 어떤 문제를 해결하려고합니까?
Gilles 'SO- 악의를 멈춰라'

예를 들어 @Gilles는 사용자가 가지고있는 MAIL 폴더를 알고 싶습니다. 해당 사용자로 로그인 한 다음 할 수 echo $MAIL는 있지만 지름길이있을 것이라고 생각했습니다.

3
그래도 질문을 유용하게 정의하지는 않습니다 (예를 들어 수락 한 답변은 많은 요인에 따라 작동하거나 작동하지 않을 수 있음). 기본 사서함 위치를 찾고 있습니까? 사용자가 실제로 자신의 로컬 메일을받는 위치를 찾고 있습니까 (사용자가 다른 경우 존재하지 않을 수도 있음 .forward)? 사용자는 종종 자신의 .profile구성 파일이나 다른 구성 파일 에 몇 가지 변수를 설정하며 모든 변수 를 확실하게 열거 할 방법이 없습니다. 다시, 당신은 어떤 문제를 해결하려고합니까?
Gilles 'SO- 악마 그만해'

답변:


20

다른 옵션은을 사용하는 것 env입니다. 이것을 다음과 같이 실행하십시오 root.

sudo -Hiu $user env | grep $var

예를 들어

sudo -Hiu terdon env | grep HOME
HOME=/home/terdon

1
루트로 로그인하여 표준 사용자 이름으로이 명령을 실행하면을 얻습니다 HOME=/root. 루트의 홈 디렉토리이지만 표준 홈 디렉토리 가 아닙니다 . 특정 사용자가 로그인 할 때 얻을 수있는 환경을 알고 싶다면이 특정 사용자의 로그인 쉘 시작 스크립트를 실행해야합니다 (그의 로그인 쉘이 로그인 쉘과 다를 수 있음을 기억하십시오).
Uwe

어떤 시스템에서 @Uwe? 그것은 나를 위해 잘 작동합니다. 당신은 당신이로 로그인 의미합니까 root로그인 관리자에서? tty에 드롭하고로 로그인하면 정상적으로 작동합니다 root.
terdon

데비안 컴퓨터를 사용하고 있습니다. 나는 uwe로 로그인하고 xterm을 열고 실행 env | grep HOME하고 얻는다 HOME=/home/uwe. 내가 실행 su한 후 한 번 더 env | grep HOME얻을 HOME=/root그때 실행 sudo -u uwe env | grep HOME얻을 계속하고 HOME=/root.
Uwe

@uwe 이상하다. 나는 또한 데비안 (LMDE) 머신을 사용하고 있으며, 설명 한 것과 똑같은 프로세스를 수행했으며 ( xterm일반 터미널 대신 사용 ) 예상 결과를 얻었습니다.
terdon

매뉴얼에 따르면 sudo, -H옵션이 있거나 해당 항목이 입력 된 경우 에만 HOME 변수 /etc/sudoers를 설정하십시오. sudoers 파일이 다른 것 같습니다. 어쨌든 -H여기서 사용하는 것이 좋으며 아마도 사용하는 것이 좋습니다 -i.
Uwe

2

한 사용자의 경우 다음과 같이 할 수 있습니다.

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

모든 사용자의 $ PATH를 나열하십시오.

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

@Camil Staps

. ~/.profile내가 좋아하는 사람, Peteris Krumins에게서 배우는 속임수입니다. 그는 여기 트릭을 설명했다 . 어쩌면 나중에 bash 버전은 option으로 빌드되었을 것 NON_INTERACTIVE_LOGIN_SHELLS입니다.


감사! 들어 $PATH그것도없이 작동 . ~/.profile; 부분 - 그것은 무엇인가?

@CamilStaps "작동합니다"는 무슨 뜻입니까? 예, $PATH소싱하지 않아도 값을 얻을 수 ~/.profile있지만 원하는 값은 아닙니다 (=이 사용자가 로그인 할 때 볼 수있는 값). ~/.profile사용자가 시작 파일과 다른 셸을 사용할 수 있기 때문에 소싱조차 완전히 신뢰할 수 없습니다 ~/.profile.
Uwe

@ Uwe 나는없이 동일한 출력을 얻었지만 그게 우연의 일치라고 생각합니다.

사용자가 csh를 사용하지 않는다고 가정합니다.
glenn jackman 2016 년

@CamilStaps 첫 번째 질문은 특정 사용자가 자신의 PATH ~/.profile를 전혀 수정하는지 여부입니다 . 그러나 어쨌든 동작은 sudo상당히 많이 구성 될 수 있으므로 /etc/sudoers(터던과의 토론 참조) 시스템이 다르게 작동하면 구성 파일의 차이로 인한 것일 수 있습니다.
Uwe

0

루트 su -에서 사용자에게 할 수 있고 보려는 환경 변수를 grep하십시오.

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


어떤 이유로 명령이 다른 사용자로 실행 되더라도 이것이 작동하지 않습니다. 나는 "env"를 사용하여 결국 sth runuser -l <username> -c "env | grep <var>" | cut -d '=' -f 2가 잘 작동합니다. 루트가 아닌 경우 접두사로 명령을 사용해야합니다 sudo.
Andrei-Niculae Petre
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.