PATH (변수)
PATH는 유닉스 계열 운영 체제, 도스, OS/2 및 마이크로소프트 윈도우의 환경 변수로, 실행 가능한 프로그램이 있는 디렉터리 집합을 지정한다. 일반적으로 실행 중인 프로세스나 사용자 세션마다 고유한 PATH 설정이 있다.
역사
[편집]멀틱스는 검색 경로(search path)라는 아이디어를 창안했다. 초기 유닉스 셸은 /bin에서 프로그램 이름만 찾았지만, 버전 3 유닉스에서는 디렉토리가 너무 커서 /usr/bin 및 검색 경로가 운영 체제의 일부가 되었다.
유닉스와 유닉스 계열
[편집]POSIX 및 유닉스 계열 운영 체제에서 $PATH 변수는 콜론(:) 문자로 구분된 하나 이상의 디렉터리 이름 목록으로 지정된다. PATH 문자열의 디렉터리는 이스케이프되지 않으므로 이름에 :이 포함된 디렉터리를 가질 수 없다.
/bin, /usr/bin 및 /usr/local/bin 디렉토리는 일반적으로 대부분의 사용자의 $PATH 설정에 포함된다(구현마다 다르지만). 또한 슈퍼유저는 시스템 관리 명령을 쉽게 실행할 수 있도록 일반적으로 /sbin 및 /usr/sbin 항목을 가지고 있다. 현재 디렉터리(.)는 때때로 사용자에게도 포함되어 현재 작업 디렉터리에 있는 프로그램을 직접 실행할 수 있도록 한다. 일반적으로 시스템 관리자는 악의적인 tarbomb에 의해 배치될 수 있는 현재 디렉토리에 있는 스크립트가 실수로 실행되는 것을 방지하기 위해 이를 $PATH에 포함하지 않는다. 이 경우 해당 프로그램을 실행하려면 명령줄에서 절대 경로(/home/userjoe/bin/script.sh) 또는 상대 경로(./script.sh)를 지정해야 한다.
사용자가 명령 이름을 지정하거나 프로그램에서 exec 호출이 이루어지면 시스템은 $PATH를 통해 목록의 각 디렉터리를 왼쪽에서 오른쪽으로 검사하여 명령 이름과 일치하는 파일 이름을 찾는다. 일단 발견되면 프로그램은 명령을 실행한 명령 셸 또는 프로그램의 하위 프로세스로 실행된다.
DOS, OS/2 및 윈도우
[편집]DOS, OS/2 및 윈도우 운영 체제에서 %PATH% 변수는 세미콜론(;) 문자로 구분된 하나 이상의 디렉터리 이름 목록으로 지정된다.
윈도우 시스템 디렉터리(일반적으로 C:\WINDOWS\system32)는 일반적으로 경로의 첫 번째 디렉터리이고 그 뒤에는 설치된 소프트웨어 패키지에 대한 많은(전부는 아님) 디렉터리가 온다. 많은 프로그램은 명령 창에서 실행되지 않고 그래픽 사용자 인터페이스에서 실행되도록 설계되었기 때문에 경로에 나타나지 않는다. 일부 프로그램은 검색 프로세스 속도를 높이거나 OS 명령을 재정의하기 위해 설치 중에 PATH 변수 내용 앞에 해당 디렉터리를 추가할 수 있다. DOS 시대에는 AUTOEXEC.BAT에 "PATH {프로그램 디렉터리};%PATH%" 또는 "SET PATH={프로그램 디렉터리};%PATH%" 줄을 추가하는 것이 관례였다.
명령 셸에 명령을 입력하거나 프로그램이 프로그램을 실행하기 위해 시스템 호출을 하면 시스템은 먼저 현재 작업 디렉터리를 검색한 다음 경로를 검색하여 왼쪽에서 오른쪽으로 각 디렉터리를 검사하여 실행 가능한 파일 이름을 찾는다. 주어진 명령 이름과 일치한다. 실행 가능한 프로그램의 파일 이름 확장자는 EXE 또는 COM이고, 배치 스크립트의 확장자는 BAT 또는 CMD이다. 다른 실행 파일 이름 확장자도 시스템에 등록할 수 있다.
일치하는 실행 파일이 발견되면 시스템은 이를 실행하는 새로운 프로세스를 생성한다.
PATH 변수를 사용하면 자체 폴더에 있는 일반적으로 사용되는 프로그램을 쉽게 실행할 수 있다. 그러나 현명하지 않게 사용하면 PATH 변수 값이 너무 많은 위치를 검색하거나 잘못된 위치를 검색하여 운영 체제 속도를 저하시킬 수 있다.
잘못된 위치는 서비스, 특히 일반적으로 윈도우 서버 환경 내의 다른 서비스에 대한 종속성인 'Server' 서비스의 실행을 중지할 수도 있다.