다음 이전 차례

3. bash를 만나자

희소식 : 리눅스에서는 bash 쉘이 필요한 것을 알아서 타이프 해주고 멋진 라인 에디팅 기능들이 있기 때문에 타이핑이 적어진다. 우선, 화살표를 사용하면 이전의 명령행을 불러온다; 하지만 그 이상의 기능도 있다. <TAB> 키를 누르면 파일 이름과 디렉토리 이름을 완성시켜준다. 그래서 다음과 같이 타이핑하면

        $ ls /uTABloTABbTAB       

아래처럼 타이핑 하는 것이 된다.

        $ ls /usr/local/bin       

만약 같은 알파벳으로 시작하는 파일이나 디렉토리가 여럿 있으면

    $ ls /uTABloTABiTAB    
라고 입력하면 bash는 /usr/local/info를 의미하는지 /usr/local/include를 의미하는지 모르기 때문에 멈춘다. 그럴 때는 그 다음 글자를 치고 <TAB>을 누르면된다. 또 다른 편리한 키 누르기로 <ESC-BACKSPACE>가 있다. 이것은 왼쪽에 있는 단어를 통째로 지운다. 반면에 <ESC-D>를 누르면 오른쪽에 있는 단어를 지운다. <ESC-F>는 커서를 오른쪽으로 한 단어만큼 건너 뛰게 하고 <ESC-B>는 왼쪽으로 한 단어 만큼 건너 뛰게 한다. <ALT>키는 <ESC> 키와 동일하게 작동한다. 지금으로선 이 정도면 충분하다. 일단 이 단축키들에 익숙해지면 DOS 프람프트가 아주 불편하게 느껴질 것이다.

3.1 파일과 프로그램

3.2 파일 : 사전 지식

리눅스의 파일과 디렉토리 구조는 DOSWin의 구조와 매우 비슷하다. 파일들은 일정한 규칙에 따르는 파일 이름을 갖고 있으며 디렉토리 속에 저장돠고, 일부는 실행 가능하며 실행 가능한 파일들은 대부분 명령 스위치를 갖고 있다. 또한 와일드카드 문자, 리다이렉션, 파이핑을 사용할 수 있다.

차이점은 아주 적은데 다음과 같다:

3.3 Symbolic Links

유닉스는 DOS에는 없는 파일 종류가 있다: 바로 Symbolic Link다. 이것은 파일이나 디렉토리를 가리키는 포인터로 생각할 수 있는데 그것이 가리키는 파일이나 디렉토리 대신 사용할 수 있다. 윈도우의 '바로 가기'와 비슷하다. symbolic link의 예로 /usr/X11R6를 가리키는 /usr/X11; /dev/ttyS0 또는 /dev/ttyS1 둘 중 하나를 가리키는 /dev/modem 등이 있다.

symbolic link 만들기:

        $ ln -s <file_or_dir> <linkname>

예:

        $ ln -s /usr/doc/g77/DOC g77manual.txt  

이렇게 하면 /usr/doc/g77/DOC 대신 g77manual.txt를 사용할 수 있다. 링크는 디렉토리 리스팅을 하면 다음과 같이 나타난다:

        $ls -F
        g77manual.txt@
        $ ls -l       (several things...)           g77manual.txt -> /usr/doc/g77/DOC

3.4 Permission(permission)과 소유권

DOS 파일과 디렉토리들은 다음과 같은 속성을 갖는다. A(압축), H(숨김), R(읽기 전용), S(시스템). 리눅스에서는 이들 중 H와 R만 의미를 갖는다. 숨김 파일은 점으로 시작하고 R 속성에 대해서는 다음을 계속 읽어보자.

유닉스에서는 파일에 "Permission(permission)"과 소유자가 있다. 소유자는 또 "그룹"에 속한다. 다음의 예제를 보라.

       $ ls -l /bin/ls
       -rwxr-xr-x  1  root  bin  27281 Aug 15 1995 /bin/ls*
제일 처음 필드는 /bin/ls 파일의 permission을 나타내는 것으로 root가 소유하며 bin이란 그룹에 속한다. 다른 정보는 차치하고 -rwxr-xr-x 가 왼쪽에서 오른쪽 방향으로 무엇을 의미하는지 기억해두자:

- 는 파일 종류의 일종이다. (- = 보통 파일, d = 디렉토리, l = 링크 등) rwx는 파일 소유자가 갖는 permission으로 읽기, 쓰기, 실행 을 나타낸다. r-x는 파일 소유자가 속한 그룹에 주어진 Permission으로 읽기, 실행을 나타낸다. (초보자라면 그룹을 사용할 일이 별로 없을 테니 그룹의 개념에 대해서는 설명하지 않겠다 ;-) r-x는 다른 모든 사용자들이 갖는 permission으로 읽기, 실행을 나타낸다.

디렉토리인 /bin 에도 permission이 붙어있다: "디렉토리와 permission" 섹션에 좀 더 자세한 설명이 있다. 바로 이러한 이유 때문에 루트가 아니고서는 /bin/ls 를 지울 수가 없는 것이다: 즉 지울 permission이 없는 것이다. 파일의 permission을 바꾸려면 다음과 같은 명령을 사용한다.

       $ chmod <whoXperm> <file>        

여기에서 who는 u(사용자, 즉 소유자), g (그룹), o ( 그 외), X는 + 또는 -, perm은 r(읽기), w(쓰기), x(실행) 중 하나. 다음은 chmod를 사용하는 전형적인 예다.

     $ chmod +x file
이렇게 하면 해당 파일의 실행 permission이 설정된다.

     $ chmod go-rw file

이렇게 하면 소유자 이외의 모든 사용자로부터 읽기와 쓰기 permission을 제거한다.

  $ chmod ugo+rwx file

이것은 모든 이에게 읽기, 쓰기, 실행 permission을 부여한다.

       # chmod +s file

이것은 소위 "setuid" 또는 "suid" 파일로 소유자의 특권과 함께 모든 사람이 실행시킬 수 있다. 전형적인 예로 루트 suid 파일을 볼 수 있다. 이 파일들은 보통 X 서버와 같이 중요한 시스템 파일인 경우가 많다.

permission을 지시하는 좀 더 간단한 방법은 숫자로 표현하는 것이다. rwxr-xr-x는 755로 표현할 수 있다( 모든 문자에 해당하는 비트가 있다. ----는 0이고 --x는 1, -w-는 2, -wx는 3...). 어려워 보이지만 조금 연습하면 개념을 이해할 수 있을 것이다. 루트는 수퍼유저로 모든 이들의 파일 permission을 바꿀 수 있다. RMP.

3.5 파일 : 명령어 번역

왼쪽에는 도스 명령; 오른쪽에는 그에 해당하는 리눅스 명령어이다.

        ATTRIB:         chmod
        COPY:           cp       
        DEL:            rm       
        MOVE:           mv       
        REN:            mv       
        TYPE:           more, less, cat  

Redirection and plumbing operators:  < > >> |

Wildcards: * ?  

nul:        /dev/null  

prn, lpt1:  /dev/lp0 or /dev/lp1; lpr  

Examples

DOS                                                             Linux  
---------------------------------------------------------------------  
C:\GUIDO>ATTRIB +R FILE.TXT             $ chmod 400 file.txt  
C:\GUIDO>COPY JOE.TXT JOE.DOC                   $ cp joe.txt joe.doc  
C:\GUIDO>COPY *.* TOTAL                                 $ cat * > total  
C:\GUIDO>COPY FRACTALS.DOC PRN                  $ lpr fractals.doc  
C:\GUIDO>DEL TEMP                                       $ rm temp  
C:\GUIDO>DEL *.BAK                                      $ rm *~  
C:\GUIDO>MOVE PAPER.TXT TMP\                    $ mv paper.txt tmp/  
C:\GUIDO>REN PAPER.TXT PAPER.ASC                $ mv paper.txt paper.asc  
C:\GUIDO>PRINT LETTER.TXT                       $ lpr letter.txt  
C:\GUIDO>TYPE LETTER.TXT                        $ more letter.txt  
C:\GUIDO>TYPE LETTER.TXT                        $ less letter.txt  
C:\GUIDO>TYPE LETTER.TXT > NUL                  $ cat letter.txt > /dev/null          
                n/a                                             $ more *.txt *.asc          
                n/a                                             $ cat section*.txt | less

알아둘 점:

3.6 프로그램 실행: 멀티 태스킹과 세션

프로그램을 실행할 때는 DOS에서와 마찬가지로 그 프로그램의 이름을 입력하면 된다. 만약 프로그램이 저장되어 있는 디렉토리("디렉토리 사용" 참조)가 PATH("시스템 초기화 파일" 섹션 참조)에 속해있다면 프로그램이 실행될 것이다.

예외: DOS에서와는 달리 리눅스에서는 해당 프로그램이 현재 디렉토리에 있다 하더라도 PATH에 속해 있지 않는 한 실행되지 않는다. 에스카모타지: 프로그램이 prog이라면 './prog'이라고 입력한다. 전형적인 명령행은 다음과 같은 형태다.

       $ command [-s1 [-s2] ... [-sn]] [par1 [par2] ... [parn]] [< input] [> output]

여기에서 -s1, ..., -sn은 프로그램 스위치, par1, ..., parn은 프로그램 매개변수(parameter)다. 하나의 명령행에 여러 개의 명령을 내릴 수 있다.

       $ command1 ; command2 ; ... ; commandn                     

이상이 프로그램 실행과 관련된 모든 것이다. 하지만 이보다 한 차원 높게 사용하는 것도 어렵지 않다. 리눅스를 사용하는 중요한 이유 중 하나가 멀티태스킹 OS 이기 때문이다 ---즉 여러 개의 프로그램(앞으로는 프로세스라고 부름)을 동시에 실행할 수 있다. 여러 개의 프로세스를 백그라운드에서 실행시키고도 또 계속해서 다른 작업을 하고 있어도 된다. 게다가 리눅스는 복수의 세션도 가능하다: 마치 여러 대의 컴퓨터를 한 곳에 놓고 사용하는 것과 같다!

3.7 리모트 컴퓨터에서 프로그램 실행하기

remote.machine.edu라는 리모트 머신(원격 컴퓨터)에서 프로그램을 실행하려면 다음과 같이 입력한다:

       $ telnet remote.machine.edu
로그인을 한 다음 원하는 프로그램을 시작하면 된다. 물론 그 리모트 머신에 쉘 어카운트가 있어야 한다. X11을 갖고 있다면 리모트 컴퓨터에서 X 애플리케이션도 실행시켜 자신의 X 화면에 나타나게 할 수도 있다. remote.machine.edu는 리모트 X 컴퓨터, local.linux.box는 자신이 사용하고 있는 리눅스 머신이라고 가정하자. remote.machine.edu에 존재하고 있는 X 프로그램을 local.linux.box에서 실행하려면 다음과 같이 하면 된다.

o X11, xterm 또는 그와 동격인 터미널 에뮬레이터를 실행한 다음 다음과 같이 입력한다:

       $ xhost +remote.machine.edu
       $ telnet remote.machine.eduo      
로그인을 한 다음 다음과 같이 입력한다.
       remote:$ DISPLAY=local.linux.box:0.0
       remote:$ progname &
(DISPLAY..., 대신 setenv DISPLAY local.linux.box:0.0 을 입력해야 할 수도 있다. 이는 모두 리모트 쉘에 달려있다.)

자 새롭지않은가! 이제 progname은 은 remote.machine.edu에서 시작하여 당신의 컴퓨터 화면에 나타날 것이다. 하지만 모뎀은 너무 느리니 모뎀을 통해서 이 같은 작업을 하려는 것은 쓸모가 없을 것이다. 또한 이 같은 작업 방식은 불완전하고 불안정하다. sunsite.unc.edu/LDP/HOWTO/mini/Remote-X-Apps 에 있는 ``Remote X Apps mini-HOWTO'' 를 읽어보라.


다음 이전 차례