답변:
/etc/profile
특정 목적이기 때문에 로그인 쉘에 대해서만 호출됩니다.로그인 쉘 이 아닌 대화식 쉘에 대해 명령을 실행하고을 사용하려면 또는에 bash
넣으십시오 .~/.bashrc
/etc/bash.bashrc
"프로파일"파일의 목적은 로그인 쉘에 대해서만 실행되어야하는 명령을 포함하는 것입니다. 이러한 파일은 다음과 같습니다.
/etc/profile
로그인 쉘로 시작하면 모든 Bourne 호환 쉘 ( bash
및 포함 dash
)이 실행합니다 .
에서 스크립트 /etc/profile.d
.
이것은 Bourne 스타일 쉘용이지만 쉘 실행 파일 자체에는 코딩되어 있지 않습니다. 오히려, 명령은이를 /etc/profile
호출합니다. 예를 들어, Ubuntu 12.04 시스템에서 /etc/profile
다음 행을 포함합니다.
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
.profile
사용자의 홈 디렉토리에서 로그인 쉘로 시작할 때 Bourne 호환 쉘에 의해 실행됩니다 (재정의되지 않은 경우 아래 참조).
.bash_profile
또는 .bash_login
사용자의 홈 디렉토리에 있습니다. 이 외의 다른 쉘에서는 무시됩니다 bash
. 그러나 .bash_profile
존재하는 경우 대신bash
실행하십시오 . 경우 존재하지 않지만 존재, 그 대신 실행됩니다 . .profile
.bash_profile
.bash_login
.profile
(그러나 .bash_profile
또는 .bash_login
존재하는 경우 * 명시 적으로을 호출하도록 작성 되는 것이 일반적입니다 .profile
.)
쉘 특정 프로파일 파일 의 장점은 해당 쉘에만 유효한 명령 또는 구문을 포함 할 수 있다는 것입니다. 예를 들어 / 에서 [[
평가 연산자를 사용할 수는 있지만 평가 연산자를 사용한 다음 쉘로 로그인 하면 실패합니다..bash_profile
.bash_login
.profile
dash
"프로파일"파일에는 로그인 시작시 한 번만 실행해야하는 명령이 포함되어야합니다. (이것은 로그인 쉘로 시작하는 그래픽 로그인도 포함합니다.) 쉘이 대화식이면 쉘을 실행하는 사용자가 로그온했을 가능성이 있으므로 아마도 조상 (시작했거나 시작한 시작)을 가지고있을 것입니다. 또는 로그인 쉘 등을 시작했습니다.
다음과 같은 이유로 명령을 한 번만 실행할 수도 있습니다.
바람직하지 않은 결과가 발생하는 두 번째 상황의 예로, 모든 사용자에게 기본적으로 나타나는 다음 행을 고려하십시오 ~/.profile
.
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
SSH를 시작하고 다른 쉘 (예 :)을 실행했다고 가정 zsh
하고 어느 시점에서 일시적으로 돌아가고 bash
환경을 유지하고 싶었다는 것을 알게 된 다음 ( ) bash
에서 다시 실행 한 다음 쉘을 부분으로 실행하는 zsh
것과 같은 프로그램 mc
을 실행했습니다 인터페이스의. 경우 bin
홈 폴더에 존재하는 사용자 이름은 james
당신의 PATH
가장 안쪽 껍질 같은 것입니다 :
/home/james/bin:/home/james/bin:/home/james/bin:/home/james/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
그것은 비효율적이며 (더 중요하게는)의 내용을 이해하기 어렵게 만듭니다 PATH
.
그러나 이것은 결코 재앙이 아닙니다. 내가 알 수있는 한, 모든 대화식 쉘이 "프로파일"파일을 소스로 만들면 기본 구성에서 끔찍한 일이 발생하지 않습니다 . 그러나 "프로파일"파일의 목적은 로그인 당 한 번만 실행되는 명령을 포함하는 것이므로 사용자 또는 관리자는 로그인 쉘을 시작할 때만 실행 해야하는 명령을 프로파일에 추가 할 수 있습니다 .
를 사용하는 경우 bash
모든 대화식 쉘에서 실행되는 명령 파일이 있습니다.
/etc/bash.bashrc
.bashrc
사용자의 홈 디렉토리에 있습니다.이것은 가장 일반적으로 사용되는 명령에 사용됩니다
예를 들어, 명령 줄 탭 완성은 일반적으로 bash
로그인 쉘 인지 여부에 관계없이 활성화되어야합니다 . 그래서 이것은 다음에 나타납니다 ~/.bashrc
:
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi
가, 1 과 2 모두 적용이이 일 안에 실행되는 다른 조개에 이월되지 않으며, 탭 완료에서 작동합니다 bash
내가 다른 쉘에 로그인 한 경우에도 마찬가지입니다.
bash
로그인 쉘과 대화식 쉘에서 명령을 사용 하고 있고 로그인 쉘이 아닌 명령을 사용하려면 일반적으로 /etc/bash.bashrc
또는 에 넣는 것으로 충분합니다~/.bashrc
. 이것은 기본적으로 때문입니다 /etc/profile
및 ~/.profile
명시 적으로 실행합니다. 예를 들어, ~/.profile
이 있습니다 :
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
(와 유사하게 /etc/profile
소스 /etc/bash.bashrc
입니다 bash
.)
따라서 대화식 bash
쉘 을 시작할 때 " 로그인 "파일과 "rc"파일이 모두 실행됩니다 (로그인 쉘인지 여부).
모든 비 대화식 쉘이 실행되도록 명령을 지정하지 않을 수도 있습니다. 스크립트가 실행될 때마다 실행됩니다 (스크립트를 실행하도록 구성한 쉘에서 스크립트가 실행되는 경우).
이로 인해 상당한 파손이 발생할 수 있습니다. 이 작업을 수행 할 때 사용중인 계정 외에 시스템에 관리자 계정이없는 경우 관리자 계정을 만들 수 있습니다. 실수를 쉽게 해결할 수 있습니다.
에서 bash
의 "RC"파일이 실제로 실행되는 쉘이 대화 형인지 여부 . 그러나 상단에는 다음과 같이 말합니다.
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
따라서 스크립트를 실행하기 위해 실행되는 것과 같은 비 대화식 쉘에서도 자동으로 실행되는 명령이 필요한 경우 해당 행 앞에 명령을 추가 할 수 있습니다 .
로그인하면 로그인 쉘이 시작됩니다. 그 후 쉘이 로그인 쉘로 작동하도록하려면 -l
플래그로 시작하십시오 ( l ogin을 의미 ). 예를 들면 다음과 같습니다.
다른 사용자 로 로그인하지 않으려면 로그인 쉘을 사용하지 않고 로그인 쉘을 시작하는 가장 좋은 방법 입니다. 그런 다음 다음을 사용하십시오.
sudo -i
대한 root
(사용 sudo -s
비 로그인에 대한 대화 형 루트 쉘)sudo -u username -i
모든 사용자su - username
비 root
사용자 용 ( 로그인하지 않은 대화식 루트 셸에 사용)su username
초기 로그인 쉘은 A와 동일 로그인 쉘 . 이 답변의 모든 곳에 "login shell"이라고 적혀 있는데 "initial login shell"이라고 말할 수 있습니다 (이 부분은 이미 이해가 멈췄을 것입니다).
초기 로그인 쉘 이라는 용어의 한 가지 이유 는 로그인 쉘 이 다른 의미 로 사용되어 로그온 할 때 실행되는 쉘로 사용 되는 프로그램 을 식별하기 때문입니다. 이것은 다음과 같은 로그인 쉘 의 의미입니다 .
bash
맨 페이지In bash, the "rc" files are actually run whether the shell is interactive or not.
부정확하다. /etc/bash.bashrc는 /etc/bash.profile에 의해 트리거됩니다.