Linux / Unix에서 $ PATH를 영구적으로 설정하는 방법은 무엇입니까?


879

경로에 디렉토리를 추가하려고하므로 항상 Linux 경로에 있습니다. 난 노력 했어:

export PATH=$PATH:/path/to/dir

이것은 작동하지만 터미널을 종료하고 새 터미널 인스턴스를 시작할 때 마다이 경로가 손실되므로 내보내기 명령을 다시 실행해야합니다.

영구적으로 설정되도록하려면 어떻게해야합니까?

답변:


229

여러 가지 방법이 있습니다. 실제 솔루션은 목적에 따라 다릅니다.

변수 값은 일반적으로 시스템 또는 사용자 세션 시작시 실행되는 지정 목록 또는 쉘 스크립트에 저장됩니다. 쉘 스크립트의 경우 특정 쉘 구문 및 export/ 또는 set명령을 사용해야 합니다.

시스템 전체

  1. /etc/environment고유 할당 목록은 참조를 허용합니다. 같은 시스템 전체 디렉토리를 추가하는 것에 대 한 완벽 /usr/local/something/binPATH변수 또는 정의 JAVA_HOME. PAM 및 SystemD에서 사용합니다.
  2. /etc/environment.d/*.conf고유 할당 목록은 참조를 허용합니다. 같은 시스템 전체 디렉토리를 추가하는 것에 대 한 완벽 /usr/local/something/binPATH변수 또는 정의 JAVA_HOME. 구성은 일반적으로 각 도구 (Java, Go, NodeJS) 당 하나씩 여러 파일로 분할 될 수 있습니다. 의도적으로 해당 값을 사용자 로그인 쉘에 전달하지 않는 SystemD에서 사용합니다.
  3. /etc/xprofileX Window System 세션을 시작하는 동안 셸 스크립트가 실행되었습니다. 이것은 X Window System에 로그인하는 모든 사용자에 대해 실행됩니다. 그것은을위한 좋은 선택입니다 PATH같은 모든 사용자에 대해 유효한 항목 /usr/local/something/bin. 파일은 다른 스크립트에 포함되므로 사용자 쉘의 구문이 아닌 POSIX 쉘 구문을 사용하십시오.
  4. /etc/profile/etc/profile.d/*쉘 스크립트. 쉘 전용 시스템에 적합합니다. 해당 파일은 로그인 모드의 쉘에서만 읽습니다.
  5. /etc/<shell>.<shell>rc. 쉘 스크립트. 단일 쉘 전용이기 때문에 이것은 좋지 않은 선택입니다. 비 로그인 모드에서 사용됩니다.

사용자 세션

  1. ~/.pam_environment. 고유 한 과제 목록, 참조는 허용되지 않습니다. 모든 사용자 세션이 시작될 때 PAM에 의해로드됩니다 (X Window System 세션 또는 쉘인 경우). 당신은 다른 변수를 포함하여 참조 할 수 없습니다 HOME또는 PATH이 제한된 사용을 갖도록. PAM에서 사용합니다.
  2. ~/.xprofile쉘 스크립트. 이것은 사용자가 X Window System 시스템에 로그인 할 때 실행됩니다. 여기에 정의 된 변수는 모든 X 응용 프로그램에서 볼 수 있습니다. 사용자 별 또는 PATH과 같은 값으로 정의 ~/bin하거나 를 확장하기위한 완벽한 선택입니다 . 파일은 다른 스크립트에 포함되므로 사용자 쉘의 구문이 아닌 POSIX 쉘 구문을 사용하십시오. 바로 가기로 시작된 그래픽 텍스트 편집기 또는 IDE에 해당 값이 표시됩니다.~/go/binGOPATHNPM_HOME
  3. ~/.profile, ~/.<shell>_profile, ~/.<shell>_login쉘 스크립트. 터미널 또는 터미널 에뮬레이터에서 시작된 프로그램에만 표시됩니다. 쉘 전용 시스템에 적합합니다. 로그인 모드에서 쉘에 의해 사용됩니다.
  4. ~/.<shell>rc. 쉘 스크립트. 단일 쉘 전용이기 때문에 이것은 좋지 않은 선택입니다. 비 로그인 모드의 쉘에서 사용합니다.

노트

Wayland의 Gnome은 환경을 얻기 위해 사용자 로그인 쉘을 시작합니다. 그것은 효과적으로 로그인 쉘 구성을 사용 ~/.profile, ~/.<shell>_profile, ~/.<shell>_login파일을.

매뉴얼

  • 환경
  • environment.d
  • 세게 때리다
  • 대시

배포 관련 문서

관련

로그인 셸과 비 로그인 셸의 차이점은 무엇입니까?


4
자세한 답변에 감사드립니다. 이보다 높아야합니다. 어쩌면 .bash_profile뿐만 아니라 목록에 추가해야 하는가?
James Ko


1
최선의 답변이 제안 된 것 같습니다 /etc/environment. 하지만 로그 아웃하지 않고 새로 고칠 수 있습니까? 때로는 bash 또는 sh를 사용 source /etc/environment하지 않으므로 작동하지 않습니다.
banan3'14

2
제 생각에는 가장 완전한 대답입니다. 훨씬 높아야합니다.
Peter Gloor

2
이 주제를 검색 한 나의 이유는 실제로 Go였습니다. .bashrc가 올바른 장소가 아니라는 것을 깨달은 유일한 사람은 아닙니다. ;)
Peter Gloor 2018 년

1039

파일 ~/.profile이나 ~/.bashrc파일 에 추가해야 합니다. 

export PATH="$PATH:/path/to/dir"

당신이하고있는 것에 따라 바이너리에 심볼릭 링크를 원할 수도 있습니다.

cd /usr/bin
sudo ln -s /path/to/binary binary-name

이렇게하면 나머지 세션 동안 경로가 자동으로 업데이트되지는 않습니다. 이렇게하려면 다음을 실행해야합니다.

source ~/.profile 
or
source ~/.bashrc

11
몇 가지 질문이 있습니다. 1) $PATH과 사이에 콜론이 없어야 /usr/bin합니다. 2) /usr/bin거기 있어야 합니다. 3) 오히려 사용하지 /usr/local/bin않습니까?
Batandwa

197
참고 : 종종 bash PATH 끝에 후미 콜론을 남기는 보안 구멍으로 간주됩니다. 왜냐하면 bash가 찾고있는 실행 파일을 찾을 수없는 경우 현재 디렉토리를 찾습니다. 이 게시물에서 더 많은 정보를 찾는 사용자는 이에 대해 조언해야합니다.
erewok

51
@AdamRobertson tarball의 cd압축을 푼 다음 압축을 푼 디렉토리로 옮긴 다음 실행 하는 시나리오를 고려 ls하여 tarball에 악성 프로그램이 있다는 것을 인식 ls하십시오.
Lily Chung

21
나에게는 .profile이 아니라 .bash_profile이었습니다. 이것은 모든 사람에게 다른 것 같습니다.
donquixote

9
나는이 답변의 품질을 크게 향상시키고 다른 사용자가 제기 한 몇 가지 문제를 해결했다고 생각합니다. 모든 경로 내보내기 또는 경로를 조정하는 모든 명령은 항상 기존 경로를 콜론으로 구분해야합니다. 선행 또는 후행 콜론은 사용하지 않아야하며 현재 디렉토리는 경로에 없어야합니다.
Erick Robertson

243

우분투에서 편집하십시오 /etc/environment. 유일한 목적은 환경 변수를 저장하는 것입니다. 원래 $ PATH 변수가 여기에 정의되어 있습니다. 이것은 내 /etc/environment파일 에서 붙여 넣습니다 .

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

따라서이 파일을 루트로 열고 원하는 것을 추가 할 수 있습니다.

즉각적인 결과의 경우 실행 (정상 사용자 루트 로 시도 ) :

source /etc/environment && export PATH

최신 정보:

zsh(일명 Z Shell) 을 사용하는 경우 /etc/zsh/zshenv: 에서 주석 바로 뒤에이 줄을 추가하십시오 .

source /etc/environment

우분투 15.10 에서이 작은 문제가 발생했지만 zsh 가 올바른 PATH를 얻지 못하면 이것이 이유 일 수 있습니다


13
모든 시스템에 / etc / environment가있는 것은 아닙니다.
user3439968

9
FWIW $PATH/etc/profileArch Linux 에도 정의되어 있습니다.
Sparhawk

3
@ e-sushi 실제로 충격을 받았습니다. 나는 우분투 14.04.1에 있습니다. 그리고 파일이 내장되어
있다고

2
태양 아래에서 모든 제안을 시도하고 / etc / environment를 시도하고 모두 작동하지 않으면 마침내이 문제를 발견했습니다. 나는 또한 Ubuntu 14.04에 있으며 재부팅 후 실제로 PATH 변수를 변경 한 유일한 것입니다.
Chockomonkey

4
환경 파일을 업데이트 한 후 PC를 다시 시작해야합니다.
Harish_N

70

export선언을 넣 습니다 ~/.bashrc. 내 .bashrc에는 다음이 포함됩니다.

export PATH=/var/lib/gems/1.8/bin:/home/fraxtil/.bin:$PATH

7
다시 시작해야합니까?
Upvote

2
이것을 .profile'에 넣었을 때 작동 했지만 찾을 수 없음.bashrc
클릭하여 투표

정확한 시스템에 따라 달라질 수 있습니다. 어떤 조건이 어떤 파일이 실행되는지 결정하는 것은 확실하지 않습니다. 그래도 문제가 해결되어 다행입니다.
Fraxtil

12
@Click Upvote 구성 source ~/.bashrc을 다시로드해야 .bashrc합니다. 그러면 작동합니다
BigSack

4
export경우 키워드는 필요한 PATH거의 무조건 될 것입니다 - 이미 환경 변수로 플래그가되지 않습니다. 단순히 PATH=/var/lib/gems/1.8/bin:/home/fraxtil/.bin:$PATH같은 효과가 있습니다.
Charles Duffy

30

$PATH두 가지 방법으로 영구적으로 설정할 수 있습니다 .

  1. 특정 사용자의 경로를 설정하려면 다음을 입력해야합니다. .bash_profile 홈 디렉토리에 .

    예를 들어 내 경우에는 Tomcat 사용자 프로필에 Java 경로를 설정합니다.

    [tomcat]$ echo "export PATH=$PATH:/path/to/dir" >> /home/tomcat/.bash_profile
  2. 모든 시스템 사용자의 공통 경로를 설정하려면 다음과 같이 경로를 설정해야합니다.

    [root~]# echo "export PATH=$PATH:/path/to/dir" >> /etc/profile

3
파일이 배포판에 이름 /etc/profiless있습니까? 광산은 없습니다 s. 오타가 있다고 생각합니다.
Chris Johnson

3
프로필 파일에 쓰고있는 $를 피하고 싶을 것입니다. 예를 들어 echo "export PATH = \ $ PATH : / path / to / dir">> / etc / profile을 사용하면 스크립트 실행시 변수 값을 기준으로 리터럴 값으로 설정하지 않고 변수를 실제로 추가 할 수 있습니다. 이 초기 명령을 실행하는 시간.
BuvinJ

15

로컬 사용자를 위해 Centos 또는 RHEL에서 사용할 수 있습니다.

echo $"export PATH=\$PATH:$(pwd)" >> ~/.bash_profile

이렇게하면 현재 디렉토리 (또는 다른 디렉토리를 사용할 수 있음)가 PATH에 추가됩니다. 이렇게하면 영구적이지만 다음 사용자 로그온시 적용됩니다.

다시 로그온하지 않으려면 다음을 사용할 수 있습니다.

source ~/.bash_profile

# User specific environment and startup programs이 의견을 다시로드하면.bash_profile


12

다음 파일 중 하나를 편집하여 영구적으로 설정할 수도 있습니다.

/etc/profile (모든 사용자)

~/.bash_profile (현재 사용자)

~/.bash_login (현재 사용자)

~/.profile (현재 사용자)

/etc/environment영구 PATH 환경 변수를 설정하는 데 사용할 수도 있지만 변수 확장은 지원하지 않습니다 .

http://www.sysadmit.com/2016/06/linux-anadir-ruta-al-path.html 에서 추출


7

어제 스크립트에 포함 된 폴더를 PATH에 추가하는 방법을 검색 할 때 어제이 질문을 우연히 발견했으며 내 자신의 ~/.profile파일 (Linux Mint 18.1)에 이미 다음 내용이 포함되어 있다는 사실에 놀랐습니다 .

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

따라서 내가해야 할 일은 폴더를 만들고 ~/bin스크립트를 거기에 넣는 것입니다.


7

가장 우아한 방법은 다음과 같습니다.

1. ~ / .bashrc 파일에 추가하십시오.이 명령을 실행하십시오.

gedit ~ / .bashrc

그 안에 경로를 추가

내보내기 PATH = $ PATH : / opt / node / bin

2.source ~ / .bashrc

(우분투)


6

해당 줄을 콘솔 설정 파일 (예 : .bashrc) 또는 .profile에 추가 할 수 있습니다.


2
해당 파일이 없습니다/home/(username)
Clickvovo

3
@ClickUpvote : 어떤 쉘을 사용하십니까? (그리고 숨겨져있는 점으로 시작하는 파일, 당신은 같은 필요 ls -a를 볼 수 있도록합니다.)
데이비드 슈워츠

당신이 그 파일 (bashrc에 또는 프로파일)의이없는 넣다 당신은 수동으로 만들 수 있으며 자동으로 사용됩니다
trve.fa7ad

4

PATH 변수를 영구적으로 추가

글로벌 :

echo "export PATH=$PATH:/new/path/variable" >> /etc/profile

로컬 (사용자 만 해당) :

echo "export PATH=$PATH:/new/path/variable" >> ~/.profile

대한 글로벌 다시 시작합니다. 대한 지역 재 로그인.

전에:

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin

후:

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin
export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/new/path/variable

또는 프로필을 편집 할 수도 있습니다.

$ cat /etc/profile 

#!/bin/sh

export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/new/path/variable

다른 방법 (gniourf_gniourf 덕분에) :

echo 'PATH=$PATH:/new/path/variable' >> /etc/profile

큰 따옴표를 사용해서는 안됩니다! echo 'export PATH = $ PATH : / new / path / variable'... 그리고 PATH 변수가 이미 내 보낸 것으로 표시되어 있기 때문에 export 키워드는 쓸모가 없습니다. – gniourf_gniourf


1
아니. 큰 따옴표를 사용해서는 안됩니다! echo 'export PATH=$PATH:/new/path/variable'... 그런데 export키워드는 PATH변수가 이미 내 보낸 것으로 표시되어있어 쓸모가 없습니다 .
gniourf_gniourf

작은 따옴표로 묶은 $ PATH는 보간되지 않기 때문에 큰 따옴표를 사용해야합니다. BTW 내보내기도 유용합니다.
user3439968

알았어 에코가 실행될 때 $ PATH가 보간되거나 / etc / profile이 실행될 때 보간되므로 큰 따옴표를 사용하거나 작은 따옴표를 사용할 수 있습니다.
user3439968

1
@ user3439968 실제로, 여러 파일에서 $ PATH에 추가하면 큰 따옴표로 인해 많은 문제가 발생할 수 있습니다. 큰 따옴표를 사용하면 $ PATH는 이전에 정의 된 모든 PATH 디렉토리가있는 정적 문자열로 변환됩니다. 를 /usr/local사용하여 추가한다고 말하십시오 ~/.bashrc. 이제 ;를 /opt/bin사용하여 동일한 변수 에 추가하려는 경우 /etc/bash.bashrc; $ PATH는 같은 정적 문자열로 변환됩니다. 결과적으로 $ PATH가 추가되는 대신에 대체 됩니다. 이는 다른 파일보다 한 파일을 선호하는 시스템의 문제입니다
trve.fa7ad

4

1. "/ etc / profile"파일을 수정하십시오.

#vi /etc/profile

"i"키를 눌러 편집 상태로 들어가서 커서를 파일의 끝으로 이동하십시오.

export PATH=$PATH:/path/to/dir;

"Esc"키 종료 편집 상태를 누르고 ': wq'파일을 저장하십시오.

2. 효과적인 구성

source /etc/profile

설명 : 프로필 파일은 모든 사용자에게 적용됩니다. 활성 사용자에게만 유효하려면 ".bashrc"파일을 설정하십시오.


4

많은 연구 끝에 다음 링크 에서 영감을 얻은 간단한 솔루션을 찾았습니다 ( 초등 OS를 사용하고 있습니다 ) .

다음 명령을 실행하여 .bashrc 파일을 편집 모드 로 엽니 다 . [vi 또는 다른 편집기를 사용할 수도 있습니다].

~$ sudo nano ~/.bashrc

파일 끝에 다음 줄을 추가하고 저장하십시오.

export PATH="[FLUTTER_SDK_PATH]/flutter/bin:$PATH"

예를 들어 :

export PATH="/home/rageshl/dev/flutter/bin:$PATH"

여기에 이미지 설명을 입력하십시오

우분투 배포판에서 플러터의 경로를 설정하기위한 영구적 인 해결책 이라고 생각합니다.

이것이 도움이되기를 바랍니다.


3

export 명령을 추가 할 파일은 로그인 모드 또는 비 로그인 모드인지 여부에 따라 다릅니다.

로그인 모드 인 경우 찾고있는 파일은 / etc / bash 또는 /etc/bash.bashrc입니다.

비 로그인 모드 인 경우 /.profile 파일 또는 /.profiles.d 디렉토리 내의 파일을 찾고 있습니다.

시스템 변수가있는 경우 위에서 언급 한 파일


3

다음 줄로 /etc/profile.d폴더 스크립트에 추가하십시오 . 폴더 내의 모든 스크립트 는 로그인시 자동으로 실행됩니다 .[name_of_script].shexport PATH=$PATH:/dir/etc/profile.d/etc/profile


환경을 사용자 정의하는 방법을 권장합니다
Yuriy

1
이것은 시스템 전체에서 설정을 원하는 경우에만 해당되며 가장 일반적인 사용 사례는 아닙니다. 대부분의 사용자 / 역할이 상황에 따라 다른 작업을 수행하고 가정이 적을수록 더 좋으므로 대부분의 사람들은 경로를 로컬로 설정하기를 원합니다.
mpowered

@ mpowered, 예, 이것은 시스템 전체에만 해당됩니다. 로컬 변경 PATH를 원하면 ~ / .profile 또는 ~ / .bashrc에 동일한 내보내기를 추가해야합니다. 여기서 로그인 쉘은 ~ / .profile을 읽고 대화식 쉘은 ~ / .bashrc를 읽는 것을 고려해야합니다. 예를 들어 ssh가 로그인을 수행하지 않기 때문에 매우 중요하므로 ~ / .profile을 읽을 수 없습니다. / etc / profile의 수세 소스 ~ / .bashrc와 같은 여러 가지 차이점이 있습니다. 그러나 모든 리눅스에서 흔하지는 않습니다. '
Yuriy

3

Zues77은 올바른 아이디어를 가지고 있습니다. OP는 "어떻게 해킹 할 수 있을까"라고 말하지 않았다. OP는 $ PATH에 영구적으로 추가하는 방법을 알고 싶었습니다.

sudo nano /etc/profile

여기에 모든 것이 설정되어 있으며 $ PATH가 필요한 모든 것에 대해 변경하기 가장 좋은 곳입니다


3

내 대답은 go-langon 설정과 관련이 있습니다 Ubuntu linux/amd64. 환경 변수의 경로 ( GOPATHGOBIN) 를 설정하고 터미널 종료시 손실되고 source <file_name>매번 사용하여 다시 작성 하는 것과 같은 문제에 직면했습니다 . 폴더에 ( GOPATHGOBIN)가 ~/.bash_profile있습니다. 몇 가지 좋은 시간을 낭비 후, 나는 해결책을 넣어 것을 발견 GOPATHGOBIN~/.bash_rc방식으로 파일 :

export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOPATH:$GOBIN

그렇게하면 설치가 제대로 작동했고 경로 손실이 없었습니다.

편집 1 :이 문제가 관련된 이유는 go 코드를 실행하는 우분투 터미널 또는 그놈 터미널과 같은 비 로그인 쉘 ~./bash_rc설정 은 파일 에서 가져 오고 로그인 쉘 설정은 ~/.bash_profile파일에서 가져 오기 때문입니다. 파일에 접근 할 수없는 ~/.profile경우 ~/.bash_profile파일 에서 .


3

MacOS를 실행 중이고 신뢰할 수있는 바이너리가 시스템 전체에서 사용 가능하도록하고 싶지만 바이너리가 PATH에 추가되는 디렉토리를 원하지 않는 경우 복사 / 이동을 선택할 수 있습니다 바이너리는로 /usr/local/bin, 이미 PATH에 있어야합니다. 이렇게하면 터미널에서 이미 액세스 할 수있는 다른 바이너리와 같이 바이너리를 실행할 수있게됩니다.


3

다음 명령을 사용하여 직접 추가 할 수 있습니다.

echo 'export PATH=$PATH:/new/directory' >> ~/.zshrc
source ~/.zshrc

2
질문은으로 표시 bash되어 있으므로 도움이되지 않습니다.
Laurenz Albe

2
이것은 올바른 대답 -> 제목은 리눅스 언급, 할 것 ALSO zsh을 배쉬 있도록하고 태그 만 있다면 ... "bash는"우리가 너무 태그에 "zsh을"을 추가 할 필요가
카를로스 Saltos

2

가장 간단한 방법은 다음과 같습니다
PATH="<directory you want to include>:$PATH"
. 홈 디렉토리의 .bashrc 파일에 있습니다.
터미널을 닫거나 PC를 재부팅해도 재설정되지 않습니다. 영구


1
@quant 당신이 말한 것을하면, 설정이 영구적으로 설정됩니다. 터미널을 닫아도 작동합니다.
에드워드 Torvalds

1

가장 우아한 방법은 다음과 같습니다.

1. ~. / bashrc 파일에 이것을 추가 하십시오

if [ -d "new-path" ]; then
  PATH=$PATH:new-path
fi

2.source ~ / .bashrc

(우분투)


그리고 위의 경로를 표시하려면 : printf "% s \ n"$ PATH
Robot70

1

나를 위해 일한 영구 경로를 추가하는 한 가지 방법은 다음과 같습니다.

    cd /etc/profile.d
    touch custom.sh
    vi custom.sh 
    export PATH=$PATH:/path according to your setting/

컴퓨터를 다시 시작하면 여기에 우리는 경로가 영구적으로 응원합니다.


실제로 컴퓨터를 다시 시작할 필요는 없습니다. 로그 아웃했다가 다시 로그인하면됩니다. 파일을 편집 할 필요없이 변경 내용을 제거하기가 매우 쉽기 때문에 이는 매우 훌륭한 솔루션입니다. 디렉토리가 시스템에 존재하지 않는 경우 PATH 변수에 추가되지 않도록 if 문을 지정하는 것도 쉽습니다.
Warwick

0

데비안 배포의 경우 다음을 수행해야합니다.

    - edit ~/.bashrc  e.g: vim ~/.bashrc 
    - add export PATH=$PATH:/path/to/dir
    - then restart your computer. Be aware that if you edit ~/.bashrc  as root, your environment variable you added will work only for root

0

이것은 하나의 라이너 입니다. 에 줄을 추가합니다 .bashrc. Tha 행은 디렉토리가 이미 경로에 추가되었는지 확인하고 그렇지 않은 경우 추가합니다. 이렇게하면 소스를 찾을 때마다 디렉토리에서 디렉토리가 복제되지 않습니다 .bashrc.

echo "[[ \":\$PATH:\" != *\":$(pwd)/path/to/add:\"* ]] && export PATH=\"\${PATH:+\${PATH}}:$(pwd)/path/to/add\"" >> ~/.bashrc

source ~/.bashrc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.