나는 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
변수에 대한 광범위하고 자세한 설명을 제공 할 수 있습니까 ? 감사!
답변
PATH
설정할 수있는 곳이 많이 있습니다 .
login
프로그램은 기본값으로 설정합니다. 이 기본값이 구성되는 방법은 시스템에 따라 다릅니다. 임베드되지 않은 대부분의 Linux 시스템에서는 /etc/login.defs
루트 및 다른 사용자에 대해 다른 값을 사용하여 에서 가져옵니다 . login(1)
시스템 설명서를 참조하여 해당 기능을 확인하십시오 .
PAM을 사용하는 시스템 , 특히 pam_env
모듈에서 시스템 전체 파일 /etc/environment
및 사용자 별 파일에서 환경 변수를 설정할 수 있습니다 ~/.pam_environment
.
그런 다음 대부분의 로그인 방법 (cron 작업은 아님) 은 시스템 전체 및 사용자 별 구성 파일을 읽는 로그인 쉘 을 실행 합니다. 이러한 파일은의 값을 수정하여 PATH
일반적으로 항목을 추가하지만 때로는 다른 방식으로 추가 할 수 있습니다 . 읽을 파일은 로그인 쉘이 무엇인지에 따라 다릅니다. Bourne / POSIX 스타일 쉘은 /etc/profile
및을 읽습니다 ~/.profile
. Bash는을 읽지 /etc/profile
만 사용자 별 파일의 경우 ~/.bash_profile
, ~/.bash_login
및 중 첫 번째 기존 파일 만 읽습니다 ~/.profile
. zsh을 읽기 /etc/zshenv
, ~/.zshenv
, /etc/zprofile
, ~/.zprofile
, /etc/zlogin
와 ~/.zlogin
. 많은 GUI 세션은로드 준비 /etc/profile
하고 ~/.profile
있지만, 데스크탑 환경 또는 기타 세션 시작 스크립트, 어떻게 각각의 유통이 최대를 설정했습니다에, 디스플레이 관리자에 따라 달라집니다.
답변
초기 PATH 변수는 보통 /etc/profile
sys 관리자가 소스에 PATH 변수를 넣을 때 설정됩니다 ./etc/profile.d
로컬로 오버라이드하지 않는 한, 로그인하는 모든 사람이 기본적으로 상속하는 시스템 PATH 변수입니다. /usr/bin
내 직장에서 우리가 사용 /opt
하는 몇 가지 사용자 정의 위치와 광범위하게 사용되지만 일반적으로와 같은 명확한 경로 를 설정합니다.
사용자 별 로그인 계정에서 PATH는에서 정의 할 수도 있습니다 ~/.profile
. 모든 사용자가 액세스 할 수있는 것은 아닙니다. 아마도 부서장이 이진을 실행할 수 /opt
있지만 다른 사용자는이 이진에 신경을 쓰지 않습니다. 사용자는 해당 파일도 직접 수정할 수 있으며, .profile
쉘 고유의 파일이 아니라는 점이 좋습니다 . 로그인하면 PATH 세트가 소스가됩니다.
셀 고유의 로그인에, 경로가 정의 될 수도 ~/.bash_profile
, ~/.bashrc
또는 .cshrc
또는 유사한. 사용자는 특정 쉘에 대한 특정 경로를 원하거나 모든 개인 환경 설정을 유지하려는 경우 여기에서 PATH를 설정할 수 있습니다.
요약하면 : / etc / profile 및 /etc/profile.d는 일반적으로 계단식 설정입니다. 그것들은 상속되고 일반적으로 개인 도트 파일에 추가됩니다 (사용자는 대신 대체 할 수 있지만). 개인 도트 파일은 일반적으로 사용자가 설정합니다.
물론 쉘에도 환경 변수가 있으므로 로컬 환경 변수는 구성 파일에서 기본 PATH를 추가하거나 무시할 수 있습니다.
답변
다른 답변에 추가하려면 다음을 수행하십시오.
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:.
그러나 아치 리눅스 컴퓨터에서 다른 결과를 얻습니다.
$ env -i bash -c 'echo $PATH'
/usr/local/sbin:/usr/local/bin:/usr/bin
따라서 bash
바이너리가 빌드 될 때이 기본값이 선택되는 것처럼 보입니다 . 사용중인 OS / 배포판에 따라 다릅니다.