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


879

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

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

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

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

답변:


229

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

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

시스템 전체

  1. /etc/environment고유 할당 목록은 참조를 허용합니다. 같은 시스템 전체 디렉토리를 추가하는 것에 대 한 완벽 /usr/local/something/bin에 PATH변수 또는 정의 JAVA_HOME. PAM 및 SystemD에서 사용합니다.
  2. /etc/environment.d/*.conf고유 할당 목록은 참조를 허용합니다. 같은 시스템 전체 디렉토리를 추가하는 것에 대 한 완벽 /usr/local/something/bin에 PATH변수 또는 정의 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/profiles이 s있습니까? 광산은 없습니다 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. 환경 변수의 경로 ( GOPATH및 GOBIN) 를 설정하고 터미널 종료시 손실되고 source <file_name>매번 사용하여 다시 작성 하는 것과 같은 문제에 직면했습니다 . 폴더에 ( GOPATH및 GOBIN)가 ~/.bash_profile있습니다. 몇 가지 좋은 시간을 낭비 후, 나는 해결책을 넣어 것을 발견 GOPATH과 GOBIN에 ~/.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.