서버에서 루트로 로그인하면 .bashrc
(Ubuntu 10.10)이 표시됩니다.
내 Mac에는 .bash_profile
우분투는 항상 .bashrc
파일 만 가지고 .bash_profile
있습니까? (나는 단지 혼란스러워서 묻는다. 나는 그것들이 다른 o / s라는 것을 알고 있지만 어쨌든 관계가 있을까?)
내 서버에서 별칭을 만들고 싶습니다 .bashrc
.
이 별칭을 모든 사용자가 사용할 수 있도록 적용하려면 어떻게해야합니까?
서버에서 루트로 로그인하면 .bashrc
(Ubuntu 10.10)이 표시됩니다.
내 Mac에는 .bash_profile
우분투는 항상 .bashrc
파일 만 가지고 .bash_profile
있습니까? (나는 단지 혼란스러워서 묻는다. 나는 그것들이 다른 o / s라는 것을 알고 있지만 어쨌든 관계가 있을까?)
내 서버에서 별칭을 만들고 싶습니다 .bashrc
.
이 별칭을 모든 사용자가 사용할 수 있도록 적용하려면 어떻게해야합니까?
답변:
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
.bashrc
grep '^[[: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
으로 그래픽 로그인을 기반으로하지만,
별칭에 정의해서는 안 .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
다른 곳, 또는.)
여기에 좋은 독서 가 있습니다. ".bash_profile은 로그인 쉘에 대해 실행되고 .bashrc는 대화 형 비 로그인 쉘에 대해 실행됩니다."
따라서 별명으로 .bash_profile을 사용하십시오.
.bash_profile
것이 올바르지 않습니다. Ubuntu에서 .profile
(로그인 쉘을 위해 실행되는) 소스 .bashrc
는 대화식 bash 쉘일 때 소스 입니다. 따라서에서 별칭을 넣어 .bashrc
(또는 .bash_aliases
에서 공급하는 것은 .bashrc
)에서 그들을 정의 의 모든 상호 작용의 bash 쉘. 별칭으로 .bash_profile
인해이 문제가 발생 합니다. 참조 이 , 그 , 내 대답은 , 기본 ~/.bashrc
의 존재 또는 퍼팅 별칭을 추천 의견을 .bash_aliases
.