저는 리눅스를 배우고 있는데 읽던 책에서 다음과 같은 문제를 발견했습니다.
환경 변수를 인쇄하는 두 가지 방법이 있습니다. 차이점을 설명해 주세요.
$ /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/Lab1
env
/home/seed/Desktop
OLDPWD
LESSOPEN
LESSCLOSE
LS_COLORS
PATH