환경 변수(Environment Variable)란?

프로세스가 가진 '이름=값' 쌍의 모음으로, 프로그램의 동작을 밖에서 설정하는 데 쓴다. 프로세스를 시작하면 부모의 환경 변수 사본이 자식에게 이어진다. 셸에서는 export X=1처럼 export한 변수만 환경 변수가 되어 자식 프로세스에 전달되며, 대입만 한 변수는 그 셸 안에서만 쓰인다. 명령을 찾는 디렉터리인 PATH, 홈 디렉터리인 HOME, 공유 라이브러리를 찾는 LD_LIBRARY_PATH 외에, EDA 도구의 라이선스 서버 지정 등에도 쓰인다. env나 printenv로 목록을 표시할 수 있다.

일본어 명칭: 環境変数

환경 변수(Environment Variable)은(는) Linux와 커맨드 라인 기초, 링커, 로더, 실행 파일, 웹 기술 기초 등 3개 분야의 연습 문제 5개에 나와요.

분야: Linux와 커맨드 라인 기초

도전해 보기: 환경 변수(Environment Variable) 관련 문제

프로그램을 기동할 때(Linux의 execve 등) OS 로더가 수행하는 일로 올바른 것은 무엇입니까?

  1. A소스 코드를 읽어 들여 그 자리에서 컴파일한 뒤 실행한다
  2. B실행 파일의 프로그램 헤더에 따라 각 부분을 메모리에 배치하고, 스택에 인수 등을 준비한 뒤 입구 주소부터 실행을 시작한다
  3. C실행 파일의 모든 심볼 이름을 화면에 표시한 뒤 실행한다
정답과 해설 보기

정답: B. 실행 파일의 프로그램 헤더에 따라 각 부분을 메모리에 배치하고, 스택에 인수 등을 준비한 뒤 입구 주소부터 실행을 시작한다

로더는 실행 파일의 헤더를 읽고, 프로그램 헤더에 적힌 각 부분(세그먼트)을 읽기, 쓰기, 실행 권한을 붙여 가상 주소 공간에 대응시킵니다. BSS를 위한 0 영역과 스택을 준비하고, 커맨드라인 인수와 환경 변수를 스택에 쌓습니다. 동적 링크라면 동적 링커를, 그렇지 않으면 실행 파일의 입구 주소부터 실행을 시작합니다.

현재 디렉터리에 있는, 실행 권한이 붙은 스크립트 run.sh를 'run.sh'라고 입력하여 실행하려고 하면 'command not found'가 되고, './run.sh'라고 입력하면 실행할 수 있었다. 이유로 올바른 것은?

  1. Arun.sh에 실행 권한이 붙어 있지 않으며, 앞에 ./를 붙였을 때만은 권한이 없어도 실행할 수 있기 때문에
  2. B슬래시를 포함하지 않는 명령 이름은 환경 변수 PATH의 디렉터리에서만 찾으며, 현재 디렉터리는 일반적으로 포함되지 않기 때문에
  3. Crun.sh 첫 줄의 #!/bin/bash(셔뱅)는 앞에 ./를 붙여 실행했을 때만 읽히기 때문에
정답과 해설 보기

정답: B. 슬래시를 포함하지 않는 명령 이름은 환경 변수 PATH의 디렉터리에서만 찾으며, 현재 디렉터리는 일반적으로 포함되지 않기 때문에

셸(shell)은 슬래시를 포함하지 않는 명령 이름을 받으면, 환경 변수 PATH에 콜론으로 구분되어 나열된 디렉터리(/usr/local/bin:/usr/bin 등)를 순서대로 찾아 실행합니다. 현재 디렉터리는 다른 곳에 놓인 같은 이름의 악의적인 프로그램을 실수로 실행하지 않도록 일반적으로 PATH에 넣지 않습니다. ./run.sh처럼 슬래시를 포함한 경로를 쓰면 PATH를 찾지 않고 그 파일을 직접 실행합니다. 첫 줄의 #!/bin/bash(셔뱅)는 어느 방법으로 시작하든 그 스크립트를 실행할 인터프리터를 지정합니다.

해설 속 환경 변수(Environment Variable)

환경 변수(Environment Variable)이(가) 나오는 문제 (5)

  1. 프로그램을 기동할 때(Linux의 execve 등) OS 로더가 수행하는 일로 올바른 것은 무엇입니까?
  2. 현재 디렉터리에 있는, 실행 권한이 붙은 스크립트 run.sh를 'run.sh'라고 입력하여 실행하려고 하면 'command not found'가 되고, './run.sh'라고 입력하면 실행할 수 있었다. 이유로 올바른 것은?
  3. 위의 명령을 순서대로 실행했을 때, 두 bash -c의 출력의 조합으로 올바른 것은?
  4. cron에 '30 2 * * 1 /home/alice/backup.sh'를 등록했다. backup.sh가 실행되는 시점으로 올바른 것은?
  5. CGI에서는 웹 서버가 요청을 받을 때마다 프로그램을 새로운 프로세스로 기동하고, 처리가 끝나면 프로세스는 종료된다. FastCGI나 애플리케이션 서버 방식이 CGI에 비해 많은 요청을 효율적으로 처리할 수 있는 주된 이유는?

관련 용어

셸(Shell) 로더(Loader) 스택(Stack) 인수(Argument) 동적 링크(Dynamic Linking) 동적 링커(Dynamic Linker) 변수(Variable) cron 슈퍼유저(Superuser) 시그널(Unix 시그널)

용어집으로 돌아가기