Bash 설정

관심사.../Cygwin 2008. 10. 20. 05:59

작성자 : 정원호 (lion21@nownuri.net)
편집자 : 정원호 (lion21@nownuri.net)
최초 게시일 : 2003년 2월 17일

 

Windows를 설치한 후 사용자의 구미에 맞도록 여러가지 설정을 바꾸게 되는데 Cygwin도 마찬가지이다. 그나마 Windows는 사용자가 그럭저럭 사용할 수 있는 상태로 설치가 되지만 Cygwin은 반드시 설정변경을 통해서만 사용 가능한 일들이 있다. 한글 입출력 설정 등이 그 대표적인 예이다.

이와 같은 작업은 주로 운영체제의 쉘에서 많이 이루어 지는데 Cygwin은 기본으로 Bash 쉘을 사용한다. 때문에 어느정도 Bash를 이해할 필요가 있다. 결국 본 페이지에서는 Cygwin을 설치한 후에 기본적으로 해야 할 일을 언급한다고 보면 된다.

 

Bash 개괄

Bash는 GNU Bourne-Again SHell의 약자로서, Unix 운영체제에서 사용되는 여러가지 쉘중 하나이다. 쉘(Shell)은 '대화형 사용자 인터페이스' 로 해석되는데, 이를 보다 쉽게 설명하자면 운영체제의 구성요소중 '사용자가 입력하는 명령어를 이해하고, 실행하는 역할을 수행하는 기능'을 말한다. 쉘은 운영체계의 외곽계층으로서, 운영체계의 가장 안쪽계층이면서 서비스의 핵심을 담당하는 커널(Kernel)과 자주 비교하여 설명된다.

MS-DOS의 command.com 이나 Windows의 explorer.exe 또는 cmd.exe 와 동일한 역할을 수행한다고 생각하면 쉽게 이해가 될것 같다. 하지만 그 기능은 감히 Windows의 그것들과는 비교할 수 없을 정도로 아주 막강하다.

Cygwin이나 Linux 배포판에서 Bash의 환경 설정은 다음과 같은 파일이 담당하고 있다.

위의 6개의 파일은 크게 2가지로 분류될 수 있는데 시스템 전체에 적용되는 것(/etc/bashrc, /etc/profile)과, 개별 사용자에게 적용되는 것(.bashrc, .bash_profile, .bash_logout, .inputrc)이다. '$HOME'은 개별 사용자의 홈 디렉토리를 의미한다.

최종적으로 사용자 환경은 시스템 규모와 사용자별 파일이 함께 적용되는데 두개의 내용이 서로 충돌하는 경우 사용자별 파일이 우선된다.

한글 입출력 문제 해결 및 alias 설정

1byte 문자권을 대상으로 출시되는 Cygwin에서 한글 입출력에 문제가 있다는 것은 어찌보면 당연한 것일 수도 있다. 하지만 우리는 한글을 사용하는 한국인이 아닌가? 어쩔 수 없이 우리 힘으로 해결해야 한다.

Cygwin에서 완벽한 한글 입출력은 사실 쉽지 않은 문제이다. 하지만 기본적으로 사용, 즉 Cygwin 콘솔 상에서 한글을 쓰고, 읽을 수 있는 정도는 그리 어렵지 않게 해결 할 수 있다.

아무 작업도 하지 않은 상태에서 한글 파일파일 리스트는 다음 그림과 같이 출력된다. :-(

한글 입출력 문제는 해결하기 위해서는 위에서 언급한 Bash 설정 파일(/etc/profile, /etc/bash.bashrc, /etc/inputrc, $HOME/.bash.profile, $HOME/.bashrc, $HOME/.inputrc)을 조금 수정해야 한다.

먼저 시스템 규모 단위로 설정을 할 것인지 아니면 사용자별 설정을 할 것인지 결정해야 한다. 여기서는 여러 사용자 계정이 존재하는 Windows Server를 지원하기 위함이기 때문에 시스템 규모로 설정을 할 것이다. 사실 사용자별 설정과 별반 다를바 없다.

  1. /etc/profile 수정

    /etc 디렉토리를 보면 profile과 profile.default 파일이 존재하는데 이중 profile을 삭제하고, profile.default 파일을 profile로 이름을 바꾼다. 사실 이 작업은 수행하지 않아도 별 상관은 없지만 profile.default 파일에 몇가지 유용한 스크립트가 들어있기 때문에 가급적 이 파일을 아용한다.

    이름을 바꾸었다면 vi와 같은 텍스트 편집기를 통해서 profile 파일을 열고 다음 내용을 추가한다.

if [ -f /etc/bash.bashrc ] ; then
   source /etc/bash.bashrc
fi

if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
   INPUTRC=/etc/inputrc
fi

  1. /etc/inputrc 작성 및 수정

    기본값으로 inputrc 파일이 존재하지 않는데 /etc 디렉토리에 새로 만들고, 다음 내용을 추가한다.

set meta-flag on
set convert-meta off
set output-meta on
set completion-ignore-case on
set bell-style visible
set horizontal-scroll-mode on
set show-all-if-ambiguous on

# 터미널 자체의 8비트 문자 지원여부와 상관없이 8비트 입력을 가능하게 함.
# 8비트 문자를 변환하지 않도록 함.
# 8비트 문자를 출력할 때 그대로 출력하도록 함.
# 자동 완성 기능을 사용할때 대소문자를 구별하지 않음.
# 콘솔에서 나는 비프음(beep)이 나지 않게 함.
#
#

  1. /etc/bash.bashrc 수정

    Cygwin에서는 여느 Linux 배포판과 달리 bashrc가 아니고 bash.bashrc인데 이 파일을 열어 다음 내용을 추가한다.

alias ls='ls -F --color=auto --show-control-char'
alias l.='ls -dl .[a-zA-Z]*'
alias ll='ls -al'
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'

# 아래 설명 참조
# 숨김 파일을 표시함.
# 숨김 파일을 비롯해서 모든 파일 및 디렉토리를 자세하게 표시함.
# 만약 복사대상 파일 이미 있는 경우 사용자에게 이를 알림.
# 대상 파일이 이미 있어, 사용자에게 어떻게 처리할지를 물어봄.
# 각 파일을 하나씩 지울 것인지 사용자에게 일일이 물어봄.

첫줄 alias ls='ls -F --color=auto --show-control-char'에 대해 간단히 설명하자면...

-F는 파일 형식을 알리는 문자를 각 파일 뒤에 추가하는 것으로, 실행파일은 "*", 경로(디렉토리)는 "/", 심볼릭 링크는 "@", FIFO는 "|", 소켓은 "=", 을 표시해 준다. --color=auto는 파일의 형태에 따라 그 파일의 색깔을 다르게 보여주는 기능이고, --show-control-char는 한글을 제대로 출력해 주는 기능이다.

alias 라는 용어가 자주 등장하는데 대부분 아는 내용이겠지만 노파심에서 잠깐 언급하겠다.

CUI 기반 환경에서 작업 속도를 향상시키기 위해서는 타이핑 횟수를 최소화할 필요가 있는데 이때 유용하게 사용할 수 있는 것이 alias이다. 복잡한 옵션과 함께 자주 사용되는 명령어를 짧게 줄여주는 기능이라고 생각하면 되겠다.

실제 'ls -F --color=auto --show-control-char' 라고 입력해야 할 것을 그냥 'ls'라고만 입력해도 시스템 내부적으로는 동일한 결과가 발생하기 때문에 매우 자주 사용된다. 현재 시스템에 적용된 alias 정보를 확인하기 위해서는 콘솔창에서 'alias'라고만 입력하면 된다.

  1. 퍼미션 수정

    파일 편집을 모두 마쳤다면 마지막으로 다른 사용자들도 파일을 읽을 수 있도록 퍼미션을 수정해 준다.

chmod 644 profile bash.bashrc inputrc

이제 모두 끝났다. 모든 사용자들이 완벽하지는 않지만 별 무리없이 한글을 사용할 수 있을 것이다. 또한 기본 alias 설정도 이용할 수 있다.

혹시나 사용자별 정의를 하고 싶은 경우에는 위의 2, 3번 내용을 사용자 홈디렉토리의 .inputrc, .bashrc 파일에 각각 넣어 주면 된다. 이때 /etc/skel 디렉토리를 이용하면 편리한데 이 곳에 모든 사용자에게 적용되는 내용을 담은 .bash_profile, .bashrc, .inputrc 파일을 넣어두면 사용자 홈폴더가 생성될때마다 자동적으로 복사되기 때문이다.

기타 환경 설정

  1. 홈디렉토리($HOME) 이동하기

    Cygwin에서 루트 디렉토리(/)가 'C:\cygwin' 이라고 가정할때 사용자 홈디렉토리(/home/user)는 C:\cygwin\home\user 이다. 하지만 이 동일 사용자의 Windows 홈디렉토리는 C:\Documents and Settings\user 이다. 즉, 같은 사용자가 2개의 홈디렉토리를 갖게 된다.

    위와 같이 운영하여도 상관은 없지만 어차피 동일한 사용자라면 역시 동일한 홈디렉토리를 사용하는 것이 좋을 것이다.

    이제부터 Cygwin상의 홈디렉토리와 Windows상의 홈디렉토리를 같게 하는 방법을 알아 보자.

    이때 사용할 수 있는 방법이 바로 mount 이다. mount의 개념은 다 안다고 가정하고 따로 설명하지는 않겠다. 주의할 점은 Unix 운영체제에서의 mount와 지원하는 옵션과 문법이 약간 다르다는 것이다.

    아래 그림은 Cygwin mount 의 도움말이다. 참고하기 바란다. 사실 필자는 무슨 얘긴지 잘 모르겠다. :-)

    이 정도면 필자가 무슨 짓(?)을 할려지는 대충 눈치를 챌 수 있을 것이다. 그렇다. /home을 C:\Documents and Settings 로 마운트하려는 것이다.

    먼저 C:\cygwin\home 을 빈디렉토리로 만든다. 'rm -rf'를 이용하면 모든 사용자의 홈디렉토리를 삭제할 수 있다. 만약 Permission Denied 문제가 발생하면 시스템을 리부팅한 후에 다시 작업하면 된다. 이런 이유가 발생하는 이유는 필자도 잘 모른다. 혹시 알고 있다면 알려주기 바란다. 아무튼 리부팅하면 잘 지워진다. 역시 Windows 이다. :-(

[root@wonho home]$ rm -rf *

이제 마운트만 하면 된다.

[root@wonho /]$ mount "C:\Documents and Settings" /home

특별한 옵션을 주지 않아도 잘 작동하는 듯 보인다. 이제 제대로 마운트가 되었는지 확인해 보자.

실제 /home 으로 이동해 보면 "C:\Documents and Settings" 의 내용물이 정상적으로 보이는 것을 확인할 수 있다. 이외에도 자주 사용하는 폴더(ex. C:\Windows\System32)가 있다면 역시 마운트하여 사용하면 편리할 것이다.

  1. 프롬프트 변경

    Linux 배포판의 프롬프트에 익숙해진 탓인지 Cygwin의 기본 프롬프트는 별로 볼품이 없어 보인다. 현재 작업 경로를 자세하게 보여주는 장점이 있긴 하지만 진짜 Unix 운영체제처럼 사용하고 싶은 사용자는 프롬프트를 바꿔 보자.

    시스템 규모의 프롬프트 설정는 /etc/profile 에서 정의한다.

    Cygwin 기본 값을 다음과 같이 바꿔 보자.

export PS1='\[\033]0;\w\007
\033[32m\]\u@\h \[\033[33m\w\033[0m\]

export PS1='[\u@h \W]\$ '

그럼 다음과 같이 명령 프롬프트가 변경될 것이다. 훨씬 깔끔하지 않는가? :-)

VI(VIM) 편하게 쓰기