Linux: "/usr/bin/env"와 "/usr/bin/strings /proc/$$/environ"의 차이점

Linux: "/usr/bin/env"와 "/usr/bin/strings /proc/$$/environ"의 차이점

저는 리눅스를 배우고 있는데 읽던 책에서 다음과 같은 문제를 발견했습니다.

환경 변수를 인쇄하는 두 가지 방법이 있습니다. 차이점을 설명해 주세요.

$ /usr/bin/env
$ /usr/bin/strings /proc/$$/environ

Google과 책에서 검색한 결과 두 가지 방법 모두 현재 프로세스의 환경 변수를 인쇄한다고 나와 있지만 실행하려고 하면 차이점이 보이고 그 이유는 알 수 없습니다.

다음 명령을 사용하십시오.

/usr/bin/env > file1 

/usr/bin/strings /proc/$$/environ > file2

이제 파일 간의 차이점을 확인하고 싶으므로 행을 정렬하고 file1의 행이 file2에 나타나는지 또는 그 반대인지 확인합니다.

결과 comm -13 <(sort -u file1) <(sort -u file2)

여기에 이미지 설명을 입력하세요.

내가 사용할 때comm -13 <(sort -u file2) <(sort -u file1) 여기에 이미지 설명을 입력하세요.

(명령 소스:파일의 모든 줄이 다른 파일에 나타나는지 확인)

답변1

proc(5)현재 Ubuntu 시스템의 매뉴얼 에는 다음과 같이 설명되어 있습니다 /proc/[pid]/environ.

이 파일에는 시작 시 현재 실행 중인 프로그램이 설정한 초기 환경이 포함되어 있습니다 execve(2).

$$이는 현재 셸의 PID이므로 현재 /proc/$$/environ셸의 환경, 즉 셸의 초기화 파일이 실행되기 전 셸이 시작될 때의 모습을 포함합니다.

env유틸리티는 현재 상태 그대로 환경을 출력합니다. 쉘 초기화 스크립트가 환경을 수정하는 경우 또는 새 쉘 변수를 환경으로 수동으로 내보내거나 환경 변수를 설정 해제하는 경우 상황이 다를 수 있습니다.

표시되는 정보에서 현재 작업 디렉터리 PWD는 셸이 시작된 디렉터리이지만 명령을 실행하기 위해 /home/seed해당 디렉터리로 이동했음을 알 수 있습니다( 그림과 같이 먼저 로 이동 ). 또한 쉘의 초기화 파일이 , , 변수를 설정 하고 수정하는 것을 볼 수 있습니다 ./home/seed/Desktop/Lab1env/home/seed/DesktopOLDPWDLESSOPENLESSCLOSELS_COLORSPATH

관련 정보