.bashrc 및 .bash_profile 이해


26

서버에서 루트로 로그인하면 .bashrc(Ubuntu 10.10)이 표시됩니다.

내 Mac에는 .bash_profile

우분투는 항상 .bashrc파일 만 가지고 .bash_profile있습니까? (나는 단지 혼란스러워서 묻는다. 나는 그것들이 다른 o / s라는 것을 알고 있지만 어쨌든 관계가 있을까?)

내 서버에서 별칭을 만들고 싶습니다 .bashrc.

이 별칭을 모든 사용자가 사용할 수 있도록 적용하려면 어떻게해야합니까?


1
askubuntu.com/questions/1528/bashrc-or-bash-profile- 아마도 전 세계에 별칭을 넣을 위치를 묻기 위해 질문을 변경하는 것이 좋습니다.

답변:


39

Bash 별명 은 개별 홈 디렉토리 의 .bash_aliases또는 .bashrc파일에 있어야합니다 . 전역 bash 별명을 작성해야하는 경우을 입력 할 수 /etc/bash.bashrc있지만 새로 작성된 사용자가 상속 할 수 있도록 파일 .bash_aliases또는 .bashrc파일에 추가하는 것이 가장 좋습니다 /etc/skel.

이다 거의 항상 잘못 에서의 별칭을 정의하기 위해 .profile, .bash_profile또는 /etc/profile.

이유를 이해하려면 어떤 상황에서 이러한 각 파일의 명령 이 실행 되는지 이해해야 합니다. 이것에 대해 오해가 있습니다.

여러 사용자에 대해 별명을 정의하려고하더라도 개별 사용자에 대해 별명을 정의하는 방법에 익숙해야하므로 필요한 작업을 수행하는 최상의 방법을 결정할 수 있습니다.

개별 사용자를위한 별칭

특히 GUI를 사용하는 경우 대부분의 대화식 쉘은 비 로그인 쉘일 수 있습니다. GUI를 사용하지 않더라도 여전히 로그인 빈도가 아닌 쉘을 일정 빈도로 사용합니다. 이 쉘에서 별명이 작동하기를 원할 것입니다.

특히 가상 콘솔 이나 SSH를 통해 비 그래픽으로 로그인 한 경우 로그인 쉘을 사용하는 경우가 있습니다. 따라서 별명은 대화식 로그인 쉘에서도 작동하기를 원할 것입니다.

비 로그인 대화식 쉘이 시작 되면 .bashrc사용자의 홈 디렉토리에서 소스가 됩니다. 우분투에서는 기본적으로 각 사용자 .bashrc자신 .bash_aliases이 존재하는 경우 source .

  • 파일 을 소스 하는 것은 내용이 현재 쉘 에서 실행되도록하는 것 입니다. 소스 파일에서 작성된 쉘 환경에 대한 변경 사항은 파일의 모든 명령이 실행 된 후에도 지속됩니다.

우분투의 기본 주석을 읽으면 별칭이 또는에 들어가는 .bashrc것이 공식적으로 의도 된 것 입니다 . 이미 일부 별칭 정의가 포함되어 있고 (보기 위해 실행 ) 새로운 정의를 넣을 위치에 대한 명확한 조언을 제공합니다..bashrc.bash_aliases.bashrcgrep '^[[:blank:]]*alias' ~/.bashrc

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

그러나 대화식 로그인 쉘은 어떻습니까? 대신 .bashrc로그인 쉘 소스 .profile.

  • ... .bash_login존재 하지 않으면 대신 소스가됩니다.
  • 하지 않는 한 ... .bash_profile존재, 다음 대신 공급됩니다.

그러나 기본적으로 우분투에서는 기본적으로 현재 쉘이 bash인지 (있는 경우 ) 소스인지 확인 하기 때문에 대화식 로그인 쉘 에서도 명령 .bashrc이 실행 됩니다 ..profile.bashrc.bashrc

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

사용자 .bash_aliases는 홈 디렉토리 에 새 bash 별명을 정의하는 것이 좋습니다 (아직 존재하지 않는 경우 작성). 이는 사용자 별 수준에서 별칭 정의를 영구적으로 만드는 특히 깨끗하고 간단한 방법입니다.

별명은.profile 비 로그인 쉘에서 정의되지 않은 상태로 유지되므로 정의 해서는 안됩니다 . 많은 bash 쉘 환경과 달리 별명은 하위 쉘로 내보내 지지 않습니다 .

ek@Io:~$ alias hi='echo "Greetings, $USER!"'
ek@Io:~$ hi
Greetings, ek!
ek@Io:~$ bash
ek@Io:~$ hi
hi: command not found

특히, 대부분의 데스크탑 환경은 기본적 .profile으로 그래픽 로그인을 기반으로하지만,

  1. 이것은 반드시 bash 쉘에 의해 수행되는 것은 아니므로 별명 정의가 처리되지 않을 수도 있으며 더 중요하게도
  2. 별명 정의가 처리 되더라도 하위 프로세스로 전달되지 않습니다 . 특히 터미널 창을 열어서 만들어진 쉘에는 전달되지 않습니다!

별칭에 정의해서는 안 .bash_profile(또는 .bash_login) 뿐만 아니라 다른 이유, 바로 그 이유. 이러한 파일 중 하나를 생성하고 별명 정의 넣으면 코드가 .profile실행되지 않습니다!

유용한 .bash_profile또는 .bash_login실제로 유용한 상황에서 일반적으로 하나의 소스가 .profile해당 문제를 해결합니다. (따라서 남아있는 유일한 문제는에서와 같이 .profile별칭을 정의 .bash_profile하거나 .bash_login제대로 작동하지 않는다는 것입니다.)

새로운 개인 사용자를 위한 별칭

실제 사람을 나타내는 유형의 사용자 계정이 작성되면 일반적으로 새 디렉토리가 홈 디렉토리로 사용됩니다. /etc/skel그런 다음 내용이 홈 디렉토리로 복사됩니다. 여러 사용자가 홈 디렉토리에서 유사한 구성 파일로 시작하는 방법입니다. 우분투, 이것은 포함 .profile, .bashrc및 기타 파일입니다.

새 사용자에 대해 정의 된 별명을 변경하려면 해당 별명 /etc/skel/.bash_aliases을 작성하거나 (만들어야 함) 또는을 입력하면됩니다 /etc/skel/.bashrc.

이미 존재하는 파일을 편집하는 경우 /etc/skel먼저 백업하고 싶을 수도 있지만 백업을에 넣지 말아야합니다. 그렇지 않으면 /etc/skel새 사용자의 홈 디렉토리에 백업 도 복사됩니다.

여러 사용자에 대해 새 별칭을 추가하는 가장 좋은 방법 일 것입니다. 기존 사용자는 단순히 별칭을 추가 할 수 있습니다. 에 별칭을 정의하면 /etc/skel/.bash_aliases해당 파일로 별칭 을 지정하여 홈 디렉토리에 복사하거나 고유 한 사용자 정의 .bash_aliases파일에 추가하도록 선택할 수 있습니다 .

사용자가 별칭을 정의하지 않는 것은 쉽지 않습니다. 또한 별칭은 매우 강력하지 않습니다 . 그들은 특정 상황에서만 작동합니다. 항상 작동하는 새 명령을 작성해야하는 경우 모든 사용자에게 해당 명령을 별명으로 구현하면 안됩니다. 또한 별칭을 원하지 않는 사용자에게 별칭을 강제로 적용 할 수는 없습니다 unalias.

모든 사용자를위한 글로벌 별칭

이 방법을 사용하지 않는 것이 좋지만 전역 파일 에서 별칭을 정의 할 수 있습니다 . 그런 다음 대화식 비 로그인 쉘과 대화식 로그인 쉘 모두에 대해 정의됩니다. 그 이유는 사용자의 홈 디렉토리에있는 파일이 소스 되기 전에 다음과 같습니다. /etc/bash.bashrc

  • 로그인 쉘 (및 로그인 쉘 및 로그인 쉘과 같은 다른 프로세스 만)은 /etc/profile자동으로 명령을 실행합니다 .
  • 비 로그인 쉘만 /etc/bash.bashrc자동으로 명령을 실행 하지만
  • 우분투의 기본 설정 /etc/profile은 실행중인 쉘이 bash (있는 경우 /etc/bash.bashrc) 인지, 그렇다면 존재하는지 확인합니다 /etc/bash.bashrc.

이것은 쉘이 bash 인 경우 기본 사용자 별 기본 사용자 별 .profile소스와 유사합니다 .bashrc(위에서 자세히 설명).

이에 대한 실제 코드는 기본적으로 다음과 같습니다 /etc/profile.

if [ "$PS1" ]; then
  if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

이 블록은 다른 작업도 수행합니다. 특히 외부 if는 프롬프트 텍스트가 비어 /etc/bash.bashrc있지 않은지 확인하여 셸이 대화 형인지 확인한 다음 현재 셸이 bash 및 소스 인지 확인하고 bash에 대한 소스가 있는지 확인합니다. 에서 이미 완료되었습니다 /etc/bash.bashrc.

사용자는 로컬 별칭으로 전역 별칭을 정의 하지 않아야 /etc/profile하는 것과 같은 이유로 전역 별칭을 정의해서는 안됩니다 .profile. 그렇게하면 자식 쉘이 아닌 로그인 쉘에 대해서만 정의됩니다.

마지막으로 기본 사용자 별과 달리 .bashrc기본 /etc/bash.bashrc파일에는 별칭에 대한 내용이 포함되어 있지 않습니다. 사용자가 별명을 편집하거나 비활성화 할 수없는 파일에 별명을 제공하는 것은 다소 드문 일입니다. (물론, 그들은 여전히 수 있습니다 자신의 지역에서 자신의 정의를 재정 의하여, 그렇게 .bashrc, .bash_aliases다른 곳, 또는.)

추가 자료


5

여기에 좋은 독서 가 있습니다. ".bash_profile은 로그인 쉘에 대해 실행되고 .bashrc는 대화 형 비 로그인 쉘에 대해 실행됩니다."

따라서 별명으로 .bash_profile을 사용하십시오.


4
별명을 넣는 .bash_profile것이 올바르지 않습니다. Ubuntu에서 .profile(로그인 쉘을 위해 실행되는) 소스 .bashrc는 대화식 bash 쉘일 때 소스 입니다. 따라서에서 별칭을 넣어 .bashrc(또는 .bash_aliases에서 공급하는 것은 .bashrc)에서 그들을 정의 의 모든 상호 작용의 bash 쉘. 별칭으로 .bash_profile인해이 문제가 발생 합니다. 참조 , , 내 대답은 , 기본 ~/.bashrc의 존재 또는 퍼팅 별칭을 추천 의견을 .bash_aliases.
Eliah Kagan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.