좋아요, 우선 저는 Linux를 처음 접했고 Linux Mint를 사용하고 있습니다.
내(특히 내 홈 디렉토리)에 더 많은 디렉토리를 추가하려면 PATH
와 유사한 Bash 명령이 필요하다는 것을 배웠습니다 PATH=$PATH:~
. 그렇죠?
$PATH
문제는 왜 그것을 거기에 넣어야 하는가 입니다. 시스템 경로를 의미합니다. 그렇죠? 그냥 입력하면 작동하나요 PATH=~
? 내 말은 내 홈 디렉토리를 기존 디렉토리에 추가하고 싶다는 뜻입니다 PATH
.
답변1
Unix에서 환경 변수와 같은 일부 환경 변수는 $PATH
개별 항목이 아니라 항목 목록이라는 점에서 특별합니다. 이러한 유형의 목록에서는 콜론( :
)으로 목록의 항목을 구분합니다.
$PATH
그냥 인쇄하면 다음과 같이 볼 수 있기 때문 입니다.
$ printenv PATH
/sbin:/bin:/usr/sbin:/usr/bin
추가 항목을 추가하려면 새 항목은 물론 이전 목록도 포함해야 합니다. 당신이 그렇게 말할 때, 그것이 실제로 당신이 하고 있는 일입니다 PATH=$PATH:<new item>
.
$ PATH=$PATH:/path/to/some/dir
$ printenv PATH
/sbin:/bin:/usr/sbin:/usr/bin:/path/to/some/dir
이러한 변경 사항은 실행되는 셸에만 적용된다는 점을 명심하세요. 재부팅 후에도 변경 사항이 유지되거나 셸의 다른 인스턴스에 표시되도록 하려면 $PATH
해당 변경 사항이 기본값의 일부로 설정되도록 구성 파일에 추가해야 합니다.
일반적으로 사용자는 이러한 파일을 사용하여 다음을 수행합니다 ~/.bashrc
.~/.bash_profile
export PATH=$PATH:$HOME/bin:$HOME/somedir
이와 같은 줄을 추가하면 $PATH
.
대체 $PATH
사용
실행 파일에 없는 스크립트와 실행 파일 을 실행하려는 경우 $PATH
.$PATH
다음은 시나리오입니다. 다음과 같은 실행 파일이 있다고 가정해 보겠습니다.
$ ls -l helloexec.bash
-rwxr-xr-x 1 user1 user1 31 Aug 12 07:45 helloexec.bash
하지만 거기에 없기 $PATH
때문에 실행할 수 없습니다.
$ helloexec.bash
bash: helloexec.bash: command not found...
$PATH
그래서 여러분은 '아, 이것을 실행하려면 내 항목에 추가해야 한다'고 생각하실 것입니다 . 그러나 다음과 같이 현재 디렉터리에서 실행 파일을 실행할 수 있습니다.
$ ./helloexec.bash
hello bash
Unix 유형 운영 체제에서는 스크립트 및 실행 파일을 모두 $PATH
.
위험이 추가됨$PATH
귀하의 예에서 귀하는 이를 ~
귀하 의 $PATH
.$PATH
이는 일반적으로 좋은 접근 방식이 아닙니다. 대신 Linux/Unix에서 실행 파일을 저장할 위치를 신중하게 고려하고 눈에 띄는 위치(예: $PATH
.
대부분의 사람들은 일반적으로 시스템 디렉토리를 추가한 다음 하나를 추가 $HOME/bin
하고 $PATH
그대로 둡니다. 더 많은 내용을 입력하면 $PATH
명령이 예상대로 작동하지 않거나 더 나쁜 경우와 같은 의도하지 않은 결과가 발생하여 시스템이 손상될 가능성이 더 높아질 수 있습니다.
예를 들어, 웹 사이트에서 일부 스크립트를 다운로드했지만 웹 브라우저가 파일을 $HOME
.
또는 시퀀스가 다음과 같이 $PATH
다른 디렉터리 이전 상태에 있는 경우 ~
:
$ printenv PATH
/home/vagrant:/sbin:/bin:/usr/sbin:/usr/bin
실수로 다음과 같은 실행 파일을 다운로드했습니다.
$ cat ps
#!/bin/bash
/bin/ps -eaf | grep -v "spyware"
이제 누군가 실행하면 ps
예상 버전 대신 이 버전을 사용하게 됩니다 /bin/ps
.
답변2
PATH는 시스템의 현재 PATH 값을 포함하는 환경 변수입니다. 상대 또는 절대 위치 없이 실행 파일 이름을 입력하면 실행 파일이 검색되는 모든 디렉터리가 검색됩니다.
예를 들어, 현재 디렉터리에서 무언가를 수행하려는 경우 "."는 현재 디렉터리에서 무언가를 찾아야 함을 나타내기 때문에 ./something이 작동합니다. 쉘은 실행 파일을 찾아야 한다는 것을 알고 있습니다.비교적현재 디렉토리로.자세한 내용은 askubuntu를 참조하세요.. ./somedirectory/something을 사용할 수도 있습니다. 중요한 점은 입력 디렉터리 구조가 루트(/)에서 시작하지 않는다는 점입니다.
하나절대 위치다음과 같습니다. /home/flerb/something
루트 디렉터리에서 시작됩니다.
$를 사용하여 명령을 입력하면 $PATH가 명령줄에서 확장되고 해당 내용으로 대체됩니다. 예를 들어 다음 echo $PATH
과 같은 내용이 표시될 수 있습니다.
$echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
env
(명령줄에서 환경변수의 현재 상태를 확인할 수 있습니다)
Bash 참조 매뉴얼에 설명된 물결표실제로 대부분의 경우 HOME 환경 변수로 대체됩니다. 제가 알지 못하는 물결표의 이상한 점을 알고 싶다면 참조 매뉴얼을 참조하세요. 물결표를 사용하는 방법은 다음과 같습니다.
$ echo ~
/home/flerb
$ echo $HOME
/home/flerb
따라서 경로가 위와 같으면 다음을 입력합니다.
(여담으로,확장 기능을 인용해야 하는 이유)
PATH="$PATH":"$HOME"
또는
PATH="$PATH":~
쉘은 이를 다음과 같이 확장합니다.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/flerb
HOME은 PATH 끝에 추가되며 전체 PATH를 홈 디렉터리로만 바꾸지 않으면 몇 가지 문제가 발생할 수 있습니다.
옆에
'.'는 현재 있는 디렉토리에 대한 링크입니다. 완전성을 위해 RalfFriedl이 지적한 대로 이러한 링크를 포함합니다. 파일 시스템에서 의미를 취하는 쉘 내장 명령입니다. 당신이 그것을 보았다면. 그리고.. ls -al의 출력에서 그것이 무엇인지 궁금합니다:,Linux에서 (.)와 (..)는 무엇입니까?, 그리고하드 링크 및 Unix 파일 시스템 노드
끝 쪽
답변3
에 추가하려는 경우 PATH
원하는 결과는 이전 값에 PATH
추가된 디렉터리를 더한 값입니다.
PATH
따라서 기존 디렉터리 ( 값 ) 에 새 디렉터리가 추가됩니다 $PATH
.
PATH=$PATH:~
이는 PATH
현재 디렉토리를 하나로 대체할 뿐입니다. 이는 더 이상 /bin
또는 에서 실행 파일을 찾을 수 없음을 의미합니다 /usr/bin
. 일반적으로 당신은 이것을 원하지 않습니다.
PATH=~