![bash에서 PATH 변수가 설정된 위치에 대한 전체 보기](https://linux55.com/image/72525/bash%EC%97%90%EC%84%9C%20PATH%20%EB%B3%80%EC%88%98%EA%B0%80%20%EC%84%A4%EC%A0%95%EB%90%9C%20%EC%9C%84%EC%B9%98%EC%97%90%20%EB%8C%80%ED%95%9C%20%EC%A0%84%EC%B2%B4%20%EB%B3%B4%EA%B8%B0.png)
PATH
설정 /etc/profile
이나 홈 디렉터리 .profile
의 파일에 대해 여러 곳에서 읽었습니다 .
경로가 설정된 유일한 장소인가요? 나는 그것을 더 잘 이해하고 싶다.
/etc/profile
문서 에서 아래 설명에 나와 있듯이 "system-wide .profile file for the Bourne shell"
. 이는 구성 파일이 bash의 기본 구성 파일이라는 의미입니까?
파일에 PATH
var가 전혀 설정되어 있지 않습니다 . 홈 디렉터리의 파일에는 .profile
다음 줄이 있습니다.
PATH="$HOME/bin:$PATH"
PATH
이미 설정된 $PATH
문자열을 올바른 문자열과 $HOME/bin:
연결 하므로 모양을 통해 재설정 됩니까 ? 그러나 etc/profile
및 ~/.profile
가 유일한 파일 설정인 경우 해당 코드 줄의 파일이 에 정의되어 있지 않으면 어디서 오는 것입니까 PATH
?$PATH
/etc/profile
PATH
경험이 있는 사람이 이 변수에 대해 광범위하고 자세한 설명을 제공할 수 있습니까? 감사해요!
답변1
PATH
설정할 수 있는 곳은 많습니다.
프로그램은 login
이를 기본값으로 설정합니다. 이 기본값이 구성되는 방식은 시스템에 따라 다릅니다. 대부분의 비임베디드 Linux 시스템에서는 다음에서 가져옵니다./etc/login.defs
, 루트 사용자와 다른 사용자에 대해 서로 다른 값을 갖습니다. login(1)
해당 기능에 대해 알아보려면 시스템 설명서를 참조하세요 .
시스템에서 사용폴리아크릴아미드, 구체적으로pam_env
모듈, 환경 변수는 /etc/environment
시스템 전체 파일 및 사용자별 파일에서 설정할 수 있습니다 ~/.pam_environment
.
그러면 대부분의 로그인 방법(크론 작업 제외)이 실행됩니다.로그인 쉘시스템 전체 및 사용자별 구성 파일을 읽습니다. PATH
일반적으로 항목을 추가하기 위해 이러한 파일의 값을 수정할 수 있지만 때로는 다른 방법으로도 수정할 수 있습니다. 어떤 파일을 읽는지는 로그인 셸이 무엇인지에 따라 다릅니다. Bourne/POSIX 스타일 쉘은 /etc/profile
및 ~/.profile
.Bash를 읽지 만 각 사용자 파일에 대해 및 의 첫 번째 기존 파일 /etc/profile
만 읽습니다 . Zsh는 , , , 및 을 읽습니다 . 많은 GUI 세션이 로드 되고 실행되도록 예약되어 있지만 이는 디스플레이 관리자, 데스크탑 환경 또는 기타 세션 시작 스크립트와 각 배포판이 이를 설정하는 방법에 따라 다릅니다.~/.bash_profile
~/.bash_login
~/.profile
/etc/zshenv
~/.zshenv
/etc/zprofile
~/.zprofile
/etc/zlogin
~/.zlogin
/etc/profile
~/.profile
답변2
초기 PATH 변수는 일반적으로 다음 위치에 설정됩니다. /etc/profile
때로는 시스템 관리자가 PATH 변수를 소스에 넣기도 합니다./etc/profile.d
이는 로컬로 재정의되지 않는 한 모든 로그인이 기본적으로 상속되는 시스템 경로 변수입니다. 이는 일반적으로 명확한 경로를 설정합니다 /usr/bin
. 예를 들어 제 직장에서는 /opt
일부 사용자 정의 위치를 광범위하게 사용하므로 해당 경로도 거기에 설정됩니다.
PATH는 각 사용자 로그인에 대한 기본 계정에서 정의될 수도 있습니다 ~/.profile
. 이는 모든 사용자가 액세스할 수 없는 것을 정의할 수 있습니다. 부서장은 바이너리를 실행할 수 있지만 /opt
다른 사용자는 이에 대해 신경 쓰지 않을 수도 있습니다. 사용자는 이 파일을 직접 수정할 수도 있습니다. 이는 쉘에 국한되지 않는다는 장점이 있습니다 .profile
. 로그인하면 거기에 PATH가 설정됩니다.
~/.bash_profile
쉘별 로그인의 경우 PATH는 , ~/.bashrc
, .cshrc
또는 유사한 이름으로 정의될 수 있습니다. 사용자는 특정 쉘에 대한 특정 경로를 원하거나 모든 개인 기본 설정을 거기에 유지하려는 경우 여기에서 PATH를 설정할 수 있습니다.
요약하자면: /etc/profile 및 /etc/profile.d는 전통적인 계단식 설정이며 일반적으로 개인 도트 파일에 추가됩니다(사용자가 이를 재정의하도록 선택할 수 있음). 개인 포인트 파일은 일반적으로 사용자가 설정합니다.
물론 셸에도 환경 변수가 있으므로 로컬 환경 변수를 구성 파일의 기본 PATH에 추가하거나 재정의할 수도 있습니다.
답변3
다른 답변에 추가:
bash
PATH
환경에 설정되지 않은 경우 하드코딩된 기본값으로 설정됩니다. Ubuntu Server 16.04.2 시스템에서는 다음을 얻습니다.
$ env -i bash -c 'echo $PATH'
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.
다음 유틸리티를 사용하여 값이 실제로 하드코딩되어 있고 환경이나 일부 파일에서 읽히지 않는지 확인할 수 있습니다 strings
.
$ strings /bin/bash | grep /usr/sbin
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.
그러나 Arch Linux 시스템에서는 다른 결과가 나타납니다.
$ env -i bash -c 'echo $PATH'
/usr/local/sbin:/usr/local/bin:/usr/bin
bash
따라서 사용된 OS/배포판에 따라 바이너리를 빌드할 때 이 기본값이 선택되는 것처럼 보입니다 .
답변4
https://askubuntu.com/questions/705912/where-is-my-path-variable-being-set
^^ 도움이 되네요. 실제 디렉토리 대신 grep 'PATH=' 또는 'export PATH='를 사용해 설정 위치를 확인하세요.