bash를 길들이려면 다음과 같은 파일들을 편집해야 한다.
- /etc/bashrc에는 시스템 규모의 alias들과 함수들이 들어있다. - /etc/profile에는 시스템 규모의 환경 설정과 시작 프로그램들이 들어있다. - $HOME/.bashrc에는 사용자가 정의한 alias들과 함수들이 있다. - $HOME/.bash_profile에는 사용자가 결정한 환경 설정과 시작 프로그램들이 들어있다. - $HOME/.bash_logout에는 로그 아웃할 때 수행될 행동이 들어있다. - $HOME/.inputrc에는 키 결정(binding)과 기타 내용들이 있다.예제 파일들을 아래에 적어 두었다. 첫 번째는 가장 중요한 /etc/profile 이다. 이 파일은 이어지는 여러 절에서 보게 되듯이 리눅스 시스템의 많은 특성을 결정하기 위해 쓰인다.
# /etc/profile # 시스템 규모의 환경 및 시작 프로그램. # 함수와 alias는 /etc/bashrc에 적도록 한다. # 이 파일은 다음과 같은 특성을 정한다. # # o 패스 # o 프롬프트 # o 몇 가지 환경 변수들 # o 컬러 ls # o less의 특성 # o 키보드 설정 # # 사용자들은 각자의 $HOME/.bash_profile을 편집해서 이 파일의 # 설정을 무시하게 할 수도 있고, 다른 특성을 추가할 수도 있다. # 추가 패스 설정(set a decent path) echo $PATH | grep X11R6 > /dev/null if [ $? = 1 ] ; then # add entries to the path PATH="$PATH:/usr/X11R6/bin:$HOME/bin:." fi # 사용자에게 로그인 쉘인지 아닌지 알려준다. 로그인 쉘이면 푸른 색, # 아니면 자홍색 프롬프트를 쓰고, 루트는 붉은 프롬프트를 쓴다. USER=`whoami` if [ $LOGNAME = $USER ] ; then COLOUR=44 else COLOUR=45 fi if [ $USER = 'root' ] ; then COLOUR=41 fi # ^[ 대신 진짜 esc 키를 쓴다. PS1='^[[$COLOUR;37;1m$HOSTNAME:^[[37;40;1m\w\$ ' PS2="Continue> " # core dump를 만들지 않는다. ulimit -c 0 # umask 설정 if [ `id -gn` = `id -un` -a `id -u` -gt 14 ]; then umask 002 else umask 022 fi # 몇 가지 변수들 USER=`id -un` LOGNAME=$USER MAIL="/var/spool/mail/$USER" EDITOR=jed HOSTNAME=`/bin/hostname` HISTSIZE=1000 HISTFILESIZE=1000 export PATH PS1 PS2 USER LOGNAME MAIL EDITOR HOSTNAME HISTSIZE HISTFILESIZE # 컬러 ls를 사용 eval `dircolors /etc/DIR_COLORS -b` export LS_OPTIONS='-F -s -T 0 --color=tty' # less를 취향에 맞게 바꾼다. LESS='-M-Q' LESSEDIT="%E ?lt+%lt. %f" LESSOPEN="| lesspipe.sh %s" VISUAL=jed LESSCHARSET=latin1 export LESS LESSEDIT LESSOPEN VISUAL LESSCHARSET # 키보드도 취향에 맞춘다. /sbin/kbdrate -s -r 16 -d 500 for i in /etc/profile.d/*.sh ; do if [ -x $i ]; then . $i fi done
다음은 /etc/bashrc 파일의 예다.
# /etc/bashrc # 시스템 규모의 함수들과 alias들 # 환경 설정에 관계된 내용은 /etc/profile에 두어야 한다. alias which="type -path" alias d="ls" alias dir="d"
다음은 .bashrc 파일이다.
# $HOME/.bashrc # 시스템 규모로 정의된 것들을 적용한다. if [ -f /etc/bashrc ]; then . /etc/bashrc fi # 아래는 사용자에게 비-로그인 쉘에 있다고 알려주기 위해 필요하다. COLOUR=45 # ^[ 대신 진짜 Esc 문자를 쓰도록 한다. PS1='^[[$COLOUR;37m$USER:^[[37;40m\w\$ ' # alias들 alias cp='cp -i' alias l=less alias lyx='lyx -width 900 -height 700' alias mv='mv -i' alias rm='rm -i' alias x=startx # 몇 가지 유용한 함수들 inst() # 현재 디렉터리에 .tar.gz 압축 파일을 설치한다. { gzip -dc $1 | tar xvf - } cz() # .zip 압축 파일의 내용 목록을 출력한다. { unzip -l $* } ctgz() # .tar.gz 압축 파일의 내용 목록을 출력한다. { for file in $* ; do gzip -dc ${file} | tar tf - done } tgz() # gzip과 tar로 압축 파일을 만든다. { name=$1 ; tar -cvf $1 ; shift tar -rf ${name} $* gzip -S .tgz ${name} }
다음은 .bash_profile 파일이다.
# $HOME/.bash_profile # 사용자가 정한 환경과 시작 프로그램들 # 이 파일에는 /etc/profile의 정의에 우선하는 사용자 정의 설정이 있다. # alias와 함수들을 적용한다. if [ -f ~/.bashrc ]; then . ~/.bashrc fi # PS1 설정을 다시 적용한다. if [ $USER = 'root' ] ; then COLOUR=41 else COLOUR=44 fi # ^[ 대신 진짜 Esc를 쓴다. PS1='^[[$COLOUR;37;1m$HOSTNAME:^[[37;40;1m\w\$ ' export PS1
다음은 .bash_logout 파일이다.
# $HOME/.bash_logout clear
다음은 .inputrc 파일이다.
# $HOME/.inputrc # 키 설정 "\e[1~": beginning-of-line "\e[3~": delete-char "\e[4~": end-of-line # (F1 .. F5) are "\e[[A" ... "\e[[E" "\e[[A": "info \C-m" set bell-style visible # beep 음을 내지 않는다. set meta-flag On # 8 비트 입력을 허용 (i.e, accented set convert-meta Off # 8 비트 문자를 변환하지 않는다. set output-meta On # 8 비트 문자를 제대로 표시한다. set horizontal-scroll-mode On set show-all-if-ambiguous On xterm을 비롯한 X11 응용 프로그램에서 백스페이스와 delete 키가 제대로 작동하도록 하기 위해서는 아래의 작업이 필요하다. - 아래의 내용을 자신의 .xinitrc에 넣는다. usermodmap=$HOME/.Xmodmap xmodmap $usermodmap - 아래의 내용을 자신의 .Xmodmap에 포함시킨다. keycode 22 = BackSpace keycode 107 = Delete 이렇게 해서 콘솔을 제대로 맞춘 다음에는, xterm을 수정한다. - 아래의 내용을 .Xdefaults에 넣는다. xterm*VT100.Translations: #override <Key>BackSpace: string(0x7F)\n\ <Key>Delete: string(0x1b) string("[3~")\n\ <Key>Home: string(0x1b) string("[1~")\n\ <Key>End: string(0x1b) string("[4~")\n\ Ctrl<Key>Prior: string(0x1b) string("[40~")\n\ Ctrl<Key>Next: string(0x1b) string("[41~") nxterm*VT100.Translations: #override <Key>BackSpace: string(0x7F)\n\ <Key>Delete: string(0x1b) string("[3~")\n\ <Key>Home: string(0x1b) string("[1~")\n\ <Key>End: string(0x1b) string("[4~")\n\ Ctrl<Key>Prior: string(0x1b) string("[40~")\n\ Ctrl<Key>Next: string(0x1b) string("[41~")
정보가 더 필요하면 bash(1)과 readline(3)의 매뉴얼 페이지를 보기 바란다. 모든 응용 프로그램이 정확히 작동하리라고는 기대하지 말아야 한다. 예를 들어 xterm에서 joe를 실행시키면 몇 가지 키가 작용하지 않을 것이다. rxvt에서도 마찬가지다. 이런 것은 termcap의 문제라는 소문이 있다.
서로 다른 파일 유형을 강조하기 위해, 컬러 ls로 디렉터리 목록을 출력할 수 있다. 이렇게 하려면 아래의 행들을 /etc/profile에 추가해야 한다.
eval `dircolors /etc/DIR_COLORS -b` export LS_OPTIONS='-F -T 0 --color=tty'이 두 줄은 /etc/DIR_COLORS에 준비된 색상표를 포함하는 LS_COLORS 환경 변수를 설정하는 것이다. 주의: 이 방법은 rxvt의 특정 버전에서는 제대로 작동하지 않는데, 필자도 그 까닭은 모른다. 대신 xterm 같은 것을 쓰도록 하자. 아마 rxvt 내에 어떤 환경에서는 환경을 정확히 물려받지 못하도록 하는 버그가 있는 듯 하다.
이 탁월한 페이져(pager)는 일반 텍스트 파일 뿐 아니라 gzip으로 압축된 파일이나, tar와 zip으로 묶여진 파일, 매뉴얼 페이지 등도 볼 수 있다. less의 설정은 몇 단계로 이루어진다.
- less에서 이동 키를 쓰려면, 아래와 같은 .lesskey라는 아스키 파일이 자신의 홈 디렉터리에 있어야 한다. ^[[A back-line ^[[B forw-line ^[[C right-scroll ^[[D left-scroll ^[OA back-line ^[OB forw-line ^[OC right-scroll ^[OD left-scroll ^[[6~ forw-scroll ^[[5~ back-scroll ^[[1~ goto-line ^[[4~ goto-end ^[[7~ goto-line ^[[8~ goto-end 다음에는 lesskey라는 명령을 실행한다. 이 명령은 키 설정을 담은 .less 라는 이진 파일을 만들어 낸다. - 아래 파일을 /usr/bin/lesspipe.sh로 쓴다.
#!/bin/sh # 이 파일은 'less'의 전처리기이다. # 이 파일은 LESSOPEN="|lesspipe.sh %s" 라는 환경 변수가 설정되었을 # 때 사용된다. lesspipe() { case "$1" in *.tar) tar tf $1 2>/dev/null ;; # .tar와 .tgz 파일의 내용을 본다. *.tgz|*.tar.gz|*.tar.Z|*.tar.z) tar ztf $1 2>/dev/null ;; *.Z|*.z|*.gz) gzip -dc $1 2>/dev/null ;; # 압축 파일을 제대로 본다. *.zip) unzip -l $1 2>/dev/null ;; # 압축 파일을 본다. *.arj) unarj -l $1 2>/dev/null ;; *.rpm) rpm -q -p -i -l $1 2>/dev/null ;; *.1|*.2|*.3|*.4|*.5|*.6|*.7|*.8|*.9|*.n|*.man) FILE=`file -L $1` FILE=`echo $FILE | cut -d ' ' -f 2` if [ "$FILE" = "troff" ]; then groff -s -p -t -e -Tascii -mandoc $1 fi ;; *) FILE=`file -L $1` ; # 이진 파일의 경우 보기 위해 점검한다. FILE1=`echo $FILE | cut -d ' ' -f 2` FILE2=`echo $FILE | cut -d ' ' -f 3` if [ "$FILE1" = "Linux/i386" -o "$FILE2" = "Linux/i386" \ -o "$FILE1" = "ELF" -o "$FILE2" = "ELF" ]; then strings $1 fi ;; esac } lesspipe $1
다음에는 chmod 755 lesspipe.sh해서 실행 가능하게 만든다.
- 다음 몇 줄을 /etc/profile에 추가한다. LESS="-M-Q" # long prompt, silent LESSEDIT="%E ?lt+%lt. %f" # edit top line LESSOPEN="| lesspipe.sh %s" # filter VISUAL=jed # 기본 에디터-원하는 것으로. LESSCHARSET=latin1 # 필요하면 강조 문자를 쓴다.필자가 이탈리아에 살고 있고 ISO 8859/1 문자 집합을 쓰고 싶기 때문에 LESSCHARSET 변수를 라틴으로 했다. 다른 나라 사람들은 이렇게 설정하지 않는 것이 좋다.
몇 가지 이맥스 배포본들은 색깔과 구문 강조(syntax highlighting)를 위한 설정이 되지 않은 상태로 설치된다. 이 경우 아래의 내용을 자기 홈 디렉터리의 .emacs 파일에 써야 한다.
(global-font-lock-mode t) (setq font-lock-maximum-decoration t)이 설정은 X11에서만 작동한다. 이맥스를 각자의 필요에 맞게 길들이는 방법을 찾기 위해서는 스스로 이맥스 관련 문서들을 찾아보기 바란다. 이맥스를 제대로 설정하려면 여러 달 걸릴 수도 있다.
/usr/bin 밑에 jmacs나 jstar, jpico 등이 joe로 심볼릭 링크되어 있는지 아니면 따로 이진 파일로 되어 있는지 확인해 보아야 한다. 별도의 이진 파일로 되어 있다면, 이 파일들 대신 심볼릭 링크를 써서 디스크 공간을 아낄 수 있다.
~# cd /usr/bin /usr/bin# ln -sf joe jmacs ; ln -sf joe jstar ; ln -sf joe jpico다음에는 /usr/lib/joe/joerc를 자기 홈 디렉터리에 .joerc라고 복사하고, 적절히 편집하면 된다.
필자는 이 에디터를 좋아한다. 필자가 바라는 기능이 있고, 이맥스에 비해 작고 설정도 쉽다. 또 다른 에디터들을 상당히 쉽게 흉내낼 수 있다. 필자가 다니는 대학의 많은 사용자들은 VMS의 시스템 에디터인 EDT 비슷하게 jed를 쓰고 싶어한다.
.jedrc와 /usr/lib/jed/lib/* 가 설정 파일이다. .jedrc는 /usr/lib/jed/lib의 jed.rc를 복사/편집해서 쓰면 된다. - jed가 몇 가지 키를 제대로 쓰도록 하려면 /usr/lib/jed/lib/defaults.sl 파일을 만들어서 () = evalfile("linux"); 라는 한 줄 만 넣어주면 된다. - /usr/lib/jed/lib/linux.sl을 편집한다. Info_Directory = "/usr/info" 라는 행의 주석문 표시를 지우고, /bin/mail을 UCB_Mailer = 뒤에 추가한다. - jed가 EDT(혹은 다른 에디터)를 흉내내도록 설정하는 것은 쉽다. .jedrc 내의 두 줄만 편집하면 된다. 숫자 키 패드의 '+'로 글자 하나 대신 여러 낱말을 지우도록 하려면, 아래 내용을 .jedrc의 "() = evalfile("edt")"라는 행 아래에 추가한다. unsetkey("\eOl"); unsetkey("\eOP\eOl"); setkey("edt_wdel", "\eOl"); setkey("edt_uwdel", "\eOP\eOl"); - xjed가 숫자 키 패드를 써서 EDT를 흉내내도록 하려면 아래의 내용을 .Xmodmap에 삽입한다. keycode 77 = KP_F1 keycode 112 = KP_F2 keycode 63 = KP_F3 keycode 82 = KP_F4 keycode 86 = KP_Separator 다음에는 /etc/X11/XF86Config에 아래 두 줄이 포함되어 있는지 확인하도록 한다. # ServerNumLock # must be commented out XkbDisable 이 설정은 XFree 3.2에 적용된다. 하지만 표준 미국식 키보드를 쓰지 않는다면, "XkbDisable"로 설정했을 경우 몇 가지 작은 문제가 생긴다. 이 문제는 각자 해결해야 한다. - xjed의 색상을 취향에 맞게 하려면 아래와 같은 행을 .Xdefaults에 추가하면 된다. xjed*Geometry: 80x32+150+50 xjed*font: 10x20 xjed*background: midnight blue
이 밖의 정보들은 패키지에 포함된 xjed.doc에 있다.
TeTeX 배포본을 가지고 있다고 가정하도록 하자. 여기서는 몇 가지만 얘기한다.
- 자기가 쓰는 언어에 따른 하이픈 규칙을 설정하려면, /usr/lib/texmf/texmf/tex/generic/config/language.dat 파일을 편집하고, 다음 명령을 실행시킨다. ~# texconfig init ; texconfig hyphen - LaTeX 패키지를 추가하려면 /usr/lib/texmf/texmf/tex/latex/ 아래에 파일을 추가한 다음에 texhash 명령을 수행해서 TeTeX이 새로운 패키지를 인식할 수 있도록 해야 한다. - dvips 설정을 바꾸려면 /usr/lib/texmf/texmf/dvips/config/config.ps. 파일을 편집해야 한다. 기본 해상도에 대한 항목은 xdvi에도 영향을 준다는 점을 염두에 두기 바란다. xdvi를 실행시킬 때마다 폰트를 만드는 것이 귀찮다면, .Xdefault 안에 아래 한 줄을 넣으면 된다. XDvi*mfmode:
커널이 PPP + TCP/IP를 지원하도록 컴파일 되어 있고, 루프백(loopback)이 가능하며, pppd 패키지를 제대로 설치했다고 하자. (이 요구사항들은 기본적으로 되어 있어야 한다) PPP가 작동하도록 하는 방법은 가)수동으로 설정하거나 나)자동 설정 프로그램을 쓰는 두 가지가 있다. 먼저 수동 옵션을 보자.
자신의 ISP(인터넷 서비스 제공자)가 아래와 같다고 하자.
- 전화 번호: 1234567 - 네임 서버: 123.231.112.111 - 메일 서버: mbox.supernet.edu - 도메인: supernet.edu - 원격 호스트 이름:<url url="http://www.supernet.edu" name="www.supernet.edu"> - 사용자 이름: John - 패스워드: _Loo%ny 을 수동으로 설정하기 위해서는 아래와 같은 것을 해야 한다. - 아래 내용을 ISP에 연결하기 위해 사용될 /usr/local/bin/ppp-on 파일로 저장한다. #!/bin/sh # ppp-on: #ISP에 연결하는 스크립트 INIT=ATX3 # 자기 모뎀에 맞게 쓴다. PHONE=1234567 /usr/sbin/pppd connect "/usr/sbin/chat '' $INIT OK ATDP$PHONE CONNECT '' " user John 다음에는 chmod 755 /usr/local/bin/ppp-on 해서 실행 가능하게 한다.혹시 자신의 ISP가 PAP 프로토콜을 쓰지 않는다면, 아래의 스크립트를 써야 한다.
#!/bin/sh # ppp-on: #ISP에 연결하는 스크립트 INIT=atx3 # 자기 모뎀에 맞게 쓴다. PHONE=1234567 /usr/sbin/pppd connect "/usr/sbin/chat '' $INIT OK ATDT$PHONE \ CONNECT '' 'ogin' John 'word' _Loo%ny ''" /dev/modem 38400 \ modem defaultroute - 아래 내용을 ppp 연결을 종료하기 위해 쓰일 /usr/local/bin/ppp-off 파일에 쓴다. #!/bin/sh # ppp-off DEVICE=ppp0 if [ -r /var/run/$DEVICE.pid ]; then kill -INT `cat /var/run/$DEVICE.pid` if [ ! "$?" = "0" ]; then echo "removing stale $DEVICE pid file." rm -f /var/run/$DEVICE.pid ; exit 1 fi echo "$DEVICE link terminated" ; exit 0 fi # link not active echo "$DEVICE link is not active" ; exit 1 역시 chmod 755 /usr/local/bin/ppp-off로 실행 가능하게 한다. - /etc/ppp/options에 아래와 같이 쓴다. # /etc/ppp/options /dev/modem 38400 lock crtscts modem asyncmap 0 remotename <url url="http://www.supernet.edu" name="www.supernet.edu"> defaultroute - ISP가 PAP 프로토콜을 쓰면 (대부분이 쓴다), /etc/ppp/pap-secrets 파일에 아래와 같이 쓴다. # /etc/ppp/pap-secrets # username remotehost secret John <url url="http://www.supernet.edu" name="www.supernet.edu"> _Loo%ny - /etc/resolv.conf를 편집한다. # /etc/resolv.conf search supernet.edu nameserver 123.231.112.111 - /etc/sendmail.cf를 편집한다. DS로 시작하는 줄을 찾아서 아래와 같이 만든다. DSmbox.supernet.edu휴! 운이 좋다면, 이 정도로 PPP를 쓸 수 있다. 하지만 PPP-HOWTO를 공부할 준비를 해두기 바란다. 수동 설정은 할 일이 너무 많다. 하지만, 이 온갖 너절한 일들을 옛 일로 만들 수 있는 멋진 패키지가 있다. 아래 주소에서 ezppp 패키지를 당장 다운받도록 하자. www.serv.net/~cameron/ezppp/index.html
POP 서버에서 메일을 받아오려면 fetchpop나 fetchmail 같은 POP 클라이언트를 써야 한다. 자신의 PPP 서버가 LAST 명령에 문제를 보인다면 fetchmail을 써야할 것이다. 이 클라이언트들을 설정하는 방법은 아래와 같다.
- fetchpop: 처음 실행시킬 때 몇 가지 안내를 볼 수 있다. 질문에 대답하면 설정이 끝난다. - fetchmail: 아래의 .fetchmailrc 예제를 쓰면 된다. # $HOME/.fetchmailrc poll mbox.supernet.edu with protocol pop3; user john there with password _Loo%ny is john here mda "/usr/bin/procmail -f fetchmail"마지막 줄은 필요 없을 수도 있다. chmod 600 .fetchmailrc로 허가권을 주어야 하며, 허가권이 다르게 되어 있으면 fetchmail이 실행되지 않는다.
비디오 카드 설정 등을 통해서 X 윈도우가 제대로 작동하게 만들고 나면, 수많은 설정이 가능하게 된다. 어떤 설정을 쓰는지는 각자 사용하는 윈도우 매니저에 따라 다르다. 어느 경우에나 자신의 홈 디렉터리에 있는 하나나 그 이상의 아스키 파일을 편집함으로써, 설정을 마치게 된다. 몇 가지 윈도우 매니저의 경우에는 아래와 같다.
- fvwm: /etc/X11/fvwm/system.fvwmrc를 홈 디렉터리에 .fvwmrc라고 복사하고, 그 내용을 살펴보면서 자기에게 맞춰 가도록 한다. 미리 들어있는 system.fvwmrc는 약간 지나치게 단순해서 fvwm의 기능을 충분히 활용하지 못한다. - fvwm95-2: /etc/X11/fvwm95-2/fvwm2rc95를 자신의 홈 디렉터리에 .fvwm2rc95라고 복사한 뒤 편집한다. 이 설정은 상당히 훌륭하다. - TheNextLevel: 이 매니저는 설정하기가 비교적 까다롭다. /etc/X11/TheNextLevel/.*를 홈 디렉터리에 복사하고, 조심해서 살펴본 뒤에 자기에게 맞도록 바꾸도록 한다. 가장 먼저 살펴볼 파일은 .fvwm2rc.defines이다. 아울러 올바른 .xinitrc를 가지고 있어야 한다. 아래 예를 보자. #!/bin/sh # $HOME/.xinitrc # 몇 가지 키를 적절하게 설정한다. usermodmap=$HOME/.Xmodmap xmodmap $usermodmap xset s noblank # 스크린 세이버를 끈다. xset s 300 2 # 5분 후에 스크린 세이버를 작동한다. xsetroot -solid "medium blue" & # rxvt는 메모리를 적게 쓰지만, 버그가 몇 가지 있다. # - home, end 키가 인식되지 않는다. # - backspace와 delete가 콘솔에서 처럼 작동하지 않는다. # - 환경이 색상을 제대로 상속받지 못한다. # - 일반적으로 환경에 문제가 있다. # 따라서 많은 경우에 xterm이 더 낫다. 하지만 mc 같은 몇 가지 # 컬러 응용 프로그램을 수행시키기에는 rxvt가 최고다. xterm -ls -bg black -fg white -sb -sl 500 -j -ls -fn 10x20 \ -fb 10x20bold -title "Color xterm" -geometry 80x25+150+0 & fvwm95-2
필자의 경험에 따르면, 포트란이 필요하다면 g77 대신 포트란-C 번역 프로그램인 f2c와 프런트-엔드인 yaf77을 쓰는 것이 좋다.
yaf77은 ftp.unc.edu/pub/Linux/devel/languages/fortran/yaf77-1.4.tgz
와 그 미러 사이트에서 구할 수 있다.
새로운 사용자가 처음 로그인 했을 때를 위해 몇 가지 설정 파일들을 준비해 두는 것이 좋다. bashrc, bash_profile, bash_logout, inputrc, less, xinitrc, fvwmrc, fvwm2rc95, Xmodmap, Xdefaults, jedrc, joerc, emacs 파일들을 /ect/skel에 두도록 하자.
(주의: 포맷 문제 때문에 필자는 각 파일 이름 앞의 점('.')을 떼어냈다.) .pinerc는 완전히 편집할 수는 없다는 것에 주의해야 한다. 최소한 user-domain, smtp-server, nntp-server 란은 제대로 설정되었는지 확인해 두자.