웹사이트 검색

Linux에서 .bashrc와 .profile의 차이점은 무엇입니까?


Bash를 실행하는 Linux 시스템은 셸 환경을 구성하기 위해 로그인할 때 특정 파일을 읽습니다. 그러나 어떤 파일을 언제 읽어야 하는지 혼란스러울 수 있으므로 .bashrc 파일, .bash_profile 파일 또는 다른 구성 파일을 편집해야 하는지 알기 어렵습니다. 알아야 할 사항은 다음과 같습니다.

쉘의 다른 유형

셸을 시작할 때 얻게 되는 환경은 구성 또는 프로필 파일에 있는 설정으로 정의됩니다. 여기에는 텍스트 색상, 명령 프롬프트, 별칭 및 프로그램 이름을 입력할 때 실행 파일을 검색하는 경로와 같은 항목을 설정하는 정보가 포함됩니다.

이러한 설정이 저장되는 파일 시스템의 여러 위치에 있는 다양한 파일이 있습니다. 그러나 셸을 시작할 때 어떤 파일을 읽는지 살펴보기 전에 사용 중인 셸 유형이 무엇인지 명확히 해야 합니다.

로그인 쉘은 로그인하는 쉘입니다. 컴퓨터를 부팅하고 로그인하면 그래픽 데스크톱 환경 아래에 로그인 셸이 있습니다. SSH 연결을 통해 다른 컴퓨터에 연결하면 로그인 셸에도 로그인하게 됩니다.

터미널 창을 열 때 표시되는 셸 유형은 비로그인 셸입니다. 이미 로그인되어 있으면 셸을 시작하기 위해 인증할 필요가 없습니다. 로그인 및 비로그인 셸은 대화형 셸입니다. 지침을 입력하고 Enter 키를 누르고 화면 응답을 읽어 사용합니다.

비대화형 쉘도 있습니다. 스크립트가 실행될 때 실행되는 쉘 유형입니다. 스크립트가 새 셸에서 시작됩니다. 스크립트 맨 위에 있는 shebang #!/bin/bash는 사용해야 하는 셸을 나타냅니다.

#!/bin/bash

echo -e "Hello, World!\n"

이 스크립트는 비대화형 Bash 셸에서 실행됩니다. 쉘이 비대화형이더라도 스크립트 자체는 비대화형일 수 있습니다. 이 스크립트는 터미널 창에 인쇄되며 사용자 입력을 쉽게 받아들일 수 있습니다.

비대화형 쉘

비대화형 셸은 시작할 때 프로필 파일을 읽지 않습니다. 그들은 환경 변수를 상속하지만, 예를 들어 별칭이 명령줄에 정의되어 있는지 구성 파일에 정의되어 있는지와 같은 별칭에 대해서는 아무것도 모릅니다.

명령줄 매개 변수로 전달된 옵션을 확인하여 셸이 대화형인지 여부를 테스트할 수 있습니다. 옵션에 i가 있으면 셸이 대화식입니다. Bash 특수 매개변수 $-에는 현재 셸의 명령줄 매개변수가 포함되어 있습니다.

[[ $- == *i* ]] && echo 'Interactive' || echo 'Non-interactive'

고양이를 의미하는 xc라는 별칭을 만들어 보겠습니다. 또한 PATH 변수 세트가 있는지 확인합니다.

alias xc=cat
echo $PATH

이 작은 스크립트 내에서 이 두 가지 모두에 액세스하려고 합니다. 이 스크립트를 편집기에 복사하고 int.sh로 저장합니다.

#!/bin/bash

xc ~/text.dat
echo "Variable=$PATH"

스크립트를 실행 가능하게 하려면 chmod를 사용해야 합니다.

chmod +x int.sh

스크립트를 실행해 보겠습니다.

./int.sh

비대화형 셸에서 스크립트는 별칭을 사용할 수 없지만 환경 변수는 사용할 수 있습니다. 대화형 셸은 프로필 및 구성 파일을 사용하는 데 있어 더 흥미롭습니다.

대화형 로그인 셸

두 가지 유형의 대화형 로그인 셸이 있습니다. 하나는 컴퓨터에 로그인할 수 있는 셸입니다. 데스크톱에서 이것은 일반적으로 데스크톱 환경의 기본이 되는 셸입니다. 창으로 된 데스크톱 환경을 사용하든 타일링 데스크톱 환경을 사용하든 Linux 시스템에서 사용자를 인증하고 로그인을 허용해야 합니다.

데스크톱 환경이 설치되지 않은 서버에서는 대화형 셸에 직접 로그인합니다. 데스크톱 환경을 벗어나 터미널에 접속하면 데스크톱 컴퓨터에서도 같은 일을 할 수 있다. 그놈에서는 Ctrl+Alt+F3 키 조합으로 이 작업을 수행할 수 있습니다. 그놈 세션으로 돌아가려면 Ctrl+Alt+F2 키 조합을 누르십시오. SSH를 통해 연결하는 셸도 로그인 셸입니다.

호출되는 프로필 및 구성 파일은 환경 변수를 사용하여 설정할 수 있으므로 배포판마다 다를 수 있습니다. 또한 모든 배포판에서 모든 파일이 사용되는 것은 아닙니다. 일반 Bash 설치에서 대화형 로그인 셸은 /etc/profile 파일을 읽습니다. 여기에는 시스템 전체의 셸 구성 옵션이 있습니다. 존재하는 경우 이 파일은 /etc/bash.bashrc 및 /usr/share/bash-completion/bash_completion과 같은 파일도 읽습니다.

그런 다음 Bash는 ~/.bash_profile 파일을 찾습니다. 존재하지 않는 경우 Bash는 ~/.bash_login 파일을 찾습니다. 해당 파일이 없으면 Bash는 .profile 파일을 찾으려고 시도합니다. 이러한 파일 중 하나를 찾아서 읽으면 Bash는 검색을 중지합니다. 따라서 대부분의 경우 ~/.profile은 전혀 읽히지 않을 것입니다.

종종 ~/.bash_profile 또는 일종의 백스톱으로 ~/.profile 파일에서 다음과 같은 것을 찾을 수 있습니다.

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

활성 셸이 Bash인지 확인합니다. 그렇다면 ~/.bashrc 파일을 검색하고 발견되면 읽습니다.

대화형 비로그인 쉘

Bash 대화형 비로그인 쉘은 /etc/bash.bashrc를 읽은 다음 ~/.bashrc 파일을 읽습니다. 이를 통해 Bash는 시스템 전체 및 사용자별 설정을 가질 수 있습니다.

이 동작은 Bash가 컴파일될 때 컴파일 플래그로 변경할 수 있지만 /etc/bash.bashrc 파일을 소싱하고 읽지 않는 Bash 버전을 만나는 것은 드물고 특이한 상황입니다.

데스크톱에서 터미널 창을 열 때마다 이 두 파일은 대화형 비로그인 셸의 환경을 구성하는 데 사용됩니다. Geany IDE의 터미널 창과 같은 애플리케이션에 의해 시작된 쉘에서도 동일한 일이 발생합니다.

구성 코드를 어디에 두어야 합니까?

개인 맞춤화 코드를 넣기에 가장 좋은 곳은 ~/.bashrc 파일입니다. 별칭과 셸 함수는 ~/.bashrc에서 정의할 수 있으며 모든 대화형 셸에서 읽고 사용할 수 있습니다.

배포판이 로그인 셸에서 ~/.bashrc를 읽지 않고 원하는 경우 ~/.bash_profile 파일에 이 코드를 추가하십시오.

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

모듈성이 가장 좋습니다

별칭이 많거나 여러 시스템에서 동일한 별칭을 사용하려는 경우 해당 별칭을 자체 파일에 저장하는 것이 가장 좋으며 셸 기능도 마찬가지입니다. ~/.bashrc 파일에서 해당 파일을 호출할 수 있습니다.

테스트 컴퓨터에서 별칭은 .bash_aliases라는 파일에 저장되고 .bash_functions라는 파일에는 셸 기능이 포함됩니다.

다음과 같이 ~/.bashrc 파일에서 읽을 수 있습니다.

# read in my aliases
if [ -f ~/.bash_aliases ]; then
  . ~/.bash_aliases
fi

# read in my shell functions
if [ -f ~/.bash_functions ]; then
  . ~/.bash_functions
fi

이렇게 하면 컴퓨터 간에 별칭과 기능을 쉽게 이동할 수 있습니다. 위의 줄을 각 컴퓨터의 ~/.bashrc 파일에 추가하고 별칭과 셸 기능이 포함된 파일을 각 컴퓨터의 홈 디렉터리에 복사하기만 하면 됩니다.

즉, 한 컴퓨터의 ~/.bashrc에서 다른 컴퓨터 각각의 ~/.bashrc 파일로 모든 정의를 복사할 필요가 없습니다. 특히 다른 배포판에서 Bash를 실행하는 경우 컴퓨터 간에 전체 ~/.bashrc 파일을 복사하는 것보다 낫습니다.

요약하자면

실제로 알아야 할 파일은 다음과 같습니다.

  • /etc/profile: 시스템 전체 구성 설정입니다. 로그인 쉘에서 사용됩니다.
  • ~/.bash_profile: 개별 사용자에 대한 설정을 유지하는 데 사용됩니다. 로그인 쉘에서 사용됩니다.
  • ~/.bashrc: 개별 사용자에 대한 설정을 유지하는 데 사용됩니다. 대화형 비로그인 쉘에서 사용됩니다. 로그인 셸의 경우 '~/.bash_profile' 또는 '~/.profile' 파일에서 호출할 수도 있습니다.

한 가지 편리한 방법은 개인 설정을 '~/.bashrc'에 넣고 '~./bash_profile' 파일이 '~/.bashrc' 파일을 호출하는지 확인하는 것입니다. 즉, 개인 설정이 단일 파일에 보관됩니다. 로그인 및 비로그인 셸에서 일관된 셸 환경을 얻을 수 있습니다. 이것을 시스템 파일이 아닌 파일에 별칭 및 셸 기능을 저장하는 것과 결합하는 것은 깔끔하고 강력한 솔루션입니다.