What are the functional differences between .profile .bash_profile and .bashrc | .profile과 .bash_profile과 .bashrc의 기능 차이

Q.

.profile.bash_profile.bashrc 파일의 차이가 무엇인가요?

 

A1.

.bash_profile.bashrc는 bash에서만 사용하는 것이고, .profile은 자기만의 설정 파일이 없는 모든 쉘에서 사용해요. (.profile은 원래 Bourne 쉘에서 사용했어요.) 로그인 쉘은 .bashrc 파일과 함께 .bash_profile 또는 .profile을 읽어요. 서브쉘은 .bashrc 파일만 읽어요. 작업 컨트롤과 현대적인 창 시스템에서 .bashrc는 많이 쓰이지 않아요. screen이나 tmux를 쓴다면 스크린/윈도우는 로그인 쉘이 아닌 서브쉘을 실행하기 때문이에요.

이렇게 만들어진 이유는 .profile에서 모든 설정을 한 번에 하고 (또는 각 쉘의 버전에 따라), 쉘 마다의 설정은 .bashrc에서 하기 위함이에요. 예를 들어, 환경 변수를 로드하는 일은 일반적으로 세션 안에서 서브쉘을 시작할 때마다 하기보다는 세션마다 한 번만 하지요. 반면, 환경 변수와 달리 모든 쉘에 자동으로 적용되지 않는 alias와 같은 일들은 서브쉘마다 실행해야 하지요.

다른 주목할 만한 쉘 설정 파일:

/etc/bash_profile(fallback은 /etc/profile)은 시스템 전체에 대한 설정을 위하여 유저의 .profile 이전에 읽어져요. 이와 비슷하게 서브쉘에 대해서는 /etc/bashrc가 읽어져요 (fallback은 없음). 우분투를 비롯한 여러 시스템은 /etc/profile.d 디렉토리를 사용해요. 이 디렉토리에는 /etc/profile이 source 하는 여러 쉘 스크립트가 있어요. 이 때의 적용 대상은 쉘 단위에요. *.sh 파일들은 모든 Bourne/POSIX 호환 쉘에 적용되고 다른 확장자는 각각의 쉘에 적용돼요.

 

A2.

.profile

PATH 및 그의 친구들과 같은 환경 변수처럼 Bash에 국한되지 않으며 항상 필요한 설정을 위해 사용해요.

예를 들어, .profile은 그래픽 데스크탑 세션을 시작할 때에도 로드되어야 해요.


.bashrc

Bash에 필요한 설정이에요. Bash aliases와 같이 에디터 설정을 원하는대로 할 때 사용해요.


.bash_profile

로그인 쉘에서 .profile.bashrc을 로드하는 것을 확실히 하기 위해 사용해요.

예를 들어, .bash_profile은 아래처럼 간단할 수 있어요

. ~/.profile

. ~/.bashrc

만약 이 .bash_profile이 없다면 .profile만 로드 될 거에요.

 

#.

쉘 관련된 설정을 할 때 별 생각 없이 스택오버플로우만 따라하다보니 .profile을 쓸 때도 있고 .bashrc를 쓸 때도 있었는데, tmux에서는 뭔가 이상함이 있더군요. 환경 변수 빼고는 .bashrc에 쓴다 정도로만 생각해도 일반적인 경우에는 충분할 것 같네요. 첫 번째 답변은 원론적이고 자세한 설명이라면, 두 번째 답변은 결과적이고 현실적인 답변이네요. 둘을 같이 보면 이해가 잘 됩니다.

 

원문.

https://serverfault.com/questions/261802/what-are-the-functional-differences-between-profile-bash-profile-and-bashrc

477 Comments