이 문서는 전산실 사용자들을 위한 유닉스 시스템 사용의 기초에 대한 안내서입니다. 보다 쉽고 간편하게 유닉스를 공부해나가는 것을 도와주기 위해 쓰여졌습니다. 추후 다음 기의 관리자들에 의해 계속 수정되길 바랍니다.
1997년 작성
Unix는 AT&T의 Bell laboratory에서 Richie와 Tomson에 의해 C언어로 제작된 OS(Operating System)입니다. 그 이후 Berkeley대학교의 CSRG에 의해 새롭고 뛰어난 기능들이 추가되었으나 AT&T사의 저작권 문제에 걸려 유닉스는 AT&T계열(ATTish)과 BSD계열(BSDish)로 양분되어 발전해왔으며 각 제작업체들에 의해 세분화가 더 가속되어왔습니다. 현재 유닉스는 BSD계열에 FreeBSD, OpenBSD, NetBSD, SunOS(4.x까지), DEC Ultrix, DEC OSF/1 등이 있고, AT&T계열에 Solaris(SunOS 5.x), IBM AIX, SGI IRIX, SCO Unix 등이 있습니다. PC용 유닉스로 유명한 Linux는 BSD와 AT&T의 중간쯤 됩니다.
유닉스는 기본적으로 네트웍 환경과 다중 사용자환경을 지원하기 때문에, 개인용으로 제작된 MS-Windows또는 DOS보다 networking이나 multi-processing에 있어서 탁월한 성능을 보여줍니다.
OS는 Operating System의 줄임말로서, 크게 kernel과 shell로 구분할 수 있습니다. 실제로는 가장 저수준의 hardware와 고수준의 user-level program이 있으나 각각 넓은 의미의 kernel과 shell에 포함시켜 생각할 수 있습니다.
kernel은 하드웨어에 대한 interface로서 bootstrapping(booting)을 담당하며, process를 제어하고 virtual memory과 file-system을 관리하며 process간의 pipe, 그리고 networking을 해주는 실제 수행자역할을 합니다. 디스크 상에서는 /kernel/genunix라는 파일의 형태로 확인할 수 있습니다.(BSD계열의 OS에서는 /vmlinuz입니다.)
shell은 kernel에 대한 user-interface의 역할을 합니다. 다시 말해서 사용자가 입력한 명령어를 해석하여 kernel에 전달하고 사용자수준의 프로그램들을 실행해주는 일을 합니다. 좁은 의미에서의 shell이란 terminal에서 prompt (%, $, #, > 등)으로 보여지는 명령어 해석기(command interpreter)이지만, 넓은 의미에서는 여러 형태로 사용자의 입력을 받아서 프로그램을 실행시켜주는 부분을 지칭한다고도 볼 수 있습니다.
명령어 해석기로서의 shell은 /bin 디렉토리에 많은데, sh, bash(bourne-again shell), csh, tcsh(extended c-shell), jsh, ksh, rksh 등이 있습니다. 그 중 가장 많이 사용되는 shell은 bash와 tcsh로서 각각 sh과 csh를 기능을 발전시킨 것입니다. sh은 보통 수퍼유저(root)의 shell로서만 사용되고 스크립트 해석기(script-interpreter)로 사용되는 일이 많습니다. csh은 C언어 스타일의 문법을 제공하는데, tcsh에서는 그밖의 여러가지 기능이 추가되어 있습니다. 전산실 사용자들은 대부분 tcsh을 많이 사용하는데 일반 사용자의 경우 bash나 tcsh을 사용하는데 있어서 큰 차이를 느끼지 못할 것입니다. 다른 OS의 경우 chsh(AIX)과 같은 명령어들이 제공되어 사용자가 직접 shell을 지정할 수 있으나, Solaris의 경우 이런 것이 제공되지 않습니다. 그러므로 관리자가 직접 원하는 shell을 지정하면 됩니다. 그러나 이러한 문제는 사소한 것이어서 대개 bash나 tcsh중에 하나를 골라주면 됩니다.
현재 shell위에 다른 shell을 실행시키려면
bash
또는,
tcsh
라고 실행하기만 하면 됩니다. 로그인(log-in)할 때 처음으로 실행되는 셸을 로그인셸(login shell)이라고 하는데, 이것은 /etc/passwd파일에 지정되어 있습니다.
페이저는 호출기가 아닙니다. pager는 한 페이지(보통 24줄)이 넘어가는 긴 문서를 볼 때 화면 크기 단위로 잘라서 보여주는 필터(filter)입니다. 페이저에는 more가 가장 유명하며, more보다 더 '많은' 기능을 제공하는 less도 있습니다.
가장 기초적인 기능을 제공하는 pager입니다. 현재는 거의 쓰이지 않는 페이저인데, more와 별반 차이가 없는 것 같지만, Enter키와 Space bar가 모두 한 화면 단위로 넘어가기 때문에 상당히 불편합니다.
이름만 다른, 원래는 똑같은 페이저입니다. 가장 많이 쓰이고는 있지만, less만큼 많은 기능을 제공하지는 않습니다. 유닉스에 익숙한 사용자라면 less로 페이저를 바꾸어보는 것도 좋습니다. more의 기본적인 사용법은 다음과 같습니다.
more xxx.txt
grep "comp" xxx.txt | more
more는 한 화면을 보고, '조금 더' 보여달라는 의미에서 그런 이름이 붙었지만, less는 그런 more를 비꼬아 붙인 이름입니다. 그러나 이름과는 달리 more보다 많은 기능을 제공합니다. 다만 more대신에 less를 사용하기 위해서는 약간의 설정이 필요합니다. ~/.cshrc파일에 다음과 같은 부분을 추가하십시오. 단, less가 /usr/local/bin과 같은 디렉토리에 설치되어 있는 시스템에서만 사용가능하겠죠?
setenv PAGER /usr/local/bin/less
setenv LESS "-EM"
setenv LESSCHARSET latin1
만약 당신이 bash를 사용한다면, .bashrc파일에 다음을 추가하십시오.
$ export PAGER=/usr/local/bin/less
$ export LESS=-EM
$ export LESSCHARSET=latin1
똑똑한 사용자라면 위의 코드가 비슷하다는 걸 깨닫게 됩니다. 그렇죠? PAGER라는 환경 변수는 man과 같이 사용자가 pager를 명시하지 않을 때에, pager로 어떤 것을 사용할지를 OS에 알려줍니다. LESS는 less의 옵션인데, E는 파일 끝에 도달하면 자동으로 끝나게(반대의 경우는 e 옵션), M은 more보다 더 많은 정보를 less prompt에 표시하게 하는 옵션입니다. LESSCHARSET을 latin1으로 지정한 것은 한글과 같은 2byte문자를 표시하기 위해서입니다.
이때 less가 EDITOR로 설정되어 있다면 굳이
man printf | less
할 필요가 없습니다. 다음과 같은 명령만으로 less를 사용할 수 있습니다.
man printf
사실 vi가 나오기 전에 e, ed(, red), ex등에 대해서 설명을 해야되겠군요. e는 line editor입니다. line editor가 무엇인지 모르는 분들을 위해서 흔히 볼 수 있는 다시 vi를 설명하겠습니다. vi는 한 화면에 가득하게 문서가 나오고 그 화면 안에서 문서를 편집할 수 있습니다. 이렇게 화면 단위의 편집이 가능한 편집기를 visual editor라고 부릅니다. vi라는 이름은 여기서 온 것이구요.
다시 e를 언급하자면, e는 line editor입니다. 다시 말해서 line editor는 줄 단위로 편집을 한다는 것입니다. visual editor가 자신이 작업하는 내용을 매 순간 확인할 수 있다는 데 비해, line editor는 명령어를 입력하고, 편집하고, 확인하는 여러 단계를 거쳐야 하므로 불편하기 짝이 없습니다. 예전에는
e가 default editor였으나 요즘에는 거의 모든 시스템의 default editor는 vi입니다.
e는 실행시키면 :만 나옵니다. 이 상태가 command입력 상태입니다. 여기서 '숫자''명령'의 형식으로 입력하면 그 숫자만큼의 줄에 대해서 그 명령을 수행하게 됩니다. 예를 들면 3dd라고 쳐 넣으면 3줄을 줄단위로 지우게 되는 거죠. 이런 명령어는 vi에 의해서도 계승되어 vi의 command mode에서도 계속 사용되게 됩니다. ed는 e를 흉내낸 프로그램이고, ex는 vi의 입력부분에 해당하는 e의 확장된 프로그램입니다. ex/vi의 자세한 설명은 별도의 문서로 설명드립니다.
pico는 메일러(mailer)인 pine package에 끼어오는 에디터입니다. 도스의 edit나 q-edit와 비슷한(?) 인터페이스를 제공하므로 처음 Unix를 접하는 사용자들에게 권할만한 에디터라고 할 수 있습니다. 다만 Unix를 오래 사용할 사용자라면 pico는 익히고 넘어가고 vi와 emacs를 모두 익숙하게 다루는 정도까지 배우길 권합니다. 아주 쉽게 pico를 배울 수 있지만 그만큼 기능은 없다고 봐야 합니다. 간단한 문서 편집에 사용하도록 하십시오.
Emacs은 Editing Macros에서 온 이름입니다. 이름에 뜻하는 바와 같이 emacs는 vi보다는 훨씬 많은 작업을 할 때 사용됩니다. 그러나 macro만 처리하는 수준이라면 여전히 vi가 용이합니다. emacs는 프로그램을 짜거나 여러 파일들을 한꺼번에 편집해야 할 때 사용하면 편합니다. emacs는 shell이 처음 시작할 때 실행되면 굳이 emacs를 빠져나가는 일 없이 그 내부에서 shell에서 할 일을 해결할 수 있다고 말할 정도로 상상하지 못할 만큼의 많은 기능을 가지고 있습니다. 그러나 그렇게 많은 기능을 가지고 있기때문에, 시스템이 뒷받침해 줄 수 있어야 하며, 사용자들이 그 많은 기능을 조금이라도 제대로 익히기 어렵다는 단점이 따라오게 됩니다. emacs는 한글 입력을 위해(정확히는 multibyte문자 입력을 위해) 개발된 mule(multi-language emacs), hanemacs(hangul emacs)와 같은 중간 단계의 버전이 있었으나 현재는 xemacs에서 다국어지원을 하기 때문에 이런 버전들은 차차 사용되지 않을 것으로 예상되고 있습니다.
Emacs에 대한 자세한 설명은 vi와 마찬가지로 별도의 문서에서 설명드리도록 하겠습니다.
emacs & # X-window상에서...
emacs -nw # terminal안에서...
hanemacs # 한글 Emacs
hanemacs
English or Hangul Font is not defined.
위와 같은 에러 메시지가 뜰 경우 한글 폰트의 경우,
xlsfonts -fn "*iso8859-1"
xlsfonts -fn "*johab*"
을 해서 나오는 폰트리스트 중에서 각각 한 폰트를 골라서 각각 -fn 옵션과 -hfn 옵션으로 지정해주면 에러없이 잘 실행됩니다. 다음에 지정되는 폰트는 가장 일반적으로 사용되는 폰트 중의 하나입니다.
hanemacs -fn -schumacher-clean-medium-r-normal--16-160-75-75-c-80-iso8859-1 \\
-hfn -kaist-iyagi-bold-r-normal--16-160-75-75-c-160-johabs-1
이 명령은 영문폰트로 schumacher-clean 폰트와 한글폰트로 kaist-iyagi 폰트를 사용하여 hanemacs를 실행시키는 것을 의미합니다.
위에서 설명된 vi, emacs등은 WYSIWYG(What you see is what you get)의 개념과는 거리가 멉니다. 그러므로 도스환경에서 미려한 워드작업에 익숙해 있던 사용자라면 vi나 emacs를 보고 질릴 수 밖에 없습니다. emacs로 tex을 이용한 typesetting을 한다고 해도 아래아 한글의 WYSIWYG의 효과나 효율을 따라간다는 것은 무리가 있습니다.
다행스럽게도 Unix에도 한글과 컴퓨터사에서 제작한 HWP/X가 있는데, 이패키지가 설치되어 있는 시스템이라면 PC환경에서와 같이 워드작업을 할 수 있습니다. 다만 HWP/X는 현재 PC용 HWP보다는 성능이 좀 뒤떨어지고, 시스템에 막대한 과부하를 주기 때문에(Ultra sparc에서 약 40 - 90%의 CPU load가 걸림) 가급적이면 사용을 자제하여야 합니다.
setenv HWPDIR /usr/local/hwpx
set path = ($path $HWPDIR/bin)
export HWPDIR=/usr/local/hwpx
export PATH=$PATH:$HWPDIR/bin
위와 같은 설정을 .cshrc나 .bashrc에 추가하면 hwp라는 프로그램을 사용할 수 있습니다. (bash사용자는 위의 less옵션 설정의 예제를 참고하시기 바랍니다.) 실제 hwp를 실행시는 명령은 다음과 같습니다.
hwp
여기서 에러가 나면 위의 설정이 잘못된 것이니 다시 설정하시기 바랍니다.
PostScript문서의 경우에는 전산실에서 사용하는 프린터인 HP LaserJet 4+에는 별다른 필터링없이 프린팅이 가능합니다. 다시 말해서 사용자는 .ps라는 확장자를 가진 파일에 대해서는
lpr xxx.ps
cat xxx.ps | lpr
등의 작업을 할 수 있다는 뜻입니다. 위와 같은 작업은 .prn파일에도 적용이 되는데, 이 파일은 해당 프린터의 이미지(image)파일로서 프린터가 직접 알아들을 수 있는 언어로 작성된 것입니다.
일반적인 영문 text문서는 a2ps라는 필터를 통해 PostScript문서로 변환되어 출력이 가능합니다. 기본적으로는 A4 한장에 landscape모드로 2페이지(페이지는 portrait모드)분량이 인쇄되도록 필터링됩니다. 출력형태는 다음 모식도와 같습니다.
+----+----+
|I am|y. A|
|a bo|re y|
+----+----+
그러나 a2ps의 옵션을 좀 살펴보면 (a2ps --help) 1장당 1페이지가 인쇄되게 하거나 인쇄방향(portrait, landscape)을 조정하거나 복사본의 수 등을 조정할 수 있습니다. 가장 일반적인 출력은 다음과 같은 명령을 통해 가능합니다.
a2ps english.txt | lpr
a2ps english.txt > english.ps; lpr english.ps
a2ps에 대한 좀 더 상세한 설명은 별도의 문서를 참고하시기 바랍니다.
a2ps를 이용하여 한글 인쇄가 가능해진 필터에는 h2ps와 nh2ps가 있습니다.
h2ps hangul.txt | lpr
nh2ps hangul.txt | lpr
그림파일을 인쇄하려면 PC를 이용하는 것이 바람직하나, Unix환경에서도 xv를 이용하면 쉽게 인쇄가 가능합니다. 다음은 xv를 실행하는 방법입니다.
xv xxx.jpg
이러면 XV by John Bradley라는 로고 또는 그림이 뜨고, 여기에 마우스 포커스를 옮긴 다음, 오른쪽 버튼을 눌러 메뉴가 나오도록 합니다. 메뉴 오른쪽 하단에 Print버튼이 있으므로 그걸 누르십시오. 프린트 메뉴가 뜨면 프린터를 지정하라고 나오는데, 대개 lpr이라고 되어 있지만, 지정되어 있지 않으면 그냥 lpr이라고 입력하고 아래쪽의 색깔에 따른 버튼을 누르면 크기 조정과 출력방향(프린터 또는 파일)을 지정하는 메뉴가 뜹니다. 적당히 조정하여 출력을 할 수 있습니다.
전산실에 있는 모든 Unix기반의 시스템에는 gcc가 설치되어 있습니다. gcc는 GNU C Compiler의 약자이고, .c파일(C 소스)과 .cc파일(C++ 프로그램)을 컴파일(compile)하거나 .o파일들을 링크(link)하여 실행파일을 만들어주는 작업을 합니다.
한개의 .c소스에서 실행파일을 만들기 위해서는 다음과 같이 실행하면 됩니다.
gcc -o something mysrc.c
최적화(optimization)를 해주는 옵션은 -O입니다.
gcc -O -o something mysrc.c
여러 개의 파일을 분할 컴파일하여 하나의 실행파일로 만들기 위해서는 각각의소스를 -c옵션으로 컴파일만을 해야합니다. 예를 들면, mysrc1.c와 mysrc2.c, mysrc3.c로 hello라는 실행파일을 만들려면,
gcc -c mysrc1.c mysrc2.c mysrc3.c
gcc -O -o hello mysrc1.o mysrc2.o mysrc3.o
hello
그러나 컴파일 에러가 나는 경우에는 gdb와 같은 디버거를 사용하여 디버깅 작업을 해야 합니다. 디버깅 정보를 포함시키려면 -O옵션 대신 -g옵션을 사용해서 컴파일 해야 합니다.
gcc -g -c mysrc1.c
gcc -o hello mysrc1.o mysrc2.o mysrc3.o
이미 만들어져있는 라이브러리(library;기존에 제작된 object set)를 사용하려면 -L과 -l 옵션을 요령껏 사용해야 합니다. -L 옵션은 라이브러리가 위치한 디렉토리를 지정하고, -l 옵션은 라이브러리를 지정하는 것입니다. 예를 들어 수학함수 라이브러리를 사용하는 것은 /usr/lib에 위치한 libm.a, libm.so와 관련이 있는데, .a는 static하게 library를 사용하는 것이고, .so는 shared object로서, runtime시 그 관련된 함수의 작업이 필요할 때 memory에 올려 사용하는 것입니다. 디폴트는 shared object를 사용하는 것이며, 강제적으로 프로그램에 static하게 라이브러리의 object를 붙이려면 -static옵션을 사용하면 됩니다.
gcc -g -c mymath.c -lm
프로그래머라면 뭐 이미 다들 알고 있겠지만, 정말 중요한 옵션 하나를 설명해야 겠군요. -W 옵션입니다. 이 옵션은 warning message의 정도를 결정하는 것으로서 추천할 만한 정도는 all입니다. 다음과 같이 사용하시기 바랍니다.
gcc -g -c mymath.c -lm -Wall
gcc에 관한 자세한 설명은 별도의 문서로 제공됩니다.
자바는 컴파일 과정과 인터프리트하는 과정이 구분됩니다. 첫번째로 .java소스 파일을 javac로 컴파일하여, intermediate code인 bytecode로 된 .class파일을 만들어 냅니다. 그러면 이 .class파일을 해석(interpret)하여 실행해주는 역할은 java가 합니다. 원래 같은 프로그램이지만 실행시킬 때 주의하여 지정해야 합니다.
javac Elevator.java
java Elevator
주의할 것은 Elevator.class를 실행하기 위해서는 .class라는 확장자 부분을 지정해서는 안 된다는 것입니다.
만약 class를 찾을 수 없다는 에러가 나는 경우에는 다음과 같이 합니다.
which javac
/extra/java/bin/javac
setenv JAVA_HOME = /extra/java
setenv CLASSPATH = .:$JAVA_HOME/lib/classes.zip
위의 두 설정은 .cshrc에 추가하는 것이 바람직합니다.
Java에 관한 online-manual은 다음 주소에서 찾을 수 있습니다.
http://java.sun.com/products/jdk/1.1/docs/index.html
Lisp의 인터프리터로 설치되어 있는 것이 바로 gcl입니다. 다음과 같이 사용할 수 있습니다. Lisp는 list processing의 줄임말답게 리스트 처리에 뛰어난 성능을 보입니다. Scheme은 Lisp와 비슷한 인터프리터인데, scheme이라는 인터프리터를 실행하면 됩니다.
gcl
gcl < lisp-source.lsp
scheme
scheme < scheme-source.sch
Lisp에 관한 online manual은 다음 주소에서 찾을 수 있습니다.
http://www.cs.wisc.edu/~dyer/cs540/lisp.html http://sunset.usc.edu/~horowitz/Homework/afrancoiX/lisp-ref-main.html
Scheme에 관한 매뉴얼은 다음 주소에서 찾을 수 있습니다.
http://www-swiss.ai.mit.edu/emacs-html.local/scheme_toc.html
Tcl/Tk는 [티클티케이]라고 읽습니다. Tcl/Tk는 tclsh 또는 wish라는 인터프리터를 실행시키면 사용할 수 있습니다. tclsh는 tcl문법을 지원해주는 인터프리터이고 wish는 X Toolkit를 제공하는 인터프리터입니다.
tclsh
tclsh tcl-source.tcl
wish
wish tcltk-source.tcl
Tcl/Tk는 다음 주소에서 한글 online manual을 찾을 수 있습니다.
Tcl/Tk
다음과 같은 명령으로 당신은 큰 만족을 얻을 수 있습니다.
lynx http://indra.snu.ac.kr/~terzeron/index.kr.html
w3c는 한글이 잘 안 보입니다. 아마도 2byte문자에 대한 배려가 없었던 듯 합니다. 영어를 조금 한다면, 위와 동급의 만족을 얻을 수 있습니다.
www http://indra.snu.ac.kr/index.html
Netscape은 그 제작사에서도 알다시피 '공룡'입니다. 위에서 제공되는 것보다는 좀 덜하지만 아래처럼 입력하면 그나마 심심찮은 재미를 얻을 수 있습니다.
netscape about:mozilla
빨간 페이지가 나오면, 좀 멀리 있는 사이트를 지정하여 페이지를 바꾸어 보세요. 넷스케이프에서 제공하는 불뿜는 용을 볼 수 있습니다.
ftp는 FTP(File Transfer Protocol)이라는 규약을 구현한 프로그램입니다. ftp는 mail이나 zmodem을 이용한 파일 전송이 어려운, 상당히 큰 프로그램들을 주고 받기 위해 사용됩니다.
사용법은 다음과 같습니다. "ftp 호스트"
ftp ftp.nuri.net
Connected to podo.nuri.net.
220 podo FTP server (Version wu-2.4(4) Sun Jul 21 17:43:06 KST 1996) ready.
Name (ftp.nuri.net:terzeron): <-- 여기에 anonymous, ftp, 또는 자신의 계정을 입력할 수 있습니다.
331 Guest login ok, send your complete e-mail address as password.
Password: <-- 여기에는 계정의 해당 패스워드나 ftp(anonymous)인 경우에는 e-mail주소를 써넣으면 됩니다.
230 Guest login ok, access restrictions apply.
ftp> <-- 이게 ftp프로그램의 프롬프트입니다.
ftp> bin <-- 바이너리 모드에서 전송하는 명령입니다.
ftp> prompt <-- 매번 사용자에게 질문하는 것을 막습니다.
ftp> hash <-- 전송시 단위바이트마다 #기호를 출력합니다.
ftp> get <-- 원격시스템에서 지역시스템으로 하나의 파일을 받습니다.
ftp> put <-- 지역시스템에서 원격시스템으로 하나의 파일을 보냅니다.
ftp> mget <-- m은 multiple을 의미하며, 다중으로 전송할 때 사용합니다.
ftp> mput
유명한 국내 ftp site에는
등이 있습니다.
ftp에 관한 더 자세한 설명은 별도의 문서를 참고하시기 바랍니다.
telnet은 원격 접속을 위한 프로그램입니다. 가장 일반적으로 쓰이는 원격 접속 프로그램으로서 자신의 계정(accout)이 있는 시스템에 접속하여 shell을 실행하게 됩니다.
시스템 A에서 shell을 사용하고 있는 사용자가 telnet프로그램을 실행하면 시스템 B의 inetd서버가 반응하여 telnet프로그램을 실행해준다. 이 때 시스템 B의 telnet 프로그램은 시스템 A의 telnet프로그램의 동료(peer)가 된다. login이 telnet에 의해 실행되고 login은 shell을 불러 사용자가 명령을 실행할 수 있는 환경이 됩니다.그리고 시스템 B에서의 첫번째 shell은 로그인셸(login shell)이 됩니다.
telnet indra
Trying 147.46.60.10...
Connected to indra.
Escape character is '^]'.
UNIX(r) System V Release 4.0 (indra)
login: <-- 여기에 account name을 입력
Password: <-- 여기에 password를 입력
r은 원격(remote)을 의미하며 그 다음에 붙는 단어들이 이 명령이 어떤 기능을 가지는가를 쉽게 알려줍니다. rlogin은 telnet과 거의 비슷한 기능을 제공하며, rsh은 원격 시스템에서의 shell작업을 할 수 있게 해줍니다.
brahma% rlogin -8 indra -l terzeron
indra% rsh shiva
indra% rsh vishnu -l root who
첫번째 명령은 brahma라는 시스템의 어떤 사용자가 indra라는 시스템의 terzeron 이라는 사용자로 로그인(login)하려는 것입니다. 두번째 명령은 indra의 어떤 사용자가 shiva라는 시스템의 indra에서 현재 사용하고 있는 계정으로 접속하려는 것입니다. 세번째 명령은 indra에서 vishnu의 root로 접속하여 who명령을 실행하고 vishnu로의 접속을 종료하게 하는 명령입니다.
아무나 위와 같은 명령을 하면 terzeron이나 root와 같은 사용자가 될 수 있는 것은 아닙니다. rsh과 rlogin에 도움을 주는 .rhosts라는 파일이 있는데, 이 파일은 어떤 원격 시스템과 그 시스템의 사용자에 대해 rsh과 rlogin를 허용할 것인가를 지정하는 파일입니다.
indra:~terzeron% cat .rhosts
brahma terzeron
shiva microkid
위와 같이 지정되어 있는 .rhosts파일은 brahma의 terzeron과 shiva의 microkid라는 사용자가 indra의 terzeron(현재 사용하고 있는 계정이라 가정하였을 때)이라는 사용자로 접속할 수 있다는 것을 의미합니다. 단, 주의할 것은 .rhosts파일이
indra:~terzeron% cat .rhosts
+ +
와 같이 지정되어 있다면, +가 임의의 모든 시스템이나 모든 사용자를 의미하기 때문에, 아무나 terzeron계정으로 접속할 수 있음을 의미합니다. 시스템 보안 상 이렇게 만들면 안 됩니다. 혹 이런 경우를 발견하였을 때는 시스템 관리자에게 알리는 것이 좋습니다.
인터넷을 통해 전달되어진 e-mail을 읽기 위해서는 mail agent가 필요합니다. mail agent란 네트웍을 흘러가는 패킷중에서 그 시스템으로 보내진 편지를 받아서 지정된 디렉토리(보통 /var/mail)에 저장해주는 mail agent(예를 들면 sendmail)와 그 저장되어 있는 메일을 사용자가 읽고, 지우고, 자신의 디렉토리에 저장하거나 편집해서 다른 사용자에게 보낼 수 있는 기능을 제공하는 mail agent(예를 들면 mail, mailx, Mail, elm, pine)의 두가지가 있습니다. 여기서는 후자인 User-Mail-Agent만을 다루겠습니다. 가장 흔한 User-Mail-Agent인 mail은 BSD나 AT&T계열 어느 시스템에서도 찾아 볼 수 있습니다. /usr/bin/mail과 /usr/ucb/mail은 Solaris가 설치되어 있는 시스템에 기본적으로 설치되는 메일프로그램입니다. 둘 중 어떤 것을 사용해도 별 차이는 없습니다.
mail
mailx는 x가 의미하듯 extended mailer입니다. Solaris시스템의 /usr/ucb/mail과 /usr/ucb/Mail은 mailx로 링크되어 있음을 확인할 수 있습니다.
ls -alF `where mail Mail`
-r-x--s--x 1 bin mail 66052 1995년 10월 25일 /usr/bin/mail*
lrwxrwxrwx 1 root root 12 1997년 5월 9일 /usr/ucb/Mail -> ../bin/mailx*
lrwxrwxrwx 1 root root 12 1997년 5월 9일 /usr/ucb/mail -> ../bin/mailx*
여기서는 mailx보다는 mail위주의 설명을 합니다. 이유는 mail에서 지원하는 수준의 명령 정도만 이해해도 충분히 사용이 가능하며, elm이나 pine같은 메뉴형식의 메일프로그램을 사용하는 것이 일반적이기 때문입니다.
mail을 이용해서 편지 보내는 방법은 다음과 같습니다.
mailx -v terzeron
Subject: hello
Hello, terzeron!
Bye.
.
마지막 줄의 .에 유의하세요. 도트와 엔터를 누르면 메시지의 끝임을 의미합니다.
텍스트를 메일로 보내는 방법은 다음과 같습니다.
mailx -v -s 'hello' terzeron < my_text_file.txt
shell에서 < 또는 > 기호는 redirection(방향 재지정)을 의미하는데, 이건 mailx라는 프로그램으로 my_text_file.txt라는 파일을 밀어 넣은 셈이 됩니다.
-v 옵션을 사용하여 메일이 제대로 전달되었는지 확인하는 습관을 기르도록 합시다. 이런 메시지가 번거로우면 메일을 보내자마자
tail /var/log/syslog
를 입력하여 자신의 메시지가 잘 전달되었는지 확인하는 방법도 있습니다.
이번에는 자신에게 온 메일을 읽는 명령입니다. 다음 명령을 사용하면 됩니다.
mail
From microkid Wed Jun 11 13:58:23 1997
Hello, terzeron!
Bye.
?
microkid라는 사용자가 terzeron이라는 사용자에게 아까 보냈던 메일이 도착해 있는 것을 알 수 있습니다. ? 기호는 mail프로그램이 사용자의 명령 입력을 기다리고 있다는 표시입니다. ? 기호 옆에 다음과 같은 명령을 입력할 수 있습니다.
mailx를 사용하게 되면 메시지를 지정해서 그 메시지에 대해서 지우거나 저장하거나 하는 작업을 할 수 있습니다. 메시지를 지정하는 방법은 다음과 같습니다.
mail을 사용할 때와는 약간 다른 형태로 메뉴가 나옵니다. 여기서 번호를 입력하여 메시지를 읽거나 mail명령을 입력하여 작업을 할 수 있습니다.
mailx
mailx version 5.0 Wed Oct 25 04:12:43 PDT 1995 도움말 필요시 ? 입력.
"/var/mail/terzeron": 1개 메시지 1개 신규
>N 1 Meg Ryan Wed Feb 4 16:50 12/357
>N 1 Sharon Stone Wed Feb 4 16:50 12/357
? ?
? 명령을 이용하여 가능한 명령을 확인해 보면 대충 다음과 같습니다.
물론 여기 모든 명령이 제시된 것도 아니며, mail프로그램에서 사용했던 명령들을 사용하지 못하는 것도 아닙니다. 더 자세한 내용은 각자의 실습을 통해서 확인하시기 바랍니다.
1)번 항목을 이해하지 못했다고 메일을 보내거나 읽지 못한다면 컴퓨터를 사용하는 것이 상당히 불편하다는 생각이 들 것이며, 누구라도 컴퓨터에게 정나미가 떨어질 것입니다. 특히나 GUI(Graphic User Interface)를 구현한 MS-Windows에 익숙한 많은 PC사용자에게는 더하겠죠. 그러나 다행스럽게도 elm이나 pine과 같은 메뉴 인터페이스를 가지고 있는 메일프로그램이 있는 고로, 아주 쉽게 메일을 주고 받을 수 있습니다.
elm
pine
필자의 경우, 시스템 관리자로서, 그리고 사용자의 한 사람으로서 elm을 사용할 것을 권합니다. pine이 기능이 나쁘다는 게 아니라, elm보다는 직관적으로 받아 들이기 어렵기 때문입니다.
elm에 관한 설명은 따로 할 필요가 없습니다. 그냥 실행시켜보고 위에서 설명했던 mail 명령의 첫 글자를 누르기만 하면 작업을 할 수 있습니다. 엔터를 치면 메시지를 읽고, 메시지를 읽는 것이 끝나면 메뉴로 돌아오기 위해 i, q또는 스페이스바를 누르면 됩니다. 메뉴상태에서 q를 눌러 종료할 때에는 여러 가지 질문을 하는데, 잘 읽어보고 대답해주면 됩니다. 이전에 받아놓았던 메시지는 ~/Mail/received파일에 추가되므로 옛날 메시지를 확인하려면 다음과 같이 합니다.
elm -f ~/Mail/received
frm과 from은 사용자에게 배달된 편지가 있는지 없는지 확인해주는 명령입니다. 배달되어 있는 편지가 없을 때, from은 아무 대꾸를 하지 않습니다.
from
frm
You have no mail.
frm과 from은 결과를 보여주는 데 있어서 약간의 차이가 있으므로 사용자마다 좋아하는 명령을 사용하면 됩니다.
frm
Julia Roberts
from
From julia Wed Feb 4 02:15:07 1997
메일을 포워딩(다른 사용자에게 메시지를 돌리는 것)하는 것은 메일프로그램에 따라 약간씩 다르지만 elm의 경우 f를 눌러 수신할 사용자를 지정하고, 그 메시지를 편집한 다음 보내면 됩니다. 그러나 여기서 말하는 .forward파일은 대개 여러 시스템을 사용하는 사용자가 하나의 시스템으로 메일을 모으기 위해서 사용하게 됩니다.
[shiva]/home/terzeron> cat .forward
microkid@indra.snu.ac.kr
[vishnu]/home/terzeron> cat .forward
microkid@indra.snu.ac.kr
[indra]/home/microkid> cat .forward
terzeron@brahma.snu.ac.kr
만약 shiva나 vishnu의 terzeron이라는 사용자에게 메일이 배달된다면 System-Mail-Agent인 sendmail은 ~terzeron/.forward파일을 확인하여 명시되어 있는 다른 사용자에게 메일을 포워딩합니다. 결국 shiva의 terzeron에게 발송된 편지는 indra의 microkid가 받았다가 다시 brahma의 terzeron에게로 보내집니다. 이런 방식을 사용하여 여러 시스템에 계정을 가지고 있는 사용자들은 같은 내용의 .forward파일을 각 시스템의 자신의 홈디렉토리에 저장하여 특정 시스템에서 메일을 모아서 읽을 수 있습니다. 그러나 같은 서브넷(subnet)이 아닌 외부로 포워딩하는 것은 네트웍자원을 낭비하거나 개인적인 메일이 외부 사용자에 의해 사용되는 바람직하지 않은 결과를 가져오기도 합니다.
여러 사람에게 같은 내용의 편지를 보내는 방법 중 가장 간단한 것은 다음과 같습니다.
mailx -v {julia,meg,sharon}@www.hollywood.com
Subject: I'm okay.
You'd better not send me e-mails any more.
I'm bothered with them.
Bye.
.
만약 같은 도메인(예를 들면 ***.snu.ac.kr 또는 147.46.60.**과 같은)이나 서브넷에서 편지를 보낸다면 다음과 같이 수신자를 열거해도 무방합니다.
mailx -v bbugging ichbing1 sappho saxboy
시스템이름도 { }을 사용하여 묶을 수 있습니다.
mailx -v terzeron@{nownuri.net,indra.snu.ac.kr}
그러나 이러한 방법은 여러명의 수신자에게 보낼때마다 그 많은 이름을 키보드를 통해서 입력하는 수고를 해야 한다는 문제점을 가집니다. 가장 간단한 메일링 리스트(한 편지를 여러사람이 받을 수 있도록 여러 계정을 모아놓은 파일)는 .forward에 계정을 하나만 적지 말고 여러 계정을 쭉 나열해놓는 것입니다.
[indra]/home/terzeron> cat .forward
julia@hollywood.com
bill@mail.microsoft.com
donald@www.disney.com
이런 경우에 terzeron이라는 사용자에게 전송된 메일은 julia, bill, donald에게 배달이 됩니다. 그럼 terzeron이라는 사용자는 자기 메일이 모두 보내지고 남지 않았으므로 읽을 수가 없습니다. 그러므로 이 방법은 미봉책이라는 걸 알 수 있습니다.
다른 방법은 시스템 관리자에게 메일링 리스트 계정을 만들어서 그 계정으로 오는 모든 메일이 포워딩되게 하는 것입니다.
tail /etc/mail/aliases
narae: :include/home/terzeron/narae-mailing.list
시스템 관리자는 /etc/mail/aliases파일에 위와 같은 형식으로 메일링 리스트를 만들 수 있습니다. 위의 narae라는 메일계정으로 오는 메시지는 narae-mailing.list 라는 파일을 참고하여 그 파일에 지정된 사용자에게 다시 발송되어 집니다.
콘솔의 본체 옆구리에 보면 3.5인치 플로피 디스켓을 넣는 구멍이 있습니다. PC마냥 넣기만 하면 파일을 읽고 쓸 수 있지는 않습니다.
volcheck
이 명령을 사용하면 디스켓의 파일이 /floppy/floopy0라는 디렉토리에 마운트 됩니다. 이후부터는 마치 하드디스크 사용하듯이 사용할 수 있습니다. 만약 /floppy밑에 어떤 디렉토리도 생성되지 않으면 디스켓이 불량이라 사용할 수 없는 것입니다.
eject
디스켓을 빼기 위해서는 eject 명령을 사용합니다. 디스켓이 자동으로 빠져 나옵니다.
이 문서는 다음 문서들을 참고하였습니다.