/etc/environment와 .profile에서 PATH 변수 설정

/etc/environment와 .profile에서 PATH 변수 설정

envvar를 설정하는 데 선호되는 장소는 어디입니까 PATH?

~/.profile또는 /etc/environment?

PATH두 위치에 모두 설정된 경우는 무엇입니까 ? 최종 결과는 두 위치에 설정된 두 값을 연결한 것입니까?

답변1

요약:

  • /your/additional/path컴퓨터의 모든 사용자가 아닌 현재 사용자에 대해서만 변수 에 경로(예: ) 를 추가하려는 경우 일반적으로 다음 두 예 중 하나와 같이 PATH끝에 경로를 추가합니다 .~/.profile

    PATH="/your/additional/path:$PATH"
    PATH="$PATH:/your/additional/path"
    

    경로 우선순위는 왼쪽에서 오른쪽으로 내림차순이므로 첫 번째 경로의 우선순위가 가장 높습니다. 의 왼쪽에 경로를 추가하면 $PATH우선 순위가 가장 높으며 해당 위치의 실행 파일이 다른 모든 실행 파일보다 우선 적용됩니다. 오른쪽에 경로를 추가하면 우선 순위가 가장 낮고 다른 위치의 실행 파일이 선호됩니다.

  • 그러나 모든 사용자에 대해 해당 환경 변수를 설정해야 하는 경우 여전히 터치 /etc/environment하지 .sh않고 /etc/profile.d/. 의 스크립트 /etc/profile와 모든 스크립트는 /etc/profile.d각 사용자의 개인 스크립트와 전역적으로 동일하며 ~/.profile초기화 중에 모든 쉘에서 일반 쉘 스크립트로 실행됩니다.


자세한 세부 사항:

  • /etc/environment시스템 전체 구성 파일이므로 모든 사용자가 사용합니다. 하지만 소유자이므로 root관리자 권한이 있어야 하며 sudo이를 수정하려면 사용해야 합니다.

  • ~/.profile사용자의 개인 쉘 초기화 스크립트 중 하나입니다. 모든 사용자는 하나를 가지고 있으며 다른 사용자에게 영향을 주지 않고 자신의 파일을 편집할 수 있습니다.

  • /etc/profile각 사용자에 대해 /etc/profile.d/*.sh동등한 전역 초기화 스크립트입니다 . ~/.profile하지만 전역 스크립트는 사용자별 스크립트보다 먼저 실행됩니다. 메인은 종료 직전 에 /etc/profile모든 스크립트를 실행합니다 .*.sh/etc/profile.d/


  • 파일 /etc/environment에는 일반적으로 다음 줄만 포함됩니다.

    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
    

    시스템의 모든 사용자에 대한 변수를 이 기본값으로 설정합니다 PATH. 이 기본값은 크게 변경하면 안 됩니다. 최소한 , 및 와 같은 중요한 경로를 제거 /bin해서는 안 됩니다 /sbin./usr/bin/usr/sbin

    이 파일은 모든 사용자의 모든 셸에서 첫 번째 구성 파일 중 하나로 읽혀집니다. 참고하세요쉘 스크립트가 아님. 이는 어떻게든 구문 분석되고 환경 변수 할당만 포함할 수 있는 구성 파일일 뿐입니다!

  • 파일 ~/.profile에는 많은 내용이 포함될 수 있습니다. 기본적으로 디렉터리가 ~/bin존재하는지 확인하고 이를 사용자의 기존 PATH변수에 추가하는 내용이 포함되어 있습니다(16.04 이전의 Ubuntu 릴리스에서는 무조건 추가됨). 그리고 18.04에서는 , "~/.local/bin"도 추가됨):

    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi
    

    여기에서 이전 값이 PATH재사용되고 새 경로가 모든 것을 덮어쓰는 대신 시작 부분에만 추가되는 것을 볼 수 있습니다. 새 경로를 수동으로 추가하려는 경우 항상 $PATH새 문자열의 어딘가에 이전 값을 유지해야 합니다.

    이 초기화 스크립트는 해당 스크립트가 속한 사용자의 셸에서만 읽을 수 있지만 또 다른 조건이 있습니다.

    # ~/.profile: executed by the command interpreter for login shells.
    # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
    # exists.
    

    따라서 기본 Bash 셸을 사용하는 경우 변경 사항이 사용자에게 영향을 미치도록 할지 여부 ~/.bash_profile를 확인해야 합니다 .~/.bash_login~/.profile


환경 변수에 대한 자세한 내용은 다음을 참조하세요. https://help.ubuntu.com/community/EnvironmentVariables


관련 질문:bash.bashrc와 /etc/environment 파일의 차이점

답변2

이 답변은 주로PATH같은 환경 변수가 할당되는 순서다른 구성 파일에 지정된 경우. 또한 일반적으로 파일을 설정해야 하는 위치도 다루지만 아래 목록에는 사용을 고려해야 하는 순서대로 파일이 나열되어 있지 않습니다. Ubuntu의 설정 및 기타 환경 변수에 대한 일반적인 정보는 PATH다음을 읽어 보는 것이 좋습니다.환경 변수이 질문에 대한 다른 답변입니다.

선호하는 설정 위치는 PATH다음에 따라 다릅니다.어떤 사용자당신은 그것을 설정해야합니다언제 어떻게당신은 그것이 설정되기를 원합니다. 결정의 일부는 모든 사용자에 대해 환경 변수 세트를 원하는지 아니면 사용자별로 설정할지 여부입니다. 확실하지 않은 경우 시스템 전체보다는 한 명의 사용자(예: 계정)에 대해 설정하는 것이 좋습니다.

처럼알렉스P 라고, PATH환경 변수는 이전 값을 갖습니다.가장 최근에 할당된. 실제로,최대설정한 시간에 PATH다음을 포함합니다.오래된PATH이전 항목이 유지되도록 새 값에 값을 추가합니다 .

따라서 실제로 PATH여러 파일에서 설정하면 일반적으로 모든 파일에 지정된 항목이 포함됩니다. 그러나 이는 첫 번째 파일을 제외하고 이를 설정하는 모든 파일이 일반적으로 변수 PATH자체를 참조하여 이전 값이 새 값에 포함되기 때문에 발생합니다.

따라서 실제로 PATH다양한 파일의 설정이 적용되는 순서를 묻는 것입니다.

일반적으로 설정할 수 있는 위치는 PATH사용자가 로그인할 때 적용되는 순서대로 아래에 나열되어 있습니다.~ 아니다일반적으로 사용을 고려해야 하는 순서대로. 아래 나열된 각 장소는 설정을 위한 합리적인 선택입니다.PATH ~에일부상황, 그러나 대부분의 경우 좋은 선택은 소수에 불과합니다.

아래 목록에는 ~/.profile. 혹시 익숙하지 않은 경우물결표 확장, ~/현재 사용자의 홈 디렉터리를 나타냅니다. 나는 주로 간결함을 위해 이 구문을 사용합니다. 쉘 스크립트에서는 지원되지만~ 아니다PAM 구성 파일에서.

1. 모든 사용자의 경우:/etc/environment

Ubuntu에서는 해당 파일이 존재하는 경우 나열된 환경 변수가 /etc/environment기본적으로 설정됩니다. 이것이 모든 사용자의 환경 변수가 가장 일반적으로 설정되는 방식입니다.

$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

환경 변수를 설정해야 하는 경우모두사용자 계정보다는 해당 파일을 수정하는 것이 최선의 선택일 것입니다. 먼저 백업하는 것이 좋습니다. 이 파일을 백업하는 한 가지 방법은 다음을 실행하는 것입니다.

sudo cp /etc/environment /etc/environment.orig

확장자 .orig는 특별히 필요하지 않습니다. 혼란스럽거나 이미 사용되지 않는 이름을 백업 파일 이름으로 지정하면 괜찮습니다. (외에도 .orig, .old, .backup.bak공통입니다.)

루트 사용자로서 다른 파일을 편집할 수 있는 방법( sudoedit /etc/enviromnment, sudo nano -w /etc/environment, gksudo gedit /etc/environment등) 으로 이 파일을 편집할 수 있습니다.

/etc/environment변수의 이전 값을 자동으로 포함하는 것을 지원하지 않습니다. 그러나 대부분의 경우 를 편집하여 모든 사용자에 대한 환경 변수를 설정하고 /etc/environment어쨌든 사용자가 로그인할 때 해당 환경 변수가 초기 값이 되기를 원하기 때문에 이것은 일반적으로 불필요합니다. 그런 다음 사용자는 원하는 대로 변경할 수 있습니다. 일반적으로 사용자가 이 작업을 수행할 수 있으면 좋습니다.

2. 모든 사용자의 경우:/etc/security/pam_env.conf

/etc/security/pam_env.confPAM은 사용자별 파일에 사용된 것과 동일한 구문으로 지정된 에서 모든 사용자에 대한 환경 변수를 읽습니다 ~/.pam_environment(아래 참조).

/etc/environment및 에 동일한 환경 변수가 설정되면 해당 값이 가 아닌 으로 지정된 경우에도 의 /etc/security/pam_env.conf값이 사용됩니다 .pam_env.confDEFAULTOVERRIDE

environment그러나 의 행을 의 행으로 대체하는 경우 pam_env.conf대체된 값의 내용을 포함할 수 있습니다. 자세한 내용은 아래 섹션을 참조하세요 .pam_environment(동일한 구문을 사용하므로).

pam_env.conf일반적으로 편집 하고 편집할 필요는 없습니다.그렇게 한다면 매우 조심해야 해, 이후흉하게 생긴줄은 일반적으로 모든 일반 사용자 계정이 전혀 로그인하는 것을 방지합니다! 예를 들어 기본값에는 pam_env.conf다음 줄이 포함됩니다.

#PATH           DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11

이는 여러 예 중 하나로 제시됩니다. 그것이 보여주는 것 중 하나는 를 사용하여 여러 줄에 걸쳐 할당을 분할하는 방법입니다 \. 첫 번째 줄의 주석 처리를 제거하고 두 번째 줄의 주석 처리를 제거하는 것을 잊어버렸다고 가정해 보겠습니다.

PATH           DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11

이러지 마세요!

방금 우연히 테스트했는데 어떤 사용자도 성공적으로 로그인할 수 없었습니다. 이 문제를 해결하려면 복구 모드로 부팅한 후 다시 변경해야 했습니다. (다행히 테스트용으로만 사용하는 가상 머신에서 이 작업을 수행했기 때문에 아무런 문제도 발생하지 않았습니다.)

3. 단일 사용자의 경우: .pam_environment사용자의 홈 디렉터리

단일 사용자에 대한 환경 변수를 설정하는 방법 중 하나는 해당 사용자가 .pam_environment자신의 홈 디렉터리에서 편집(또는 생성)하도록 하는 것입니다. 이 파일에 설정된 값은 전역 /etc/environment파일에 설정된 값보다 우선합니다.

.pam_environment사용자 계정이 처음 생성될 때 사용자의 홈 폴더에 복사되는 파일 골격의 일부가 아닙니다. 그러나 홈 디렉터리에 해당 파일을 생성하면 이를 사용하여 PATH. 와 달리 /etc/environment(그러나 유사 /etc/security/pam_env.conf) 사용자별 .pam_environment파일은 환경 변수의 이전 값을 새 값으로 확장하는 것을 지원합니다. 그러나 이는 쉘 스크립트가 아니며 이를 달성하려면 특수 구문을 사용해야 합니다. 이는 .profile.

bin2예를 들어 홈 디렉토리에 의 끝에 추가하려는 디렉토리가 있는 경우 PATH다음 행을 에 추가하면 됩니다 .pam_environment.

PATH DEFAULT=${PATH}:/home/@{PAM_USER}/bin2

보다하위 ~/.pam_environment섹션~의환경 변수(위의 예가 밀접하게 적용됨)man pam_env, 그리고man pam_env.conf자세한 내용은

이것은 Ubuntu 사용자가 환경 변수를 변경하거나 추가하는 데 선호되는 방법으로 한때 선전되었으며 여전히 합리적이고 수용 가능한 선택으로 간주됩니다.편집할 때 조심해야 해.pam_environment. 시스템 전체에 대한 편집 /etc/security/pam_env.conf(위 참조)과 마찬가지로 사용자 .pam_environment파일의 잘못된 행은 로그인 성공을 방해합니다. (이번에는 일부러 테스트해봤습니다.)추천가지다진화하다, 보다군나르 얄마르손'에스코멘트 아래에그리고ubuntu-devel토론.

그러한 실수는 훨씬 덜 심각합니다.일반적으로, 의 잘못된 행보다 pam_env.conf한 명의 사용자에게만 영향을 미치기 때문입니다. 그러나 로그인을 허용하는 사용자 계정이 하나만 있는 데스크톱 Ubuntu 시스템의 경우 편집 중 실수는 .pam_environment편집 실수만큼 나쁩니다 pam_env.conf. 아직 로그인하지 않은 경우에는 로그인을 할 수 없습니다. 복구 모드(또는 라이브 USB 등)로 부팅하지 않고 문제를 해결하려면

(다른 사용자 계정이 있는 경우 다른 사용자로 로그인하여 문제를 해결할 수 있습니다. 관리자가 아니고 sudo루팅할 수 없는 경우에도 여전히 실행될 수 있으며 비밀번호가 아닌 귀하의 비밀번호를 입력하라는 메시지가 표시됩니다. .su your-account손님su단, 계정은 다른 사용자의 신원을 도용하는 것이 금지되어 있으므로 이를 수행할 수 없습니다 .)

4. 모든 사용자의 경우: /etc/profile및 내부 파일/etc/profile.d/

Bourne 호환 쉘(Ubuntu의 기본 사용자 쉘 포함 ) 은 로그인 쉘로 호출될 때 bash명령을 실행합니다 ./etc/profile

우분투는 /etc/profile다음으로 끝납니다:

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

/etc/profile.d/이렇게 하면 이름이 끝나는 디렉터리 의 모든 파일에 있는 명령 .sh도 실행됩니다.

대부분의 디스플레이 관리자는 그래픽 로그인을 위해 의 명령 /etc/profile(및 의 파일 /etc/profile.d)도 실행되도록 합니다. 하지만,모두가 그런 것은 아니며, 이는 PAM이 제공하는 기능을 대신 사용하는 것을 지지하는 중요한 주장입니다.(위 참조) -- 예를 들어 GUI가 설치되지 않은 서버인 경우와 같이 이 시스템에 대한 그래픽 로그인이 전혀 없는 경우는 제외됩니다.

에서 시스템 전체 환경 변수를 설정하는 것이 전통적이지만 /etc/profile더 이상 최선의 선택이 아닌 경우가 많습니다. 에서 환경 변수를 설정할 수 없고 모든 사용자에 대해 설정해야 하는 경우 자체를 편집하는 것보다 /etc/environment에서 새 파일을 만드는 것이 더 나을 것입니다 . 그 이유 중 하나는 Ubuntu가 업그레이드되면 새로운 기본 파일이 있을 수 있기 때문입니다. 업그레이드 수행 방법에 따라 업데이트된 특정 구성 파일보다 이전 파일(변경 사항 포함)이 유지되거나 상황을 처리하라는 메시지가 표시됩니다./etc/profile.d//etc/profile/etc/profile

동일한 환경 변수가 둘 다에 설정된 경우 마지막 /etc/profile으로 수행되는 하나 이상의 파일은 /etc/profile.d무엇입니까?이는 해당 세트의 명령이 (위에서 인용한 코드에 따라) /etc/profile파일이 소스로 제공되기 전이나 후에 나타나는지 여부에 따라 달라집니다. profile.d의 명령은 /etc/profile나타나는 순서대로 실행됩니다.

/etc/profile쉘 스크립트이고,그 구문은~ 아니다위에서 설명한 PAM 구성 파일과 동일. 해당 구문은 사용자별 ~/.profile파일의 구문과 동일합니다(아래 참조).

다음과 같은 코드를 작성해야 하는 경우결정하다특정 디렉토리를 추가할지 여부(그리고 모든 사용자에 대해 추가할지 여부 )를 사용 하거나 수행 PATH할 수 없습니다 . 이는 아마도 대신에 또는를 사용하는 것이 더 나은 주요 상황일 것입니다 ./etc/environment/etc/security/pam_env.conf/etc/profile/etc/profile.d/

5. 한 명의 사용자의 경우: .bash_profile사용자의 홈 디렉터리

사용자가 를 갖고 있는 경우 , bash는 or ~/.bash_profile대신 이를 사용합니다 (아래 참조). 일반적으로 홈 디렉토리에는 이 없어야 합니다 .~/.profile~/.bash_login.bash_profile

그렇게 하는 경우 일반적으로 소스에 대한 명령 ~/.profile(예: . "$HOME/.profile")을 포함해야 합니다. 그렇지 않으면 사용자별 .profile파일의 내용이 전혀 실행되지 않습니다.

6. 한 명의 사용자의 경우: .bash_login사용자의 홈 디렉터리

사용자가 를 갖고 있는 경우 , bash는 존재 하지 않는 한 (아래 참조) ~/.bash_login대신 이를 사용합니다 . 이 경우 `~/.bash_login에서 소스를 얻지 않는 한 다른 어느 것도 사용되지 않습니다.~/.profile~/.bash_profile

와 마찬가지로 일반적으로 홈 디렉터리에 파일이 .bash_profile있어서는 안 됩니다 ..bash_login

7. 한 사용자의 경우: .profile사용자의 홈 디렉터리에 있습니다.

Bourne 스타일 쉘이 로그인 쉘로 실행되면 명령이 실행됩니다 /etc/profile(일반적으로 파일의 명령이 /etc/profile.d/실행되도록 하는 명령이 포함됩니다. 위 참조). 그런 다음 .profile사용자의 홈 디렉터리에서 명령을 실행합니다 . 이 파일은 모든 사용자에게 별도입니다. (Bash는 실제로 실행되거나 .bash_profile존재 .bash_login하는 경우 대신 실행됩니다. 하지만 Ubuntu 시스템 사용자의 경우 해당 파일이 거의 존재하지 않거나 존재하지 않습니다. 자세한 내용은 위 및6.2 Bash 시작 파일~에배쉬 매뉴얼.)

~/.profile따라서 사용자가 로그온할 때 실행되는 명령을 입력하는 주요 장소입니다. 를 설정하는 전통적인 장소이지만 PATHUbuntu에는 pam_env 모듈이 있고 지원하므로 ~/.pam_environment이를 사용하는 것을 고려해야 합니다.

와 마찬가지로 /etc/profile모든 디스플레이 관리자가 그래픽 로그인을 위해 이 파일을 실행하는 것은 아니지만 대부분은 실행합니다.~/.pam_environment이것이 환경 변수 설정을 선호하는 이유입니다./etc/environment(사람이 선호 하는 만큼 /etc/profile).

설정할 PATH때 자체를 포함하여 환경 변수를 확장할 수 있습니다 (위 참조). 그러나 보다 정교한 방식으로 설정해야 하는 경우 대신 를 사용해야 할 수도 있습니다 . 특히 사용자가 로그인할 때마다 디렉토리가 존재하는지 확인하고 존재 하는 경우에만 추가하려는 경우 파일을 사용하여 해당 디렉토리를 .PATH.pam_environmentPATH.profilePATH.pam_environmentPATH

.profile예를 들어 Ubuntu의 기본 사용자별 파일은사용다음으로 끝납니다:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

보다군나르 얄마르손'에스논평~에바이트 커맨더의 답변자세한 내용은.

bin홈 디렉토리의 하위 디렉토리 가 있는지 확인합니다 . 그렇다면 해당 하위 디렉터리를 PATH.

그 목록에는 몇 가지 가능성이 생략되어 있습니다.

사용자가 로그인할 때 로그인 유형에 더 크게 의존하는 환경 변수를 설정하는 다른 방법이 있습니다. 예를 들어 그래픽 로그인이나 SSH 기반 원격 로그인에 대해서만 설정되는 환경 변수가 있는 경우가 있습니다. 위 목록에는 그러한 경우가 포함되지 않습니다.

~/.bashrc사람들이 때때로 and 와 같은 환경 변수를 정의하는 몇 가지 파일을 생략했습니다. /etc/bash.bashrc왜냐하면 일반적으로 설정하는 것이 권장되는 위치가 아니고 PATH실제로 이러한 목적으로 사용해야 하는 경우가 거의 없기 때문입니다. 이러한 파일을 사용하여 에 디렉토리를 추가하면 PATH때때로 여러 번 추가되어 검사할 때 매우 혼란스럽습니다 $PATH. (극단적인 경우에는 속도가 느려질 수 있지만 일반적으로 모든 것을 깨끗하고 이해하기 쉽게 유지하는 것이 중요합니다.)

은 사용자를 위한 Ubuntu의 기본 로그인 셸이고 대부분 의 bash사용자는 이 셸 또는 다른 POSIX 호환 셸을 사용하므로 .tcsh

답변3

/etc/환경file은 내보내기를 사용할 수 없는 스크립트 파일이 아니며 $HOME 유형의 변수 확장을 지원하지 않고 단순 변수=값 쌍만 지원합니다. 따라서 해당 파일을 사용하려면 기존 정의에 경로를 추가하기만 하면 됩니다. 이는 특히 시스템 전체 환경 변수 설정을 위한 것입니다. 한 줄에 하나씩. 특히 이 파일은 시스템 전체의 로케일 및 경로 설정을 저장합니다.

~/.프로필- 이 파일은 bash 쉘이 실행될 때마다 실행되며 일반적으로 환경 변수에 권장되는 파일이지만 로그인 쉘에 의해서만 호출된다는 단점이 있으므로 이 파일을 적용하려면 로그아웃하고 다시 로그인하거나 최소한 새 로그인 셸을 시작하세요.

답변4

bash는 이러한 파일을 읽지만 zsh는 읽지 않습니다.

  1. 시스템 전체

    /etc/profile- 직접 편집하는 것은 좋지 않습니다.
    /etc/profile.d/*.sh- 출처:/etc/profile

  2. 세션 전체

    ~/.profile

https://help.ubuntu.com/community/EnvironmentVariables#A.2Fetc.2Fprofile.d.2F.2A.sh

관련 정보