본문 바로가기
Linux

[TIL] 환경 변수의 PATH는 뭔데 자꾸 추가하라고 할까?

by r4bb1t 2021. 5. 2.
반응형

PATH가 뭔데

환경 변수(環境 變數, 영어: environment variable)는 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는, 동적인 값들의 모임이다. 라고 위키백과에 적혀 있는데요. 말 그대로 시스템에 반영되는 변수겠죠. 그런데 이렇게만 보면 PATH에 대해서는 사실 잘 모르겠습니다. 대체 뭔데 프로그램을 깔고 나면 설치 경로를 환경 변수 PATH에 추가하라고 할까요?

 

 

일단 윈도우에서 시스템 환경 변수 편집에서 환경 변수에 들어가면 환경 변수의 목록을 볼 수 있는데

 

 

여기서 Path를 찾아서 편집을 누르면 이렇게 목록이 뜹니다. 귀찮으면 윈도우의 경우

 

$ echo %path% 

 

cmd 열어서 이렇게 쳐도 나오고요. (윈도우가 아니면 아마 $PATH)

이 path가 대체 뭐냐면 프로그램을 찾는 기본 경로입니다. 원래 일반적인 경우 프로그램을 설치하면, 그 프로그램이 있는 경로에서 실행해야 합니다. 예를 들어 VS Code를 설치했다고, 아무 폴더에서나 cmd를 열고 code . 를 입력해 VS Code를 열 수 있으면 이상하잖아요. code라는 명령어가 뭔지 컴퓨터가 알고 있는 게 아니니까요.

 

code라는 명령어가 뭘 뜻하는지 그럼 누가 알고있을까요?

일반적으로 (아마 기본 폴더)

 

C:\Users\user\AppData\Local\Programs\Microsoft VS Code\bin

 

여기를 봅시다.

 

여기에 있는 code.cmd를 실행하면 VS Code가 켜집니다. 얘네가 code 명령어를 해석해서 VS Code를 열어주는 것 같습니다. 이제 code 명령어를 내 컴퓨터 어디서나 쓸 수 있도록 하기 위해서는 컴퓨터에 "code라는 명령어는 C:\Users\user\AppData\Local\Programs\Microsoft VS Code\bin 여기에 있어!" 라고 알려줘야 합니다. 저 경로를 환경 변수의 PATH에 추가해주는 게 바로 컴퓨터에 어디서 명령어를 검색할지 알려주는 행동인 겁니다.

 

사실 VS Code를 예시로 들었지만 얘는 설치할때 기본적으로 PATH에 추가하는 체크박스가 있어서 많은 분들이 설치할 때 자동으로 추가하셨을 거 같아요. 🙄 어쨌든 그런 것입니다.

 

Linux의 폴더 구조

 

저는 요즘 Ubuntu를 사용하고 있는데요. 궁금한 게 있었습니다. 분명 윈도우에서 특정 프로그램을 설치했을 때는 전역 실행을 위해 PATH에 경로를 등록해야 했던 기억이 있는데, 우분투에서는 등록을 안 해줘도 전역 실행이 되는 겁니다. 왜 되지? 싶어서 인프라 팀장님께 여쭈어 보니 리눅스의 폴더 구조 규칙 때문이라고 하시더라고요.

 

http://www.doc.ic.ac.uk/~wjk/UnixIntro/Lecture2.html

리눅스의 mv, cp, rm 같은 시스템 명령어들은 /bin에 저장되어 있습니다. /usr/bin/에는 일반 유틸리티나 python 등의 프로그래밍 언어 실행 스크립트 등 대부분의 사용자 명령어가 위치하고 있고요. 그리고 /usr/local/bin에는 사용자가 실행하는 프로그램 명령어들이 저장되는 곳이라는 규칙이 있습니다. 이렇게 명령어의 위치에 대한 규칙이 있어서, 터미널에서 명령어를 입력하면 /usr/local/bin, /usr/bin, /bin 폴더에서 명령어를 검색해서 실행합니다.

보통 apt-get 등으로 패키지를 가져와서 설치하는데요, 각 패키지들에는 설치 경로가 명시되어있습니다. 그래서 이렇게 설치한 명령어들은 규칙에 따라 주로 /usr/local/bin에 저장이 된다고 합니다. 그래서 따로 환경 변수를 주입하지 않아도 전역에서 명령어를 실행할 수 있는 거였어요.

 

또 위 폴더들이 아닌 다른 경로에 설치된 명령어도

 

PATH=$PATH:폴더

 

로 등록 해주면 전역으로 쓸 수 있습니다. 와! 아무튼 궁금증이 해결되었습니다.

반응형

댓글