Linux에서 .bashrc와 .profile의 차이점은 무엇입니까?
게시 됨: 2022-09-29Bash를 실행하는 Linux 시스템에 로그온하면 특정 파일을 읽게 됩니다. 쉘 환경을 구성합니다. 그러나 어떤 파일을 언제 읽는지는 혼란스러울 수 있습니다. 다음은 실제로 일어나는 일입니다.
다양한 유형의 쉘
셸을 시작할 때 얻는 환경은 구성 또는 프로필 파일에 보관된 설정에 의해 정의됩니다. 여기에는 텍스트 색상, 명령 프롬프트, 별칭, 프로그램 이름을 입력할 때 실행 파일을 검색하는 경로 등을 설정하는 정보가 들어 있습니다.
파일 시스템의 여러 위치에 이러한 설정이 저장되는 여러 파일이 있습니다. 그러나 쉘을 시작할 때 어떤 파일을 읽는지 살펴보기 전에 어떤 유형의 쉘을 사용하고 있는지 명확히 해야 합니다.
로그인 셸은 로그인하는 셸입니다. 컴퓨터를 부팅하고 로그인하면 그래픽 데스크탑 환경 아래에 로그인 쉘이 있습니다. SSH 연결을 통해 다른 컴퓨터에 연결하는 경우 로그인 셸에도 로그인합니다.
터미널 창을 열 때 얻는 셸 유형은 비 로그인 셸입니다. 이미 로그인되어 있을 때 셸을 시작하기 위해 인증할 필요가 없습니다. 로그인 및 비로그인 셸은 대화형 셸입니다. 지침을 입력하고 "Enter" 키를 누르고 화면 응답을 읽어 사용합니다.
비대화형 쉘도 있습니다. 스크립트가 실행될 때 시작되는 쉘 유형입니다. 스크립트는 새 셸에서 시작됩니다. 스크립트 맨 위에 있는 shebang #!/bin/bash
는 사용해야 하는 쉘을 지정합니다.
#!/bin/bash echo - "안녕하세요, 세계!\n"
이 스크립트는 비대화형 Bash 셸에서 실행됩니다. 셸이 비대화식이지만 스크립트 자체는 대화식일 수 있습니다. 이 스크립트는 터미널 창에 인쇄하고 사용자 입력을 쉽게 받아들일 수 있습니다.
관련: Linux 시작을 위한 9가지 Bash 스크립트 예제
비대화형 셸
비대화형 셸은 시작할 때 프로필 파일을 읽지 않습니다. 그들은 환경 변수를 상속하지만 예를 들어 명령줄이나 구성 파일에 정의되어 있는지 여부와 같이 별칭에 대해서는 아무 것도 알지 못합니다.
쉘이 명령줄 매개변수로 전달된 옵션을 보고 쉘이 대화식인지 여부를 테스트할 수 있습니다. 옵션에 "i"가 있으면 쉘이 대화식입니다. Bash 특수 매개변수 $-
는 현재 쉘에 대한 명령행 매개변수를 포함합니다.
[[ $- == *i* ]] && echo '대화형' || echo '비대화형'
"cat"을 의미하는 xc
라는 별칭을 만들어 보겠습니다. 또한 $PATH
변수 세트가 있는지 확인합니다.
별칭 xc=고양이
에코 $PATH
이 작은 스크립트 내에서 이 두 가지 모두에 액세스하려고 합니다. 이 스크립트를 편집기에 복사하고 "int.sh"로 저장합니다.
#!/bin/bash xc ~/text.dat echo "변수=$PATH"
스크립트를 실행 가능하게 하려면 chmod
를 사용해야 합니다.
chmod +x int.sh
스크립트를 실행해 보겠습니다.
./int.sh
비대화형 셸에서 스크립트는 별칭을 사용할 수 없지만 환경 변수는 사용할 수 있습니다. 대화형 셸은 프로필 및 구성 파일을 사용하는 데 더 흥미가 있습니다.
관련: Linux의 Bash에서 환경 변수를 설정하는 방법
대화형 로그인 셸
대화식 로그인 쉘에는 두 가지 유형이 있습니다. 하나는 컴퓨터에 로그인할 수 있게 해주는 셸입니다. 데스크탑에서 이것은 일반적으로 데스크탑 환경의 기초가 되는 셸입니다. 윈도우 환경을 사용하든 타일링 데스크탑 환경을 사용하든 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" 파일에서 다음과 같은 것을 찾을 수 있습니다.
# bash를 실행하는 경우 if [ -n "$BASH_VERSION" ]; 그 다음에 # 존재하는 경우 .bashrc를 포함합니다. if [ -f "$HOME/.bashrc" ]; 그 다음에 . "$HOME/.bashrc" 파이 파이
이것은 활성 쉘이 Bash인지 확인합니다. 그렇다면 "~/.bashrc" 파일을 검색하고 발견되면 읽습니다.
대화형 비 로그인 셸
Bash 대화형 비 로그인 셸은 "/etc/bash.bashrc"를 읽은 다음 "~/.bashrc" 파일을 읽습니다. 이를 통해 Bash는 시스템 전체 및 사용자별 설정을 가질 수 있습니다.
이 동작은 Bash가 컴파일될 때 컴파일 플래그로 변경할 수 있지만 "/etc/bash.bashrc" 파일을 소싱하고 읽지 않는 Bash 버전을 만나는 것은 드물고 독특한 상황입니다.
데스크탑에서 터미널 창을 열 때마다 이 두 파일은 대화형 비 로그인 셸의 환경을 구성하는 데 사용됩니다. Geany IDE의 터미널 창과 같은 응용 프로그램에서 시작한 셸에서도 동일한 일이 발생합니다.
구성 코드를 어디에 넣어야 합니까?
개인 사용자 정의 코드를 넣는 가장 좋은 위치는 "~/.bashrc" 파일입니다. 별칭과 셸 기능은 "~/.bashrc"에 정의할 수 있으며 모든 대화형 셸에서 읽고 사용할 수 있습니다.
배포판이 로그인 셸에서 "~/.bashrc"를 읽지 않고 읽고 싶다면 이 코드를 "~/.bash_profile" 파일에 추가하십시오.
# bash를 실행하는 경우 if [ -n "$BASH_VERSION" ]; 그 다음에 # 존재하는 경우 .bashrc를 포함합니다. if [ -f "$HOME/.bashrc" ]; 그 다음에 . "$HOME/.bashrc" 파이 파이
모듈화가 최고
별칭이 많거나 여러 시스템에서 동일한 별칭을 사용하려는 경우 고유한 파일에 저장하는 것이 가장 좋으며 쉘 기능과 동일합니다. "~/.bashrc" 파일에서 해당 파일을 호출할 수 있습니다.
테스트 컴퓨터에서 별칭은 ".bash_aliases"라는 파일에 저장되고 ".bash_functions"라는 파일에는 셸 기능이 들어 있습니다.
다음과 같이 "~/.bashrc" 파일 내에서 읽을 수 있습니다.
# 내 별칭에서 읽기 if [ -f ~/.bash_aliases ]; 그 다음에 . ~/.bash_aliases 파이 # 내 쉘 함수에서 읽기 if [ -f ~/.bash_functions ]; 그 다음에 . ~/.bash_functions 파이
이를 통해 컴퓨터 간에 별칭과 기능을 쉽게 이동할 수 있습니다. 위의 줄을 각 컴퓨터의 "~/.bashrc" 파일에 추가하고 별칭과 셸 기능이 포함된 파일을 각 컴퓨터의 홈 디렉토리에 복사하기만 하면 됩니다.
이는 한 컴퓨터의 "~/.bashrc"에서 다른 컴퓨터 각각의 "~/.bashrc" 파일로 모든 정의를 복사할 필요가 없음을 의미합니다. 또한 컴퓨터 간에 전체 "~/.bashrc" 파일을 복사하는 것보다 낫습니다. 특히 다른 배포판에서 Bash를 실행하는 경우에는 더욱 그렇습니다.
요약해서 말하자면
실제로 알아야 할 파일은 다음과 같습니다.
- /etc/profile : 시스템 전체 구성 설정입니다. 로그인 셸에서 사용합니다.
- ~/.bash_profile : 개별 사용자에 대한 설정을 유지하는 데 사용됩니다. 로그인 셸에서 사용합니다.
- ~/.bashrc : 개별 사용자에 대한 설정을 유지하는 데 사용됩니다. 대화형 비 로그인 셸에서 사용합니다. 로그인 셸을 위해 "~/.bash_profile" 또는 "~/.profile" 파일에서 호출할 수도 있습니다.
한 가지 편리한 방법은 "~/.bashrc"에 개인 설정을 넣고 "~./bash_profile" 파일이 "~/.bashrc" 파일을 호출하는지 확인하는 것입니다. 즉, 개인 설정이 하나의 파일에 저장됩니다. 로그인 및 비로그인 셸에서 일관된 셸 환경을 얻을 수 있습니다. 이것을 시스템이 아닌 파일에 별칭 및 쉘 기능을 저장하는 것과 결합하는 것은 깔끔하고 강력한 솔루션입니다.