Linux에서 $PATH에 디렉토리를 추가하는 방법

$PATH는 Linux 컴퓨터의 배경에 있는 자동 조작기 중 하나입니다. 그것은 조용히 사용자 경험에 영향을 주지만 그것에 대해 그늘진 것은 없습니다. 우리는 그것이 하는 일과 그것을 조정할 수 있는 방법을 설명할 것입니다.

Linux에서 $PATH란 무엇이며 어떻게 작동합니까?

터미널 창에 명령을 입력하고 Enter 키를 누르면 명령이 실행되기 전에 많은 작업이 시작됩니다.

세게 때리다 대부분의 Linux 배포판에서 기본 셸입니다. 입력한 텍스트 줄을 해석하고 매개변수, 파이프, 리디렉션, 그리고 다른 무엇이든 거기에 있습니다. 그런 다음 해당 명령에 대한 실행 가능한 바이너리를 찾고 제공한 매개변수를 사용하여 실행합니다.

쉘이 실행 파일을 찾기 위해 취하는 첫 번째 단계는 바이너리가 포함되어 있는지 여부를 식별하는 것입니다. 사용하는 명령이 쉘 자체 내에 있는 경우(a “쉘 내장”) 더 이상 검색할 필요가 없습니다.

쉘 내장은 쉘에 필수적이기 때문에 찾기가 가장 쉽습니다. 도구 벨트에 두는 것과 같습니다. 항상 귀하와 함께 있습니다.

하지만 다른 도구 중 하나가 필요하면 작업장을 뒤져 찾아야 합니다. 작업대에 있습니까 아니면 벽걸이에 있습니까? 이것이 $PATH 환경 변수가 하는 일입니다. 그것은 쉘이 검색하는 장소의 목록과 검색되는 순서를 담고 있습니다.

명령인지 여부를 확인하려면 쉘 내장, 별칭, 함수 또는 독립 실행형 바이너리 mv /work/unfile, 아래와 같이 type 명령을 사용할 수 있습니다.

type clear
type cd

그만큼

이것은 clear가 바이너리 파일이고 경로에서 발견된 첫 번째 파일이 /usr/bin에 있음을 알려줍니다. 컴퓨터에 둘 이상의 clear 버전이 설치되어 있을 수 있지만 이것이 쉘이 사용하려고 시도하는 버전입니다.

당연히 cd는 쉘 내장입니다.

$PATH 나열

경로에 무엇이 있는지 쉽게 확인할 수 있습니다. echo 명령을 사용하려면 다음을 입력하십시오. 그리고 값을 출력 $PATH 변수에 보관:

echo $PATH

그만큼

출력은 콜론(:)으로 구분된 파일 시스템 위치의 목록입니다. 셸은 경로를 통해 왼쪽에서 오른쪽으로 검색하여 명령을 수행하기 위해 일치하는 실행 파일이 있는지 각 파일 시스템 위치를 확인합니다.

  Google 어시스턴트를 위한 최고의 농담, 게임, 이스터 에그

목록을 통해 검색할 파일 시스템 위치와 검색 순서를 확인할 수 있습니다.

/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/큰 상자
/usr/게임
/usr/local/games
/스냅/빈

즉시 명확하지 않을 수 있는 것은 검색이 현재 작업 디렉토리에서 시작되지 않는다는 것입니다. 오히려 나열된 디렉토리를 통해 작동하고 나열된 디렉토리만 작동합니다.

현재 작업 디렉토리가 경로에 없으면 검색되지 않습니다. 또한 경로에 없는 디렉토리에 명령이 저장되어 있으면 쉘이 해당 명령을 찾지 못합니다.

이것을 보여주기 위해 우리는 rf라는 작은 프로그램을 만들었습니다. 실행되면 rf는 터미널 창에서 실행된 디렉토리의 이름을 인쇄합니다. /usr/local/bin에 있습니다. 또한 /dave/work 디렉토리에 최신 버전이 있습니다.

다음 which 명령을 입력합니다. 우리 프로그램의 버전을 보여주기 위해 쉘은 다음을 찾아 사용합니다.

which rf

그만큼

쉘은 발견된 버전이 경로에 있는 디렉토리에 있는 버전임을 보고합니다.

실행하기 위해 다음을 입력합니다.

rf

그만큼

rf 버전 1.0이 실행되고 우리의 예상이 맞았음을 확인합니다. 발견되고 실행된 버전은 /usr/local/bin에 있습니다.

이 컴퓨터에서 다른 버전의 rf를 실행하려면 아래와 같이 명령줄에서 실행 파일의 경로를 사용해야 합니다.

./work/rf

그만큼

실행하려는 rf 버전을 찾을 위치를 쉘에 지정했으므로 이제 버전 1.1을 사용합니다. 이 버전을 선호한다면 /usr/local/bin 디렉토리에 복사하고 이전 버전을 덮어쓸 수 있습니다.

rf의 새 버전을 개발 중이라고 가정해 보겠습니다. 개발하고 테스트할 때 자주 실행해야 하지만 릴리스되지 않은 개발 빌드를 실제 환경에 복사하고 싶지는 않습니다.

또는 rf의 새 버전을 다운로드하여 공개적으로 사용 가능하게 하기 전에 검증 테스트를 하고 싶을 수도 있습니다.

경로에 작업 디렉토리를 추가하면 쉘이 우리 버전을 찾도록 합니다. 그리고 이 변경 사항은 우리에게만 영향을 미칠 것입니다. 다른 사람들은 여전히 ​​/usr/local/bin에 있는 rf 버전을 사용합니다.

$PATH에 디렉토리 추가하기

내보내기 명령을 사용하여 디렉토리 추가 $PATH에. 디렉토리는 쉘이 검색하는 파일 시스템 위치 목록에 포함됩니다. 쉘이 일치하는 실행 파일을 찾으면 검색을 중지하므로 /usr/local/bin보다 먼저 디렉토리를 검색하는지 확인해야 합니다.

  iPhone 카메라를 수동으로 제어하는 ​​방법(그리고 원하는 이유)

이것은 하기 쉽습니다. 이 예에서는 다음을 입력하여 경로의 시작 부분에 디렉터리를 추가하여 검색된 첫 번째 위치가 되도록 합니다.

export PATH=/home/dave/work:$PATH

그만큼

이 명령은 $PATH를 우리가 추가하는 디렉토리, /home/dave/work, 그리고 전체 현재 경로와 같도록 설정합니다.

첫 번째 PATH에는 달러 기호($)가 없습니다. PATH 값을 설정합니다. 마지막 $PATH에는 PATH 변수에 저장된 내용을 참조하기 때문에 달러 기호가 있습니다. 또한 새 디렉토리와 $PATH 변수 이름 사이의 콜론(:)에 유의하십시오.

이제 경로가 어떻게 생겼는지 봅시다.

echo $PATH

그만큼

/home/dave/work 디렉토리가 경로 시작 부분에 추가됩니다. 우리가 제공한 콜론은 경로의 나머지 부분을 분리합니다.

rf 버전이 처음 발견된 버전인지 확인하기 위해 다음을 입력합니다.

which rf

그만큼

푸딩의 증명은 아래와 같이 rf를 실행하고 있습니다.

rf

그만큼

쉘은 버전 1.1을 찾아 /home/dave/work에서 실행합니다.

경로 끝에 디렉터리를 추가하려면 다음과 같이 명령 끝으로 이동하면 됩니다.

export PATH=$PATH:/home/dave/work

변경 사항을 영구적으로 만들기

처럼 베스 브룩-마시니악 “성공은 좋지만 성공은 덧없다.” 터미널 창을 닫는 순간 $PATH에 대한 변경 사항은 모두 사라집니다. 영구적으로 만들려면 내보내기 명령을 구성 파일에 넣어야 합니다.

.bashrc 파일에 내보내기 명령을 넣으면 터미널 창을 열 때마다 경로가 설정됩니다. 같지 않은 SSH 세션, 로그인해야 하는 이러한 세션을 “대화형” 세션이라고 합니다.

과거에는 터미널 세션에 로그인하기 위한 경로를 설정하기 위해 .profile 파일에 내보내기 명령을 넣었습니다.

그러나 내보내기 명령을 .bashrc 또는 .profile 파일에 넣으면 대화형 및 로그인 터미널 세션 모두에 대한 경로를 올바르게 설정한다는 것을 알았습니다. 당신의 경험은 다를 수 있습니다. 모든 경우를 처리하기 위해 두 파일에서 처리하는 방법을 보여 드리겠습니다.

/home 디렉토리에서 다음 명령을 사용하여 .bashrc 파일을 편집하십시오.

gedit .bashrc

그만큼

.bashrc 파일이 로드된 상태로 gedit 편집기가 열립니다.

gedit 편집기는

파일 맨 아래로 스크롤한 다음 이전에 사용한 다음 내보내기 명령을 추가합니다.

export PATH=/home/dave/work:$PATH

파일을 저장합니다. 다음으로 터미널 창을 닫았다가 다시 열거나 dot 명령을 사용하여 다음과 같이 .bashrc 파일을 읽습니다.

  Amazon Echo에서 음악을 재생하는 방법

. .bashrc

그런 다음 다음 echo 명령을 입력하여 경로를 확인합니다.

echo $PATH

그만큼

이것은 경로의 시작 부분에 /home/dave/work 디렉토리를 추가합니다.

.profile 파일에 명령을 추가하는 과정은 동일합니다. 다음 명령을 입력합니다.

gedit .profile

그만큼

gedit 편집기는 .profile 파일이 로드된 상태로 시작됩니다.

gedit 편집기는

파일 맨 아래에 내보내기 명령을 추가한 후 저장합니다. 새 터미널 창을 닫고 여는 것만으로는 .profile 파일을 강제로 다시 읽을 수 없습니다. 새 설정을 적용하려면 로그아웃했다가 다시 로그인하거나 아래와 같이 dot 명령을 사용해야 합니다.

. .profile

모두를 위한 길 설정하기

시스템을 사용하는 모든 사람의 경로를 설정하려면 /etc/profile 파일을 편집할 수 있습니다.

다음과 같이 sudo를 사용해야 합니다.

sudo gedit /etc/profile

gedit 편집기가 시작되면 파일 맨 아래에 내보내기 명령을 추가하십시오.

gedit 편집기는

파일을 저장하고 닫습니다. 변경 사항은 다른 사용자가 다음에 로그인할 때 적용됩니다.

보안에 대한 참고 사항

아래와 같이 경로에 실수로 선행 콜론 “:”을 추가하지 않도록 하십시오.

그만큼

그렇게 하면 현재 디렉터리를 먼저 검색하므로 보안 위험이 발생합니다. 아카이브 파일을 다운로드하여 디렉토리에 압축을 푼다고 가정해 보겠습니다. 파일을 보고 다른 압축 파일을 봅니다. 해당 아카이브를 추출하려면 unzip을 한 번 더 호출합니다.

첫 번째 아카이브에 악성 실행 파일인 unzip이라는 실행 파일이 포함되어 있으면 실제 unzip 실행 파일 대신 실수로 해당 파일을 실행하게 됩니다. 이것은 쉘이 현재 디렉토리를 먼저 찾기 때문에 발생합니다.

따라서 내보내기 명령을 입력할 때는 항상 주의하십시오. echo $PATH를 사용하여 그것들을 검토하고 원하는 대로 되어 있는지 확인하십시오.