환경 변수. 어디에 보관되어 있나요? [복사]

환경 변수. 어디에 보관되어 있나요? [복사]

.bashrc 또는 기타 구성 파일을 편집하지 않으면 로그아웃하거나 터미널을 닫을 때 설정한 환경 변수가 사라집니다.

제가 궁금한 점은 "임시" 환경 변수가 어디에 저장되어 있느냐는 것입니다.

나는 그들이 기억 속에 있을지도 모른다고 생각합니다. 터미널이 닫히면 사라지기 때문에 이는 의미가 있습니다(메모리에서 사라지는 데 사용하는 터미널과 동일). 내가 맞나요?

답변1

환경 변수는 프로세스와 관련된 메모리에 저장됩니다.

각 프로세스는 자체 환경 변수 세트에 액세스할 수 있습니다. 하위 프로세스("현재" 프로세스에 의해 시작된 프로세스)는 상속을 받습니다.복사이러한 변수. 어떤 프로세스도 다른 프로세스의 환경 변수를 변경할 수 없습니다.

예를 들어 , 셸을 사용하면 bash로그인 시 환경 변수를 정의하거나 새 bash프로세스를 시작할 수 있습니다. 또한 쉘 자체에 의해 정의된 환경 변수가 많이 있으며( PWD주석 프롬프트 후에 알아냈습니다), 예를 들어 PATH더 깊은 수준에서 사용되는 다른 변수도 있습니다 shell(이 경우 시스템 라이브러리에 의해).

답변2

엄밀히 말하면 환경 변수는 우리가 일반적으로 생각하는 것처럼 "저장"되지 않습니다. 프로세스의 메모리에 존재합니다. 프로세스가 시작될 때 생성됩니다(호출 프로세스의 환경 변수의 복사본으로 가능).

Linux에서는 실제로할 수 있는환경 변수가 필요한 프로세스의 PID를 알고 있다면 이를 일종의 "파일"로 가져옵니다. 그들은 거기 있다 /proc/<pid>/environ.

Bash에서는 환경 변수에서 PID를 얻을 수 있으므로 $원하는 파일은 /proc/$$/environ사이에 널 문자가 있는 이름=값 쌍으로 저장됩니다. 이것은 실제로 파일은 아니지만(그리고 쓸 수는 없습니다), 다음과 같이 할 수 있습니다.사용할 권리때로는 편리하므로 파일인 것처럼 작동합니다.

답변3

예, 아니오(그러나 아니오보다는 예가 더 많습니다). 이는 셸의 메모리에 상주하므로 현재 셸이 종료될 때 사라질 뿐만 아니라 현재 셸이 아닌 다른 곳에서 새 셸을 열면 존재하지 않습니다.

관련 정보