명령줄에 명령을 입력하면 기본적으로 셸에 지정된 이름의 실행 파일을 실행하라는 것입니다. 리눅스에서는 ls, find, file 등과 같은 실행 파일 프로그램이 일반적으로 시스템의 여러 디렉터리 내부에 있습니다. 이 디렉터리에 저장된 실행 파일의 실행 권한을 가진 모든 파일은 임의의 위치에서 실행할 수 있습니다. 실행 프로그램을 저장하는 가장 일반적인 디렉터리는 /bin, /sbin, /usr/sbin, /usr/local/bin 및 /usr/local/sbin입니다.
그러나 실행 프로그램을 검색할 디렉터리가 무엇인지 셸이 어떻게 알 수 있습니까? 셸이 전체 파일 시스템을 검색합니까?
답은 간단합니다. 명령을 입력하면 셸은 사용자 $PATH 변수에 지정된 모든 디렉토리를 검색하여 해당 이름의 실행 파일을 찾습니다.
리눅스 시스템에서 $PATH 변수에 디렉토리를 추가하는 방법을 설명합니다.
리눅스에서 $PATH란
$PATH 환경 변수는 실행 파일을 검색할 디렉터리를 셸에 알려주는 콜론으로 구분된 디렉터리 목록입니다.
$PATH에 어떤 디렉토리가 있는지 확인하려면 printenv 또는 echo 명령을 사용할 수 있습니다:
출력은 다음과 같습니다:
echo $PATH
# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/
동일한 이름을 공유하는 두 개의 실행 파일이 두 개의 다른 디렉토리에 있는 경우 셸은 $PATH에서 첫 번째로 오는 디렉토리에 있는 파일을 실행합니다.
$PATH에 디렉토리 추가
$PATH 변수에 다른 디렉토리를 추가하고자 하는 상황이 발생할 수 있습니다. 예를 들어, 일부 프로그램은 다른 위치에 설치될 수도 있고, 개인 스크립트를 위한 전용 디렉토리를 가지고 싶지만 실행 파일의 절대 경로를 지정하지 않고 실행할 수도 있습니다. 이를 위해서는 $PATH에 디렉토리를 추가하기만 하면 됩니다.
셸 스크립트를 보관하는 홈 디렉토리에 bin이라는 디렉토리가 있다고 가정해 보겠습니다. $PATH에 디렉토리를 추가하려면 다음을 입력하십시오:
export PATH="$HOME/bin:$PATH"
export 명령은 수정된 변수를 셸 자식 프로세스 환경으로 내보냅니다.
이제 파일의 전체 경로를 지정하지 않고 실행 가능한 스크립트 이름을 입력하여 스크립트를 실행할 수 있습니다.
그러나 이 변경 사항은 일시적일 뿐이며 현재 셸 세션에서만 유효합니다.
변경 사항을 영구적으로 변경하려면 셸 구성 파일에 $PATH 변수를 정의해야 합니다. 대부분의 리눅스 배포판에서는 새 세션을 시작할 때 환경 변수를 다음 파일에서 읽어 들입니다:
/etc/environment 및 /etc/profile과 같은 글로벌 셸별 구성 파일. 새 디렉터리를 모든 시스템 사용자 $PATH에 추가하려면 이 파일을 사용합니다.
사용자 셸별 구성 파일. 예를 들어, Bash를 사용하는 경우 ~/.bashrc 파일에서 $PATH 변수를 설정할 수 있습니다.
Zsh를 사용하는 경우 파일 이름은 ~/.zshrc입니다.
이 예제에서는 ~/.bashrc 파일에 변수를 설정합니다. 텍스트 편집기로 파일을 열고 파일의 끝에 다음 행을 추가합니다:
# ~/.bashrc
export PATH="$HOME/bin:$PATH"
source 명령을 사용하여 파일을 저장하고 새 $PATH를 현재 셸 세션에 로드합니다:
source ~/.bashrc
디렉토리가 성공적으로 추가되었는지 확인하려면 다음과 같이 입력하여 $PATH 값을 인쇄합니다:
echo $PATH
$PATH에서 디렉토리 제거
$PATH 변수에서 디렉터리를 제거하려면 해당 구성 파일을 열고 $PATH 변수에서 해당 디렉터리를 삭제해야 합니다. 변경 내용은 새 셸 세션에서 활성화됩니다.
또 다른 드문 상황은 현재 세션에 대해서만 $PATH에서 디렉터리를 제거하려는 경우입니다. 변수를 일시적으로 편집하여 이를 수행할 수 있습니다. 예를 들어 $PATH 변수에서 /home/lina/bin 디렉터리를 제거하려는 경우 다음 작업을 수행합니다:
PATH=$(echo "$PATH" | sed -e 's/:\/home\/lina\/bin$//')
위 명령에서 현재 $PATH 변수를 sed 명령으로 전달하고 있으며, sed 명령은 지정된 문자열(디렉토리 경로)을 제거합니다.
$PATH에 임시로 새 디렉터리를 추가한 경우 현재 터미널을 종료하고 새 디렉터리를 열어 제거할 수 있습니다. 임시 변경 사항은 현재 셸 세션에서만 유효합니다.
결론
사용자나 글로벌 $PATH 변수에 새로운 디렉터리를 추가하는 것은 꽤 간단합니다. 이를 통해 실행 파일의 전체 경로를 입력할 필요 없이 비표준 위치에 저장된 명령과 스크립트를 실행할 수 있습니다.
Ubuntu, CentOS, RHEL, Debian 및 Linux Mint를 포함한 모든 리눅스 배포판에도 동일한 지침이 적용됩니다.
'SW > 리눅스' 카테고리의 다른 글
Linux : Ubuntu 22.04 : 호스트 이름 변경 방법, 예제, 명령어 (0) | 2024.01.26 |
---|---|
Linux : Apache : HTTP를 HTTPS로 리디렉션 방법, 예제, 명령어 (0) | 2024.01.25 |
Linux : Ubuntu 22.04 : 스왑 공간을 추가 방법, 예제, 명령어 (0) | 2024.01.23 |
Linux : Ubuntu 22.04 : MySQL 설치 방법, 예제, 명령어 (0) | 2024.01.22 |
Linux : Ubuntu 22.04 : Git 설치 방법, 예제, 명령어 (0) | 2024.01.21 |