RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR

출처 : 대전국제IT교육센터 정성재 강사

 

1. write
(1) 설명: 로그인한 다른 사용자에게 메시지를 보낸다.
(2) 사용법
   write 사용자계정 [ttyname]
    => '사용자계정'에게 메시지를 보낸다. 명령실행후 메시지를 입력하면 전송되고 [CTRL]+[D]를
      누르면 메시지가 전송을 끝낸다. 뒤의 'ttyname'은 한 사용자가 동시에 여러 곳으로 로그인했
      을 경우 특정 터미널에 로그인한 사용자에게 메시지를 전송할 때 사용한다. (참고로 아직 터미
      널에서 한글지원이 완벽하지 않다.)
(3) 사용예
   1) write posein
       => posein이라는 사용자에게 메시지를 전송한다. 참고로 posein이라는 사용자가 여러 곳에서
         로그인했을 경우에는 가장 먼저 로그인한 창에 메시지가 전달된다.
   2) write posein /dev/tty2
       => tty2의 posein에게 메시지를 전송한다.
   3) write posein /dev/pts/4
       => pts/4로 로그인한 posein사용자에게 메시지를 보낸다.

2. wall
(1) 설명: 모든 사용자의 터미널에 텍스트 메시지를 보내는 명령어이다.
(2) 사용법
   wall
(3) 사용예
   [posein@www posein]$ wall
    => 위와 같이 입력하면 프롬프트가 나타나지 않는데 이 상태에서 메시지를 입력하고 [CTRL]+[D]
      키를 누르면 메시지가 전달된다.
(4) 유의점 : write 나 wall 명령어는 수신자가 로그인된 상태면 언제든지 즉시 전달되므로 긴급할
            때가 아니면 사용을 자제해야 한다.

3. mesg
(1) 설명: write를 사용해서 들어오는 메시지 수신 여부를 확인하고 제어하는 명령이다.
(2) 사용법
   mesg [n/y]
(3) 사용예
   1) [prehee@house prehee]$ mesg => 현재 설정상태를 보여준다.
      is y                        => 현재의 상태는 메시지를 받을 수 있는 상태이다.
   2) [prehee@house prehee]$ mesg n => 메시지를 받을 수 없는 상태로 설정한다.

4. mail
(1)설명: 시스템 사용자간의 홈 디렉토리(또는 /var/spool/mail/'사용자계정')에 전자우편함을 두어
        서 그 곳을 통해서 메시지를 주고 받을수 있는 명령이다.
(2) 사용법
   mail [option] [ID]
(3) option
   -s "제목" : 메일의 제목을 지정한다.
(4) 사용예
   1) 메일 보내기
    ㄱ. 사용법
       mail [option] 사용자계정
    ㄴ. 사용예
       mail prehee       // prehee라는 사용자에게 메일을 보낸다.
   2) 메일 확인
    ㄱ. 설명: 메일이 도착하면 You have mail이라는 메시지가 나타나 메일이 도착했음을 알려준다.
    ㄴ. 사용예
       mail
        => 도착한 메일의 리스트를 보여준다. 메일의 내용을 확인하려면 ENTER키를 누르거나 해당리
          스트 번호를 치면된다. [ENTER]키를 치면 리스트번호 1부터 차례로 보여준다.
    ㄷ. 메일확인관련 주요 명령어
       r [메시지번호] : 메일을 보낸사람에게 답장을 쓴다.
       d 메시지번호   : 메일을 삭제한다.
         예) d 1   : 1번 메시지를 삭제한다.
             d 1-5 : 1번부터 5번까지의 메시지를 삭제한다.
       n              : 다음차례의 메일을 보여준다.
       q              : 메일확인상태에서 빠져나온다.
       pre            : 메일상태를 확인한 뒤 /usr/spool/mail로 보낸다.
       s 파일이름     : 메일의 내용을 파일로 저장한다.
       e              : 메일의 내용을 편집하여 저장할 때 사용한다. visual이라고 입력하면 vi
                       편집기를 사용할 수 있다.
(3) 사용예
   1) [posein@house posein]$ mail prehee  // prehee라는 ID를 가진 사용자에게 메일을 보낸다.
      Subject: HI!                        // 편지제목을 입력한다.
      Hi! prehee                          // 내용을 입력한다.
      .                                   // 메시지의 끝을 나타낸다. CTRL+D와 같다.
      Cc: zzang                           // 참고로 추가하여 보낼사람을 적는다.
   2) mail prehee zzang                  // prehee와 zzang이라는 사용자에게 메일을 보낸다.
   3) mail posein < aaa.txt              // 미리 작성된 aaa.txt라는 문서의 내용을 posein이라는
                                          사용자에게 메일로 보낸다.
   4) mail
posein@yahoo.co.kr            // yahoo.co.kr의 posein이라는 사용자에게 메일을
                                           보낸다.
   5) mail
posein@korea.com < /etc/passwd // /etc/passwd파일의 내용을 메일로 보낸다.
   6) mail -s "Server acount List"
posein@korea.com < /etc/passwd
       => /etc/passwd 라는 파일의 내용을 제목은 "Server account List" 라는 내용으로 posein@kor
         ea.com 사용자에게 보낸다.
   7) find . -name "*.old" | mail -s "old filenames"
posein@korea.com
      => '.old'파일을 찾아 그 해당 파일 목록을 지정한 사용자에게 메일을 보낸다.

5. biff
(1) 설명: 전자우편의 수신을 즉시 알려주는 동작을 가능하게 할 것인지 그렇지 않게 할 것인지의
          상태를 보여주거나 설정하는 명령어이다. 유닉스 쉘은 사용중이라도 주기적으로 전자우편
          의 수신여부를 점검한다. 즉시 사용자가 전자우편의 도착을 알고자 할 때 설정한다.
          (리눅스에서 완벽하게 지원하지 않는다.)
(2) 사용법
   biff [y/n]
(3) 사용예
   1) [posein@www posein]$ biff
      is n
       => 옵션없이 biff라고 치면 현재 상태를 보여준다. 전자우편 수신 즉시 통고 기능이 설정되지
         않았다.
   2) [posein@www posein]$ biff y
       => 전자우편 수신을 즉시 통고하도록 설정한다.

(참고) Linux와 Mail
  1. 개요: 리눅스 호스트는 메일 서버로도 사용할 수 있고, 메일 클라이언트로도 사용할 수 있고,
          둘 다 사용가능하다. 현재 리눅스에서 사용할 수 있는 메일관련 프로그램은 많으며 지금도
          개발되고 있다.
  2. 리눅스에서 사용하는 주요 메일 클라이언트 프로그램
    (1) 텍스트형 프로그램
       1) mail : 전통적으로 사용하던 프로그램이다. 리눅스뿐만 아니라 유닉스시절부터 사용하던
                프로그램이다. 명령어라인 형식으로 메일을 보내고 받는다.
       2) pine : 사용하기 쉽고 메뉴 선택 방식의 프로그램이다.
       3) mutt : 기능이 좀 더 많은 메일 클라이언트 프로그램이다.
    (2) 그래픽형 프로그램
       1) mozilla Mail : mozilla라는 웹브라우저에 포함되어 있는그래픽형의 프로그램이다. 필터링
                        을 제공하고, 여러 계정에게 메일을 전송하는 기능을 제공한다.
       2) kmail : KDE에 포함되어 있는 프로그램이다. 프로그램이 크기도 작고 간단하게 조작가능
                 하다.
       3) evolution
       4) balsa
  3. 리눅스에서 사용하는 주요 서버 프로그램
   1) sendmail : 광범위하게 사용중이며 대부분의 배포판 리눅스에서 기본으로 채택하고 있다.
   2) Qmail
  4. Email Filtering
   1) 설명: Email 필터링이란 말 그대로 원하는 메일만 받도록 거르는 것이다. 메일 클라이언트
           프로그램 중 그래픽형 프로그램은 mozilla mail에서 필터링 옵션을 제공하고, 텍스트
           형 프로그램은 procmail이라는 메일 프로세싱 프로그램을 이용하여 필터링을 제공한다.
   2) 간단한 사용예 : 제목(Subject)에 sex 라는 단어가 들어있는 메일을 필터링해보자.
     ㄱ. 일반사용자인 경우에는 홈디렉토리에다가 .procmailrc 라는 파일을 생성한다.
     ㄴ. .procmailrc 에 다음에 내용을 적는다.
        [posein@www posein]$ cat .procmailrc
        :0 :
        *^Subject:.*sex.*
        /dev/null
         => 제목에 'sex'라는 단어 들어가면 수신이 안됨을 알 수 있다.

Trackback
Reply

출처 : 대전국제IT교육센터 정성재 강사

 

1. who
(1) 설명: 현재 시스템에 login하고 있는 사용자의 리스트를 보여준다.
(2) 사용법
   who [option]
(3) option
   -i : 다른 사용자의 작업시간을 표시해준다. (앞으로 없어질 옵션이다.)
   -H : 리스트 컬럼의 헤더를 보여준다.
(4) 사용예
   1) [posein@www posein]$ who
      posein tty1    Oct 18 03:33
      prehee tty2    Oct 18 03:45
      sky    pts/0   oct 18 04:15
       => 맨 첫부분(posein, prehee, sky)는 로그인한 사용자의 아이디이다. 두번째는 터미널타입
         이다. 리눅스에서는 기본적으로 여섯개의 로그인을 할 수 있다. 창의 전환은 CTRL+ALT+F1~
         F6까지이다. tty1은 첫번째 로그인창으로 로그인했다는 것을 나타내고, tty2는 두번째창을,
         pts/0은 텔넷으로 로그인한 첫번째 사용자를 뜻한다. 세번째 부분은 로그인한 시각이다.
   2) [posein@www posein]$ who -H
      NAME     LINE         TIME         COMMENT
      posein   pts/0        Jan 26 22:48 (203.247.xxx.xxx)
       => 참고로 헤더의 내용은 배포판마다 다를 수 있다.
(5) 참고
   1) 사용법
     who am i => 자기 자신에 대해서만 보여준다.
   2) 사용예
     [posein@www posein]$ who am i
     www!posein   pts/0    Apr  9 22:37

2. whoami
(1) 설명: 현재 어떤 이름을 사용하고 있는지를 보여준다. 즉, 단순히 ID를 표시하는 것이 아니라
          아니라 실질적으로 사용중인 권한자를 표시해준다.
(2) 사용법
   whoami
(3) 사용예
   [posein@www posein]$ whoami
   posein
(4) 참고
   1) 설명: 일반사용자를 슈퍼유저로 만들때 가장 쉬운 방법은 /etc/passwd에서 UID 와 GID 값을
           0으로 만드는 것이다. 그러면 시스템에서는 해당사용자를 root로 인식한다. 현재의
           커널버전인 2.4에서는 UID가 0인 사용자는 무조건 외부(텔넷)에서 로그인이 불가능하지만
           커널 2.2버전(리눅스 6.x)에서는 ID가 root가 아니고 UID가 0인 경우에는 로그인 가능하
           였다. 따라서 프롬프트에서 보이는 ID가 실제 권한자와 다르게 나타났다. 이 경우에 권한
           자를 정확히 확인할 때 사용하는 명령이 whoami 였다.
   2) 사용예
     [posein@www posein]$ whoami
     root

3. users
(1) 설명: 현재 로그인한 사용자들의 ID 만을 보여준다.
(2) 사용법
   users
(3) 사용예
   [posein@www posein]$ users
   minory posein root

4. logname
(1) 설명: 사용자의 로그인 계정을 보여준다. 일반적으로 외부(텔넷)에서 접속했을 경우 사용할 수
          있다. su 명령을 이용하여 사용자전환을 했을 경우 최초의 로그인사용자를 확인할 때 사용
          한다.
(2) 사용법
   logname
(3) 사용예
   [root@www posein]$ logname
   posein

5. w
(1) 설명: 현재 시스템에서 login하고 있는 사용자와 사용자들이 하고 있는 일을 보여준다.
(2) 사용법
   w
(3) 사용예
   [posein@www posein]$ w
   04:10am up 5 min 2 users, load average: 0.01 0.12 0.07
   USER   TTY   FROM            LOGIN@    IDLE  JCPU  PCPU    WHAT
   posein tty1  -               03:33am   2:14  0.21s 0.07s   -bash
   prehee pts/1 192.168.0.1     03:33am   1.00s 0.12s 0.02s   w
   => (설명)
     USER   : 지금 시스템에 로그인한 사용자를 나타낸다.
     TTY    : Terminal type을 보여주고 있다. console모드로 접속했을 경우에는 ttyn(n은 정수로
             표시된다.)으로 표기되고, 외부에서 telnet등으로 접속한 경우에는 pts/n으로 표시된
             다.
     FROM   : 어디서 들어왔는지를 표시한다. 원격의 호스트의 Domain Name이나 IP가 표시된다.
             하이픈 (-)인 경우에는 로컬의 콘솔모드에서 접근한 것을 말한다.
     LOGIN@ : 언제 시스템에 들어왔는지를 알 수 있다. 즉 시작시간이다.
     IDLE   : 최종 명령 수행후의 대기 시간을 나타낸다.
     JCPU   : JOB CPU 시간을 나타내는 것으로 tty나 pts접근 후에 사용한 시간이다.
     PCPU   : Process CPU시간을 말하여 WHAT컬럼하에서 현재 프로세스에 의하여 사용되는 프로세서
             타임을 보여준다.
     WHAT   : 현재 사용중인 쉘이나 작업등을 알 수 있다.

6. last
(1) 설명: 사용자의 로그인 정보를 출력하는 프로그램이다. 이와 관련된 파일은 /var/log/wtmp이다.
          last명령을 내리면 이 파일의 내용을 출력한다. 하지만 wtmp파일은 일반적인 텍스트파일이
          아니라, 바이너리 파일이므로 last명령만으로 확인할 수 있다.
(2) 사용법
   last [option] [id]
(3) option
   -f 파일명: 로그로테이션과 같은 설정을 했을 경우 기본 로그파일이외의 다른 로그파일의 기록을
             볼 경우에 사용한다.
   -숫자 : 가장 최근부터 해당 숫자만큼만 보여준다
(4) 사용예
   1) last
     => /var/log/wtmp가 만들어진 후 접속내역을 보여준다.
   2) last posein
     => /var/log/wtmp가 만들어진 후 posein이라는 사용자가 몇번 로그인했는지를 알려준다.
   3) last reboot
     => /var/log/wtmp가 만들어진 후 시스템이 재부팅된 내역을 보여준다.
   4) last -1 reboot
     => 가장 최근에 reboot한 정보 하나를 보여준다.
   5) last -f /var/log/wtmp.1
     => /var/log/wtmp.1의 로그기록을 보여준다.

7. lastlog
(1) 설명: 사용자가 마지막으로 로그인한 시간을 보여준다.
(2) 사용법
   lastlog [option]
(3) option
   -u 사용자계정 : 특정 사용자에 대한 정보를 얻을 수 있다.
   -t 날짜 : 오늘부터 지정한 날짜만큼 거슬러 올라가  그 이후에 로그인한 사용자의 정보를 보여
           준다
(4) 사용예
   1) [posein@www posein]$ lastlog
      stu40            pts/0    203.xxx.xxx.xx   Mon May 27 17:40:53 +0900 2002
      nana                                       **Never logged in**
        => 모든 사용자의 최종로그 기록을 보여준다
   2) [posein@www posein]$ lastlog -u posein
      Username         Port     From             Latest
      posein           pts/2    203.xxx.xxx.xxx  Sun Jun  2 16:27:05 +0900 2002
        => posein 사용자의 최종로그 기록을 보여준다.
   3) [posein@www posein]$ lastlog -t 1
      Username         Port     From             Latest
      posein           pts/2    203.xxx.xxx.xxx  Sun Jun  2 16:27:05 +0900 2002
      minory           pts/1    192.168.0.3      Sun Jun  2 14:10:09 +0900 2002
       => 최근 3일내에 로그인한 사용자의 기록을 보여준다

Trackback
Reply

출처 : 대전국제IT교육센터 정성재 강사

 

1. /etc/passwd 파일 관리시 주의사항
(1) 사용하지 않는 계정은 반드시 지우도록 한다.
(2) 패스워드없이 로그인 가능한 계정이 있나 살펴본다.
(3) 일반사용자이어야 하는데 root사용자(User ID가 0인 사용자)가 되어 있지 않은가 살펴본다.
(4) 등록시키지 않은 사용자가 등록되어 있는 지 살펴본다.
(5) shadow suite를 사용하여 /etc/passwd파일의 암호부분을 일반사용자가 볼 수 없는 /etc/shadow
    파일에서 관리하도록 한다. 만약 초기에 shadow암호기법을 설정하지 않았다면 pwconv명령을 내려
    shadow 암호기법을 사용하도록 한다. 참고로 해제는 pwunconv이다.
(6) shadow suite를 사용했을 경우에는 pwck나 grpck 명령을 이용하여 무결성 검사를 수시로 한다.

2. shadow suite란?
(1) 개요: shadow suite란 사용자 관리 파일인 /etc/passwd 파일을 암호화하여 시스템을 보호하기
          위한 일종의 패키지이다. 이 패키지에는 암호화 파일인 shadow파일이외에도 많은 유틸리
          티와 편리한 기능을 제공한다.
(2) 설치확인
   1) 설명: 리눅스에서는 shadow-utils라는 이름을 가지고 rpm패키지로 설치된다.
   2) 확인
     rpm -qi shadow-utils
(3) Shadow Suite에서 제공하는 파일들
   1) 명령어: su, login, passwd, newgrp, chfn, chsh, id, useradd, userdel, usermod, groupadd,
             groupdel, groups,, pwck, grpck, lastlog, pwconv, pwconv 등이 있다.
   2) 환경설정파일: /etc/login.defs, /etc/default/useradd 등이 있다.
   3) 파일 목록의 확인
     rpm -ql shadow-utils

3. shadow suite의 기능
(1) user계정과 group을 암호화하여 별도의 파일에 관리한다.
(2) user계정과 group을 추가,수정,삭제하는 여러 유틸리티를 제공한다.
(3) 계정의 정지, 무효를 손쉽게 할 수 있다.
(4) login에 대한 기본사항을 /etc/login.defs라는 파일을 제공하여 손쉽게 설정할 수 있도록 한다.
(5) group의 패스워드설정도 가능하다.
(6) 8자이상의 패스워드도 가능하게 한다.
(7) user가 패스워드 설정시에 적절하게 통제할 수 있다.

4. 패스워드 설정에 대하여
(1) 좋은 패스워드
   1) 설명: 가장 좋은 패스워드는 다른 사람이 알아내기 힘든 패스워드이다. 요즘은 패스워드 변경
           시에 좋은 패스워드를 선택하도록 엄격히 관리되고 있다.
   2) 기본 패스워드 변경시 설정
    ㄱ. 특수문자를 반드시 포함하도록 한다.
    ㄴ. 대소문자를 섞어 쓰도록 한다.
    ㄷ. 공백도 같이 사용한다.
(2) 나쁜 패스워드
   1) 설명: 나쁜 패스워드를 사용하면 crack과 같은 프로그램을 이용하여 패스워드를 알아낼 수
           있다. 이를 막기 위해서는 다음과 같은 패스워드는 피해야 한다.
   2) 안좋은 패스워드 설정
    ㄱ. ID와 같은 패스워드
    ㄴ. 1234와 같이 숫자로만 되어 있고, 연번으로 되어 있는 패스워드
    ㄷ. 사용하는 시스템의 이름과 같은 패스워드
    ㄹ. 사용자의 전화번호, 생일, 자동차번호
    ㅁ. 영어사전에 나오는 단어
    ㅂ. 키보드위의 같은 선상에 있는 글쇠들의 연속(qwert,asdf 등)
    ㅅ. 동일한 글자의 연속(aaaa, bbbb 등)
(3) 패스워드 변경시의 에러메시지
   1) BAD PASSWORD: it's WAY too short 또는 BAD PASSWORD: it is too short
       => 패스워드의 길이가 짧은 경우
   2) Sorry, passwords do not match
       => 두 번 입력한 패스워드가 동일하지 않은 경우
   3) BAD PASSWORD: it is based on your username
       => 패스워드에 ID가 들어있는 경우
   4) Password unchanged
       => 현재 패스워드와 동일하게 입력한 경우
   5) BAD PASSWORD: is too similar to the old one
       => 현재 패스워드와 유사하거나 숫자 하나정도만 바뀐 경우
   6) passwd: Authentication token manipulation error
       => 현재 패스워드와 틀리게 입력한 경우
   7) BAD PASSWORD: it is based on a dictionary word
       => 새로 변경할 패스워드가 사전에 들어간 단어가 포함되어 있는 경우
   8) passwd: Only root can specify a user name.
       => 다른 사용자의 패스워드를 변경하려고 시도한 경우
   9) BAD PASSWORD: it does not contain enough DIFFERENT characters
       => 여러 문자로 패스워드를 설정해야 하는데 한두문자로 패스워드를 설정한 경우
   10) BAD PASSWORD: it too simple
       => 패스워드가 너무 단순한 경우
(4) 패스워드 변경 성공시의 메시지
   passwd: all authentication tokens updated successfully

5. passwd 명령을 이용한 사용자 계정 관리하기
(1) 설명: passwd명령은 패스워드를 부여하거나 변경하는 것 이외에 계정을 정지시키거나 기간제한
          등 사용자를 관리할 수 있다.
(2) 사용법
   passwd option 사용자계정
(3) option
   -S : username에 대한 패스워드정보를 알 수 있다.
   -l : 사용자의 패스워드에 lock을 걸어 로그인을 막는다.
   -u : 사용자에게 걸려있는 패스워드를 푼다.
   -d : 사용자의 패스워드를 제거한다. 패스워드없이 로그인이 가능하다.
   -n : 패스워드 변경까지의 최단 날짜의 설정
   -x : 현재 패스워드의 유효기간을 지정한다.
   -w : 패스워드 만료 전 경고 날짜를 지정한다.
   -i : 패스워드 만료된 뒤에 사용자 계정사용이 불가능하게 하기까지의 기간을 설정한다.
(4) 사용예
   1) [root@house /root]# passwd -S posein
      Changing password for user posein
      Password set, MD5 encryption
   2) [root@house /root]# passwd -l jjj
      Changing password for user jjj
      Locking password for user jjj
      passwd: Success
   3) [root@house /root]# passwd -u jjj
      Changing password for user jjj
      Unlocking password for user jjj
      passwd: Success
   4) [root@www /root]# passwd -d prehee
      Changing password for user prehee
      Removing password for user prehee
      passwd: Success
       => 패스워드가 제거되어 아이디만으로도 로그인이 가능하다.
   5) [root@www /root]# passwd -n 1 -x 200 prehee
      Adjusting aging data for user prehee.
      passwd: Success
       => 현재 패스워드는 200일간 유효하고 다음 패스워드는 유효기간이 1일이다.
         (참고) /etc/shadow의 확인
               prehee:$1$xKvAva2S$EESTtQcJdCDLQp6Qixw22.:12080:1:200:7:::
   6) [root@www /root]# passwd -w 1 prehee
       => 만료 전 3일부터 경고를 보내준다.
         (참고) /etc/shadow의 확인
               prehee:$1$xKvAva2S$EESTtQcJdCDLQp6Qixw22.:12080:1:200:1:::
   7) [root@www default]# passwd -i 10  prehee
       => 패스워드 만료된 뒤에 사용자 계정사용이 불가능하게 하기까지의 기간을 설정한다.
          (참고) /etc/shadow의 확인
               prehee:$1$xKvAva2S$EESTtQcJdCDLQp6Qixw22.:12080:1:200:1:10::
   
6. UID 및 패스워드관련파일: /etc/login.defs
(1) 설명: 패스워드 제한 및 메일디렉토리 정의 등 사용자 제한에 관여하는 파일이다.
(2) 파일 내용
   [root@www root]# cat /etc/login.defs
   # *REQUIRED*
   #   Directory where mailboxes reside, _or_ name of file, relative to the
   #   home directory.  If you _do_ define both, MAIL_DIR takes precedence.
   #   QMAIL_DIR is for Qmail
   #
   #QMAIL_DIR      Maildir
   MAIL_DIR        /var/spool/mail       // mail 디렉토리를 정의하였다.
   #MAIL_FILE      .mail

   # Password aging controls:
   #
   #       PASS_MAX_DAYS   Maximum number of days a password may be used.
   #       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
   #       PASS_MIN_LEN    Minimum acceptable password length.
   #       PASS_WARN_AGE   Number of days warning given before a password expires.
   #
   PASS_MAX_DAYS   99999        // 패스워드 최대 사용 기간
   PASS_MIN_DAYS   0            // 패스워드 변경최소 기간
   PASS_MIN_LEN    5            // 패스워드 최소 길이
   PASS_WARN_AGE   7            // 패스워드 소멸 이전 경고를 보여주는 날짜

   #
   # Min/max values for automatic uid selection in useradd
   #
   UID_MIN                   500      // UID 최소값
   UID_MAX                 60000      // UID 최대값

   #
   # Min/max values for automatic gid selection in groupadd
   #
   GID_MIN                   500     // GID 최소값
   GID_MAX                 60000     // GID 최대값

   #
   # If defined, this command is run when removing a user.
   # It should remove any at/cron/print jobs etc. owned by
   # the user to be removed (passed as the first argument).
   #
   #USERDEL_CMD    /usr/sbin/userdel_local

   #
   # If useradd should create home directories for users by default
   # On RH systems, we do. This option is ORed with the -m flag on
   # useradd command line.
   #
   CREATE_HOME     yes        // 홈디렉토리 생성여부

7. gpasswd
(1) 설명: 그룹에 패스워드를 설정하거나 그룹관리자를 지정할 수 있는 명령이다.
(2) 사용예
   gpasswd [options] group
(3) option
   -A : 그룹관리자를 지정한다. 루트관리자가 그룹관리자를 지정할 때 쓴다.
   -a : 그룹에 사용자를 추가한다. 그룹관리자가 일반사용자를 그룹에 포함시킬 때 사용한다.
   -d : 그룹에서 사용자를 제외시킬 때 사용한다. 그룹관리자가 일반사용자를 그룹에서 제외시킬 때
       사용한다.
   -r : 그룹패스워드를 제거한다. (리눅스에서 큰 의미 없음)
   -R : 그룹패스워드의 사용자제를 disable시킨다.(리눅스에서 큰 의미 없음)
   -M : 루트관리자가 그룹멤버를 지정할 때 사용한다. 루트만이 사용가능한 명령이다.
(4) 사용예
   1) [root@www root]# gpasswd -A posein terran
        => terran 그룹의 관리자로 posein을 지정한다. 참고로 posein이라는 사용자는 실제적으로
          terran 그룹의 일원이 아니여도 가능하다.
   2) [posein@www posein]$ gpasswd terran
      Changing the password for group terran
      New Password:
      Re-enter new password:
       => terran 그룹의 관리자인 posein 사용자가 그룹 패스워드를 지정하였다.
   3) [posein@www posein]$ gpasswd -a prehee terran
      Adding user prehee to group terran
       => prehee라는 사용자를 terran그룹에 속하도록 지정하였다.
   4) [posein@www posein]# gpasswd -d prehee terran
      Removing user prehee from group terran
       => prehee라는 사용자를 terran그룹에서 제외시킨다.
   5) [root@www root]# gpasswd -M prehee terran
       => prehee 라는 사용자를 terran 그룹의 멤버로 포함시킨다.
   6) [posein@www posein]$ gpasswd -r terran
       => terran 그룹의 그룹패스워드를 제거한다. newgrp명령을 이용하여 그룹에 합류할 수 있다.
   7) [posein@www posein]$ gpasswd -R terran
       => newgrp명령을 통한 gid변경을 불가능하게 한다.

(참고) 사실 리눅스에서 gpasswd를 통한 그룹패스워드의 부여의 의미는 없다. 그룹 패스워드를 설정
       한다고 해도 실제 사용하지는 않는다. 즉 -r과 -R 옵션은 큰 의미가 없다. 이 옵션을 사용해
       서 설정을 한다고 하더라도 2차그룹에 속해 있으면 newgrp명령을 사용할 수 있다. 다만 그룹
       관리 사용자를 지정하여 그 사용자가 그룹에 속할 사용자의 지정할 때는 사용가능하다.

8. 관련파일
(1) /etc/group
   1) 설명: 그룹의 정보를 관리하는 파일이다. 그룹을 추가하면 이 파일에 기록되고 그룹을 삭제하
           면 이 파일의 목록에서 삭제된다. 4개의 필드로 구성되어 있다.
   2) 구성예
     groupname:x:GID:member_list
      => (설명)
        groupname: groupadd명령등으로 추가시킨 그룹명이다.
        x : group의 패스워드를 나타내는 부분이지만 기본적으로 그룹패스워드도 /etc/gshadow에서
           관리되므로 여기서는 그냥 'x'라고만 나타난다.
        GID : 시스템에서 부여받는 group ID 이다.
        member_list : 속해있는 멤버의 리스트를 보여준다. 보통 2차 그룹멤버들의 아이디가 보이게
                     된다. 여러명이 존재할 수도 있다.
   3) 사용예
     terran:x:507:prehee
(2) /etc/gshadow
   1) 설명: /etc/shadow와 비슷한 파일로 그룹의 암호를 관리하는 파일이다.
   2) 구성예
     groupname:password:admin:member
      => (설명)
        groupname : 그룹명을 나타낸다.
        password : 그룹의 패스워드를 나타낸다. 보통 암호화되어 기록된다.
        admin : 그룹관리자를 나타낸다. 여러명이 존재할 수도 있다.
        member : 그룹의 멤버를 나타낸다. 보통 2차로 속한 사용자의 아이디가 기록되며 여러명이
                존재할 수도 있다.
   3) 사용예
     terran:nLggKXgdf.KJE:posein:prehee

9. newgrp
(1) 설명: 자신의 소속된 그룹을 바꾼다.
(2) 사용법
    newgrp [새로운_그룹]
    => 보통 'newgrp 2차_그룹'하게 되면 2차 그룹에 속하게 된다. 이 상태에서 새로운 그룹명을
      입력하지 않고 newgrp 라고만 치면 원래 gid로 변환된다.
(3) 사용예
   [prehee@www prehee]$ id
   uid=509(prehee) gid=509(prehee) groups=509(prehee)
    => prehee 라는 사용자는 자기 자신의 아이디와 동일한 그룹에 속해있다.
   [prehee@www home]$ cd /home
   [prehee@www home]$ ls -l
     -- 생략 --
   drwxrwx---    3 siztank  terran       4096  1월 28 21:36 siztank
     -- 생략 --
    => siztank라는 사용자가 terran이라는 그룹에 속해있다. 이 상태에서는 prehee 라는 사용자는
      siztank라는 디렉토리로의 접근이 불가능하다. 그룹권한이 부여되어 있기 때문에 최소한 terra
      n 이라는 그룹에 속해 있어야 접근이 가능하다.
   [posein@www posein]$ gpasswd -a prehee terran
   Adding user prehee to group terran
    => posein이라는 terran 그룹관리자가 있는데 이 관리자가 prehee라는 사용자를 gpasswd 명령을
     사용하여 prehee라는 사용자를 그룹에 포함시켰다고 가정하자.
   [prehee@www prehee]$ newgrp terran
     => 이 때 prehee라는 사용자는 newgrp이라는 명령을 이용하여 terran 그룹에 속하도록 로그인
       그룹을 바꿀 수 있다.
   [prehee@www prehee]$ id
   uid=509(prehee) gid=507(terran) groups=509(prehee)
    => gid가 변경된 것을 알 수 있다.
   [prehee@www home]$ cd ~siztank
   [prehee@www siztank]$ pwd
   /home/siztank
    => siztank라는 디렉토리에 접근이 가능하다.
(4) 참고
   ㄱ. 설명: 사실 단순히 접근이 목적이라면 이 명령은 사용하여 그룹을 변경할 필요는 없다. 이 명
            령은 그룹관리자가 그룹에 속하게 한 뒤 당장 소속되어 있는 그룹을 바꿀 필요성이 있을
            때만 필요하다. 접근이 안된다고 하더라도 다시 로그인하면 자동으로 2차그룹에 속해진
            다. 그러나, 그룹을 변경하는 것은 그 사용자가 파일을 생성했을 때 그 파일의 소속 그
            룹과 밀접한 관련이 있다.
   ㄴ. 사용예
     a. [prehee@www prehee]$ id
        uid=509(prehee) gid=509(prehee) groups=509(prehee),507(terran)
         => 기본 그룹은 prehee 라는 것을 알 수 있다.
        [prehee@www prehee]$ touch aaa
         => aaa라는 빈 파일을 생성해본다.
        [prehee@www prehee]$ ls -l
        합계 0
        -rw-rw-r--    1 prehee   prehee          0  1월 28 21:56 aaa
         => 빈 파일의 그룹소유권이 prehee라는 것을 알 수 있다.
     b. [prehee@www prehee]$ newgrp terran
         => 소속 그룹을 terran으로 변경하였다.
        [prehee@www prehee]$ id
        uid=509(prehee) gid=507(terran) groups=509(prehee),507(terran)
         => gid가 terran그룹인 507번으로 바뀌었음을 알 수 있다.
        [prehee@www prehee]$ touch bbb
         => bbb라는 빈파일을 생성해본다.
        [prehee@www prehee]$ ls -l
        합계 0
        -rw-rw-r--    1 prehee   prehee          0  1월 28 21:56 aaa
        -rw-r--r--    1 prehee   terran          0  1월 28 21:57 bbb
         => bbb파일의 소속 그룹이 terran임을 알 수 있다.

10. 사용자 및 그룹 무결성 검사 명령
(1) 개요: 리눅스 및 유닉스 계열은 Shadow Password suite라는 것을 사용한다. 이 패키지는 /etc/
          passwd의 패스워드 부분을 /etc/shadow에서 하도록 해주는 역할 등을 한다. 내부적으로
          사용자 및 그룹관리할 때, 사용자관리는 '/etc/passwd'와 '/etc/shadow'파일에서 담당하고
          그룹관리는 '/etc/group'와 '/etc/gshadow'에서 한다. 사용자 및 그룹관리에서 사용자
          또는 그룹을 두 개의 파일에서 담당하니 그 두 개의 파일사이에 문제점이 있는지 없는지를
          검사할 필요가 있다. 그래서, Shadow Password Suite 패키지에서 이 두 파일간의 무결성
          검사 명령어를 제공하는데 이 무결성 검사 명령이 사용자관리(/etc/passwd와 /etc/shadow)
          는 pwck 가 하고 그룹관리(/etc/group와 /etc/gshadow)는 grpck가 합니다.
(2) 관련명령어
   1) pwck
    ㄱ. 설명: pwck는 password check의 약어로 /etc/passwd파일과 /etc/shadow파일을 검사한다.
    ㄴ. 하는일
      a. filed의 설정 검사
      b. 사용자와 그룹아이디 설정 검사
      c. 기본 그룹의 존재 유무 검사
      d. 홈디렉토리가 존재 유무 검사
      e. 로그인쉘이 존재 유무 검사
      f. 패스워드가 없는 계정의 존재 유무 검사
    ㄷ. 사용법
       pwck
    ㄹ. 사용예
       [root@www root]# pwck
       user adm: directory /var/adm does not exist
       user gopher: directory /var/gopher does not exist
       user ftp: directory /var/ftp does not exist
       user wnn: directory /home/wnn does not exist
       user apache: directory /var/www does not exist
       user webalizer: directory /var/www/html/usage does not exist
        => pwck는 /etc/passwd와 /etc/shadow파일을 검사하여 문제성이 있는 소지를 보여준다. 이
          예는 /etc/passwd파일에 계정이 존재하는 데 관련 디렉토리가 없다는 메시지이다.
   2) grpck
    ㄱ. 설명: grpck는 group password check의 약어로 /etc/group과 /etc/gshadow파일의 검사한다.
    ㄴ. 하는일
      a. field의 설정 검사
      b. 그룹아이디와 이름의 설정 검사
      c. 사용자와 관리자의 설정 검사
    ㄷ. 사용법
       grpck
    ㄹ. 사용예
      a. [root@www root]# grpck
         => 특별한 이상이 없으면 변화가 없다.
      b. (가정) 이상을 만들어 본다. 원래 terran이라는 그룹이 있다고 가정하고 임의로 /etc/group
               에서 vi편집기로 terran => terra로 바꾸어 본다.
        [root@www root]# grpck
        no matching group file entry

        delete line `terran::posein:prehee'
          => /etc/gshadow에 맞지 않는 부분이 있다고 삭제한다고 나온다.

Trackback
Reply

출처 : 대전국제IT교육센터 정성재 강사

 

1. 사용자(User)에 대하여
(1) 개요
    사용자에는 일반계정 사용자와 root계정사용자가 있다. 일반적으로 root계정은 시스템운영에 있
   어서 모든 권한을 행사하므로 슈퍼유저(Super User)계정이라고 한다. 그러나, 꼭 root라는 계정만
   슈퍼유저가 되는 것은 아니다. 일반유저도 슈퍼유저의 권한행사가 가능하다
(2) 시스템 계정
   /etc/passwd 파일의 세번째필드가 UID값을 나타내는 데 그 값이 500번(일반적으로 100번이하)미만
  의 계정들을 보면 daemon, mail, lp, nobody라는 계정으로 되어 있다. 이러한 계정을 시스템 계정
  이라고 한다. 시스템 계정이 존재하는 이유는 해당 서비스로 인한 위험을 줄이기 위해서이다. 예를
  들면 games 이라는 것이 있다고 가정하자. game을 하게 되어서 High Score를 기록한다고 하면 이
  기록을 특정한 파일에 기록해야 한다. 만약 특정한 파일에 기록할 때 특정한 계정이 없으면 root로
  기록해야 한다. 단순히 점수만 기록하면 되는데 root권한으로 기록하게 되면 시스템상에 문제가 발
  생할 수도 있다. 그래서, 시스템서비스들도 계정으로 등록해서 관리한다.

2. 관련파일 : /etc/passwd, /etc/shadow
리눅스 시스템에서 가장 중요한 파일로 시스템에 로그인하여 자원을 이용할 수 있는 사용자의
목록을 저장하고 있는 파일이다. 이 파일에 기록된 사용자 정보는 그 사용자가 로그인하고, 로그아웃
할때까지 항상 시스템이 사용자를 감시하기 위한 근거가 되는 파일이다. /etc/passwd파일에서 id,
개인의 홈디렉토리등 기본적인 정보를 담고 있으며, /etc/shadow파일은 /etc/passwd파일에서의
패스워드부분을 다시 암호화하여 관리한다.
(1)/etc/passwd
   1) 기본구조 : 7개의 필드로 나누어 정보를 저장하고 있다.
     username:password:UID:GID:fullname:home-directory:shell
   2) 사용예
     posein:x:500:500:Jung Sung-Jae:/home/posein:/bin/bash
     (설명)
       posein : Username부분으로 일명 ID 또는 계정명이라고도 부른다.
       x : 암호화된 패스워드 필드, 이 부분을 /etc/shadow파일에서 담당한다.
       500 : 숫자화된 UserID 이다. 유닉스 내부에서는 ID를 숫자화하여 관리한다.
       500 : 숫자화된 GroupID 이다. 유닉스 내부에서는 Group도 숫자화하여 관리한다.
       Jung Sung-Jae : 일종의 부연설명이다. 사용자에 대한 정보를 기록되는 부분이다.
       /home/posein : 최초 로그인시 작업하는 디렉토리이다. 보통 개인 홈디렉토리라 부른다.
       /bin/bash : 로그인시 사용되는 쉘을 나타낸다.
(2)/etc/shadow : /etc/passwd파일에서 두번째 필드인 패스워드부분, 즉 'x'로 표기 되어 부분을
                 암호화하여 관리한다.
   1) 기본구조 : 9개의 필드로 구성되어 있다.
     username:password:last:may:must:warn:expire:disable:reserved
      =>
     username : 사용자이름, 즉 아이디를 말한다.
     password : encode된 패스워드
     last     : 최근의 패스워드를 바꾼 날(1970년 1월 1일부터 계산한 날수)
     may      : 패스워드를 바꾼 다음, 또 바꾸기 위해 기다리는 날 수(다음 패스워드로의 변경 유
               예 기간)
     must     : 다음 패스워드로 바꾸어야 할 때까지의 기간, 즉 현재 패스워드 유효기간
     warn     : 패스워드가 만료되기 전에 사용자에게 바꿀 것을 경고하는 기간
     expire   : 패스워드가 만료된 뒤, 사용자 계정사용이 불가능하기까지 기간
     disable  : 계정이 사용 불가능하게 된 날 (1970년 1월 1일부터 계산한 날수)
     reserve  : 남겨둔 예약된 공간
   2) 사용예
     zzang:$1$cWctEYZr$R/o4BEhpGI1i29or6Qrkp.:12255:0:99999:7:::

(실습) useradd명령을 통한 /etc/shadow파일의 변화를 살펴보자.
1. useradd 명령으로 사용자를 추가한뒤에 /etc/passwd파일과 /etc/shadow파일의 내용을 본다.
2. 그 다음에 passwd명령으로 추가한 사용자에게 패스워드를 부여한 뒤에 /etc/shadow파일의 내용
   을 살펴본다.

3. 일반계정사용자를 슈퍼유저로 전환
/etc/passwd에서 root권한자의 UID와 GID를 살펴보자. 둘 다 0으로 설정되어 있다. 일반사용자도
UID와 GID를 0으로 변환하며 슈퍼유저가 된다.

4. useradd명령을 이용한 사용자 고급관리
(1) 사용법
   useradd option
(2) option
   -D : 사용자추가시 기본적으로 반영되는 정보를 출력한다. 기본이 되는 파일은 /etc/default/user
       add이다. 이 파일의 설정을 변경하려면 이 옵션과 함께 아래의 옵션등을 사용해야 한다.
   -g : 기본 그룹을 지정한다. 여기에서 지정하는 값은 /etc/group내에 있어야 한다.
       ( 리눅스 7버전에서 변경하면 /etc/default/useradd파일에 변경된 값이 반영은 되나 사용자
        추가시에는 적용되지 않고 있다.)
      예) useradd -D -g new_gruop_name or GID
   -b : 신규사용자의 홈디렉토리의 상위디렉토리를 변경한다.
      예) useradd -D -b directory
   -f : INACTIVE행과 관련된 옵션으로 패스워드 유효기간이 만료된 후에 언제 이 계정을 사용할 수
       없도록 할 것인지를 하루단위로 설정한다. 기본값은 취소되지 않는다.
      예) useradd -D -f number_of_day
   -e : 사용자의 계정이 만료되어서 사용할 수 없게 되는지를 설정한다. Shadow password를 쓸 때만
       사용된다. 기본적으로는 계정이 만료되지 않는다. 관련파일은 /etc/login.defs이다.
      예) useradd -D -e YYYY-MM-DD
   -s : 사용자의 기본쉘을 변경할 때 쓰인다.
      예) useradd -D -s /bin/csh
(3) 사용예
   1) [root@house /root]# useradd -D
      GROUP=100              // 기본 Group, 시스템에서 처리하는 기본값으로 사용자의 이름으로
                               기본 그룹을 생성한다.
      HOME=/home             // 홈디렉토리의 위치 (/home/username)
      INACTIVE=-1            // 패스워드가 기한이 지난 뒤 사용자 계정이 무효가 되기까지의 기간
                              (0,-1이 상관없음을 뜻함. 리눅스 버전에 따라 값이 다름)
      EXPIRE=                // 패스워드 유효기간
      SHELL=/bin/bash        // 기본 Shell
      SKEL=/etc/skel         // Skeleton Directory. 즉 사용자생성시 기본골격을 나타냄.
   2) useradd -D -d /home -s/bin/csh
      => 사용자의 홈디렉토리를 /home2로 바꾸고, 기본쉘은 /bin/csh로 전환한다. 변화된 내용은
       /etc/default/useradd 파일에 기록된다.

5. passwd명령을 이용한 사용자 고급관리
(1) 설명: 기본적으로 passwd명령은 패스워드를 부여하거나 패스워드를 변경하는 명령이지만 루트권
          한자는 좀 더 많은 기능을 할 수 있다. 대체적으로 계정을 사용하지 못하게 할 때 유용하
          게 쓰인다.
(2) 사용법
   passwd option 사용자계정
(3) option
   -S : username에 대한 패스워드정보를 알 수 있다.
   -l : 사용자의 패스워드에 lock을 걸어 로그인을 막는다.
   -u : 사용자에게 걸려있는 패스워드를 푼다.
   -d : 사용자의 패스워드를 제거한다. 패스워드없이 로그인이 가능하다.
(4) 사용예
   1) [root@house /root]# passwd -S posein
      Changing password for user posein
      Password set, MD5 encryption
       => 현재 패스워드 정보를 보여준다.
   2) [root@house /root]# passwd -l jjj
      Changing password for user jjj
      Locking password for user jjj
      passwd: Success
       => 패스워드에 lock을 건다. 보통 /etc/shadow 파일의 두번째 필드가 패스워드 부분인데 이
         부분의 맨 앞에 '!'가 붙는다.
   3) [root@house /root]# passwd -u jjj
      Changing password for user jjj
      Unlocking password for user jjj
      passwd: Success
   4) [root@www /root]# passwd -d prehee
      Changing password for user prehee
      Removing password for user prehee
      passwd: Success
       => 패스워드가 제거되어 아이디만으로도 로그인이 가능하다. /etc/shadow 패스워드 필드의
        내용이 전부삭제된다. 다시 패스워드를 부여하려면 passwd 명령으로 부여해야 한다.
(5) 주의점
   1) 설명: 'passwd -d  사용자계정'을 이용해서 사용자의 패스워드를 제거해서는 절대안된다. 해당
           사용자가 패스워드없이 로그인 가능하기 때문이다. 또한 'passwd -S 사용자계정'하면
           패스워드가 Locking이라고 정보를 보여주지만 정확한 의미의 Locking이 아니다. 이 부분
           이 현재 문제점이다.
   2) 확인예
     [root@www root]# passwd -d prehee
     Removing password for user prehee.
     passwd: Success
       => prehee라는 사용자의 패스워드가 삭제되었다. 즉 패스워드없이 해당시스템에 로그인할 수
         있게 된다.
     [root@www root]# passwd -S prehee
     Password locked.
       => 정보를 확인하면 'passwd -l 사용자계정'했을 때와 같이 패스워드가 locked 되었다고 나오
        지만 실제로는 locked된 것이 아니라 제거가 된 것이므로 주의해야 한다.

6. usermod
(1) 설명: 사용자의 쉘, 홈디렉토리, UID등을 변경할 수 있는 명령
(2) 사용법
   usermod option 사용자계정
(3) option
   -d : 사용자의 홈디렉토리를 변경한다. 옮겨질 디렉토리는 미리 생성되어야 한다. -m을 사용하면
       홈디렉토리의 파일과 디렉토리도 같이 옮겨주므로 이 경우에는 디렉토리를 생성하지 않아도
       된다.
   -g : 사용자의 그룹을 변경한다.
   -s : 사용자의 쉘을 변경한다.
   -u : 사용자의 UID값을 변경한다.
   -e : 계정만기일을 변경한다.
   -c : 사용자의 간단한 정보를 입력하거나 변경한다.
   -G : 추가로 다른 그룹에 속하게 할 때 쓰인다.
   -p : /etc/shadow의 2번째필드인 암호화된 패스워드값을 변경할 때 쓴다. 이 옵션 사용할 때는
       암호화된 값으로 값을 지정해야 한다.
   -l : 사용자아이디를 변경한다.
   -L : 사용자의 패스워드에 LOCK을 걸어 로그인을 막는다.
   -U : 사용자의 패스워드에 걸린 LOCK을 푼다.
(4) 사용예
   1) 홈 디렉토리변경 : 디렉토리는 미리 생성되어 있어야 한다. 기본적으로 -m을 사용하면 디렉토리
                     를 생성하지 않아도 된다. 전체환경을 그대로 옮겨주므로 꼭 -m옵션과 같이
                     사용하도록 한다.
    ㄱ. 사용법
      usermod -d 새로운_홈디렉토리경로 username
    ㄴ. 사용예
      usermod -d /home2/posein -m posein
       => posein이라는 사용자의 홈디렉토리를 /home2/posein으로 변경하고 -m옵션은 내용도 새로운
         위치로 옮겨준다. 단, /home2 라는 디렉토리는 미리 생성되어 있어야 한다.
   2) 기본그룹 변경하기 : 사용자가 속한 그룹을 변경한다. 기존의 그룹에 속해 생성된 것들은
                       chgrp명령을 사용하여 소유그룹을 변경해야 한다.
    ㄱ. 사용법
       usermod -g [group_name or GID] username
    ㄴ. 사용예
       usermod -g 601 posein
        => posein이라는 사용자의 그룹을 601로 변경한다. 속한 그룹은 변경되지만 기존에 미리
          생성된 디렉토리나 파일들의 소유그룹은 변경되지 않는다. 그러므로 chgrp명령으로
          변경해야 한다.
   3) 쉘변경
    ㄱ. 사용법
       usermod -s 새로운_쉘경로 username
      (참고)사용가능한 쉘의 확인은 /etc/shells에서 확인한다.
    ㄴ. 사용예
      a. usermod -s /bin/csh posein
           => posein이라는 사용자의 쉘을 /bin/csh로 바꾼다.
      b. usermod -s /bin/false posein
           => posein이라는 사용자의 쉘을 /bin/false로 바꾸지만 실질적으로 존재하는 쉘이
             아니므로 일시적인 사용자의 계정을 제한할 때 쓰인다.
  4) UID 변경
    ㄱ. 사용법
       usermod -u UID username
    ㄴ. 사용예
       usermod -u 500 posein
        => posein이라는 사용자의 UID를 500으로 바꾸라는 뜻이다. 이 때 홈디렉토리에 있는 사용자
          소유의 모든 파일과 디렉토리도 자동으로 반영되나, 홈디렉토리 외부에 있는 자신의 파일은
          chown명령으로 변경해야 한다.
   5) 계정만기일(expiration Date)변경
    ㄱ. 사용법
       usermod -e MM/DD/YY username
    ㄴ. 사용예
       usermod -e 04/30/02 posein
        => posein이라는 사용자의 계정을 2002년 4월 30일까지로 지정한다. 확인은 /etc/shadow
         에서 한다.
   6) 사용자에 대한 간단한 정보를 입력한다.
    ㄱ. 사용법
       usermod -c '입력할 내용' 계정명
    ㄴ. 사용예
       usermod -c 'System Manager' posein
        => posein이라는 사용자에게 'System Manager'라는 정보를 넣는다. 확인은 /etc/passwd나
          finger 명령을 이용한다.
   7) 추가로 그룹 지정한다.
    ㄱ. 사용법
       usermod -G 새로운_그룹명
    ㄴ. 사용예
       usermod -G wheel posein
        => posein이라는 사용자를 'wheel'이라는 그룹에 추가로 속하게 한다.
   8) 사용자 아이디 변경
    ㄱ. 사용법
       usermod -l 새로운아이디 원래아이디
    ㄴ. 사용예
       usermod -l prehee posein
        => posein이라는 아이디를 prehee로 변경한다.

7. groupmod
(1) 설명: 기존 그룹의 이름이나 GID를 변경할 때 사용하는 명령
(2) 사용법
   groupmod option  새로운그룹 현재그룹
(3) option
   -n : 기존 그룹의 이름을 바꾼다.
   -g : 기존 그룹의 GID를 바꾼다.
(4) 사용예
   1) groupmod -n injaebu insabu
     => insabu라는 그룹의 이름을 injaebu로 변경(insabu=> injaebu)
   2) groupmod -g 555 injaebu
     => injaebu라는 그룹의 GID를 555로 바꾼다.

8. finger
(1) 설명: 사용자에 대한 정보를 보여주는 명령으로 /etc/passwd에 저장된 내용을 읽어온다.
(2) 사용법
   finger [ID]
(3) 사용예
   1) [posein@house posein]$ finger
       => 현재 접속한 사용자의 정보를 출력한다.
   2) [posein@house posein]$ finger ID
       => 'ID'를 가진 사용자의 정보를 출력한다.
   3) [posein@house posein]$ finger @aaa.com
       => @aaa.com 호스트에 있는 모든 사용자들의 정보를 출력한다. 단 finger 서비스의 설정이
         되어있는 서버만 가능하다. 현재 거의 모든 서버에서 이 서비스는 하지 않는다.
(4) 참고
   1) 설명: finger가 사용자의 정보를 출력해주는 명령이지만, 현재 이 명령이 많이 쓰이는 경우는
           최신의 커널정보를 알아볼 경우에 쓰인다.
   2) 사용예
     [posein@www posein]$ finger @ftp.kernel.org
     The latest stable version of the Linux kernel is:           2.4.20
     The latest prepatch for the stable Linux kernel tree is:    2.4.21-pre7
     The latest beta version of the Linux kernel is:             2.5.67
     The latest snapshot for the beta Linux kernel tree is:      2.5.67-bk6
     The latest 2.2 version of the Linux kernel is:              2.2.25
     The latest 2.0 version of the Linux kernel is:              2.0.39
     The latest prepatch for the 2.0 Linux kernel tree is:       2.0.40-rc6
     The latest -ac patch to the stable Linux kernels is:        2.4.21-pre7-ac1
     The latest -ac patch to the beta Linux kernels is:          2.5.67-ac1
     The latest -dj patch to the beta Linux kernels is:          2.5.60-dj2

9. chfn
(1) 설명: 사용자의 정보를 입력하거나 변경한다.
(2) 사용법
   chfn [id]
(3) 사용예
   1) chfn => 자신의 정보를 변경한다.
   2) chfn posein => posein이라는 사용자의 정보를 변경한다. 이 경우에는 root사용자만이
                    가능하다.

10. chage
(1) 설명: 사용자의 패스워드 만료에 대한 정보를 보여주거나 제한한다.
(2) 사용법
    chage [option] 사용자명
(3) option
   -l : 사용자계정에 대한 정보를 보여준다.
   -m : 패스워드 변경의 최소 날짜를 지정한다.
   -M : 패스워드 변경의 최대 날짜를 지정한다. 이 값이 지정하면 패스워드 만기일짜가 나타난다.
   -I : 패스워드 만료후에 실제 패스워드에 LOCK를 설정하기까지의 날짜를 설정한다.
   -E : 계정이 만기되는 날짜를 지정한다. MM/DD/YY 형태로 지정한다.
   -W : 패스워드 변경을 요구하는 경고날짜를 지정한다.
(4) 사용예
   1) [root@www root]# chage -l posein
      Minimum:        0
      Maximum:        99999
      Warning:        7
      Inactive:       -1
      Last Change:             4월 03, 2003
      Password Expires:       Never
      Password Inactive:      Never
      Account Expires:        Never
       => posein 사용자의 패스워드 및 계정 정보를 보여준다.
   2) [root@linux245 root]# chage -M 100 posein
       => 패스워드 만기를 최대 100일로 한다.
   3) [root@linux245 root]# chage -E 09/30/03 posein
       => 계정만기를 2003년 9월 30일로 지정한다.



- 사용자 추가하기(2) - 실습


1. 리눅스 서버를 구축하고 사용자를 추가하려고 한다. 인사부 100명, 총무부 150명, 자재부 100명
   정도 된다. 그냥 useradd를 하게 되면 /home디렉토리밑에 350명의 사용자가 위치하게 되어 관리상
   어려움이 발생할 것같아 다음과 같은 조건으로 사용자를 생성하려고 한다.
[조건]   1. 인사부직원은 insa라는 그룹에 속하도록 하고 홈디렉토리는 /home/insa 디렉토리에
            생성되도록 한다.
          2. 총무부직원은 chongmoo라는 그룹에 속하도록 하고 홈디렉토리는 /home/chongmoo 디렉
            토리에 생성되도록 한다.
          3. 자재부직원은 jaje라는 그룹에 속하도록 하고 홈디렉토리는 /home/jaje 디렉토리에
            생성되도록 한다.


  => (방법)
    1. 그룹을 생성한다.
      groupadd insa
      groupadd chongmoo
      groupadd jaje

    2. 디렉토리를 생성한다.
      mkdir /home/insa
      mkdir /home/chongmoo
      mkdir /home/jaje

    3. 계정을 추가한다.
      (1) 일반적인 방법 : prehee 이라는 사용자가 인사부일 경우 다음과 같다.
         useradd prehee -d /home/insa/prehee -g insa
          => 이러한 방법으로 350명을 추가하면 매우 어렵다.
      (2) /etc/default/useradd 파일 이용
        1) 설명: 각 부서별 유저를 추가하기 전에 /etc/default/useradd값을 바꾸면 조금 더 쉽게
                할 수 있다.
        2) 예
          ㄱ. 일반적인 설정
             [root@www root]# useradd -D
             GROUP=100
             HOME=/home
             INACTIVE=-1
             EXPIRE=
             SHELL=/bin/bash
             SKEL=/etc/skel
          ㄴ. 인사부에 속한 사용자를 위한 /etc/default/useradd 파일변경
             [root@www root]# useradd -D -b /home/insa -g insa
             [root@www root]# useradd -D
             GROUP=516
             HOME=/home/insa
             INACTIVE=-1
             EXPIRE=
             SHELL=/bin/bash
             SKEL=/etc/skel
               => 그룹값과 홈디렉토리경로가 바뀌었음을 알 수 있다. 물론 설정변경시에 편집기를
                 이용하여 직접변경해도 된다.
          ㄷ. 사용자추가
             [root@www root]# useradd posein
               => 사용자추가시에 '사용자계정'만 입력하면 된다.
          ㄹ. 같은 방법으로 총무부 사용자들과 자재부 사용자들을 추가하면 된다.
         3) 확인: prehee라는 사용자로 로그인한 후에 확인해보자.
           Red Hat Linux release 8.0 (Psyche)
           Kernel 2.4.18-14 on an i686
           login: prehee
           Password:
           [prehee@www prehee]$ pwd
           /home/insa/prehee
           prehee@www prehee]$ ls -ld ~
           drwx------    3 prehee   prehee       4096  4월 12 01:18 /home/insa/prehee
              => 결과를 보면 홈디렉토리는 변경되지만 그룹이 변경되지 않음을 알 수 있다. 현재
                리눅스버그인 것 같다. 이 경우에는 일단 사용자를 전부추가한 뒤에 그룹변경명령
                인 chgrp명령을 다음과 같이 내려서 변경하도록 한다.

                  예) [root@www /]# chgrp insa -R /home/insa
                         => 총무부와 자재부도 같은 방법으로 그룹변경을 한다.

Trackback
Reply

출처 : 대전국제IT교육센터 정성재 강사

 

1. su(substitute user)
(1) 설명: 그대로 해석하면 대리유저라는 뜻으로  실제로 login하는 것은 아니고 다른 사용자의
          권한으로 shell을 실행하는 것이다. 즉, 시스템에 접속한 상태에서 재로그인없이 다른
          사람 계정으로 접속한다.
(2) 사용법
   su [option] [사용자계정]
    => 사용자계정을 입력하지 않으면 root로 login하게 된다. su를 이용해 다른 사용자로 사용하다가
      exit를 입력하면 su를 실행하기 전 사용자로 돌아가게 된다.
(3) option
   - : 이 옵션이 없이 su 명령만 실행시키면 자신의 환경변수의 값을 가지고 다른 사람의 권한만 갖
      지만 이 옵션을 사용하여 su명령을 실행시키면 그 사용자의 환경변수의 내용까지 완벽하게 사
      용한다. 즉, 루트권한사용시 이 옵션을 사용해야만 시스템명령어(예를 들면/sbin 디렉토리의
      명령어인 fdisk같은)를 사용할 수 있다.

(참고1) 'su'와 'su -'의 비교


현재디렉토리상태 su인 경우 su -인 경우
[posein@www posein] [root@www posein] [root@www /root]


(설명) su명령을 옵션없이 사용하면 기존의 일반사용자인 posein의 환경을 그대로 가져간다. 따라서,
      루트권한자로서의 역할을 전부수행하지 못하고, 단순히 파일이나 디렉토리의 접근권한만 행사
      한다. 따라서, 완벽한 루트권한자로의 역할을 수행하려면 'su -'로 해야한다.

(실습) 'su'명령인 상태와 'su -'상태에서 각각 현재 설정된 패스의 상태를 알 수 있는 ehco $PATH
      를 해보아라. (물론 현재의 셀상태는 리눅스에서 사용하는 bash셀이어야 한다.)
(참고2) 루트권한자에서 일반사용자로 'su'시에는 패스워드를 묻지 않고 바로 전환된다.

2. useradd
(1) 설명: 사용자를 추가하는 명령어로 adduser와 같다.물론 option도 동일하다. root권한자만 가능
         한 명령이다.
(2) 사용법
   useradd [option] 사용자계정
(3) option
  -p : 사용자의 암호를 추가시에 지정할 수 있다. (리눅스에서는 지원안됨)
  -d : 홈디렉토리를 지정할 때 쓰인다. 최종디렉토리만 생성한다.
    예) useradd posein -d /home2/posein 이라고 명령을 내렸을 경우 /home2이라는 디렉토리가 생성
       되어 있을 경우에만 홈디렉토리가 생성되므로 미리 /home2라는 디렉토리를 생성해야 한다.
  -g : 그룹을 지정할 때 쓴다. 지정할 그룹이 미리 생성되어 있어야 한다.
  -G : 기본그룹이외에 추가로 그룹에 속하게 할 경우에 쓴다.
  -c : 사용자추가시 사용자에 대한 설명을 설정한다.
  -s : 사용자추가시 사용자가 사용할 쉘을 지정한다.
  -D : /etc/default/useradd에 설정된 유저추가와 관련된 기본 사항들을 보여준다.
(4) 사용예
   1) posein이라는 유저추가하기
     [root@www /]# useradd posein
  (참고3) useradd명령은 단순히 사용자만 추가하는 것이 아니라 리눅스에서는 유저추가시 메일계정
        (/var/spool/mail/'사용자계정')도 자동으로 생성되고 또한 사용자의 홈디렉토리도 자동으로
        생성된다. 홈디렉토리는 /home/'사용자계정'이다.
   2) useradd -p '암호' posein
     => 사용자추가와 동시에 암호도 지정한다. (권장하지 않고 또한 현재 리눅스에서는 지원되지
       않는다.)
   3) useradd marine -d /home/terran/marine -g terran
     => marine이라는 사용자를 추가하면서 홈디렉토리의 경로도 지정하고 해당그룹도 지정한다.
       물론 해당 디렉토리(/home/terran)과 해당그룹(terran)은 미리 생성되어 있어야 한다.
        예) 위의 명령실행전에 아래와 같은 명령을 내려 미리 디렉토리와 그룹을 생성한다.
           mkdir /home/terran
           groupadd terran
   4) useradd -c "System manager" posein
     => posein이라는 사용자에게 "System manager"라는 정보를 입력한다.
       정보의 확인은 /etc/passwd 또는 finger명령으로 확인한다.
   5) [root@www /root]# useradd -D
      GROUP=100
      HOME=/home
      INACTIVE=-1
      EXPIRE=
      SHELL=/bin/bash
      SKEL=/etc/skel
(5) 참고: 관련파일(/etc/default/useradd, /etc/passwd)
    useradd명령은 /etc/default/useradd파일의 내용을 참고로 해서 사용자를 추가한 뒤에 기록은
   /etc/passwd 파일에 한다고 보면된다. 다시말하면 /etc/default/useradd파일의 내용을 참고로
   홈디렉토리, 기본그룹, 쉘 등을 설정하여 /etc/passwd 파일에 기록한다.

(6) 응용문제: useradd명령을 이용하여 아래와 같은 조건을 만족하는 marine이라는 계정을 생성
             하여라.

     [조건]
      - 기본그룹: terran
      - 추가그룹: zerg
      - 기본쉘  : /bin/csh

     [정답]
      useradd marine -g terran -G zerg -s /bin/csh

3. passwd
(1)설명: 등록된 사용자의 비밀번호를 지정하거나 변경하는 명령어이다. passwd만 치면 현재 로그인
         사용자의 패스워드가 변경된다.
(2) 사용법
    passwd [사용자계정]
(3) 사용예
   1) [posein@www posein]$ passwd
        => 현재 로그인한 posein 사용자 본인의 패스워드를 변경한다.
   2) [root@www /root]# passwd posein
        => posein이라는 사용자의 패스워드를 변경한다.

4. userdel
(1) 설명: 사용자를 삭제하는 명령이다.
(2) 사용법 : userdel [option] 사용자계정
(3) option
    -r : 사용자의 홈디렉토리까지 제거한다.
(4) 사용예
   1) [root@www /root]# userdel posein
       => posein이라는 사용자의 계정을 삭제한다.
     (참고4) 사용자를 제거한다고 해서 그 사용자가 사용하던 홈디렉토리까지 제거되는 것이 아니므
           로 일일이 삭제해주거나 -r옵션을 사용하여야 한다. 또한 E-mail을 사용하고 있던 경우에
           는 E-mail파일도 지워야 한다.
             예) rm -rf /home/posein
                 rm -rf /var/spool/mail/posein
   2) [root@www /root]# userdel -r posein
       => 사용자의 계정뿐만아니라 사용하던 홈디렉토리와 홈디렉토리안의 모든 파일 및 디렉토리,
         메일계정도 제거한다.

5. groupadd
(1) 설명: 새로운 그룹을 만드는 명령으로 생성된 그룹의 확인은 /etc/group에서 한다.
(2) 사용법
   groupadd [option] 그룹명
(3) option
   -g GID : 생성과 동시에 GID를 부여하고 싶을때 사용
   (참고) GID 0~499까지는 루트나 bin,mail등의 시스템 레벨계정에서 사용하기 위해 예약되었으므
         로 500번이상을 사용해야 한다.
   -r     : -g 옵션과 함께 쓰이며 0~499번지내의 번호를 그룹번호로 사용시 쓴다.
    (참고)어떤 사용자가 속한 그룹을 알고 싶을때는 groups ID
(4) 사용예
    [root@www /root]# groupadd terran
      => terran이라는 그룹을 생성한다

6. groupdel
(1) 설명 : 생성된 그룹을 삭제하는 명령이다. 참고로 제거할 그룹에 속한 사용자가 없어야 한다.
(2) 사용법
   groupdel 그룹명
(3) 사용예
    [root@www /root]# groupdel terran
     => terran이라는 그룹을 삭제한다.

7. id
(1) 설명: 시스템에 등록된 ID를 보여준다. uid, gid, group를 보여준다.
(2) 사용법
   id [option] [사용자계정]
(3) option
   -g : 그룹 ID만을 출력한다.
   -G : 추가 그룹들만 출력한다.
   -u : 사용자 ID만을 출력한다.
   -n : 보통 g나 u옵션과 같이 사용되며 번호대신에 이름으로 출력한다.
(4) 사용예
   1) [posein@www posein]$ id
      uid=501(posein) gid=501(posein) groups=501(posein)
        => 기본적을 uid, gid, group을 출력한다.
   2) [posein@www posein]$ id prehee
       uid=514(prehee) gid=515(prehee) groups=515(prehee)
        => prehee라는 사용자의 ID정보를 출력한다.
   3) [posein@www posein]$ id -un
      posein
       => uid대신에 이름으로 출력한다.

8. groups
(1) 설명: 해당사용자가 속한 그룹을 보여준다.
(2) 사용법
   groups [사용자계정]
(3) 사용예
   1) [posein@www posein]$ groups
      posein
       => 현재 로그인된 사용자가 속한 그룹을 표시해준다.
   2) [root@www /root]# groups marine
      marine : terran zerg
       => marine이라는 사용자가 속한 그룹을 표시해준다. 현재 terran, zerg라는 그룹에 속해있는
         것을 알 수 있다.


사용자 관련명령어(실습)


1. 관리자가 9명의 사용자를 추가하려고 한다. 9명은 인사부 3명(posein, xitem, yooain), 총무부 3명(zzang, kcy1977, prehee), 자재부 3명(powerlim, dreamlee, minory)이다. 그냥 useradd 명령을 내리면 전부 /home 디렉토리밑으로 계정이 생성되어 관리하기가 불편할 것 같아 다음과 같은 조건으로 사용자를 생성하려고 한다.


[조건]   1. 인사부직원은 insa라는 그룹에 속하도록 하고 홈디렉토리는 /home/insa 디렉토리에
            생성되도록 한다.
          2. 총무부직원은 chongmoo라는 그룹에 속하도록 하고 홈디렉토리는 /home/chongmoo 디렉
            토리에 생성되도록 한다.
          3. 자재부직원은 jaje라는 그룹에 속하도록 하고 홈디렉토리는 /home/jaje 디렉토리에
            생성되도록 한다.


  => (방법)
    1. 그룹을 생성한다.
      groupadd insa
      groupadd chongmoo
      groupadd jaje

    2. 디렉토리를 생성한다.
      mkdir /home/insa
      mkdir /home/chongmoo
      mkdir /home/jaje

    3. 계정을 추가한다.
      (1) 인사부직원
         useradd posein -d /home/insa/posein -g insa
         passwd posein
         useradd xitem -d /home/insa/xitem -g insa
         passwd xitem
         useradd yooain -d /home/insa/yooain -g insa
         passwd yooain
      (2) 총무부직원
         useradd zzang -d /home/chongmoo/zzang -g chongmoo
         passwd zzang
         useradd kcy1977 -d /home/chongmoo/kcy1977 -g chongmoo
         passwd kcy1977
         useradd prehee -d /home/chongmoo/prehee -g chongmoo
         passwd prehee
      (3) 자재부직원
         useradd powerlim -d /home/jaje/powerlim -g jaje
         passwd powerlim
         useradd dreamlee -d /home/jaje/dreamlee -g jaje
         passwd dreamlee
         useradd minory -d /home/jaje/minory -g jaje
         passwd minory
     
      (설정예)
      [root@www root]# groupadd jaje
      [root@www root]# mkdir /home/jaje
      [root@www root]# useradd powerlim -d /home/jaje/powerlim -g jaje
      [root@www root]# passwd powerlim
      Changing password for user powerlim.
      New UNIX password:
      Retype new UNIX password:
      passwd: all authentication tokens updated successfully.

     (테스트)
      Red Hat Linux release 8.0 (Psyche)
      Kernel 2.4.18-14 on an i686
      login: powerlim
      Password:
      [powerlim@www powerlim]$ pwd
      /home/jaje/powerlim
      [powerlim@www powerlim]$ ls -ld ~
      drwx------    4 powerlim jaje         4096  4월  9 17:44 /home/jaje/powerlim

(복습)

1. 관리자가 9명의 사용자를 추가하려고 한다. 9명을 그룹별로 나누고, 홈디렉토리도 그룹별(terran, protoss, zerg)로 나누려고 한다. terran(marine, scv, medic) 3명, protoss(dragoon, zealot, probe) 3명, zerg(drone, hydra, lurker) 3명이다. 홈디렉토리는 각각 /home/terran, /home/protoss, /home/zerg 디렉토리밑에 생성되도록 해본다.

 
2. 특정 그룹에 속한 사용자들 찾아보도록 한다. 그룹에는 기본그룹(1차그룹)이 있고 추가로 속하는
   2차그룹이 있다. 리눅스에서는 모든 사용자는 기본그룹에 속해있어야 한다. 위의 복습예제를 했을
   경우 zerg라는 그룹에 속한 사용자들을 찾아보자.

  => (방법)
    1. 2차 그룹으로 등록된 사용자들 찾아보기
      1) 설명: 그룹과 관계된 파일이 /etc/group이다. 이 파일의 4번째필드에 2차그룹으로 등록된
              사용자들이 나열된다.
      2) 예
        [root@www root]# grep zerg /etc/group
        zerg:x:507:marine
          => marine이라는 사용자가 zerg라는 그룹에 속해있음을 알 수 있다. marine이라는 사용자
            의 기본그룹은 다른 그룹에 속해있다.
    2. 1차 그룹으로 등록된 사용자들 찾아보기
      1) 설명: /etc/group, /etc/passwd 파일과 grep명령을 이용하면 쉽게 찾을 수 있다.
      2) 방법
        ㄱ. 먼저 /etc/group 찾고자하는 그룹의 GID를 확인한다.
        ㄴ. grep 명령을 이용하여 /etc/passwd에서 추출해낸다.
      3) 사용예
        ㄱ. zerg의 GID 알아내기
           [root@www root]# grep zerg /etc/group
           zerg:x:507:marine
             => 507번임을 알 수 있다.
        ㄴ. grep 명령을 이용하여 /etc/passwd에서 찾아낸다.
           [root@www root]# grep 507 /etc/passwd
           medic:x:507:505::/home/terran/medic:/bin/bash            // 이 사용자는 아니다.
           drone:x:508:507::/home/zerg/drone:/bin/bash
           hydra:x:509:507::/home/zerg/hydra:/bin/bash
           lurker:x:510:507::/home/zerg/lurker:/bin/bash
           zergling:x:514:507::/home/zergling:/bin/bash
            => grep명령은 특정문자열을 가지고 찾아주는 것이라서 위와 같이 UID가 507인 사용자
              도 찾아주므로 주의해야 한다.

Trackback
Reply

출처 : 대전국제IT교육센터 정성재 강사

 

1. awk란?
awk란 일종의 프로그래밍 언어이지만 주로 패턴 검색과 조작시에 주로 사용된다. 이 툴의 어원은
프로그램을 개발한 Alfred Aho, Peter Weinberger, Brian Kernigham의 머리글자를 따서 명명되어
졌다.

2. awk 이용하기
(1) 설명: awk는 단독으로 이용되기 보다는 다른 프로그램들과 연계해서 이용되는 경우가 대부분이
          다.
(2) 연결해서 이용되는 경우
   1) grep명령으로 넘어온 데이터들의 값을 처리하는 경우
   2) sed로 정규화된 양식을 처리하는 경우

3. awk 사용법
(1) 사용법
   awk [options] 'pattern{action}' filename
(2) options
   -F 필드구분자 : 필드구분자를 지정할 때 사용한다. 기본 필드구분자는 공백이다.
   -f 파일명: 스크립트파일을 불러온다.
(3) pattern
   BEGIN: 입력화일을 읽어들이기 전에 제시되는 문자를 실행시킬 때 지정한다.
   END: awk가 모든 입력을 처리한 후, 옆에 제시되는 문자를 실행시키도록 할 때 지정한다.
   /문자열/: 문자열과 일치하는 라인을 찾아 action을 실행한다.
(4) action
   print : 제시된 표현식을 표준출력한다.

4. awk 사용예
(1) [posein@www posein]$ awk '/posein/ {print}' /etc/passwd
     posein:x:500:500::/home/posein:/bin/bash
(2) [posein@www posein]$ cat result.dat
     영어 85점
     수학 70점
     국어 95점
     컴퓨터 100점
     과학 80점
     [posein@www posein]$ awk '{print $1}' result.dat
     영어
     수학
     국어
     컴퓨터
     과학
      => result.dat파일의 첫번째 필드를 출력한다. 기본 필드의 구분은 공백이다.
(3) [posein@www posein]$ awk 'BEGIN{print"--과목--"} {print $1}' result.dat
     --과목--
     영어
     수학
     국어
     컴퓨터
     과학
      => BEGIN 이라는 패턴에 의해 먼저 '--과목--'이라는 문자열을 출력한 뒤에 첫번째 필드를
       출력한다.
(4) [posein@www posein]$ awk 'BEGIN{print"--점수--"} {print $2}' result.dat
     --점수--
     85점
     70점
     95점
     100점
     80점
(참고) sed를 이용한 내용편집
   1. 설명: sed는 스트림편집기로 텍스트파일의 내용을 필터링하여 출력해준다. -f 옵션은 미리
           지정한 파일안에 스크립트를 입력했을 경우 그 스크립트의 내용을 불러와서 처리해준다.
   2. 사용예
     [posein@www posein]$ cat sedscr
     s/점$//
      => 맨 끝의 점을 공백으로 바꾸라는 스크립트파일이다.
     [posein@www posein]$ sed -f sedscr result.dat
     영어 85
     수학 70
     국어 95
     컴퓨터 100
     과학 80
      => 맨 끝의 점이 제거되고 출력된다.
(5) [posein@www posein]$ sed -f sedscr result.dat | awk 'BEGIN{sum=0; print "나의 총점";} \
     {sum += $2} END {print "합계: " sum}'
     나의 총점
     합계: 430
      => 총점을 구하려고 하는데 두번째필드는 점이라는 문자가 들어있어서 연산이 곤란하다. sed를
        이용하여 '점'이라는 문자를 제거해야 연산이 가능하다. BEGIN과 END는 각각 처음과 끝에
        처리하는 패턴을 뜻한다.
(참고) 총점 및 평균 구하는 스크립트파일로 만들기
   [posein@www posein]$ cat sum.awk
   #!/bin/awk
   #
   # This Program is SUM & AVG of result.dat
   #
   # BEGIN: 프로그램 시작 처리
   BEGIN {
      sum=0;
      print "나의 총점 및 평균"
   }
   #ROUTINE: 프로그램 본문
   {
     sum += $2;
   }
   #END: 프로그램 마무리 처리
   END {
     print "합계: " sum;
       avg = sum/5;
     print "평균: " avg;
   }
(6) [posein@www posein]$ sed -f sedscr result.dat | awk -f sum.awk
     나의 총점 및 평균
     합계: 430
     평균: 86
       => -f는 미리 파일로 작성된 스크립트를 불러오는 옵션이다.
(7) [root@www bin]# awk -F: '{print $1}' /etc/passwd
       => /etc/passwd의 필드를 ':'으로 구분하여 첫번째 필드의 값을 출력한다.

(참고) 리눅스에서 지원하는 Language 소개
1. sed : 스트림편집기(stream editor)로 텍스트 파일의 내용을 필터링하여 출력해준다. 보통 다른
         프로그램의 출력을 받아 필터링하여 처리할 때 쓴다.
2. awk : 텍스트파일의 패턴 검색과 조작시에 주로 사용되는 프로그래밍 언어이다.
3. gcc : c/c++ 컴파일러이다.
4. Perl : 텍스트파일에서 특정한 정보를 추출하고 출력하게 해주는 프로그래밍 언어이다.
5. Python : 역시 Perl과 유사한텍스트파일에 기반을 두고 정보를 추출하고 출력해주는 프로그래밍
           언어이다.
6. Java : 인터넷기반 어플리케이션 언어이다.
7. Tcl : 'Toll Command Language'의 약자로 Tk라는 툴에 의해 주로 사용되어지는 스크립트 언어
        이다.
8. Tk : Tcl이라는 언어와 함께 X 윈도우 시스템관련 개발도구이다.
9  Expect : telnet, ftp, ssh등 상호 연결과 관련된 응용프로그램에 개발한 적합한 툴로 Tcl을
            확장하여 개발된 도구이다.
10. GTK+ : 'The Gimp Took Kit'의 약자로 Gnome 기반 X 윈도우 응용프로그램 개발도구이다.
11. Qt : KDE 기반 X 윈도우 응용프로그램 개발도구이다.
12. php : Html문서와 같이 사용되는 스크립트 언어이다.

Trackback
Reply

출처 : 대전국제IT교육센터 정성재 강사

 

1. sort
(1) 설명 : 파일의 내용을 정렬한다. 아무옵션이 없으면 공백,숫자,대문자,소문자순이다. 참고로
           여기서 숫자는 실제숫자의 대소가 아닌 숫자형태의 문자로 취급한다.
(2) 사용법
   sort [option] 파일이름
(3) option
   -b       : 선행하는 공백문자를 무시한다. (공백라인은 제외)
   -f       : 대,소문자를 무시한다.
   -r       : 정렬 순서를 반대로 하여 내림차순으로 정렬한다. (소문자,대문자,숫자,공백)
   -o 파일명 : 정렬한 결과를 파일명으로 저장한다.
   -c : 파일이 정렬되었는지를 검사한다. 정렬되었으면 아무런 출력도 하지 않고 정렬되지 않았다면
       정렬이 되지 않았다는 메시지를 출력한다.
   -n : 숫자를 같은 문자가 아닌 정말로 숫자로 취급해서 수의 크기대로 정렬한다.
   -u : unique의 약자로 중복되는 라인은 출력하지 않는다.
   +pos    : 1+pos번째 필드를 기준으로 정렬한다. 즉 필드의 시작을 0부터한다. 만약 +m.n형태를
            취하면 1+m번재 필드의 1+n번째 문자를 기준으로 정렬한다.
   +pos1 -pos2 : pos1에서 키를 시작하고 pos2전에 끝낸다. 필드번호와 문자 오프셋은 0으로 시작한
                다. (-k은 1부터 시작한다.)
   -t separator : 각 필드를 구분하는 키의 위치를 구분자로(separator)로 규정한다.
   -k n[,m] : 정렬한 키의 위치를 n번째 필드로 한다.(m값이 있을경우 n에서 시작해서 m에서 끝냄)
             (이 키의 값은 1부터 시작한다. +붙는 것과 다르다.)
(4) 사용예
  (가정) sort.txt파일의 내용이 다음과 같다고 한다.
       abc
        a
       ABC
       1abc
  1) [posein@neuro posein]$ sort sort.txt
      a
     1abc
     ABC
     abc
  2) [posein@neuro posein]$ sort -r -o sortrev.txt sort.txt
     [posein@neuro posein]$ cat sortrev.txt
     abc
     ABC
     1abc
      a
  3) [posein@neuro posein]$ sort -t: -n -k3 /etc/passwd
      => 각 필드를 구분하는 구분자는 ':'를 기준으로 하면 숫자순으로 정렬하고 필드값은 3번째로
        한다.
  4) [posein@neuro posein]$ sort -t: -k2,2n -k5.3,5.4 /etc/passwd
      => 필드의 구분은 :로 하고, 두번째필드로 숫자정렬한다. 정렬한 값이 같은 경우에는 다섯번
        째필드의 세번째와 네번째문자를 비교하여 정렬한다.
(가정2) pos.txt의 내용이 다음과 같다고 한다.
    [posein@neuro posein]$ cat pos.txt
     5 6 2 4 9
     3 2 8 4 3
     1 3 7 3 1
     2 3 4 5 6
     6 1 3 2 2
  1) [posein@neuro posein]$ sort +1 pos.txt
     6 1 3 2 2
     3 2 8 4 3
     2 3 4 5 6
     1 3 7 3 1
     5 6 2 4 9
      => + 옵션은 첫번째필드를 0부터 시작한다.
  2) [posein@neuro posein]$ sort -k 4 pos.txt => 정렬한 키의 기준을 4번째 필드로 한다.
     6 1 3 2 2
     1 3 7 3 1
     3 2 8 4 3
     5 6 2 4 9
     2 3 4 5 6

2. sed
(1) 설명 : 스트림편집기(stream editor)로 쉘 스크립트나 다른 명령의 출력을 여과하는 파이프라인
           을 사용한다. 즉 파일의 내용을 변경없이 화면상 출력만 필터링한다. sed는 ed명령과는
           다르게 입력라인을 하나씩 읽고, 수정하고 출력하기 때문에 버퍼를 사용하지 않는다.
           버퍼를 사용하지 않으면 파일 크기에 제한없이 작업을 할 수 있어 sed는 큰 파일을
           처리할 때 주로 사용한다.
(2) 사용법
   1) sed 'command\
      >문자열' 텍스트파일명
        => 텍스트를 변경하거나 삽입할 경우에는 여러줄을 사용한다. command는 꼭 ' '로 묶는다.
   2) sed [option] 'command' 텍스트파일명
     => 삭제하는 경우등은 한줄에 명령을 내려 수행할 수 있다. 문자열이 붙지 않는 command에
       대해서는 작은따옴표도 생략할 수 있다.
(3) option
   -n : 라인의 지정할 때 쓰인다.
   -f 파일명: 특정한 스크립트가 들어있는 파일로 부터 읽어들여 처리한다.
(4) command
   'n'a\ text : n은 정수값을 넣을 수 있으며, 지정한 줄 밑에 문자열을 추가하여 출력한다. n값을
               설정을 하지 않으면 매 줄마다 밑으로 지정한 text를 덧붙여 화면에 출력한다.
   'n'd       : n은 정수값을 넣을 수 있으며, 지정한 줄을 삭제하여 화면에 출력한다. n값을 설정
               하지 않으면 텍스트파일의 내용을 아무것도 출력하지 않는다. 또한 n값을 '1,4d'방법
               으로 범위를 지정할 수 있다.
   'n'i\ text : 지정한 줄 앞에 문자열을 삽입하여 출력한다. 역시 n값을 설정하지 않으며 매
               줄앞에 문자열을 삽입하여 출력한다.
   p : 선택한 라인을 한번 더 출력한다. '/문자열/p'하면 선택한 문자열이 있는 라인을 한번 더
      출력한다. 그냥 p command만 사용하면 모든 라인을 두번씩 출력한다.
   q : 명시된 라인에 도달할 때 종료한다. 아무값도 설정하지 않으면 1줄만 출력한다.
   r 파일이름 : 파일을 읽어서 출력한다.
   s/string1/string2/ : 각라인의 첫번째 string1만 string2로 바꾼다.
   s/string1/string2/g : 모든 라인의 string1을 string2로 바꿔 출력한다.
(참고1) 현재 리눅스에서는 's\string1\string2\g' 와 's/string1/string2/g' 다 된다.
(4) 사용예
   (가정) test.txt의 내용이 다음과 같다고 가정한다.
    I study linux
    I study windows
    PHP & MySQL
   1) [posein@neuro posein]$ sed 'a\
      > I am King' test.txt
      I study linux
      I am King
      I study windows
      I am King
      PHP & MySQL
      I am King
       => test.txt파일에서 각 행다음에 'I am King'이라는 문자열을 붙여서 출력한다.
   2) [posein@neuro posein]$ sed '2a\
      > I am King' test.txt
      I study linux
      I study windows
      I am King
      PHP & MySQL
       => test.txt파일에서 2행다음에 즉 3행에 'I am King'이라는 문자열을 붙여서 출력한다.
   3) [posein@neuro posein]$ sed 'd' test.txt => 아무 내용도 출력하지 않는다.
   4) [posein@neuro posein]$ sed '2d' test.txt
      I study linux
      PHP & MySQL
       => 2번째 줄을 삭제하고 출력한다.
   5) [posein@neuro posein]$ sed '1,2d' test.txt
      PHP & MySQL
   6) [posein@neuro posein]$ sed 'i\
      > I am LinuxMania' test.txt
      I am LinuxMania
      I study linux
      I am LinuxMania
      I study windows
      I am LinuxMania
      PHP & MySQL
   7) [posein@neuro posein]$ sed 's/study/learning/' test.txt
      I learning linux
      I learning windows
      PHP & MySQL
   8) [posein@neuro posein]$ sed p test.txt => 모든 라인을 2번씩 출력한다.
      I study linux
      I study linux
      I study windows
      I study windows
      PHP & MySQL
      PHP & MySQL
   9) [posein@neuro posein]$ sed '2p' test.txt => 두번째 라인만 2번 출력한다.
      I study linux
      I study windows
      I study windows
      PHP & MySQL
   10)[posein@neuro posein]$ sed '/linux/p' test.txt
       => 'linux'라는 문자열을 찾아 2번 출력한다.
      I study linux
      I study linux
      I study windows
      PHP & MySQL
   11)[posein@neuro posein]$ sed q test.txt
      I study linux
   12)[posein@neuro posein]$ sed '2q' test.txt
      I study linux
      I study windows
(가정3) 여기서 test1.txt의 내용은 다음과 같다.
       I learning linux
       I learning windows
       PHP & MySQL
   13)[posein@neuro posein]$ sed r test.txt test1.txt
      I study linux
      I study windows
      PHP & MySQL
      I learning linux
      I learning windows
      PHP & MySQL
       => 먼저 test.txt라는 파일을 읽어서 출력한 다음에 test1.txt의 내용을 출력한다.
   14)[posein@neuro posein]$ sed 'r test.txt' test1.txt
      I learning linux
      I study linux
      I study windows
      PHP & MySQL
      I learning windows
      I study linux
      I study windows
      PHP & MySQL
      PHP & MySQL
      I study linux
      I study windows
      PHP & MySQL
       => test1.txt파일을 기본으로 출력하는 데 각 라인 다음에 test.txt 파일의 내용을 읽어들여
         출력한다.
   15) [posein@www posein]$ cat sedscr
       s/learning/study/g
       [posein@www posein]$ sed -f sedscr test1.txt
       I study linux
       I study windows
       PHP & MySQL
   16) sed -n '21,30p' /etc/passwd > b.txt
      => /etc/passwd파일의 21번째부터 30번째라인까지를 b.txt로 저장한다.
        head -30 /etc/passwd | tail > b.txt 와 같은 결과이다.

3. expand
(1) 설명 : 일반적으로 설정되어 있는 탭(tab)의 크기(8)를 원하는 공백(space)의 수로 바꾸어
           화면에 출력한다. 즉 tab을 space로 전환시켜주는 명령이다. 기본적으로 원본파일을
           수정하지 않고 표준 출력으로 보여준다.
(2) 사용법
   expand -크기 파일명
   expand -t 크기 파일명
(3) 사용예
   1) [posein@neuro posein]$ cat tab.txt
      a       a       a       a       a
      012345678
        => 일반적인 탭의 간격은 8이다.
   2) [posein@neuro posein]$ expand -t 3 tab.txt
      a  a  a  a  a
      012345678
        => 탭의 간격을 3으로 설정하였다.
   3) [posein@www posein]$ expand -t 5 tab.txt > tab5.txt
      [posein@www posein]$ cat tab5.txt
      a    a    a    a    a
      012345678
         => 탭의 간격을 5으로 설정하였다.

4. unexpand
(1) 설명: 스페이스의 크기를 탭으로 전환시켜 준다.
(2) 사용법
   unexpand options 파일명
(3) options
   -a : 행의 시작 부분의 공백뿐만 아니라 모든 공백을 변환한다.
   -t 공백크기 : 지정한 공백크기를 하나의 Tab(8칸)으로 변환한다. (--tabs=공백크기)
(4) 사용예
   1) [posein@www posein]$ cat tab2.txt
      a     a     a     a     a
      01234567890
       => 현재 공백의 크기가 6이다.
      [posein@www posein]$ unexpand -a -t 6 tab2.txt
      a       a       a       a       a
      01234567890
       => 크기가 6인 모든 공백을 하나의 Tab(8칸)으로 변환한다.
   2) [posein@www posein]$ unexpand -a --tabs=6 tab2.txt > tab6.txt
      [posein@www posein]$ cat tab6.txt
      a       a       a       a       a
      01234567890
       => tab2.txt 문서에서 크기가 6인 모든 공백을 하나의 Tab(8칸)으로 변환한다.

5. cut
(1) 설명 : 데이터의 열(컬럼)을 추출할 때 사용한다. 이 때 추출할 데이터는 파일 안 각 라인의
           글자(character), 바이트(byte) 또는 필드(field)일 수 있다.
(2) 사용법
   cut option file_name
(3) option
   -c : 문자수로 따져서 추출한다.
   -f : 파일 내의 필드로 따져서 추출한다.
   -d : 필드 구분자를 사용한다. (기본값은 TAB 이다.)
(4) 사용예
   1) [posein@www posein]$ cut -c 1-10 /etc/passwd
      linuxone:x
      bluesky:x:
      eagle5:x:5
      fish:x:520
   2) [posein@www posein]$ cut -f 1,3 -d: /etc/passwd
      linuxone:517
      bluesky:518
      eagle5:519
      fish:520
       => /etc/passwd파일의 첫번째,세번째 필드의 값을 보여준다. 필드의 구분은 ':'로 한다.
   3) [posein@www posein]$ cut -f1 -d: /etc/passwd |sort -r |less
      xitem
      xfs
      wnn
      webalizer
      vcsa
      uucp
      sync
      sshd
       => /etc/passwd파일의 첫번째 필드(:기준)부분만 잘라 역으로 정렬한뒤 한페이지단위로
         보여준다.

6. fmt
(1) 설명 : 간단한 문서 포맷도구로 문단의 들여쓰기 중복되는 공백문자등을 처리할 수 있다.
(2) 사용법
   fmt option file_name
(3) option
   -u : 중복되는 공백 문자를 모두 하나로 취급한다.
   -t : 단락의 처음 두 라인의 들여쓰기를 원래대로 유지한다.
   -w : 최대 라인 폭을 설정한다.(디폴트 75컬럼) w를 생략하고 -뒤에 직접 입력해도 된다.
(4) 사용예
   (가정) test2.txt의 문서를 다음과 같다고 하자.
    I study a a linux
    I study windows
    PHP & MYSQL
   1) [posein@www posein]$ fmt -w 10 test2.txt
      I study a
      a linux
      I study
      windows
      PHP &
      MYSQL
   2) [posein@www posein]$ fmt -u test2.txt
      I study a a linux I study windows PHP & MYSQL

7. nl
(1) 설명 : 각 라인에 번호를 붙여 표준출력으로 보여준다.
(2) 사용법
   nl [option] file_name
(3) option
   -s'구분자' : 각 라인위 문자열과 변호를 사이에 구분자를 설정한다.
(4) 사용예
   1) [posein@www posein]$ nl test2.txt
         1  I study a a linux
         2  I study windows
         3  PHP & MYSQL
   2) [posein@www posein]$ nl -s'}' test2.txt
        1}I study a a linux
        2}I study windows
        3}PHP & MYSQL

8. od
(1) 설명 : octal dump의 약자로 파일을 8진수, 10진수, 16진수 또는 ASCII형태로 출력한다.
(2) 사용법
   od [option] file
(3) option
   -o : octal(8진수)로 출력한다. 기본값으로 설정되어 있다.
   -d : decimal(10진수)로 출력한다.
   -x : hexadecimal(16진수)로 출력한다.
   -a : named character
   -c : ASCII값으로 출력한다.
   -f : flationg point(부동소수점형태)로 출력한다.
(4) 사용예
   (가정) test.txt의 파일의 내용이 다음과 같다고 하자.
     worldcup
     linux
   1) [posein@www posein]$ od test.txt
      0000000 067567 066162 061544 070165 066012 067151 074165 000012
      0000017
       => 8진수 형태로 변환한다.
   2) [posein@www posein]$ od -a test.txt
      0000000   w   o   r   l   d   c   u   p  nl   l   i   n   u   x  nl
      0000017
       => named character 값으로 출력한다. 새로운라인을 'nl'로 표시한다.
   3) [posein@www posein]$ od -c test.txt
      0000000   w   o   r   l   d   c   u   p  \n   l   i   n   u   x  \n
      0000017
       => ASCII값으로 출력한다. 새로운라인을 '\n'으로 표시한다.

9. paste
(1) 설명 : 여러 파일의 해당 라인을 합친다. 각 파일의 해당 라인을 연속적으로 출력하고, 새로운
           라인앞에는 탭을 삽입한다.
(2) 사용법
   paste [option] file1 file2
(3) option
   -d 구분자 : 결합하는 라인의 구분자를 지정한다. 기본값은 탭문자이다.
   -s : 한 파일의 내용을 먼저 연속적으로 출력한 후 다음 파일을 덧붙여 출력한다.
(4) 사용예
   (가정) [posein@www posein]$ cat os.txt
          linux
          windows
          [posein@www posein]$ cat lang.txt
          php
          asp
   1) [posein@www posein]$ paste os.txt lang.txt
      linux   php
      windows asp
       => 기본값인 탭문자를 삽입하여 두 파일의 라인을 합친다.
   2) [posein@www posein]$ paste -d: os.txt lang.txt
      linux:php
      windows:asp
       => 구분자로 ':'를 삽입하여 두 파일의 라인을 합친다.
   3) [posein@www posein]$ paste -s os.txt
      linux   windows
       => os.txt파일의 라인을 하나로 합친다.
   4) [posein@www posein]$ paste -s os.txt lang.txt
      linux   windows
      php     asp
       => 먼저 os.txt라는 파일의 라인을 합친뒤에 화면에 출력하고 다음에 lang.txt파일의 라인을
         합쳐서 화면에 출력한다.

10. pr
(1) 설명 : 표준출력으로 파일을 재구성하거나 쓰기 위한 명령으로 문서 파일을 양식화하는 도구로
           사용된다.
(2) 사용법
   pr option file
(3) option
   +페이지 : 지정한 페이지부터 출력한다. 기본값은 1이다.
   -컬럼 : 출력할 열의 수를 정한다.
   -n : 파일에 라인번호를 붙여서 출력한다.
   -d : 라인 사이를 한 라인씩 띄워서 출력한다.
   -h : 각 페이지의 헤더를 명시한다.
   -l 라인 : 페이지 길이를 '라인'에 지정한 수로 설정한다. 기본값은 66이다.
   -m : 각 파일을 열(column)대로 합쳐서(merge) 출력한다. 최대 8개 파일을 합칠 수 있다.
   -w width : 라인의 폭을 width에 지정한 수로 설정한다. 기본값은 72이다.
(4) 사용예
   (가정) os2.txt
    linux
    windows
     php
     mysql
   1) [posein@www posein]$ pr -n os.txt


      2002-06-01 00:40                    os.txt                     Page    1


          1   linux
          2   windows
       => 페이지 단위로 출력됨을 알 수 있다.
   2) [posein@www posein]$ pr -d os.txt
       => 각 행 사이에 공백을 주어 출력됨을 알 수 있다.
   3) [posein@www posein]$ pr -n os.txt | lp
        => os.txt 파일의 각 라인에 번호를 붙여 프린터로 출력한다. 물론 이 경우에 프린터가 설치
          되어 있어야 한다.
   4) [posein@www posein]$ pr -3dh "pr test" os2.txt
      2002-06-01 01:01                    pr test                    Page    1


      linux                    php                     mysql

      windows

       => 기본 한 라인에 3열(즉, 한라인에 기존파일의 3라인을 처리)을 출력하고 파일의 헤더를
         'pr test'라고 지정한다.
   5) [posein@www posein]$ pr -l30 -w50 -n /etc/passwd
       => /etc/passwd 파일을 50컬럼 30라인을 한 페이지로 하여 각 라인에 번호를 붙여 출력한다.

11. split
(1) 설명 : 하나의 파일을 여러 개의 작은 파일로 분리하는 명령어로 옵션없이 실행하면, 기본값이
           1000라인 단위로 파일을 분리한다. 별도의 파일명을 지정하지 않으면 xaa, xab..등과
           같은 형태로 생성된다.
(2) 사용법
   spilt [option] 분리하고자_하는_파일명 [생성하고자하는_파일명]
(3) option
   -b 사이즈 : 파일을 주어진 바이트 크기로 분리한다.
   -c 사이즈 : 파일의 라인크기를 주어진 크기로 최대한 맞도록 분리한다.
   -l 라인 : 파일을 주어진 라인 수 단위로 분리한다.
   -넘버 : -l옵션을 사용한 것과 동일한 역할을 한다.
(4) 사용예
   1) [posein@www posein]$ split -l 30 /etc/passwd
        => /etc/passwd 파일을 한 파일에 30라인씩 잘라서 파일을 생성한다. 별도로 지정한 이름이
          없으므로 xaa, xab, xac ...등으로 생성된다.
   2) [posein@www posein]$ split -40 /etc/passwd pa
       => /etc/passwd파일을 한 파일에 40라인씩 잘라서 파일을 생성한다. pa라는 이름을 부여하였
         으므로 생성되는 파일은 paaa, paab..등으로 생성된다.

12. tac
(1) 설명 : 파일의 내용을 맨 아래줄부터 역순으로 출력하는 명령이다. 이름에서 보듯 cat명령의
           반대되는 개념이다.
(2) 사용법
   tac [option] 파일
(3) option
   -b : 분리자를 파일의 처음에 덧붙인다.(newline) 보통 공백라인이 삽입된다.
(4) 사용예
   [posein@www posein]$ tac os.txt
   windows
   linux
    => 기존의 파일의 내용을 역순으로 출력한다.

13. tr
(1) 설명 : 파일의 임의의 문자(열)를 원하는 문자로 바꾸는 명령이다. 프로그램 소스의 변수명이나
           데이터 타입을 바꿀 경우 유용하게 쓰인다. 이 명령은 꼭 < 를 이용하여 입력을 지정해야
           된다.
(2) 사용법
   tr [option] string1 string2 < 파일명
(3) option
   -d : 해당문자를 삭제한다.
   -s : 문자가 중복된 경우 하나만 남기고 모두 삭제한다.
(4) 사용예
   (가정) tr.txt 과 다음과 같다면
         I love linux
         I love windows
         I loove unix
   1) [posein@www posein]$ tr o i < tr.txt
      I live linux
      I live windiws
      I liive unix
       => tr.txt의 'o'를 'i'로 바꿔서 출력한다.
   2) [posein@www posein]$ tr -s 'o' < tr.txt
      I love linux
      I love windows
      I love unix
       => 'o'가 중복된 경우 'o'를 하나만 출력한다.
   3) [posein@www posein]$ tr '[a-z]' '[A-Z]'< tr.txt
      I LOVE LINUX
      I LOVE WINDOWS
      I LOOVE UNIX
       => 소문자를 전부 대문자로 바꿔 출력한다.
   4) [posein@www posein]$ tr '[a-z]' '[A-Z]' < tr.txt > tr2.txt
      [posein@www posein]$ cat tr2.txt
      I LOVE LINUX
      I LOVE WINDOWS
      I LOOVE UNIX
        => tr.txt를 입력받아 대문자로 전환한뒤에 tr2.txt파일에 저장한다.
   5) [posein@www posein]$ tr -d 'o' < tr.txt
      I lve linux
      I lve windws
      I lve unix

(참고) tr명령을 이용하여 대소문자전환하는법
  1. tr abcdefghijklmnopqstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
  2. tr '[a-z]' '[A-Z]'
  3. tr '[:lower:]' '[:upper:]'

14. join
(1) 설명: paste 명령과 비슷한 명령으로 두 개의 정렬된 파일을 하나로 수평 병합해주는 명령이다.
          이 명령은 정확히 두 파일에 대해서 동작하지만 두 파일사이에 공통으로 표시된 필드(보통
          숫자 라벨)가 있는 줄에 대해서만 합쳐서 결과를 표준출력으로 출력해준다. 정확히 동작
          하려면 두 파일 모두 표시 필드가 있어야 한다.
(2) 사용법
   join [options] file1 file2
(3) 사용예
   [posein@www posein]$ cat a.txt
   1 designer
   2 programmer
   3 engineer
   [posein@www posein]$ cat b.txt
   1 Miss Kim
   2 Mr.Lee
   3 Mr.Jung
   [posein@www posein]$ join a.txt b.txt
   1 designer Miss Kim
   2 programmer Mr.Lee
   3 engineer Mr.Jung

15. diff
(1) 설명: 두 개의 파일을 비교한다. 이 명령은 두 개의 파일이 어떻게 다른가 표시해준다. 그래서
          어떻게 수정되어야 두 파일이 같아지는 지를 보여준다. 결과는 기준이 되는 파일이 두번째
          파일이다. 그래서 모든 정보는 '첫번째 파일이 어떻게 수정되어야 두번째 파일과 같아지느
          냐'하는 식이다.
(2) 사용법
   diff [option] 파일1 파일2
(3) option
   -i : 대소문자를 구분하지 않는다.
   -b : 하나 이상의 공백문자는 모두 같은 것으로 취급해서 비교한다.
(4) 결과
    a : append의 약자로 파일2에서 파일1으로 첨가되어야 할 것이 이 값으로 표시된다.
    d : delete의 약자로 파일1에서 제거되어야 하는 내용은 이 값으로 표시된다.
    c : change의 약자로 파일의 내용이 바뀌어야 하는 내용이 이 값으로 표시된다.
(5) 사용예
   1) [posein@www posein]$ cat aa.txt
      I love linux.
      I love windows.
      [posein@www posein]$ cat bb.txt
      I love linux.
      I love windows.
      I love unix.
      [posein@www posein]$ diff aa.txt bb.txt
      2a3
      > I love unix.
        => (설명) 파일2에서 3번째줄을 파일1에 추가하면 같아진다.
   2) [posein@www posein]$ diff bb.txt aa.txt
      3d2
      < I love unix.
       => 파일1에서 3번째줄을 제거해야 파일2와 같아진다.
   3) [posein@www posein]$ cat aa.txt
      I love linux.
      I love windows.
      [posein@www posein]$ cat bb.txt
      I love linux.
      I love window.
      [posein@www posein]$ diff aa.txt bb.txt
      2c2
      < I love windows.
      ---
      > I love window.
        => 파일1의 내용이 바뀌어야 파일2와 같아진다.

16. uniq
(1) 설명: 중복되어 있는 라인을 제거하고 한라인으로 출력한다. 보통 sort명령과 함께 쓰이면서
          중복되어 있는 것을 제거하고 출력할 때 많이 쓰인다. (참고로 sort명령에 -u 옵션과 같
          다.)
(2) 사용법
   uniq [options] 파일1 [파일2]
    => 파일1의 중복되어 있는 줄을 제거한다. 파일2를 지정하면 제거한 내용을 화면에 출력하지
     않고 '파일2'라는 이름으로 저장한다.
(3) option
   -u : 실제적으로 중복되는 줄을 제거하고 출력한다.
   -c : 줄의 수를 계산하여 보여준다.
   -d : 라인이 반복되었을 때 그 반복된 라인 한 줄을 출력해준다.
(4) 사용예
   1) [posein@www posein]$ cat list.txt
      linux
      windows
      linux
      linux
      [posein@www posein]$ uniq list.txt
      linux
      windows
      linux
       => 중복되는 줄인 linux라는 것을 한줄 제거하고 출력한다.
   2) [posein@www posein]$ uniq list.txt list2.txt
      [posein@www posein]$ cat list2.txt
      linux
      windows
      linux
       => list.txt의 중복되는 줄을 제거하고 그 값을 list2.txt라는 파일에 저장한다.
   3) [posein@www posein]$ uniq -u list.txt
      linux
      windows
       => linux라는 줄이 3줄이었는데 실제적으로 제거하고 1줄만 출력한다.
   4) [posein@www posein]$ uniq -c list.txt
            1 linux
            1 windows
            2 linux
   5) [posein@www posein]$ uniq -d list.txt
      linux
       => 'linux'라는 문자열만 반복되었으므로 linux라는 값만 나온다.
   6) [posein@www posein]$ cut -d: -f7 /etc/passwd | sort | uniq

      /bin/bash
      /bin/false
      /bin/sync
      /dev/null
      /sbin/halt
      /sbin/nologin
      /sbin/shutdown

17. aspell
(1) 설명: 텍스트파일의 철자(Spelling)을 검사해주는 명령어이다.
(2) 사용법
   aspell option 텍스트파일
(3) option
   -c : 텍스트파일의 철자를 검사하는 옵션이다. -c 대신에 check 라고 써도 된다.
   -l : 잘못된 철자를 표준입력으로 부터 등록한다.
(4) 사용예
   [가정] a.txt 라는 파일의 내용이 다음과 같다고 하자.
     [posein@www posein]$ cat a.txt
     I lovi linux
     I love windows

   1) [posein@www posein]$ aspell -c a.txt
      I lovi linux
      I love windows

      1)                                                6) loci
      2) love                                           7) Levi
      3) lvi                                            8) Love
      4) lo vi                                          9) Loki
      5) lo-vi                                          0) Loni
      i) Ignore                                         I) Ignore all
      r) Replace                                        R) Replace all
      a) Add                                            x) Exit
       => 원하는 키를 선택하면 된다. 만약 love라는 단어로 변경하려면 [2]키를 누른다.
   2) [posein@www posein]$ aspell -l < new.txt
      CarWash
      FirstOne
       => new.txt로부터 단어를 읽어들여 잘못된 철자로 등록시킨다.

18. look
(1) 설명: 특정한 문자열을 지정하면 해당 문자열로 시작하는 단어를 /usr/share/dict/words에서
          찾아준다.
(2) 사용법
   look 문자열
(3) 사용예
   [posein@www posein]$ look copy
   copy
   copying
   copyright
   copyrightable
   copyrighted
   copyrights
   copywriter

Trackback
Reply

출처 : 대전국제IT교육센터 정성재 강사

 

1. cat(concatenate)
(1) 설명 : 표준입력으로 받는 값을 표준 출력으로 보낸다. 기본적으로 파일의 내용을 출력을 한다.
           여러개의 파일이름을 적어주면 차례로 출력시키므로 파이프나 리다이렉션을 통해 파일을
           하나로 합치는 기능도 수행한다. 도스의 'type'명령과 유사하다.
(2) 사용법
   cat [option] filename(s)
(3) option
   -b : 줄번호를 붙여 준다.(공백만 있는 줄은 제외)
   -n : 줄번호를 붙여 준다. (공백만 있는 줄도 포함)
   -E : 각 라인의 맨 끝에 $표시를 붙여 출력한다.
   -T : 탭문자를 ^I로 표시하여 출력한다.
   -v : 인쇄가 불가능한 문자를 식별할 수 있도록 출력한다.
   -A : 모든 문자를 출력해준다. 일반적으로 출력되지 않는 특수문자도 출력해준다.
   -s : 인접한 여러 공백줄을 하나의 공백줄로 출력한다.
(4) 사용예
   1) cat
       => 표준입력(키보드로부터의 입력)을 표준출력(모니터)로 출력한다.
   2) cat > a.txt
       => 키보드로부터 입력받은 내용을 a.txt라는 파일에 저장한다. 입력한 후에 [CTRL]+[d]를
         입력하면 입력한 내용이 a.txt로 저장된다.
   3) cat < a.txt
       => a.txt 파일의 내용을 화면에 출력해준다. '<'를 생략하고 cat a.txt 한 것과 같다.
   4) cat < a.txt > b.txt
       => a.txt의 내용을 b.txt라는 파일에 출력한다. 이 경우에는 cp a.txt b.txt한 것과 같다.
   5) cat a.txt b.txt
       => a.txt내용과 b.txt내용을 화면에 출력한다.
   6) cat a.txt b.txt > c.txt
       => 'a.txt', 'b.txt' 두 파일 내용을 합해서 c.txt라는 파일로 저장한다.
   7) [posein@www posein]$ cat -b a.txt
      1  I love linux
      2  I love windows

      3  I love unix
       => 공백에는 줄번호를 붙이지 않는다.
   8) [posein@www posein]$ cat -n a.txt
      1  I love linux
      2  I love windows
      3
      4  I love unix
       => 공백만 있는 줄에도 줄번호를 붙여서 보여준다.
(5) 참고: redirection
   1) 설명: 입출력의 방향을 바꾸는 역할을 한다.
   2) 기호
    >  : 출력의 방향을 파일로 바꾼다.
    >> : 특수출력(기존의 파일에 내용 추가)
    <  : 입력의 방향을 파일로 바꾼다.
    << : 특수입력
   3) 사용예
    ㄱ. cat > a.txt
         => 표준입력(키보드)로 입력받아서 표준출력(화면)으로 출력하지 않고 a.txt라는 파일에
           출력(저장)한다.
    ㄴ. cat >> a.txt
         => 기존의 a.txt라는 파일이 존재하면 그 파일에 표준입력(키보드)으로 부터 받은 내용을
           추가한다. 만약 기존에 a.txt라는 파일이 존재하지 않으면 '>'의 역할과 같다.
    ㄷ. cat < a.txt
         => a.txt라는 파일로부터 입력받아 표준출력(화면)에 보여준다.
    ㄹ. [posein@www posein]$ cat << end
        > I love linux
        > I love windows
        > end
        I love linux
        I love windows
          => 이 경우에는 << 뒤에 오는 end라는 문자열을 입력을 사용하는데 그 문자열이 입력될
            때까지 기다렸다가 해당문자열이 입력되면 한번에 표준출력으로 보여준다.

2. head
(1) 설명 : 파일의 첫 부분을 보여주는 명령. 텍스트 파일의 앞에서부터 주어진 수만큼의 행을
           보여준다. 기본값은 10줄이다.
(2) 사용법
   head [-count] [option] filename(s)
    => 파일의 처음 줄부터 count로 주어진 만큼의 줄을 보여준다. count가 지정되지 않으면,
      디폴트로 10을 사용한다. 여러 파일을 나열하여 첫부분만 볼 수 있다.
(3) option
   -n 행수 : 파일의 앞에서부터 지정된 수만큼 출력한다. n을 생략하고 그냥 입력해도 된다.
            '--lines 행수' 옵션과 같다.
   -c n : n바이트까지 출력한다. n뒤에 k나 m을 쓸 경우 KB나 MB를 나타낸다.
   -q : 여러 개의 파일이 처리될 때 파일 이름 헤더를 출력하지 않는다.
(4) 사용예
   1) head -3 *.c
       => 현재 디렉토리안의 '.c'로 끝나는 모든 파일의 처음 3줄씩을 보여준다.
   2) head -q *.txt
       => 현재 디렉토리안의 *.txt로 끝나는 모든 파일의 처음 10줄씩 보여주는데 파일의 이름은
         출력하지 않는다.

3. tail
(1) 설명 : head와 반대로 파일의 끝부분을 보여준다. 파일의 가장 끝줄부터 지정된 갯수 만큼의
           줄을 보여준다.
(2) 사용법
   tail [-count] [option] filename(s)
    => 파일의 끝줄부터 count만큼의 줄을 보여준다. count가 지정되지 않으면 디폴트값인 10을
      사용한다.
(3) option
   -n m : 마지막에서 m행만 출력한다. '--line 행수'와 같다.
   -c : 마지막 n바이트만 출력한다. n 뒤에 k나 m을 쓰면 KB나 MB를 의미한다.
   -f : 특정파일의 끝부분에 새로운 행이 추가될 경우 실시간으로 출력한다. 로그파일을 볼 때 유용
       하게 쓰인다. (--follow)
   +n : 파일의 처음 n라인부터 끝까지 출력한다.
   -q : 여러개의 파일이 처리될 때 파일 이름 헤더를 출력하지 않는다.
(4) 사용예
   1) tail aaa.txt
      => aaa.txt라는 파일의 마지막 10행을 보여준다.
   2) tail -f /var/log/messages
      => 동적으로 파일의 변경된 값을 보여준다.
(5) 응용예 : head와 조합하여 파일의 중간을 자를 수 있다.
    head -30 aaa.txt | tail > /tmp/ddd.txt
    => aaa.txt 라는 파일의 21번째 줄에서 30번째 줄까지의 내용을 /tmp/ddd.txt라는 파일로
      저장한다.

4. more
(1) 설명 : 출력을 페이지 단위로 나누어서 보여준다. 도스의 'more'명령과 유사하다.
(2) 사용법
   more [-line] filename(s)
    => lines는 한 화면에 표시할 줄의 수이다.
(3) more실행상태에서 사용하는 명령
   h : more에 관한 도움말의 볼 수 있다
   SPACE : 다음 페이지를 보여준다.
   RETURN : 한 줄씩 보여준다.
   d, (CTRL+D) : 반 페이지씩 보여준다.
   q,Q : 종료한다.
   b, ^B : 이전 페이지를 보여준다.
   f : 다음 페이지를 보여준다.
   / (검색어) : 검색어에 해당하는 단어를 검색한다.
   = : 현재 line number를 보여준다.
   ^L : 화면을 다시 리프레쉬 시킴
   :f : 현재 파일의 이름과 현재 line number를 보여준다.
   ! : 중간에 다른 명령을 입력할 수 있는 상태가 된다.
(4) 사용예 : 보통 다른 명령어와 '|'를 이용 조합하여 많이 사용된다.
   1) more /etc/inittab
      => /etc/inittab 파일의 내용을 페이지단위로 나누어서 보여준다.
   2) more -20 /etc/inittab
      => /etc/inittab파일의 내용을 20줄을 한 페이지로 하여 나누어서 보여준다
   3) cat readme |more
      => readme파일을 한 화면단위로 출력하라.
   4) ls /etc |more
      => /etc디렉토리의 파일의 내용을 한 화면단위로 출력하라.

5. less
(1) 설명: more의 기능과 유사하고 리눅스에서만 사용가능하다. more보다 더 나은 기능들이 많다.
          대표적인 기능으로 문서의 앞으로도 이동이 가능하다. man 페이지에서 호출하는 명령이
          less명령이다.
(2) 사용법
   less [option] 파일명
(3) option
   -? : less실행시 사용하는 명령들에 대한 도움말을 화면에 출력한다.
   -c : 화면에 출력하기 전에 화면을 정리하여 맨 처음에 위치되도록 해준다.
   -s : 인접한 여러 공백줄을 하나의 공백줄로 처리하여 화면에 보여준다.
(4) less실행상태에서 사용하는 명령
   [space] : 다음 페이지로 이동한다. f 와 같다.
   f : 다음 페이지로 이동한다. [space]와 같다.
   b : 이전 페이지로 이동한다.
   [enter] : 다음라인으로 이동한다. e 와 같다.
   e : 다음라인으로 이동한다. [enter]와 같다.
   y : 이전라인으로 이동한다.
   /text : 아래방향으로 'text'라는 문자열을 찾아 맨 첫라인에 위치시킨다.
   ?text : 위방향으로 'text'라는 문자열을 찾아 맨 첫라인에 위치시킨다.
   n : 다음 'text'라는 문자열을 찾아 맨 첫라인에 위치시킨다.
   N : 윗방향으로 'text'라는 문자열을 찾아 맨 첫라인에 위치시킨다.
   q : less 명령을 끝낸다.

6. grep(Global Regular Expression Print)
(1) 설명 : 파일안에서 특정 패턴을 갖는 줄을 찾아서 출력해주는 명령이다.
(2) 사용법
   grep [option] pattern file(s)
    => pattern에 찾고자 하는 문자열을 입력하면 지정해준 파일에서 그 문자열을 찾는다.
(3) option
   -c : 파일안에 pattern과 일치하는 줄이 몇 개인지만을 출력한다.
   -C : 패턴이 일치하는 문장의 아래 위 두 라인까지 포함하여 출력한다.
   -h : 여러 개의 파일을 검색시 출력하는 파일의 이름이 붙는 것을 방지한다.
   -i : 탐색할 때 대,소문자를 구분하지 않는다.
   -y : -i와 똑같다.
   -n : 일치하는 줄이 파일의 몇번째 줄인지 내용과 같이 출력한다.
   -v : pattern과 일치하지 않는 줄만을 출력한다.
   -w : 패턴과 한 단어로 일치해야 출력한다.
   -x : 패턴과 전체 라인이 일치해야 출력한다.
   -l : 주어진 패턴과 일치하는 패턴이 있는 파일의 이름만 출력한다.
   -r : 하위디렉토리까지 주어진 패턴을 찾는다.
(4) 사용예
   1) grep linux * => 현재 디렉토리의 모든 파일중에서 'linux'라는 문자열이 들어가 있는 줄을
                     찾는다.
   2) grep -c linux * => 현재 디렉토리의 모든 파일들이 'linux'라는 문자열이 들어있는 줄을
                        몇개씩 가지고 있는지를 보여준다.
   3) grep -h linux * => 현재 디렉토리에 있는 모든 파일중에서 'linux'라는 문자열이 들어있는
                        줄을 출력하는데 파일명은 출력하지 않는다.
   4) grep "[0-9]" readme => readme파일에서 숫자로 시작하는 모든 라인을 보여준다.
(5) 참고: grep 명령과 정규표현식(Regular Expression)
   1) 정규표현식: 정규표현식이란 좀 더 쉽고 다양하고 정교하게 찾을 수 있도록 지원해주는 특정한
                 패턴을 말한다.
   2) 지원되는 문자
     .  : 매칭되는 한 문자로 무조건 존재해야 한다.
     .* : 한문자에 추가로 0(zero)이거나 그 이상의 문자
     a* : 아무것도 없거나 a라는 문자열이 하나이거나 반복되어진 문자열을 뜻한다. 즉, a, aa, aaa
         등
     a? : a 한문자이거나 a이외의 문자가 전혀 없는 경우.
     a+ : a 한문자이거나 a가 반복되는 경우
     a\{n\} : a가 반복되는 경우
     [문자list]: 문자 list중의 한문자
     [abc]: a , b 또는 c
     [0-9]: 0, 1, 2, 3, 4, 5, 6, 7, 8, 또는 9
     [^1-3]: 1, 2, 3을 제외한 모든 문자
     '^pattern': pattern이 줄의 처음에 있을 때에만 일치
     'pattern$': pattern이 줄의 끝에 있을 때에만 일치
     '\<pattern': 단어가 pattern으로 시작할 때에만 일치
     'pattern\>': 단어가 pattern으로 끝날 때에만 일치
   3). 사용예
    ㄱ. [posein@www posein]$ cat a1.txt
        designer
        programmer
        engineer
        abc
        [posein@www posein]$ grep [^abc] a1.txt
        designer
        programmer
        engineer
         => abc라는 문자열을 제외한 문자들이 있는 라인을 출력하는 명령이다. 그러나 a1.txt의
          4번째줄은 전부 abc로 되어 있으므로 출력되지 않는다.
    ㄴ. [posein@www posein]$ cat a.txt
        I love linux
        I love windows
        I love lanux
        [posein@www posein]$ grep l.n a.txt
        I love linux
        I love lanux
         => '.'이 한문자라는 뜻이다.
    4) 기타 예제 총정리
      c.t         : cat, apricot, cute, locate
      c[ai]t      : catalyst, citation, incapacitate, Piscataway
      s[^aeiou]ri : airstrip, describe, offspring, Sanskrit
      at*r        : atrocious, award, attribute, barrel
      sa.*re      : massacre, sacred, sapphire, satire
      s[ao]*r     : classroom, censor, emissary, soar
      sa.*re$     : massacre, satire
      ^sa.*re     : sacred, satire

7. wc(word count)
(1) 설명 : 텍스트 파일의 행수, 단어수, 문자수를 알려준다. 많이 쓰이는 명령어는 아니지만
           프로그래머에게 유용한 명령이다.
(2) 사용법
   wc [option] file(s)
(3) option
   -l : 행 수를 센다. (--lines 라고 해도 된다.)
   -w : 단어 수를 센다.
   -c : 문자 수를 센다.
   -L : 가장 긴 라인의 길이를 출력한다.
(4) 사용예
   1) wc readme => readme파일의 행, 단어, 문자의 수를 출력한다.
   2) who | wc -l => 현재 접속한 사람의 수를 표시한다.
   3) [posein@www posein]$ cat a.txt
      I love linux
      I love windows
      [posein@www posein]$ wc a.txt
      2       6      28 a.txt
       => a.txt라는 파일의 행수는 2, 단어수는 6, 문자수는 28이다. 참고로 실제 문자수를 세어보
         면 공백문자를 포함하여 26자이다. 그러나, 한 라인후에 [Enter]키를 입력하면 눈에 보이지
         않는 개행문자가 삽입되면 wc로 카운트해보면 한라인당 한문자씩가 추가된다.

Trackback
Reply

출처 : 대전국제IT교육센터 정성재 강사

 

1. cp
(1) 설명: copy의 약어로 파일을 다른 이름으로 복사하거나 다른 디렉토리로 복사하는 명령. 도스의
          copy와 비슷하나 더 많은 기능을 한다.
(2) 사용법
   1) cp [option] file1 file2 => : file1을 file2로 복사한다.
   2) cp [option] files directory => file을 해당 directory에 복사한다.
(3) option
   -r : 서브디렉토리까지 복사한다. 디렉토리를 복사하고자 할 때 필요한 옵션이다.(-R)과 같다.
   -i : interactive(상호영향)의 약어, 복사할 대상 파일이 이미 존재할 때 덮어 쓸 것인지를 물어
       본다.
   -f : 같은 파일의 이름을 가지는 파일이 있는 경우 이 파일을 지운 후 복사한다. 즉 강제로 덮어
       쓴다.
   -b : 덮어쓰거나 지울 때 백업본의 파일을 만든다. 이 옵션을 사용하면 뒤에 ~가 붙는 파일이 생
       성된다.
   -s : 복사하는 대신에 심볼링링크를 만든다.
   -p : 소유권, 그룹, 허가권, 타임 스탬프 등 모든 정보를 복사한다. 이 옵션이 없을 경우 현재
       시간과 기본 허가권, 소유권, 그룹 정보로 파일을 복사한다.
   -v : 파일을 복사하기전에 각각 파일명을 표시한다.
   -d : cp 명령은 복사할 파일이 심볼릭링크파일인 경우에는 그 원본파일을 찾아 복사한다. 이 옵션
       은 심볼릭 파일인 경우 그 심볼릭 정보와 함께 링크파일 그대로 복사하고자 할 때 사용한다.
   -a : -dpR옵션과 같다. 특정 파일의 속성,링크 정보들을 그대로 유지하고 그 하위디렉토리까지 전
       부 복사할 때 사용한다.
(4) 사용예
   1) cp /etc/lilo.conf .
     => /etc/lilo.conf라는 파일을 현재 디렉토리 복사한다.
   2) cp /etc/lilo.conf info.conf
     => /etc/llio.conf라는 파일을 현재 디렉토리의 info.conf라는 파일로 복사한다.
   3) cp -r /etc/* tmp
     => /etc아래에 있는 모든 파일과 디렉토리들을 tmp라는 디렉토리에 복사한다.
   4) cp readme ./data
     => readme파일을 현재 디렉토리밑의 data디렉토리로 복사한다.
   5) cp -rp etc etc2
     => etc의 속성을 그대로 etc2라는 이름으로 복사본을 만든다.
   6) cp a.txt b.txt /tmp
     => 현재디렉토리의 a.txt b.txt를 /tmp라는 디렉토리안에 복사한다.
   7) cp -a /etc/skel/. /home/posein
     => /etc/skel 디렉토리안에 있는 모든 파일의 속성, 링크 정보 등을 그대로 유지하면서 /home/
       posein이라는 디렉토리로 복사한다.

2. mv
(1) 설명: move의 약어로 파일 또는 디렉토리의 이름을 바꾸거나 위치를 이동시키는 명령. 도스의
          'ren'명령이나 'move'명령과 비슷하다.
(2) 사용법
   1) mv [option] old_name new_name => old_name을 new_name으로 바꾼다.
   2) mv [option] file(s) directory => file(s)을 directory로 옮긴다.
(3) option
   -f : 옮겨질 파일이 이미 존재하더라도 묻지 않고 덮어 쓴다. ('f'는  force의 약어)
   -i : 옮겨질 파일이 이미 존재하는 파일이면 덮어 쓸 것인지 물어본다.
   -b : 파일을 지우기 전에 백업본을 만든다.
   -u : 옮겨질 디렉토리에 구버전의 파일이 있는 경우에만 옮긴다.
(4) 사용예
   1) mv readme.txt /home/posein/data => readme.txt라는 파일을 /home/posein/data디렉토리로
                                        옮기라는 명령이다.
   2) mv /home/posein/pds /home/posein/data => /home/posein/pds라는 디렉토리를 /home/posein/da
                                              ta 라는 디렉토리명으로 바꿔라.
   3) mv aaa.txt bbb.txt => aaa.txt 파일을 bbb.txt파일로 바꿔라.
(참고) mv명령은 파일과 디렉토리의 이름을 바꾸거나 이동시키는 명령이다. 만약 대상이 되는 파일이
      같은 파일시스템(파티션)내에 있을 경우에는 파일 자체 내용에 대한 재배치는 하지 않고 파일의
      위치만 갱신시킨다. 만약 대상이 다른 파일시스템에 있을 때는 대상 파일시스템을 복사한 후에
      원본을 삭제한다. 결국 파티션이 하나인 파일시스템의 관점에서 보면 파일명의 변경과 다른
      위치로의 이동은 거의 동일한 작업이다. 결국 파일명을 변경하는 명령이 따로 필요하지 않다.

3. locate
(1) 설명 : 찾고자 패턴과 맞는 파일이나 디렉토리를 경로와 함께 서브디렉토리등 모두 찾아낸다.
           대상을 데이터베이스화하여 사용하므로 속도는 빠르나 updatedb명령어나 cron작업을 이용
           하여 데이터베이스를 갱신해야 한다. 실제적으로 접근해서 볼 수 있는 것들만 찾아서
           보여주므로 find명령에 비해 강력하지는 않다.
(2) 데이터베이스 갱신 : 리눅스에서 기본적으로 매일매일 업데이트 한다.
   1) /etc/cron.daily/slocate.cron &
   2) updatedb &
(3) 사용예
    [posein@www]$locate shadow
     => shadow라는 패턴이 들어간 파일이나 디렉토리들을 찾아준다.
(4) 참고 : 요즘 리눅스는 한층 보안적으로 강화된 slocate 명령은 사용한다. locate라는 명령을
           내려도 심볼릭링크로 실제적으로는 slocate 명령이 실행되는 것이다. 결과적으로는 같은
           명령이다.

4. which
(1) 설명 : 명령어의 위치나 alias를 보여준다. 이것은 사용자가 현재 위치에서 명령을 실행 시켰을
           때 어떤 명령이 실행되는지를 알고 싶을때 사용할 수 있다. $PATH가 설정되어 있는 경로
           에서만 찾는다.
(2) 사용법
   which command
    => 실행되는 파일의 경로명을 보여준다.
(3) 사용예
   [posein@www share]$ which mv
   alias mv='mv -i'
           /bin/mv
(4) 참고 : alias에 대하여
   1) 설명: alias란 별명이라는 뜻으로 어떠한 명령을 지정해 놓으면 사용자가 그 명령을 실행 시켰
          을 때 alias로 지정해 놓은 명령이 대신 실행되게 된다. 이 기능은 대부분의 shell에서
          지원한다.
   2) alias의 이용
    ㄱ. 특정명령어 실행시에 기본으로 옵션을 사용하게 할 경우
    ㄴ. 나만의 새로운 명령어를 만드는 경우
   3) alias의 지정과 해제
    ㄱ. alias의 지정
       alias 명령어='새로운 명령'
    ㄴ. alias의 해제
       unalias 지정한_명령어
   4) 사용예
    ㄱ. alias ls='ls -alF'
         => ls명령만 실행시켜도 기본으로 -alF 옵션이 지정된다.
    ㄴ. alias lo='ls -alF'
         => lo라는 명령은 기본적으로는 존재하지 않는다. 사용자 특유의 명령어인 lo라는 명령을
           생성하게 된다. 이 경우에 'which lo' 하게 되면 나타난다.
    ㄷ. unalias lo
         => 위에서 지정한 lo라는 alias설정을 해제한다.
(5) 참고: $PATH에 대하여
   1) 설명: PATH는 사용자들이 실행파일을 입력했을 때 찾는 디렉토리의 목록을 저장하고 있는 환경
           변수이다. 쉽게 설명하면 posein이라는 사용자가 쉘 프롬프트에서 'ls'라는 명령을 입력
           하면 PATH라는 변수에 저장되어 있는 경로에서 찾아 그 경로에 ls라는 명령이 존재하면
           실행하게 되고 존재하지 않으면 'command not found'라는 에러메시지를 나타나게 된다.
   2) 변수값 확인
    ㄱ. 일반사용자인 경우
       [posein@www posein]$ echo $PATH
       /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/posein/bin
    ㄴ. root사용자인 경우
       [root@www root]# echo $PATH
       /usr/kerberos/sbin:/usr/kerberos/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:-생략-
         => 일반사용자보다 시스템관리명령어들이 위치하는 /sbin 디렉토리가 더 존재함을 알 수
          있다.
   3) 참고
    ㄱ. 설명: 몇몇 명령어는 실행권한이 없다기 보다는 이 PATH로 등록되지 않아서 실행안되는 경우
             가 있다.
    ㄴ. 사용예
      a. [posein@www posein]$ ifconfig
         -bash: ifconfig: command not found
           => ifconfig라는 명령어만 내리면 실행되지 않는다.
      b. [posein@www posein]$ /sbin/ifconfig
         eth0      Link encap:Ethernet  HWaddr 00:C1:58:23:35:19
                   inet addr:192.168.0.120   Bcast:203.247.40.255  Mask:255.255.255.0
                   UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                   RX packets:92128289 errors:312 dropped:0 overruns:0 frame:0
                   TX packets:3385289 errors:0 dropped:0 overruns:0 carrier:0
                   collisions:1604382 txqueuelen:100
                   RX bytes:3334187353 (3179.7 Mb)  TX bytes:3091351999 (2948.1 Mb)
                   Interrupt:5 Base address:0xf000
           => 절대경로와 함께 입력하면 실행결과가 나옴을 알 수 있다.

5. whereis
(1) 설명 : 찾고자 하는 명령을 $PATH로 지정된 경로에서 찾아서 소스, 실행 파일, 매뉴얼 페이지
           등이 어느 위치에 있는지를 알려준다.
(2) 사용법
   whereis [option] filename
(3) option
   -b : (실행) 파일만 찾는다.
   -m : 매뉴얼 페이지만 찾는다.
   -s : 소스만 찾는다.
(4) 사용예
   [posein@www share]$ whereis mv
   mv: /bin/mv /usr/share/man/man1/mv.1.gz
     => 특별한 옵션이 없으면 소스, 실행파일, 매뉴얼 페이지 순으로 나타난다.

6. find
(1) 설명: 현재디렉토리부터 하위디렉토리까지 주어진 여러조건을 가지고 파일을 찾고, 그 경로를
          출력한다. locate보다 강력한 찾기 기능을 지원하지만 root에서 접근 권한을 제한한 파일
          이나 디렉토리에 관해서는 "허가 거부됨"이라는 메시지가 뜨고 찾지를 못한다.
(2) 사용법
    find [path] options expression
    =>path이하의 모든 디렉토리에서 파일을 찾는다. path가 없으면 현재디렉토리가 기준이다.
(3) option
   -name       : 이름을 기준어로 하여 찾는다.
   -user       : 해당 user의 파일이나 디렉토리를 찾는다.
   -group      : 해당 group의 소유인 파일이나 디렉토리를 찾는다.
   -perm       : 선택 퍼미션인 것을 찾는다.
    예) -perm 755   => 해당퍼미션값이 755인것을 찾는다.
        -perm -6000 => set-uid와 set-gid가 동시에 같는 퍼미션을 찾는다.
        -perm +6000 => set-uid와 set-gid중 둘 중 하나이상의 퍼미션값을 가진 것을 찾는다.
   -type       : 파일의 유형(d,f,l)에 따라 찾는다.
    *값
      d : 디렉토리를 찾는다.
      f : 일반파일을 찾는다.
      l : 링크된 것을 찾는다.
      b : 블록 특수 파일을 찾는다.
      c : 문자 특수 파일을 찾는다.
      p : 파이프인 특수파일을 찾는다.
      s : 소켓파일을 찾는다.

   -atime n : n일 이전에 액세스한 파일을 찾는다. +n은 n일 이전에 액세스한 파일을 찾는다는 의미
             이고 -n은 n일 내에 액세스한 파일을 찾는다는 뜻이다.
   -ctime n : 파일이 변경(change)된 날짜로 찾는다. 나머지는 atime과 같다.
   -mtime n : 파일이 수정(modify)된 날짜로 찾는다. 실제적으로는 ctime과 mtime은 거의 같다.

   -exec : 찾아진 파일등과 연계하여 어떠한 명령을 내릴 수 있는 옵션이다. 이 옵션을 사용하면 \;
          로 끝나야 한다.
   -ok : 확인메시지를 출력하는 것을 제외하고는 -exec와 같다.
   -print      : 화면으로 출력을 받기 위해서는 맨 뒤에 꼭 써야 하는 옵션이지만, 요즘 리눅스에
                서는 생략가능하다.
    2>/dev/null : 맨 뒤에 이 옵션을 사용하면 접근 권한이 없는 파일이나 디렉토리에 접근시
                 나오는 리스트는 화면에 출력하지 않는다.
   -ls : 맨 뒤에 이 옵션을 사용하면 상세출력하는 'ls -l'과 같은 역할을 한다.
   -size n : n 블록 길이의 파일을 찾는다. +n은 n블록보다 큰 파일을 의미하며, -n은 n블록보다
            작은 파일을 의미한다. nc란 n문자 길이의 파일을 의미한다. 즉 c는 character를 의미
            하고 1문자는 1바이트이므로 보통 바이트단위로 인식하여 사용한다.
   -inum n : inode번호가 n인 파일을 찾는다.
(4) 사용예
   1) find -name exam.txt =>exam.txt라는 파일이나 디렉토리를 찾는다.
   2) find -name '*.c' => *.c로 끝나는 파일이나 디렉토리를 찾는다.
   3) find -user posein => posein이라는 사용자의 파일이나 디렉토리를 찾는다.
   4) find -perm 600 => 권한이 600인 파일을 찾는다.
   5) find -type l => 심볼릭 링크인 파일을 찾는다.
   6) find . -type d => 현재 디렉토리에 있는 모든 하위 디렉토리를 찾는다.
   7) find . -type f -name "*.txt" => 현재 디렉토리에서 '*.txt'로 끝나는 파일들을 찾는다.
   8) find / -type f -perm +6000 -ls => 루트 디렉토리에서부터 퍼미션이 6000인 파일들을 찾아 상
                                       세출력(-ls)한다. 퍼미션이 6000을 주면 setuid와 setgid가
                                       걸려있는 모든 파일을 찾는다.
   9) find / -nouser -o -nogroup => 소유자나 소유그룹이 없는 파일들을 찾는다. -o는 or(또는)의
                                  역할을 한다.
   10) find / -user level1 -group level0 -print 2>/dev/null
      => 루트 디렉토리(/)에서 소유자는 level1이고 그룹은 level0인 파일을 찾아서 화면으로
        프린트하되, 접근 권한이 없는 파일등 오류가 있는 것들은 화면에 출력하지 않는다.
   11) find . -name '*.txt' -exec rm {} \;
      => 현재 디렉토리에서 *.txt로 된 파일들을 찾아 삭제한다.
   12) find /home -name .rhosts => /home디렉토리에서 .rhosts라는 파일을 찾는다.
   13) find / -name .rhosts -ls -o -name .forward -ls
      => .rhosts 또는 .forward라는 파일을 찾아 정보를 상세히 출력한다.
   14) find / -ctime -2 -ctime +1 -ls
      => 이틀전에서 하루 이후에 수정된 파일을 찾는다.
   15) find -size +10000c -size -32000c
      => 10000바이트보다 크지만 32000바이트보다 작은 파일을 찾는다.
   16) find -inum 10004 -exec rm {} \;
      => inode번호가 10004인 파일을 찾아 지운다. 간혹 지워지지 않는 파일들이 생길 수 있다. 이
        때는 inode번호를 알고 find와 연계해서 지울 수도 있다.
   17) [posein@www posein]$ find -name test.txt -ok chmod 755 {} \;
       < chmod ... ./test.txt > ? y


7. file
(1) 설명: 파일의 종류를 알아보는 명령어. 도스에서는 보통 파일의 종류를 확장자로 구분하지만
          유닉스에서는 파일 이름에 아무 제한이 없으므로 이 명령어를 사용하여 알 수 있다.
(2) 사용법
    file file(s)
(3) 사용예
    file *
(4) 참고: 관련파일
    file은 파일에 대한 정보를 얻기위해 /usr/share/magic 이라는 파일을 참조한다.

8. touch
(1) 설명: 파일의 크기가 0인 빈 파일을 생성하는 명령어로 파일의 최종 접근시간을 바꿀 수 있는
          명령이다.
(2) 사용법
    touch [option] 파일명
(3) option
   -d : 접근 시간을 변경한다.
   -m : 수정 시간을 변경한다.
   -t 타임스탬프 : 현재 시간 대신 [[CC]YY]MMDDhhmm[.ss]형식으로 지정된 타임스탬프를 이용한다.
                 예를 들어, 2001년 1월 12일 오후6시45분은 200101121845로 나타낸다. 리눅스배포
                 판에 따라 타임스탬프형식이 MMDDhhmm[[CC]YY][.ss]로 다를수도 있으니 man 명령으
                 로 확인해야 한다.
(4) 사용예
   1) [posein@www posein]$ touch a.txt
       => 현재 디렉토리에 a.txt라는 파일이 존재하면 파일의 접근시간을 바꾸고 파일이 없을 경우
         에는 a.txt라는 파일의 크기가 0인 빈파일을 생성한다.
         생성파일이다.
   2) [root@int03 root]# touch -t 04011330 /etc/passwd
      [root@int03 root]# ls -l /etc/passwd
      -rw-r--r--    1 root     root         2655  4월  1 13:30 /etc/passwd
        => /etc/passwd 파일의 접근시간을 바꾼다.
(5) 쓰임 : 주로 설정파일을 만들어야 할때 사용되는데 없으면 안되고, 내용을 적을 것이 없는
          경우나 현재 디렉토리에 쓰기가 가능한지를 알아보기 위한 목적으로 쓰인다.

9. clear
(1) 설명: 화면을 지워서 첫줄에 프롬프트가 나타나도록 한다.
(2) 사용법
   clear

(참고)
리눅스를 좀 더 편리하게 사용하기를 원한다면 mc라고 타이프 해보자.사용법은 노턴커맨드나 Mdir
과 비슷하다. 모르는 명령어가 있다면 'man 명령어'나 '명령어 --help'하면 명령어에 대한 설명이
나올 것이다. 단지 흠이라면 대부분 영어로 나온다.

Trackback
Reply

출처 : 대전국제IT교육센터 정성재 강사

 

1. pwd(print working directory)
(1) 설명 : 현재 작업디렉토리의 경로를 보여준다. 도스의 'cd'명령과 유사하다.
(2) 사용법
    pwd
(3) 사용예
   [posein@www posein]$ pwd
   /home/posein

2. cd(change directory)

(1) 설명 : 디렉토리를 이동하는 명령어로 현재있는 디렉토리를 변경할 때 쓴다. 도스의 'cd'명령과
          동일하다. 유의할 점은 도스는 cd명령후 '/'을 붙여도 되지만 유닉스에서는 꼭 한칸을
          띄워야 한다.
(2) 사용법
    cd [이동하고자할 디렉토리]
(3) 사용예
   1) 경로(PATH)
    ㄱ. 절대경로 : '/'부터 전체경로를 지정하여 한번에 이동하는 방법이다.
    ㄴ. 상대경로 : 현재디렉토리가 기준으로 이동하고자 하는 디렉토리가 현재디렉토리내에 존재해야
                  한다. 각 단계를 일일이 지정하여 이동하는 방법이다.
   2) 경로 이동예
    ㄱ. 절대경로 이동법 : /usr/include/kde 에서 /usr/local/src으로 이동시
       [root@www kde]# cd /usr/local/src
    ㄴ. 상대경로 이동법 : /usr/include/kde 에서 /usr/local/src으로 이동시
       [root@www kde]# cd /
       [root@www /]# cd usr
       [root@www /usr]# cd local
       [root@www local]# cd src
       [root@www src]#
   3) 참고 : cd home과 cd /home의 차이점
    전자는 자신이 있는 디렉토리내의 하위에 home이라는 디렉토리가 있을 경우에만 이동이 가능하고
   후자는 하위 디렉토리에 있지 않아도 이동가능함. 절대경로와 상대경로의 차이.
(4) cd 명령과 특수문자
   1) 사용법
    ㄱ. cd
         => 자신의 홈디렉토리(보통 /home디렉토리아래에 본인의 계정명으로 되어있음)로 이동한다.
    ㄴ. cd /
         => /(최상위)디렉토리로 이동한다.
    ㄷ. cd .
         => 현재디렉토리로 이동한다. 실질적으로는 변화가 없다.
    ㄹ. cd ..
        => 한 단계위 디렉토리(부모디렉토리)로 이동한다.'
    ㅁ. cd ~
        => ~는 특정사용자의 홈디렉토리를 나타내는 특수문자로 현재상태에서는 그냥 cd라고 입력
        한 결과와 같다.
    ㅂ. cd -
        => 이동하기 바로 직전의 디렉토리로 이동한다.
   2) 사용예
    ㄱ. 자기 홈디렉토리까지의 표기를 ~(tilde)로 대체할 수 있다.
        예)/home/posein/data이라는 디렉토리로 이동시 ~/data로 대체 가능하다.
        응용)/etc/inittab라는 파일을 자기의 홈디렉토리로 복사해보자.
          답) cp /etc/inittab ~
    ㄴ. 한단계 상위이동과 해당디렉토리 이동을 한꺼번에 가능하다.
        예) /home밑에 posein이라는 디렉토리와  prehee라는 디렉토리가 있을 경우 현재 내 위치가
           posein이라면 prehee라는 디렉토리로 이동시 cd ../prehee로도 가능하다.

(참고) 배시쉘관련 TIP
1. 해당 디렉토리나 명령어를 입력할 때 길거나, 잘 모를때 유용한 팁으로 프롬프트상에서 tab키를
   누르면 뒤에 문자는 자동으로 입력해준다.
2. history기능 : 상방향의 화살표 키로 바로 실행한 명령을 재실행할 수 있다.

3. mkdir
(1) 설명: make directory의 약자로 디렉토리를 새로 만드는 명령이다. 도스의 'md'명령과 유사하며
          같은 이름의 파일이나 디렉토리가 이미 존재하고 있는 경우에는 만들 수 없다.
(2) 사용법
    mkdir [option] [path]디렉토리명
     => 디렉토리 이름을 적어 줄때, 이름만 적어주면 현재디렉토리의 서브디렉토리를 생성하고,
       path이름과 같이 적어주면 해당위치에 디렉토리가 생긴다.
(3) option
   -p, --parents : 지정된 모든 서브디렉토리까지 함께 생성한다. 즉 부모디렉토리가 없으면
                  만들라는 옵션이다.
   -m, --mode : 디렉토리의 생성과 동시에 퍼미션을 설정할 수 있다.
   -v, --verbose : 생성된 디렉토리를 메시지로 출력한다.
(4) 사용예
   1) [posein@www posein]$ mkdir www
        => 현재 디렉토리에 www이라는 서브디렉토리를 생성한다.
   2) [posein@www posein]$ mkdir data/www 
        => data이라는 디렉토리밑 서브디렉토리로 생성된다. 단, 이 경우에는 data이라는 디렉토리
          가 미리 생성되어 있어야 한다.
   3) [posein@www posein]$ mkdir dir1 dir2 dir2
        => 여러 개의 디렉토리도 한번에 생성가능하다. 위의 예처럼 하면 dir1, dir2, dir3이라는
          3개의 디렉토리가 생성된다.
   4) [posein@www posein]$ mkdir -p ./www/pds/pic
       => 현재의 디렉토리밑에 www를 만들고 하위에 pds 또 그 하위에 pic이라는 디렉토리를 생성
         한다.
   5) [posein@www posein]$ mkdir -m g+w www
       => 현재의 디렉토리에 www이라는 디렉토리를 생성하면서 그룹사용자에게 쓰기권한을 부여한
         다.

4. rmdir
(1) 설명: remove directory의 약자로 디렉토리를 지우는 명령이다. 단, 지우고하는 디렉토리안이
         비어있지 않으면 지울 수가 없다. 도스의 'rd'명령과 유사하다. 보통 'rm -r'명령으로 디렉
         토리를 지우는 경우가 많아 잘 사용되지는 않는다.
(2) 사용법
    rmdir [option] directory(s)
(3) option
    -p : 지우고자 하는 디렉토리를 지우고 그 결과로 부모디렉토리가 빈 디렉토리가 되면 부모디렉
        토리까지 지운다.
(4) 사용예
    [posein@www posein]$rmdir www

5. rm(remove)
(1) 설명: 파일을 지우는 명령으로 옵션에 따라 디렉토리도 지운다. 도스의 'del','deltree'명령과
         유사하다.
(2) 사용법 : rm [option] 파일 또는 디렉토리
(3) option
   -f : 쓰기권한이 없는 파일이라도 아무 메시지없이 강제로 지운다.
   -i : 파일마다 지울 것인지를 확인한다. (리눅스 배포판에 따라 이 옵션이 alias기능으로 기본
       설정되어 있을 수도 있다.)
   -r : 서브 디렉토리를 포함하여 디렉토리 안의 모든 내용을 지운다. 이 옵션을 쓸때는 파일 이름
       대신에 디렉토리 이름을 지정해 주어야 한다. (-R과 같다.)
(4) 사용예
   1) rm -i * : 현재 디렉토리의 모든 파일을 하나씩 확인하면서 지운다.
   2) rm -rf tmp : tmp라는 디렉토리와 그 안의 모든 파일들을 허용권에 관계없이 강제로 지운다.
   3) rm doc1.txt doc2.txt doc3.txt
       => 문서 3개를 한꺼번에 지운다. 'rm doc[1-3].txt'와 같다.

Trackback
Reply

출처 : 대전국제IT교육센터 : 정성재 강사

 

1. 리눅스 명령어 사용하기
(1) 명령에는 일정한 형식이 있다.
   1) 기본형식
     command [options] [argument]
   2) 사용예
    ㄱ. ls
    ㄴ. ls -alF
    ㄷ. ls /etc
    ㄹ. ls -alF /etc
(2) 명령수행시 항목과 항목은 공백으로 구분한다.
(3) 명령의 수행결과를 옵션에 따라 바꿀 수 있다.
(4) 다중 명령도 가능 : 세미콜론(;)이나 앰퍼센트(&&)등을 이용한다.
(5) [CTRL]+[C] 나 [CTRL] +[D]를 이용하여 인터럽트를 걸 수 있다.

(참고) 리눅스의 가상콘솔에 대하여
   리눅스는 기본 6개의 가상 콘솔을 제공한다. [CTRL]+[ALT]+F[1~6]를 누르면 기본 로그인창이 제공된다. 아울러 [CTRL]+[ALT]+[F7]은 X-Window 에서 사용한다.

2. 리눅스 파일 이름
(1) 파일의 이름은 255자까지 정할 수 있다.
(2) 대,소문자를 구별한다.
(3) 특수문자는 파일의 이름으로 설정할 수 없다. 단 점(.), 대쉬(-), 언더바(_)는 예외이다.
(4) 공백문자도 이름으로 설정할 수 없으나 설정하려면 '나 "를 이용한다.
    예) mkdir 'backup data'

3. ls 명령어
(1) 설명: list의 약자로 도스의 dir과 비슷한 기능을 한다. 파일과 디렉토리에 대한 정보를 출력
          한다.
(2) 사용법
   ls [options] [파일 또는 디렉토리명]
(3) options
   -a : all의 약어로모든 파일을 보여준다. 유닉스에서 '.'으로 시작되는 파일은 숨겨진 파일을
      의미하며 보통때는 보이지 않지만 이 option을 주어서 ls를 실행시키면 '.'으로 시작되는 파일
      도 보여준다.
     예) [sunchun@www sunchun]$ ls -a
         .   .bash_history  .bash_profile  .canna  .gtkrc  .kde  .bash_logout   .bashrc  .emacs
         ..  .viminfo
   -F : 파일의 속성에 따라 다르게 보여준다. 실행 가능한 파일은 파일 이름 뒤에 '*'(asterisk)
       문자를 붙어서 표시하며, 디렉토리는 이름 뒤에 './'를, Symbolic Link는 이름 뒤에 '@'를
       붙여서 표시해준다.
   -l : long의 약어로 파일 list를 한줄씩 길게 보여주며 파일속성,파일의 종류,마지막으로 수정된
       날짜,파일의 크기등의 정보도 함께 보여준다.
       예) [sunchun@www sunchun]$ls -l
           drwx------  2  sunchun  sunchun  4096 sep 25 18:20 Mail/
            => ls -l 명령어의 출력 결과
              파일 접근 허용     : drwx------
              링크의 수          : 2
              사용자(파일소유자) : sunchun
              그룹               : sunchun
              파일크기(in byte)  : 4096
              최종 수정일        : Sep 25
              최종 수정시간      : 18:20
              파일명(디렉토리명) : Mail
             (참고)그룹명이 지정 안 되었을 경우 자기자신을 기본그룹으로 함.
   -d : 인수가 디렉토리인 경우 그 디렉토리명만 출력한다.
   -t : 출력되는 정보가 알파벳순이 아니고 최근 수정된 파일 또는 디렉토리부터 시간순으로 출력된
       다.
   -u : 파일 및 디렉토리의 최종 수정된 시간대신 사용된 시간(최종접근시간)으로 출력된다.
   -x : 출력되는 정보가 복수열 형태로 출력하며 이때의 파일 및 디렉토리명은 가로방향(횡방향)으
       로 알파벳 순으로 소트되어 출력된다.
   -g : -l옵션과 유사하나 파일 및 디렉토리 소유자명이 출력되지 않는다.
   -f : 인수를 디렉토리로 간주하고 각각의 Slot에 있는 그 이름을 디렉토리 내의 순서로 출력한다.
   -c : 파일의 i-node의 최종 변경시간을 사용한다.
   -C : 출력되는 디렉토리명 또는 파일명은 복수열 형식으로 출력되며 이때의 디렉토리명은 세로(종
       방향)으로 알파벳 순으로 소트되어 출력된다.
   -i : i-node 번호를 파일 또는 디렉토리명 앞에 출력된다.
   -m : 파일을 컴마(,)로 구분하여 출력한다.
   -n : -l옵션과 유사하나 소유자명과 그룹명 대신에 UID번호,GID번호를 출력한다.
   -o : -l과 유사하나 그룹명이 출력되지 않는다.
   -p : 디렉토리인 경우 디렉토리명 뒤에 /(slash)를 붙여서 출력한다.
   -q : 비도형문자를 문자로 강제 출력한다.
   -r : 파일 및 디렉토리 정보를 알파벳 역순으로 출력한다.
   -R : 검색되는 서브디렉토리 별로 이들 아래에 있는 파일 정보를 재귀적으로 출력한다.
   -S : 파일 및 디렉토리 앞에 간접 블록을 포함한 블록 수를 나타낸다.
(4) 사용예
   1) [sunchun@www sunchun]$ls
      Mail/
       => 현재 디렉토리의 내용을 보여준다.
   2) [sunchun@www sunchun]$ ls /
      bin   data  etc   initrd  lost+found  mnt  proc  sbin  tftpboot  usr
      boot  dev   home  lib     misc        opt  root  secu  tmp       var
       => '/' 디렉토리의 내용을 보여준다.
   3) [sunchun@www sunchun]$ ls -a
      ./             .bash_logout   .emacs     .mysql_history  .wl
      ../            .bash_profile  .kde/      .screenrc       Desktop/
      .bash_history  .bashrc        .mplayer/  .viminfo        www/
       => 숨겨진 파일을 모두 보여준다.
   4) [sunchun@www sunchun]$ ls -l /home
       => /home디렉토리의 내용을 파일속성등과 함께 보여준다.
   5) [sunchun@www sunchun]$ ls -ld /home
       => /home디렉토리의 내용을 권한등의 파일속성과 함께 보여준다.
   6) [sunchun@www sunchun]$ ls -alF
       => 현재디렉토리의 내용을 모두 보여주고, 정보도 길게 보여주며, 파일의 형태도 표시해준다.
   7) [sunchun@www sunchun]$ ls -i
       => 파일이나 디렉토리에 부여된 아이노드값을 함께 보여준다.

Trackback
Reply

출처 : 대전 국제 IT 교육센터 : 정성재 강사

 

1.디렉토리란?
디렉토리라는 것은 파일을 보관하는 곳이다. 리눅스를 포함한 거의 모든 유닉스는 대체적으로 동일한 디렉토리구조를 가지고 있다. 물론, system V계열이냐 BSD계열이냐, 리눅스냐에 따라 약간의 차이는 있지만, 대체적으로 비슷하다. 또한 디렉토리의 구조는 도스(윈도우즈)나 리눅스 모두 디렉토리를 tree형태의 구조를 갖추어 계층적으로 관리된다.

2.리눅스의 디렉토리 구성

/bin : 일반적으로 bin은 binary의 약자로 실행코드를 가진(즉 실행이 되는) 파일들이 들어있다. 우리가 흔히 말하는 명령어라는 것들이 들어있는 디렉토리이고, 보통 Path가 설정되어 있다.대표적인 명령어인 cp, mkdir, rmdir, mv, rm, cat등이 있다.

예)/usr/bin, /usr/local/bin, /usr/X11R6/bin, /bin 등

/sbin : 'System Binaries'의 약자로 주로 시스템 관리에 대한 명령어들이 있다. 즉 이 디렉토리의 명령어들은 보통 super user가 사용한다. 대표적으로 파티션을 나눈다거나 유저추가 명령등 (fdisk, useradd, lilo, halt, reboot등)이 있다.

예)/sbin, /usr/sbin 등

/home : 사용자의 홈디렉토리로서 개개인의 사용자의 디렉토리 즉, 유저디렉토리가 있는 곳이다. 보통 posein이라는 계정을 만들면 /home/posein이라는 디렉토리가 생기게 되고 이를 홈디렉토리라고 부른다.

/etc : 이 디렉토리에는 시스템 환경설정 파일 및 부팅과 관련된 여러가지 스크립트 파일들이 들어 있다. 이들 파일에서 설정된 내용을 읽어서 이에 맞게 프로그램들이 설정을 맞추어 실행하게 된다. 시스템 운영에 관한 매우 중요한 파일들이 존재하므로 임의대로 삭제하거나 수정해서는 안된다.

/lib : MS-Windows에서 DLL파일과 비슷한 역할을 하는 library파일이 들어있다. 라이브러리라는 것은 프로그램의 실제 구현된 함수모듈들을 모아놓은 것을 말한다.

예) /lib/modules, /usr/lib, /usr/local/lib, /usr/X11R6/lib

/proc : 가상 파일 시스템으로 시스템에서 운영되고 있는 다양한 프로세서의 상태정보 및 기타 시스템 정보를 담고 있다. 하드웨어 설정 요소등도 알수있다.

예)cpuinfo, mounts, partitions,ioports, interrupts 등

/dev : 하드디스크, CD-ROM, 포트, 모뎀, 마우스 등과 같이 실제로 존재하는 물리적인 장치등을 파일화하여 관리하는 디렉토리이다.

예)/dev/hda, /dev/fd0, /dev/sda, /dev/cdrom 등

/root : 시스템관지자인 root사용자의 홈디렉토리영역이다.

/tmp : 임시지정 디렉토리로서 각종 프로그램이나 프로세서 작업을 할 때 임시로 파일을 저장하는 공간이다. 보통 이 디렉토리는 모든 사용자에게 접근 가능하도록 설정되어 있다.

/mnt : CD-ROM이나 플로피디스크, 기타 외부파티션(Windows나 DOS같은) 등을 접근할 때 사용하는 디렉토리이다.

예)/mnt/cdrom, /mnt/floppy등

/usr : 윈도우로 말하면 응용프로그램들이 위치하는 디렉토리이다. 커널소스, C-컴파일러와 같은 개발도구, X-window에서부터, 리눅스에서 서버관리를 위해 사용하는 아파치나 mysql, php등 이 모두 이 디렉토리의 하위디렉토리에 설치된다.

/var : 시스템 관리에 대한 여러가지 영역이 존재하는 곳으로 /usr디렉토리와 거의 비슷한 역할을 한다. /usr은 변하지 않는 요소를 저장한다면 /var 에서는 변화의 소지가 있는 파일등을 보관한다. 대표적인 것으로 로그파일이나 기타 스풀링 공간이 이곳에 존재한다.

예) /var/spool

/boot : 부팅이미지 파일이나 커널정보가 포함된 디렉토리이다. 참고로 예전버전의 리눅스를 사용하고 lilo를 사용한다면 1024실린더 내에 존재해야 된다. 대체적으로 8GB이내에 존재해야 함. 만약 파티션을 할당한다면 최소 35M를 할당하고, 커널컴파일을 하려면 70M는 되어야 한다.여유있게 100M를 할당한다.

/lost+found : fsck 명령어를 이용하여 파일시스템을 복구할 때 작업하는 디렉토리이다.

/opt : 응용프로그램들의 설치를 위해 남겨둔 디렉토리이다.

Trackback
Reply

출처 : 대전국제IT 교육센터 : 정성재 강사

 

1.파티션이란?
Partition이라는 것은 분할,칸막이라는 뜻으로 컴퓨터에서는 HDD의 영역을 설정하는 것을 말한다.
우리의 일상사와 비교한다면 어떠한 땅을 정리한다고 할 수 있다. 예를 들어 땅이 1000평이 있는데,
이 중 800평을 논으로 쓰고, 200평을 밭으로 쓴다고 구역을 설정하는 것처럼 컴퓨터에서도 이러한
개념과 동일하다. 즉. 파티션설정이란? Windows에서는 한개의 HDD를 여러개로 분할, 예를들면 C: D:
등으로 나누는 것을 의미한다.(물론 HDD전체를 하나로 사용하더라도 파티션설정이 필요하다. 왜냐하
면 OS에게 전체를 한 드라이브로 사용한다구 통보해야 하므로) 또한, 하나의 HDD로 여러가지 다른
OS(Windows98, NT, Linux등)를 인스톨할 경우에도 파티션 설정을 해야 된다. 리눅스에서의 파티션을
크게 두가지로 나눈다. 리눅스 전용 파일 시스템을 위한 파티션(Linux Native Partition)과 스왑 파
티션(Swap Partition)이 그것이다. Linux Native Partition은 실질적으로 리눅스가 인스톨되고, 사
용하기 위한 파티션으로 그냥 줄여서 Linux Partition이라고도 한다. Swap Partion은 프로그램 실행
시 부족한 메모리의 용량을 하드디스크로 대신하는 파티션으로 꼭 지정해야 한다. 유닉스 운영체제
에서 파일 시스템과 스왑의 비율은 9:1 정도로 하는 게 적당하다. 즉, 물리적 하드디스크 용량의
10% 정도를 스왑으로 설정하면 된다. 하지만 리눅스와 같은 PC용 운영체제에서는 이 정도로 크게 스
왑을 잡을 필요는 없다. 이 스왑의 크기에 관한 설정은 사람마다 각기 다른 소견을 가지고 있지만,
대략 자기가 가진 메모리의 약 2배정도 설정해주면 적당하다.

2.디스크의 인식
(1) 설명: 윈도우나 도스에서는 하드디스크를 그냥 편의상 C: D: 등으로 구분하지만, 리눅스에서는 디스크를 포함한 모든 장치를 파일로 관리한다. 일반 PC계열에서 하드디스크방식이 IDE타입과 SCSI방식이 있다. 리눅스에서의 인식은 다음과 같다.
(2) 종류
1) IDE방식의 하드디스크 : 대체적으로 E-IDE타입은 하드디스크를 4개까지 지원한다.
ㄱ. Primary Master disk : /dev/hda
ㄴ. Primary Slave disk : /dev/hdb
ㄷ. Secondary Master disk : /dev/hdc
ㄹ. Secondary Slave disk : /dev/hdd
2) SCSI방식의 하드디스크 : 일반 SCSI방식이냐 WIDE-SCSI방식에 따라 하드디스크의 지원하는 갯수가 7~15개이다.
첫번째 드라이브 : /dev/sda
두번째 드라이브 : /dev/sdb
세번째 드라이브 : /dev/sdc
...
3) 세부파티션 : 하나의 디스크를 가지고 여러개의 파티션을 나누었을 경우 뒤에 번호가 붙는다.
예) IDE타입의 하드디스크인 경우 : /dev/hda
/dev/hda1
/dev/hda2
/dev/hda3
...

3.파티션의 유형
(1) 설명: 윈도우즈계열이나 유닉스계열 모두 주파티션(Primary Patition)과 확장파티션(Extend Partition)이 있다. 차이점은 윈도우즈계열인 경우에는 주파티션 1개에 확장파티션이 1개로 구성되지만, 유닉스계열은 주파티션 4개에 확장파티션이 1개로 구성된다.
1) Primary Partition(주 파티션)
ㄱ. 기본적인 파티션으로 부팅가능한(Bootable) 파티션이다.
ㄴ. 운영체제를 담고 있는 하드 디스크에는 하나 이상 존재해야 한다.
ㄷ. 총 4개까지 만들 수 있다. 만약, Extend Partition을 사용한다면 실질적으로 사용할 수 있는 최대 주파티션의 수는 3이다.
2) Extend Partition(확장 파티션)
ㄱ. 확장 파티션은 하나의 디스크에 하나만 만들 수 있다.
ㄴ. 네 개 이상의 파티션을 만들고 싶다면 하나의 확장 파티션을 설정한 후 그 확장 파티션 영역내에 여러개의 논리 파티션(Logical Partition)을 나누면 된다. 확장 파티션은 주 파티션과는 달리 직접적으로 사용하는 파티션이 아니고, 다만 4개 이상의 파티션 사용을 위한 영역설정 개념의 파티션이다. Extend Partition 의 선언은 Primary Partition내에 해야 한다.
3) Logical Partition(논리파티션)
ㄱ. Extend Partition 내에 생성되는 파티션으로 /dev/hda5 이후의 번호를 붙여 생성된다.
ㄴ. IDE 타입인 경우에는 63개, SCSI타입인 경우에는 15개까지 생성할 수 있다.
ㄷ. 보통 시스템에서는 inode를 고려하여 IDE타입인 경우에는 32개, SCSI인 경우에는 15개를 기본 지원한다.
ㄹ. 참고로 fdisk는 16개 이상의 파티션을 분할할 수 없다.

4.파티션의 분할
(1) 설명: 리눅스에서 디스크의 파티션을 분할하는 방법에는 비주얼하고 사용하기 쉬운 Disk Druid 방식과 텍스트방식의 fdisk가 있다. fdisk를 이용하여 파티션을 분할하도록 한다. 레드햇 리눅스 9.0 에서는 그래픽모드로 리눅스를 설치하면 fdisk를 이용한 설치는 할 수 없고 Disk Druid 방식만 이용해야 한다.
(2) Disk Druid 를 이용한 파티션 분할 : fdisk에 비해 파티션 설정은 쉬우나 파티션을 나누게 되면 fdisk와는 다르게 지정된 우선순위에 따라 파티션번호가 바뀐다. 또한 설치시에만 사용하는 방법이므로 리눅스 설치 이후 새로운 하드디스크 추가설치에는 사용할 수 없다
(3) fdisk를 이용한 파티션 분할
1) fdisk의 기본명령확인 : fdisk명령을 실행하면 텍스트형태로 'Command (m for help):' 뜬다. 'm' 눌러 확인해보면 다음과 같다.
- 리스트 -
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
2) fdisk의 주요명령
p: 현재 파티션의 정보를 출력
d: 파티션 삭제
n: 파티션 추가
t: 파티션 속성 변경
w: 파티션 변경내용을 저장하고 종료
q: 파티션 변경내용을 저장하지 않고 종료, 파티션 저장, 삭제등의 설정이 잘못되었을 경우 선택한 후 fdisk를 재실행하여 다시 설정할 경우 사용.

5.파티션설정
리눅스에서 파티션별 크기의 설정은 디렉토리의 크기와 밀접한 관계가 있다. 대체적으로 디렉토리의 크기가 유동적인 파티션의 설정에 유의해야 한다. 대표적인 디렉토리가 /home, /usr, /var등이 해당한다.
1)초보자 또는 가정용을 위한 파티션 설정 : 파티션 설정을 잘 모르면 두개만 나눈다.
ㄱ. RedHat 6.2
/(root) : 약 1.7GB ~ 2GB가 정도 => X-window를 포함한 전체를 인스톨할 경우
Swap : 64MB
ㄴ. RedHat 7.1 일 경우
/ : 약 3.5GB 정도 => 전체 설치시
Swap : 128MB
=> 이렇게 설정하면 나머지 여러디렉토리들은 / 파티션아래로 자동으로 설정된다.
2)서버운영을 위한 기본 파티션
/(루 트 파티션) : 커널 및 관련파일저장하는 곳으로 큰 공간이 필요없으며 Red Hat6.2의 서버표준 사양이 약 256MB정도이다. 파티션유형은 Linux native로 지정한다. 7.1버전인 경우이고 커널컴파일 등의 작업을 수행하려면 최소 512MB이상 설정이 필요하다.
/usr : 모든 어플리케이션이 존재하는 곳이므로 크게 설정해야 한다. 최소 512MB이상되어야 하며 보통 리눅스6.2를 전부 인스톨할경우 1500MB, 7.1버전인 경우에는 3.5GB는 되어야 한다. 파티션 유형은 Linux Native이다.
/home : 사용자의 홈 디렉토리로 사용자의 수에 따라 적당한 영역의 설정이 필요하다. 사용자당 얼마의 공간을 할당할 것인지를 결정해 예상되는 총사용자의 수와 곱하여 이에 적합한 파티션을 설정해야 한다. 홈디렉토리의 파티션 유형도 Linux Native로 지정한다.
Swap : 파티션 유형이 Linux Swap으로 지정하여야 하며, 보통 메모리의 2배를 지정한다. 6.2버전인 경우에는 최소 30MB에서 최대 128MB가 적당하고, 7.1버전인 경우에는 256MB~1GB정도로 설정한다.
(사용예)리눅스 CD전체를 인스톨할 경우 최소 설정예
ㄱ. 6.2
/(root) : 256MB
/usr : 1450MB
/home : 50MB
Swap : 64MB
ㄴ. 7.1
Swap : 128MB
/ : 250MB
/home : 50MB
/var : 500MB
/usr : 나머지 공간(전체설치시 3.5GB이상)
3)웹서버 운영을 위한 파티션설정 : 리눅스 7.1 버전이고 HDD가 40GB인경우 (참고로 정석은 아니고,참고만 할 것.)
Swap : 512MB => 보통 램의 두 배이므로 여유있게 잡는다.
/ : 500MB => 최소 500MB할당해야 한다.
/var : 5GB => log등이 기록되므로 최소 1GB 할당
/tmp : 1GB
/usr : 4GB (전체설치시 3.5GB 이상 설정해야 한다. 8.0과 9.0 버전에서 전체설치시에는 6GB이상 할당해야 한다.)
/usr/local : 5GB
/data : 10GB => 백업용으로 그냥 할당. 없어도 무방
/home : 9GB(나머지 전부할당)

(참고1) 리눅스를 인스톨하면서 나타나는 몇가지 메뉴 설명
1. Emulate 3 Buttons : 리눅스의 X-windows에서는 기본적으로 마우스 버튼을 3개 지원한다. 보통 사용자들은 2버튼 마우스를 사용하는데, 2버튼 마우스로 3버튼 역할을 할 수 있도록 해주는 것이다. 즉, 두 개의 버튼을 동시에 누르면 3버튼 마우스의 가운데 버튼을 누른 것과 같은 효과를 얻을 수 있다. 선택한다.
2. MD5 password : MD5란 일종의 암호화 알고리즘으로 기본적으로 8자 이내로 되어있는 패스워드를 암호화하여 256자까지 확장해서 사용할 수 있도록 해준다. 기본값으로 선택되어 있으니 그대로 사용한다.
3. Use Shadow Passwords : /etc/passwd 파일에서 패스워드부분을 다시 /etc/shadow파일에서 관리하도록 하는 옵션이다. 기본값으로 선택되어 있으니 그대로 사용한다.
4. NIS : Network Information Service의 약어로 네트워크로 연결되어 있는 여러 대의 리눅스머신들의 정보를 하나의 서버에서 관리하는 것을 말한다.
5. MBR : Master Boot Record의 약어로 하드디스크의 부팅을 관리하는 영역이다. 만약 리눅스가 시스템부팅을 관리하려면 lilo(Linux loader)를 이 MBR영역에 인스톨해야 한다. 그렇지 않으면 부팅디스켓을 만들어서, 리눅스 부팅시에는 디스켓을 이용해야 하는 번거로움이 있다.
만약 LILO를 MBR에 인스톨했을 경우 리눅스를 지워도 LILO라는 메시지가 뜬다. 메시지를 없애려면 윈도우상태에서 fdisk /mbr이라는 명령을 줘야 한다.
(참고2) 마우스의 작동
기 본적으로 유닉스,리눅스계열에서는 3버튼 마우스를 사용하도록 되어 있다. 3개의 버튼의 기본 동작을 보면 맨 왼쪽버튼이 영역을 지정하고, 가운데버튼이 붙여넣기, 맨 오른쪽버튼이 복사를 한다. 그러나, 보통 2버튼 마우스를 사용하므로 2버튼 마우스를 3버튼 마우스처럼 사용하는 옵션이 Emulate 3 Buttons이다. 즉 가운데 버튼의 역할을 두 개의 버튼이 동시에 눌려졌을 때 수행 한다.
(참고3) 현재 리눅스에서의 파티션 지원
현재 리눅스에서 디스크 하나당 지원하는 파티션은 SCSI하드디스크는 15개, IDE하드디스크는 63개의 파티션을 가질 수 있지만, 하나의 물리적인 디스크안에 12개 이상의 파티션 설정은 권장하지 않는다.
참고로 MS Windows의 경우에는 논리파티션에 운영체제를 설치할 수 없도록 되어 있다.

Trackback
Reply

출처 : 대전 국제 IT 교육센터 : 정성재 강사

 

1. 개요
실제 서버로서의 운영과 관련하여 리눅스를 설치하고 관리자로 고려해야 할 사항에 대해 알아본다.

2. 하드웨어 파악하기
(1) CPU : 인텔계열인지, 알파CPU인지 등의 종류를 알아야 하고 장착된 CPU의 갯수도 파악해야 한다.
(2) 하드디스크 : 하드디스크의 용량을 알아야 하고 SCSI방식인지 IDE인지 알아야 한다. 또한 IDE인경우에는 하드디스크가 장착된 위치(예를 들면 Primary Master, Secondary Slave등)도 알아야 하고 장착된 개수도 파악해야 한다.
(3) RAM : RAM의 용량이 얼마인지 꼭 알아야 하고, 또한 리눅스 버전에 따라 하드웨어가 지원되지 않을 수 있으니 메모리타입도 알아두면 좋다.
(4) 마우스: 마우스 타입(PS/2, USB, Serial 등)을 알아야 하고 버튼의 갯수, 제조사 등도 알아두면 좋다.
(5) 비디오카드: X-Window를 사용하기 위해서는 비디오카드의 칩과 RAM의 용량을 알아야 한다.
(6) 모니터 : 역시 X-Window를 사용하기 위해서는 알아야 한다.
(7) 네트워크 카드: 네트워크에 연결하여 사용하려면 Ethernet 카드를 알아야 하고 장착된 카드의 수도 알아야 한다. 추가로 IP주소, 넷마스크, 게이트웨이주소, DNS서버의 IP주소, 도메인 이름, 호스트이름 등도 알아야 한다.
(8) 기타장치: SCSI나 RAID등의 장비도 사용하면 정확히 정보를 알아야 한다.

3. 리눅스의 설치모드
(1) 설명: 레드햇 리눅스를 CD로 설치하면 부팅이 되면서 'boot:' 라는 프롬프트가 보여지게 된다. 레드햇 리눅스에는 다양한 모드의 설치 방법을 제공한다.
(2) 설치모드
1) [ENTER] : 리눅스 설치시 'boot:'라는 프롬프트에서 그냥 엔터키를 입력하면 그래픽한 모드의설치를 할 수 있다. 리눅스 설치 프로그램인 아나콘다(anaconda)에 의해서 고해상도 그래픽모드(800x600)로 리눅스를 설치할 수 있다. 아나콘다가 비디오카드를 자동으로 인식하여 보여주는데 만약 인식하지 못하는 경우에는 텍스트 화면 형태의 설치모드로 넘어간다. 처음부팅후에 1분동안 입력을 하지 않으면 자동으로 이 모드로 설치된다.
2) text: 텍스트 그래픽 화면으로 설치하는 모드이다. 비디오카드가 X 윈도우를 지원하지 않는 종류라면 이 모드로 설치해야 한다.
3) expert: 리눅스에 숙련된 사용자들이 사용할 수 있는 설치모드로 설치과정의 설정들을 직접할 수 있다. 'linux noprobe'와 'linux text noprobe'모드가 이에 속한다. 대부분의 하드웨어 탐색작업을 하지않고 설치 과정에서 직접 로드될 드라이버에 대한 옵션을 입력할 수 있도록 해주지만 초보자에게는 어려운 모드이다.
4) linux rescue: 리눅스 설치후에 부팅시 안된다든지의 시스템의 문제가 발생할 때 사용하는 모드이다.
5) lowers: 저해상도 모드인 640x480으로 리눅스를 설치할 때 사용한다. 고해상도 모드로 설치할 수 없는 경우에 사용하면 된다.
6) linux dd: 리눅스 설치 전에 리눅스를 지원하지 않는 하드웨어의 드라이버가 별도로 제공된 경우 이 모드를 선택하여 드라이버를 띄어 리눅스를 설치할 수 있다.
7) 시리얼모드(serial mode)를 이용한 설치
ㄱ. 설명: 시리얼 모드를 통하여 설치시에 사용한다.
ㄴ. 사용법
linux console=장치명
linux text console=장치명
ㄷ. 사용예
linux console=ttyS0
8) kickstart를 이용한 설치
킥스타트란 레드햇리눅스 설치시에 필요한 여려가지 선택들을 특정한 설정파일에 미리 넣어둠으로써 자동으로 설치하도록 지원하는 방법이다.
9) linux mediacheck: ISO이미지에 md5sum이 내장되어 있는데, 이 이미지의 체크섬 완결성을 테스트할 때 사용한다. ISO 이미지를 다운받아 생성된 모드 RedHat Linux CD인 경우에 체크해 볼 만 하다.
(3) 설치와 관련된 커널 옵션
1) 설명: 설치시에 커널에 옵션을 전달할 수 있다.
2) 사용예
linux mem=128M
=> 128MB의 RAM용량을 가진 시스템에서 커널이 RAM 용량을 모두 사용하도록 지시할 때 쓴다.

4. 리눅스의 설치시 고려점
(1) 설치 유형 설정: 레드햇 리눅스에서는 기본적으로 4개의 설치 유형과 1개의 업그레이드 설치를 제공하고 각각의 유형에는 장단점이 있다.
1) 레드햇 리눅스의 설치 유형
ㄱ. Desktop(데스크톱): 일반적인 PC용으로 사용할 때 쓴다. X-window가 설치되고 개인용이므로 멀티미디어 관련 응용프로그램 등이 설치된다. 레드햇 9.0 버전부터 메뉴로 나온다.
ㄴ. Workstation(워크스테이션): X 윈도우가 기본적으로 하나 이상 설치되는 설정이다.
ㄷ. Server(서버) : X 윈도우가 설치되지 않고 서버운영을 위한 설정이다.
ㄹ. Laptop(노트북) : 노트북 사용자를 위한 설정이다. 리눅스 버전에 따라 존재하지 않을 수있다. 레드햇 9.0에서는 이 메뉴가 빠져있다.
ㅁ. Custom System(사용자 설치): 사용자가 선택하여 설치하는 설정이다.
ㅂ. Upgrade Existing System(업그레이드설치) : 현재 사용중인 리눅스를 업그레이드할 때 사용한다.
2) 고려점: 워크스테이션이나 서버의 경우 프로그램상에서 파티션이나 디렉토리 설정을 자동으로 알아서 해주므로 설치가 굉장히 쉽다. 그러나, 이 두개의 모드를 선택하면 듀얼 부팅이라든지 파티션 용량 설정이라든지 설정이 불가능하다. 관리자라면 사용자 설치를 선택하여 파티션 및 디렉토리설정을 모두 파악하고 자기가 운영하는 시스템을 최적화해야 한다.
(2) 파티션 설정
1) 개요: 리눅스를 설치하기 위해서는 최소 2개의 파티션이 필요하다. 하나는 실제적으로 리눅스가 설치되는 파티션(Linux Native파티션으로 마운트포인트는 '/')과 다른 하나는 Swap파티션이다. 그러나, 좀 더 안전하고 편리한 관리를 위해서는 여러 개의 파티션 분할이 필요하다.
2) 파티션 분할의 장점
ㄱ. 백업하기가 용이하고 업그레이드 등의 관리가 쉽다.
ㄴ. 부팅이 빨라지고 서비스 거부 공격등의 대처할 수 있다.
ㄷ. 마운팅한 파일시스템을 관리하기 쉽고 각각의 파일시스템 용량을 제한할 수 있다.
ㄹ. SUID 제한을 주어 보안을 강화할 수 있다.
3) 권장 파티션
/ : root파티션으로 레드햇 권장서버는 256MB이다. /boot파티션을 별도로 나누지 않고 커널컴파일 등의 작업을 할 예정이면 500MB이상의 설정이 필요하다.
Swap : 스왑파티션으로 리눅스 운영체제의 가상메모리 영역이다. 512MB정도면 충분하다.
/usr : 리눅스 응용프로그램이 설치되는 공간이다. 최소 512MB가 필요하며 응용프로그램을 많이 설치한다면 그 이상의 용량이 필요하다. 요즘 버전에서 전체선택하여 전부 설치하려면 이디렉토리가 3-4GB 정도의 용량이 필요하다.
/var : 로그파일, 프린터 spool, 메일 등이 저장되는 디렉토리이다. 요즘에 스팸메일등의 영향으로 많이 설정해야 하는 파티션으로 부각되고 있다. 최소 256MB 이고 사용자나 메일등의 사용이 많으면 GB바이트 단위의 용량이 필요하다.
/home: 사용자의 계정이 등록되는 디렉토리로 사용자의 수에 따라 달라진다. 예를 들면 사용자당 10MB를 할당하고 사용자가 500명이라면 5GB를 할당하면 된다.
4) 기본 파티션 중 추가로 설정해도 되는 파티션
/boot: 모든 커널이미지가 저장되는 디렉토리로 커널컴파일등의 작업을 한다면 200MB 정도 설정 해주면 된다.
/tmp: 모든 사용자가 임시로 저장하고 사용하는 디렉토리이다. 경우에 따라 임의의 사용자가 모두 점령하여 사용할 수 있으므로 파티션을 따로 지정하는 것도 좋은 방법이다.
5) 시스템에 만들 수 있는 추가적인 파티션
/chroot: DNS, 아파치등을 chroot로 고립된 환경하에서 프로그램을 설치할 수 있다. 약 256MB정도 설정하면 되나 시스템 상황을 고려해서 더 늘어날 수도 있다.
/var/lib : Mysql이나 Squid등의 응용프로그램에서 사용할 라이브러리를 별도로 관리할 수 있다/ 약 1GB 정도 설정하면 된다.
6) 스왑파티션: 요즘은 메모리와 디스크 용량이 점점 대용량화되면서 예전에 권장하던 스왑파티션의 설정이 무색해지고 있다. 여러 상황을 고려하여 설정해야 한다.
ㄱ. 스왑의 크기와 관련된 상황
a. 설치된 메모리의 크기
b. 스왑 공간으로 사용이 가능한 디스크의 크기
c. 작동중인 응용프로그램
d. 동시에 작동하는 응용프로그램
ㄴ. 일반적인 스왑크기의 설정
a. 일반적으로 설치된 메모리의 용량의 2배정도하면 된다.
b. 간단한 서버인 경우에는 256MB 정도 설정한다.
c. 대용량 서버인 경우에는 최소 512MB를 설정하고 상황에 따라 그 이상도 설정한다.
7) 자동파티션 설정: 자동파티션을 선택하면 일일히 파티션을 지정할 필요가 없게되어 설치는 편하지만 기존의 파티션이 삭제된다. 만약 윈도우와 리눅스를 동시에 사용하는 경우라면 선택하지 않는 것이 좋다. 레드햇 9.0에서는 자동파티션을 선택하더라도 기존의 파티션을 보존하는 메뉴가 다시 나오기는 하지만, 될 수 있으면 수동파티션 설정을 권장한다.
8) 수동파티션 설정
ㄱ. 설명: 리눅스에서는 수동으로 파티션을 설정할 경우를 위해 fdisk방법과 Disk Druid 방법을 제공한다. 레드햇 9.0에서는 fdisk를 이용한 설치는 제공되지 않는다.
ㄴ. 종류와 장단점
a. Disk Druid: 레드햇 리눅스에서 제공하는 파티션 프로그램으로 그래픽한 환경에서 파티션을 설정할 수 있다.
b. fdisk: 리눅스 초기부터 사용하던 프로그램으로 Disk Druid보다 강력하게 파티션을 설정할 수 있다. 내가 원하는 파티션에 정확히 해당 마운트 포인트를 설정할 수 있고, 차후 리눅스 설치후에 Disk를 추가했다든지 파티션을 변경할 때 사용하므로 관리자는 이 명령을 이용한 설정을 정확히 알아야 한다.

5. 레드햇 리눅스 인스톨러(RedHat Linux Installer)
(1) 개요: 리눅스는 일반적으로 설치하는 방법인 CD-ROM을 이용한 방법뿐만아니라 NFS, FTP 등 네트워크를 이용한 설치방법도 제공한다. 따라서, 레드햇에서는 인스톨러를 First Stage Installer와 Second Stage Installer로 구분한다.
(2) First Stage Installer
1) 설명: 여러 형태의 설치방법이 존재하므로 각각의 설치방법에 따라 서로 다른 이미지 파일이 존재한다.
2) 종류
ㄱ. boot.img : Local CD-ROM, Hard Disk설치시에 사용하는 기본적인 이미지 파일이다. (레드햇 8.0 이전 버전에서 사용함)
ㄴ. bootnet.img : NFS Image, FTP, HTTP 등의 네트워크 설치시에 사용하는 이미지 파일이다. (레드햇 8.0 이전 버전에서 사용함)
ㄷ. bootdisk.img : 레드햇 9.0 버전에서 사용하는 이미지파일로 boot.img와 bootnet.img를 통합한 파일이다.
ㄹ. pcmcia.img : 노트북이나 랩톱(laptops)에 설치시 필요한 이미지 파일이다. (레드햇 8.0 이전에서 사용함)
ㅁ. pcmciadd.img : PCMCIA driver disk를 이용한 설치시 필요한 이미지 파일이다.
ㅂ. drvnet.img: 네트워크 장치 드라이버를 통한 설치시에 필요한 이미지 파일이다.
ㅅ. drvblock: 기타 다른 블록 디바이스를 통하여 설치시에 필요한 이미지파일이다.
(3) Second Stage Installer
실제적으로 설치를 진행하는 인스톨러로 그래픽모드와 텍스트모드로 제공된다.

6. 리눅스 설치와 가상콘솔
(1) 설명: 리눅스설치시에도 여러 개의 가상콘솔을 지원한다. 설치중에 창전환을 통해 여러 메시지를 확인할 수 있다. 최종적으로 설치시에 발생하는 로그는 /root/install.log에 기록된다.
(2) 가상콘솔 목록
1) [CTRL] + [ALT] + [F1] : 텍스트모드로 설치시에 보여지는 화면
2) [CTRL] + [ALT] + [F2] : Bash 쉘 화면
3) [CTRL] + [ALT] + [F3] : 인스톨과정에서 나타나는 메시지를 보여주는 화면
4) [CTRL] + [ALT] + [F4] : 커널에서 나타나는 메시지를 보여주는 화면
5) [CTRL] + [ALT] + [F5] : mke2fs와 grub 명령으로부터 출력되는 메시지를 보여주는 화면
6) [CTRL] + [ALT] + [F7] : 그래픽한 모드로 설치시에 보여지는 화면

Trackback
Reply

출처 : 대전국제 IT 교육센터 정성재 강사

 

. GNU와 FSF

(1) GNU

GNU란 재귀적 약어로 GNU's Not Unix 즉 "GNU는 유닉스가 아니다."라는 뜻이다. 리차드 스톨만을 주축으로 자유로운 소프트웨어를 희망하던 공동체들이 가장 먼저 운영체제인 유닉스를 모태로 개발을 시작하면서 이 말이 탄생되었다. GNU는 유닉스와 호환이 되도록 만들어진 운영체제이기는 하지만 유닉스와는 다른 운영체제라는 의미를 내포시키기 위해서 만들이름이라고 할 수 있다.
1984년에 시작된 프로젝트로 초기에는 이렇게 자유로운 UNIX를 만드는 데 목적이 있었으나 1990년 대에는 운영체제이외의 gcc, emacs 등 같은 응용프로그램도 만들었다.
(참고) 관련사이트:
http://www.gnu.org

(2) FSF(Free Software Foundation)

1) 개요: 비영리를 목적으로 하는 조직으로 GNU 프로젝트를 추진하는 단체이다. Free Software를 주창한다. 자유 소프트웨어라는 용어는 무료나 공짜라는 뜻은 아니다. 자유(Free)는 '구속되지 않는다'는 관점에서의 자유이다. 즉, 프로그램의 변경이나 수정의 자유를 말한다.

2) 자유 소프트웨어(Free Software)란?
ㄱ. 목적에 상관없이 프로그램을 실행시킬 수 있는 자유
ㄴ. 필요에 따라서 프로그램을 개작할 수 있는 자유(이러한 자유가 실제로 보장되기 위해서는 소스코드를 이용할 수 있어야 한다. 왜냐하면 소스 코드없이 프로그램을 개작한다는 것은 매우 어려운 일이기 때문이다.
ㄷ. 무료 또는 유료로 프로그램을 재배포할 수 있는 자유
ㄹ. 개작된 프로그램의 이익을 공동체 전체가 얻을 수 있도록 이를 배포할 수 있는 자유
3) 관련사이트:
http://www.fsf.org (http://www.gnu.org와 같다.)

(3) 카피레프트(Copyleft)와 GNU GPL

1) 카피레트트
ㄱ. 개요: 저작권을 뜻하는 Copy right의 반대를 뜻하는 의미에서 사용하였다. 저작권법을 근간으로 하지만 저작권법이 갖고 있는 주된 목적을 반대로 이용해서 소프트웨어를 개인의 소유로 사유화시키는 대신 자유로운 상태로 유지시키는 수단으로 삼는 것이다.
ㄴ. 핵심: 프로그램을 실행하고 복제할 수 있는 권리와 함께 개작된 프로그램에 대한 배포상의 제한조건을 별도로 설정하지 않는한, 개작과 배포에 대한 권리 또한 모든 사람에게 허용하는 것이다. 이러한 방법을 통해서 "자유 소프트웨어"라는 용어의 핵심인 "자유"를 모든 사람에게 보장할 수 있고 프로그램을 입수한 사람은 그 누구도 뺏을 수 없는 권리를 갖게 된다.
2) GNU GPL(General Public License): GNU 소프트웨어에서 카피레프트를 실제로 구현한 라이센스기준이다.

(4) 리눅스와 GNU/Linux

GNU 에서는 하나의 완성된 시스템을 만들기 위해서 HURD라는 이름의 커널을 개발중이었으나 하나의 제품으로 사용될 수 있을 말한 상태가 아니었다. 그러나 다행스럽게도 또 다른 커널이 사용 가능했는데, 1991년 리누스 토발스(Linus Torvalds)가 유닉스 커널과 호환가능하게 만든 리눅스라는 이름이 커널이 그것이었다. 1992년 무렵 GUN시스템과 리눅스를 결합함으로써 하나의 완성된 자유 운영체제를 만들 수 있었다. 현재 사용되고 있는 GNU시스템은 리눅스 덕분에 가능했던 것이라고 할 수 있다. 그래서 이 시스템을 GNU/Linux라고 부르는데, 이는 리눅스를 시스템 커널로 채용한 GNU시스템을 지칭한다.

2. 리눅스에 대하여

(1) 리눅스의 역사
리눅스를 커널을 지칭하는 말이다. 1991년 리누스 토발즈(Linus Torvalds)가 0.01버전의 리눅스를 인터넷상에 띄웠고, 곧 많은 해커들의 참여로 지속적인 커널로 개발되었다.

(2) 리눅스의 어원
리눅스는 커널 개발자인 리누스 토발즈(Linus Torvalds) + 유닉스 OS (특히 Minix라는 운영체제)의 합성어이다.

(3) 리눅스 커널의 특징: 리눅스는 Free Source Software로 커널코드의 대부분을 자유소프트웨어재단(FSF)의 라이센스 정책인 GNU GPL을 따른다.

(4) 리눅스의 특징
1) 유닉스와 같은 운영체제로 멀티유저, 멀티 태스킹 시스템이다.
2) 완전히 공개된 시스템이다.
3) 유연성과 확장성이 뛰어나다. - 다양한 하드웨어를 지원한다.
4) 강력한 네트워크를 지원하는 시스템이다.
5) 가격대 성능비가 매우 우수하다.

(5) 리눅스의 단점
1) 기술지원의 부족: 리눅스에서 사용되는 대부분의 응용프로그램들이 비상업적인 제품으로 인해
전세계에 흩어져 있는 개발자들이 일일히 기술지원을 하는 것이 불가능하다.
이로 인해 사용하면서 발생하는 문제점들은 모두 사용자의 몫이다.
2) 하드웨어 지원이 부족: 여전히 특정 하드웨어에 설치가 어렵고 모든 플랫폼에서 작동하지 않
는다.
3) 사용자의 숙련된 기술이 요구된다.

3. 리눅스배포판

(1) 개요: 리눅스는 오픈 소스(Open Source)에 기반을 두고 있기 때문에 다양한 리눅스 배포판이
나와 있다. 모든 배포판은 같은 리눅스 커널과 시스템 도구를 제공하지만 설치하는 방법
과 기본제공되는 응용 프로그램이 다르다. 각각의 배포판에는 장점과 단점이 있다. 배포
판에 대해 알아보자.

(2) 배포판의 종류
1) RedHat
ㄱ. 설명: 가장 인기있는 배포판으로 상용 리눅스 배포판 업체인 레드햇 소프트웨어사가 제공한다. 초보자들도 쉽게 설치할수 있다. 설치과정은 그래픽 사용자 인터페이스를 사용할 것인지 텍스트 기반의 인터페이스를 사용할 것인지 선택할 수 있다. 또한 RPM패키지방식을 사용하여 설치, 관리, 업그레이드 등이 용이하다. X 윈도우로 GNOME과 KDE를 동시에 제공하며 이 배포판은 인텔, 알파, SPARC 버전이 있다.
ㄴ. 사이트
http://www.redhat.com
2) Debian
ㄱ. 설명: 수많은 참여자가 참여하여 만들어진다. "The Debian Project"로 알려진 비영리기구가 제공하는 것으로 GNU가 공식적으로 후원한다. 이 배포판은 dpkg라는 유틸리티를 사용한다. 이 배포판은 인텔, 알파, 스팍, 모토롤러(매킨토시, 아미가, 아타리)용 버전이 나와있다.
ㄴ. 사이트
http://www.debian.org
3) SuSE
ㄱ. 설명: 상용소프트웨어로 독일업체인 S.u.S.E가 배포한다.유럽에서 선두의 자리를 지키고 있다. 이 배포판에는 KDE가 포함되어 있으며 쉬운 업그레이드와 패키지 관리를 위하여 'YaST'유틸리티를 제공한다. 이 배포판은 인텔용과 알파용 버전이 있다.
ㄴ. 사이트
http://www.suse.com
4) OpenLinux
ㄱ. 설명: 상용소프트웨어 업체인 칼데라사가 제공하는 기업사용자들을 목표로 하고 있다. 표준으로 KDE를 제공하며 이 배포판은 인텔용 버전만 있다.
ㄴ. 사이트
http://www.caldera.com
5) Linux Mandrake
ㄱ. 설명: 상용소프트웨어 업체인 MandrakeSoft S.A가 제공하는 것으로 프랑스의 배포판이다.
ㄴ. 사이트
http://www.linux-mandrake.com
6) Slackware
ㄱ. 설명: 월넛 크리크 소프트웨어사의 패트릭 폴커딩에 의하여 제공된다. 패트릭 폴커딩은 현재와 같은 리눅스 배포판의 원조에 해당하는 사람이다. 설치과정은 꽤 간단하지만 업그레이드와 패키지 관리 기능은 취약하다. 여전히 libc라이브러리에 기반하고 있다. 최신 버전은 glibc로 옮겨가고는 있다. 이 배포판은 리눅스에 친숙하고 기술이 뛰어나 사람에게 추천할 만 하다. 이 배포판은 인텔 버전만 있다.
ㄴ. 사이트
http://www.slackware.com
7) 기타: 터보리눅스(
http://www.turbolinux.com) 등 그외에도 많은 리눅스가 존재한다.

(3) 국내 리눅스 배포판 업체
1) 와우리눅스
http://www.wowlinux.com
2) 한컴리눅스
http://www.hancom.com
3) 미지리눅스
http://www.mizi.com

4. 리눅스문서관련사이트

(1) 외국

1)
http://www.linuxdoc.org
=> 최신의 리눅스문서를 볼 수있는 사이트로
http://www.tldp.org와 같다. tldp는 The Linux Documentation Project의 약자이다.
2)
http://www.linux.org
=> 리눅스의 전반적인 정보를 알 수 있다.
3)
http://www.linux.org.uk
=> 리눅스 커널의 네트워크 관련 코드 개발 책임자인 Alan Cox가 운영하는 사이트로 리눅스
네트워크와 커널에 관한 내용을 얻을 수 있다.
4)
http://www.linux.com
=> 리눅스 거대회사인 VA Linux System이 운영하는 사이트로 많은 리눅스 정보와 데이터를
제공한다.
5)
http://www.slashdog.org
=> 리눅스 제품 정보와 최신 뉴스가 빨리 업데이트되는 사이트이다.
6)
http://www.freshmeat.net
=> 리눅스의 마스코트 펭귄이 좋아한다는 신선한 고기(freshmeat)를 의미한다. 최근의 리눅스 소식과 관련된 사이트 링크를 위주로 질높은 정보를 제공하는 사이트이다.
7)
http://www.linuxgazette.com => 리눅스 저널 관련 사이트이다.

(2) 국내
1)
http://www.kldp.org
=> Korean Linux Documentation Project의 약자로 한국 리눅스문서 사이트이다. 많은 정보를 얻을 수 있는 사이트이다

Trackback
Reply

출처 : 대전 국제 IT 교육센터 정성재 강사

 

1.유닉스란?

유닉스란 일종의 운영체제(OS:Operating System)이다. 운영체제란 컴퓨터를 구동시키는 가장 기본적인 프로그램을 말한다. 흔히 접하는 MS-DOS, Windows 95,Windows 98, Windows NT, Windows 2000,Windows XP ,LINUX 등이 OS이다.대부분의 OS는 한 곳에서 개발배포하지만, 유닉스는 여러종류가 있고, 여러 종류의 시스템에 이식되어 사용되고 있다. 개발되어 있는 OS는 물론 새로이 개발되고 있는 OS들도 유닉스의 영향을 많이 받고 있다. 유닉스는 현재 OS세계에서 최고의 위치를 차지하고 있다.

2.유닉스의 역사와 종류

유 닉스는 1969년 미국의 AT&T사의 Bell연구소에서 연구원으로 근무하고 있던 Ken Tomson 이라는 사람에 의해 만들어졌다. Ken Tomson은 DEC사에서 만든 PDP-7이라는 컴퓨터에서 프로그램을 개발하는데 편리한 운영체제를 새로이 개발하면서 Multics라는 OS를 참고로 하였기 때문에 Unix라는 이름을 붙여 주었다. 그후 AT&T에서 무료로 여러 연구소 및 대학교등에 OS를 Source와 함께 보급하여 여러 버젼의 유닉스가 등장하였다. 대표적인 것으로는 System V계열과 BSD계열이 있다. System V계열은 AT&T사가 주도하는 유닉스계열이며, AT&T사와 Sun Microsystem사가 여기에 속하고, BSD계열은 버클리대학에서 만든 것으로 BSD(Berkeley Software Distribution)계열에는 IBM, DEC, Hewlett-Packard사 등이 있다.

3.유닉스의 특징

(1)Multi-user가능 : 한 대의 기계를 여러 명의 사용자들이 동시에 사용 가능하다.
(2)Multi-Tasking을 지원 : 한꺼번에 여러가지 일을 할 수 있다.
(3)강력한 Network기능 지원: Ethernet(Lan card규격)과 TCP/IP를 이용한 Network 시스템을 지원하며 오늘날 최대의 통신망인 Internet도 바로 이 시스템을 근간으로 운영되었다.
(4)뛰어난 이식성을 지님 : 유닉스는 약간의 어셈블리와 대부분의 C언어로 작성되어 있기때문에 C를 컴파일 할 수 있으면 어셈블리 부분만 새로 만들고, C부분을 다시 컴일함으로써 쉽게 다른 시스템에 이식할 수 있다.
(5)계층적 파일 구조를 가지고 있음.
(6)가상메모리와 Shared Library를 지원
(7)프로세스간의 통신을 위하여 Pipe라는 기능을 제공

4.유닉스의 구성

(1) 개요: 기본적으로 커널(kernel),쉘(shell),유틸리티(utility)세 부분으로 구성되어 있으며,C와 다른 언어의 Compiler등이 있다.
(2) 구성요소
1)Kernel : 운영체제의 핵심으로 사람으로 비유하면 뇌에 해당한다. kernel은 예전 도스의 'MSDOS.SYS','IO.SYS'를 Load하는 것과 같이 유닉스가 부팅될 때 처음 로드된다. 커널의 기능은 시스템의 하드웨어를 제어하는 임무로 메모리, CPU,디스크, 단말기, 프린터등의 시스템자원 활용도를 높이기 위한 스케줄링과 자료관리 등의 핵심요소다.
2)Shell : Shell은 커널과 사용자간의 다리 역할을 하는 것을 사용자로부터 명령을 입력받아 그것을 해석하고 프로그램을 실행하는 역할을 한다. 즉, 컴퓨터에 사람이 명령을 내려 수행해야 하는데 컴퓨터의 모든 하드웨어는 부팅하면서 커널이 인식하게 된다. 사용자가 하드웨어를 제어하려면 커널에게 명령을 내려야 한다. 하지만 커널은 사람의 명령을 알아 듣지 못한다. 이 때 중간에서 사람의 명령을 받아 커널에서 전달해주는 역할을 하는 것이 Shell이다. 한마디로 사람과 커널간의 통역자이다. 유닉스에는 SHELL이 있는데 전통적으로 많이 쓰는 Shell에는 'Bourne Shell','C Shell', 'Korn Shell'등이 있다.
3)Utilty : 말 그대로 유용한 도구이다. 사용자가 특정한 문서의 내용을 찾아 바꾸려고 한다면 찾기명령을 수행하고 수정명령도 내려야 한다. 그러나 이러한 기능을 한번에 [찾아-바꾸기]를 할 수 있는 프로그램이 있다면 이러한 것을 유틸리티라고 한다.


5.유닉스 기본적인 특징

(1) Device와 파일 : Device란 하드디스크, 키보드, 프린트, 화면 출력 장치 등 시스템에 설치된 여러 가지 자원을 말한다. 유닉스에서는 이것들을 모두 파일로 취급한다. 따라서 특정 하드웨어에게 명령을 수행하려면 특정 파일에 명령을 내리면 된다.
예) eject /dev/cdrom
=> CD-ROM드라이브의 트레이(Tray)를 연다.

(2) 유닉스의 파일구조
유 닉스의 파일구조는 /(root)를 기준으로 그 하위 디렉토리에 usr, var, bin 등이 존재하고 다시 usr 디렉토리 밑에는 local, src등의 디렉토리가 존재한다. 이러한 구조를 계층적 파일 구조라하며, 거꾸로 뒤집에 놓으면 나무처럼 생겼다고 해서 Tree구조라고도 불리운다.

(3) pipe와 redirection

1) pipe
ㄱ. 유닉스가 프로세서의 통신을 위해 도입한 것으로 어떤 프로세스의 표준 출력이 다른 프로세스의 표준입력으로 쓰이게 하는 것.
ㄴ. pipe가 여러 개 연결되어 pipe-line을 구성하게 되면 자료들은 pipe-line를 따라 흐르게 된다.
예) ls | more
=> ls 명령의 출력이 more라는 filter의 입력으로 사용되어 결과가 한 화면씩 출력된다.
ls | sort | more
=> ls의 결과인 자료들은 sort를 통해 정렬되고, 다시 more를 통해 한 화면씩 출력된다.
2) redirection : 기본개념은 pipe와 유사하다. 이것은 프로세스의 표준 출력 방향을 바꾸거나 표준 입력을 바꾸는 역할을 한다.
예) aa > zz : aa의 실행결과를 zz라는 파일에 저장하라는 의미
aa >> zz : aa의 실행결과를 zz라는 파일에 덧붙이라는 의미
aa < zz : aa를 실행하면서 표준입력으로 파일 zz의 내용을 사용하라는 의미

(4) 가상메모리와 Shared Library

1) 가상메모리(Virtual Memory)
ㄱ. 개념: 하드디스크의 일부를 메모리처럼 사용되는 것을 말한다. 하드디스크는 데이터가 저장되는 공간이고, RAM(메모리)는 작업공간이라 할 수 있다. 프로그램을 실행시키면 작업공간에 해당하는 메모리로 공간이 이동되는 데, 메모리의 공간이 작으면 큰 프로그램은 실행시킬 수 없게 된다. 이러한 문제점을 극복하기 위해 사용되는 것이 가상메모리이고,
유닉스에서는 SWAP이라고 부른다.
ㄴ.Swapping : 메모리에 프로그램들이 많이 올라와 공간이 꽉 찼다고 하더라도 가상메모리를 설정하면 또다시 새로운 프로그램을 실행시킬 수 있게 된다. 이것은 메모리에 올라와 있지만 사용하지 않고 있는 프로그램을 하드디스크에 설정된 가상 메모리 공간으로 보내고 그 빈 공간에 새로운 프로그램을 로딩하기 때문이다. 또한 가상메모리에 있는 내용을 사용하려면 다시 메모리로 올리고, 그 대신에 메모리에 있던 다른 내용이
하드디스크에 저장된다. 이처럼 메모리와 하드디스크사이의 데이터교환을 스왑핑(swapping)이라고 한다.
2) Shared Library
ㄱ. 설명: 프로그램에서 특정한 기능을 하는 routine들을 모아 놓은 것을 library라 하여, 프로그램 개발시 library중에서 필요한 routine들을 받아서 link시킨다. 이렇게 되면 같은 기능을 하는 routine들이 실행파일마다 들어가므로 실행파일의 크기도 커지고 메모리도 남게된다. 그래서, 같은 routine들을 공유하는 것이 Shared Library이라 한다.
ㄴ. 사용법 : 프로그램 실행시 library이름과 함께 OS에 요청하면 OS가 찾아서 프로그램에 Link시켜준다.
ㄷ. 장점 : 실행파일의 크기가 작아져 디스크의 낭비가 적어지고, 여러 프로그램에서 같은 library에 있는 routine을 사용시 한번만 load하면 되므로 메모리가 절약된다.
ㄹ.기타 : MS-Windows나 OS/2의 DLL(Dynamic Link Library)와 비슷하지만 유닉스가 훨씬 더 효율적으로 지원한다.

6. 유닉스 파일시스템의 특징

1) 파일 이름 : 유닉스의 파일이름은 종류마다 다르지만 보통 14자에서 255자까지 지원한다. 또한 도스에서처럼 파일을 이름과 확장자로 나누지 않는다. 유닉스 파일이름 안에 들어 있는 '.'은 이름과 확장자를 구별하는 것이 아니고, 그냥 이름의 일부분이다. 하지만 유닉스파일 이름에서 '.'으로 시작하는 파일은 hidden파일로 취급받아서 보통의 경우에는 보이지 않는다. 또한 유닉스는 대,소문자를 구별한다.
2)파일 속성 : 도스 파일에는 Archive,Hidden, System, Read Only등 4가지 속성이 있다. 유닉스 파일도 속성을 가지고 있지만, 도스와는 다르다. 유닉스의 파일속성은 기본적으로 읽기(r), 쓰기(w), 실행(x)의 속성을 가지고 있으며, 디렉토리도 파일과 똑같이 취급하므로 디렉토리임을 표시하는 속성(d)도 있다. 물론 디렉토리도 r,w,x의 속성을 가지고 있다. 유닉스에서는 이러한 파일 속성에 의해 파일에 접근할 수 있는 권리가 정해지므로 이것을 허가권(Permmission)이라고 한다.

7. 유닉스 명령어의 특징(도스와 비교)

(1) 모든 명령어가 파일의 형태로 존재하고, 도스에 비해 상당히 많다.
(2) 대소문자를 구분한다.
(3) 도스에서는 옵션사용시 /(슬래쉬)를 사용하지만 유닉스에서는 -(대쉬)를 사용한다.
(4) 유틸리티마다 다르지만 많은 유틸리티들이 option을 같이쓰는 것을 허용한다.
예를 들면 ls -alF는 ls -a -l -F와 같은 의미이다.
(5) 긴파일의 이름도 지원한다.(리눅스에서 기본적으로 255자까지 사용가능)
(6) 메타문자(도스의 와일드카드)인 *,?를 사용한다.

Trackback
Reply
우주곰:지구곰이 아닙니다.
지구곰이 아닙니다.
Categories (190)
Information (5)
About uzoogom (5)
My Advanced Linux (73)
Learning Linux (96)
OperatingSystem (5)
Databases (4)
OpenSource (1)
Tips! (1)
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31