CentOS에서 $ PATH에 디렉토리를 추가 하시겠습니까?


84

방금 새 서버를 설치했으며 CentOS를 모두 실행하고 있습니다. Ruby Enterprise Edition을 성공적으로 설치 한 후 REE / bin (위치 /usr/lib/ruby-enterprise/bin) 디렉토리를 추가 하여 서버의 기본 Ruby 인터프리터로 만듭니다.

다음을 시도했지만 현재 쉘 세션에만 추가합니다.

export PATH=/usr/lib/ruby-enterprise/bin:$PATH

무엇이 올바른 접근 방식은하는 것입니다 영구적 를 위해 $ 경로에이 디렉토리를 추가하는 모든 사용자 . 현재 루트로 로그인했습니다.

미리 감사드립니다!

답변:


115

/etc/profileCentOS가이 파일에 대한 업데이트를 게시 할 때마다 모든 변경 사항이 손실되므로 이와 같은 항목 을 편집 하는 것은 좋지 않습니다 . 이것은 정확히 무엇 /etc/profile.d인가입니다.

# echo 'pathmunge /usr/lib/ruby-enterprise/bin' > /etc/profile.d/ree.sh
# chmod +x /etc/profile.d/ree.sh

다시 로그인하여 (안전하게) 업데이트 된 PATH를 즐기십시오.

# echo $PATH
/usr/lib/ruby-enterprise/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
# which ruby
/usr/lib/ruby-enterprise/bin/ruby

다시 로그인하는 대신 프로파일을 다시로드 할 수 있습니다.

# . /etc/profile

$PATH변수 가 업데이트됩니다 .


1
~/.profile또 다른 유효한 옵션입니다
Zypher

4
예, 단일 사용자의 경우 그러나 모든 사용자의 PATH 변경에 대한 질문이었습니다 .
Mike

2
@Mike이 pathmunge 명령은 무엇입니까?
Nickolai Leschov

@NickolaiLeschov 나는 단지 $ PATH에 경로를 추가한다고 확신한다.
Mike

@NickolaiLeschov 그것은 / etc / profile에 정의 된 함수
CrazyPheel

11

fmonk의 조언을 따른 후 /etc/bashrc, 나는 "환경 적 요소가 / etc / profile에 들어간다"는 것을 알아 차렸다. 나는 조사를 계속하면서 /etc/profile이것을 보았다 :

pathmunge () {
    if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
       if [ "$2" = "after" ] ; then
          PATH=$PATH:$1
       else
          PATH=$1:$PATH
       fi
    fi
}

[...]

# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /sbin
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
fi

내 문제를 해결하기 위해 pathmunge /usr/lib/ruby-enterprise/binif 문 아래에 간단히 추가했습니다 . 이것은 내 문제를 해결했습니다.


누군가이 "$EUID" = "0"맥락 에서 의미가 무엇인지 설명 할 수 있습니까?
Eli

EUID 0은 사용자가 루트임을 의미합니다.
bbaja42

6
/etc/profile.d를 사용해야합니다. 아래 답변을 참조하십시오.
Mike

@MikeConigliaro 답변을 올바른 것으로 수락하십시오. 그의 길은 맞습니다. 그런 식으로 작동하도록 개발되었습니다. /etc/profile.d/폴더 의 파일을 살펴보면 알 수 있습니다. 또한 시스템 업데이트로 인해 솔루션이 취소 될 수 있습니다.
Caio Cunha

4

"/ bin / login을 사용하여 / bin / login을 사용하여 대화식 로그인 쉘이 시작되면 / etc / passwd 파일을 읽습니다.이 쉘 호출은 일반적으로 시작시 / etc / profile 및 그에 해당하는 ~ / .bash_profile을 읽습니다.

대화식 비 로그인 셸은 일반적으로 셸 프로그램 (예 : [prompt] $ / bin / bash) 또는 / bin / su 명령을 사용하여 명령 줄에서 시작됩니다. 대화식 비 로그인 셸은 그래픽 환경 내에서 xterm 또는 konsole과 같은 터미널 프로그램으로 시작됩니다. 이 유형의 쉘 호출은 일반적으로 상위 환경을 복사 한 후 추가 시작 구성 지시 사항에 대한 사용자의 ~ / .bashrc 파일을 읽습니다. " http://www.linuxfromscratch.org/blfs/view/6.3/postlfs/profile.html

따라서 환경 변수는 일반적인 규칙에 위배 될뿐 아니라 그래픽 데스크탑 환경에서 터미널을 호출 할 때 bashrc 변수를 놓치게됩니다.

Redhat에서 /etc/profile나는이 의견을 찾았습니다.

"시스템 전체 별명 및 기능은 / etc / bashrc에 있어야합니다. 개인 환경 변수 및 시작 프로그램은 ~ / .bash_profile로 이동해야합니다. 개인 별명 및 기능은 ~ / .bashrc로 이동해야합니다."

따라서 사용자별로 환경 변수를 설정하려면 사용자의 .bash_profile 파일에서 환경 변수를 설정하십시오.

받는 향하는 .bash_profile내가 읽은 :

"개인 환경 변수 및 시작 프로그램.

개인 별명 및 기능은 ~ / .bashrc에 있어야합니다. 시스템 전체 환경 변수 및 시작 프로그램은 / etc / profile에 있습니다. 시스템 전체 별명 및 기능은 / etc / bashrc에 있습니다. "

결론
예를 들어 /에 루트로만 존재하는 프로그램을 보려면 sbin루트 .bash_profile파일에 해당 경로를 추가 하십시오. 당신이보고 모든 사용자를 원한다면 내가 둘 것입니다 귀하의 상자에 특정 어떤 루트 프로그램을 설치 /sbin/etc/.profile. 이제 모든 사용자는 탭 완성을 사용하여 루트 특정 프로그램을 찾고 필요한 경우 권한을 높일 수 있습니다.

특수 사례 : SSH
명령 줄에서 ssh를 시작하면 대화식 로그인 셸이 시작됩니다. 그러나이 경우 /etc/profile읽을 수 없습니다. .bash_profile각 사용자 의 파일 에서 환경 변수를 정의하면 ssh로 작업했습니다.


2

SORRY는 다음 답변이 USER 님의 프로필에 대한 질문으로 잘못 해석되었습니다.

.bash_profile 수정

nano ~/.bash_profile

그런 다음 파일의 어딘가에 다음과 같이 구분 된 경로를 추가 / 수정하십시오.

 PATH=$PATH:$HOME/bin:/your/path
 export PATH

그런 다음 프로필을 다시로드하십시오.

source ~/.bash_profile

또는 로그 아웃 한 후 다시 로그인하십시오

PATH를 확인하면 새로 추가 된 경로가 포함되어야합니다

echo $PATH

1

.rc 파일에서 환경 변수를 설정할 수 있습니다. bash 쉘 (CentOS에서 가장 일반적이며 기본값이라고 생각합니다) 각 사용자는 그의 홈 디렉토리에 .bashrc라는 파일을 가지고 있습니다.

PATH = / usr / lib / ruby-enterprise / bin : $ PATH 명령을이 파일에 추가하여 특정 사용자를 위해 설정하십시오.

모든 사용자에 대해 설정하려면 (설명한대로) / etc / bashrc에서 변경하십시오 (각 사용자의 홈 디렉토리에있는 기본 .bashrc가이 파일을 소스로 지정해야하지만 다시 확인해야합니다).

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