RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'Linux'에 해당되는 글 103

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

 

1. cal(calender)
(1) 설명: 달력을 보여주는 명령이다. 옵션없이 실행시키면 현재 시스템 날짜로 기록된 달을 보여
          준다.
(2) 사용법
   cal [option] [[month] year]
   cal mm yyyy
(3) option
   -j : 1월1일부터 날짜수를 계산하여 출력해준다.
   -y : 올해의 달력을 표시한다.
(4) 사용예
   1) [posein@www posein]$ cal
            May 2003
      Su Mo Tu We Th Fr Sa
             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
       => 현재 시스템이 속한 달의 달력을 보여준다.
   2) cal 2001
       => 2001년도의 달력을 1월부터 12월까지 보여준다.
   3) cal 1 1993
       => 1993년 1월의 달력을 보여준다.
   4) [posein@www posein]$ cal -j
                May 2003
      Sun Mon Tue Wed Thu Fri Sat
                121 122 123
      124 125 126 127 128 129 130
      131 132 133 134 135 136 137
      138 139 140 141 142 143 144
      145 146 147 148 149 150 151
       => 특별한 년월을 지정하지 않으면 현재 속해있는 달의 날짜수를 1월 1일기준으로 계산하여
         출력한다.
   5) cal -y
       => 올해의 달력을 출력한다.

2. date
(1) 설명: 시스템의 날짜와 시간을 표시하거나 변경한다. 도스의 'date'와 'time'명령과 유사하다.
(2) 사용법
   date [option] [MMDDhhmm[[CC]YY][.ss]]
   date [option] [+FORMAT]
    => (설명)
      MM  : 월(01~12)
      DD  : 일(01~31)
      hh  : 시(00~23)
      mm  : 분(00~59)
      CC  : 연도의 앞 두자리
      YY  : 연도의 뒤 두자리
      .ss : 초(00~59)
(3) option
   -s : 시간을 설정하는 옵션이다. 순서는 'hh:mm:ss'이다.
   (참고) 추가적인 옵션은 date --help 로 확인한다.
(4) FORMAT
  1) 설명: +기호와 함께 사용하며 날짜와 관련된 원하는 출력형태를 제공한다.
  2) 종류
    %% : % 기호를 출력한다.
    %a : 요일을 간략하게 출력한다. (예: Wed)
    %A : 요일을 전체단어로 출력한다. (예: Wednesday)
    %b : 월을 간략하게 출력한다. (예 Apr)
    %B   월을 전체단어로 출력한다. (예 April)
    %c : 'Wed May  7 00:54:17 2003' 형태로 날짜와 시간을 출력한다.
    %C : 세기(Century)를 보여준다. 연도를 100으로 나눈 정수값을 보여준다.
    %d : 날짜만 보여준다. (예 07)
    %D : '05/07/03'형태로 날짜를 보여준다.
    %e : 한칸 띄우고 날짜만 보여준다. (예 7)
    %F : '2003-05-07'형태로 날짜를 보여준다.
    %g : 연도끝 두자리만 보여준다. (예 03)
    %G : 4자리수로 연도를 보여준다. (예 2003)
    %h : %b 와 같은 역할을 하는 것으로 월을 간략하게 출력한다. (예 Apr)
    %H : 24시형태(00~23)로 시간만 출력한다. (예 23)
    %I : 12시형태(00~12)로 시간만 출력한다. (예 01)
    %j : 1월 1일을 기준으로 오늘의 날짜수를 계산해준다.
    %k : 24시형태(00~23)로 시간만 출력한다. (예 23) %H와 같다.
    %l : 12시형태(00~12)로 시간만 출력한다. (예 01) %I와 같다.
    %m : 숫자값형태(01~12)로 월을 출력한다. (예 05)
    %M : 분(00~59)을 출력한다. (예 47)
    %n : 줄을 바꾸어준다.(newline)
    %N : 나노초(Nanoseconds)형태로 출력해준다. 지원하지 않을 수도 있다. (예 000000000)
    %p : 오전/오후를 대문자 약어로 표기해준다. (예 AM)
    %P : 오전/오후를 소문자 약어로 표기해준다. (예 am)
    %r : '01:50:01 AM' 형태로 시간을 출력한다.
    %R : 24시 형태로 시간만 출력한다. (예 01:50)
    %s : 1970년 1월 1일 00:00:00 이후의 초값을 출력해준다. (예 1052239845)
    %S : 현재 초값을 출력해준다. (예 01)
    %t : 탭역할을 한다.
    %T : '01:52:37' 형태로 시간을 출력해준다.
    %u : 요일을 숫자값(1~7)으로 출력해준다. 월요일이 1이다. (예 3)
    %U : 올해가 시작한 이래 지난 일요일의 갯수를 출력해준다. (예 18)
    %V : 올해가 시작한 이래 지난 월요일의 갯수(01~53)를 출력해준다. (예 19)
    %w : 요일을 숫자값(0~6)으로 출력해준다. 일요일이 0이다.
    %W : 올해가 시작한 이래 지난 월요일의 갯수(00~53)를 출력해준다. (예 18)
    %x : '05/07/03'형태로 날짜를 출력해준다.
    %X : '01:58:01'형태로 시간을 출력해준다.
    %y : 년도의 마지막 2자리만 출력해준다. (예 03)
    %Y : '2003'형태로 년도를 출력해준다.
    %z : 타임존값을 출력해준다. (예 +0900)
    %Z : 'KST' 형태의 타임존값을 출력해준다.
(5) 사용예
   1) date
      => 현재 설정된 날짜와 시간을 표시한다.
   2) date 0416182501
       => 현재시간을 2001년 4월 16일 오후 6시 25분으로 설정한다. 순서는 다음과 같이
         '월/일/시/분/년도'순으로 두자리씩 차지한다.
   3) date -s 06:40:20
       => 현재시간을 오전 6시 40분 20초로 한다.
   4) [posein@www posein]$ date +%A
      Wednesday
   5) [posein@www posein]$ date +"Today is %A, %B %d, %Y.%nThe time now is %r, %z."
      Today is 금요일, 일월 10, 2003.
      The time now is 11:24:23 오후, +0900.
(6) 관련명령
   clock -w => 현재의 시간을 CMOS의 시계에 맞춘다.

(참고1) 시스템 시간에 대하여
시스템의 정확한 시간 설정을 위해서는 먼저 타임존(Time zone)을 설정해야 한다. 즉 서로 다른
지역에서의 정확한 시간을 위해 GMT(Greenwich Mean Time)에 기초하여 시간을 설정한다. 보통 GMT는
UTC(Universal Time Clock)으로도 많이 알려져 있다. 타임 존 설정을 timeconfig 명령을 실행하여
설정할 수 있고, 하드웨어 클럭을 GMT에 맞게 설정할 수도 있다.

3. rdate
(1) 설명: 원격으로 시간을 맞추어 주는 명령으로 다른 서버의 시간을 참조하여 표준시간으로 설정
          하는 명령이다. 이 명령어는 해당서버의 NTP(Network Time Protocol)서버시간을 참조한다.
(2) 사용법
    rdate option 원격지서버
(3) option
   -p : 원격지서버의 시간을 출력해준다.
   -s : 원격지서버의 시간을 시스템의 시간으로 설정한다.
(4) 사용예
   1) rdate -s time.bora.net
       => bora.net의 시간을 현재 서버의 표준시간으로 맞춘다.
   2) rdate -s time.kriss.re.kr
       => 표준과학연구원의 시간을 표준시간으로 맞춘다.
   3) [root@www root]# rdate -p time.bora.net
      rdate: [time.bora.net]  Fri May  9 16:13:03 2003
        => 원격지서버의 시간을 출력한다.


4. uname
(1) 설명: 시스템 정보를 출력해주는 명령이다. OS의 버젼이나 vender, machine type등을 알 수
          있다.
(2) 사용법
   uname [option]
(3) option
   -m : 기계의 hardware이름을 알려준다. arch 명령과 같다.
   -n : 네트워크상의 nodename을 알려준다. 일반적으로 호스트네임을 말한다.
   -r : OS의 release를 알려준다.
   -s : 시스템 이름을 알려준다. 옵션없이 실행시킨 것과 같다.
   -p : 프로세서의 타입을 알려준다.
   -v : OS의 버젼을 알려준다. 커널의 생성날짜이다.
   -a : 위의 모든 정보를 보여준다.
(4) 사용예
   1) [root@www root]# uname -a
      Linux www 2.4.18-14 #1 Wed Sep 4 13:35:50 EDT 2002 i686 i686 i386 GNU/Linux
        => 시스템의 모든 정보를 보여준다.
   2) [root@www root]# uname -r
      2.4.18-14
        => 커널버전만 출력한다.

5. dmesg
(1) 설명: 부팅시 커널에 출력되는 상태 정보를 볼 수 있도록 하는 프로그램이다.
(2) 사용법
    dmesg

6. sleep
(1) 설명 : 이름 그대로 잠시 쉬게 하는 명령이다.
(2) 사용법
   sleep 시간
    => 기본시간은 초단위이다. 분(m), 시간(h), 날짜(d)도 가능하다.
(3) 사용예
   1) sleep 3
       => 3초간 쉰다.
   2) [posein@www posein]$ ls ; sleep 5 ; ls
       => ls 명령후 5초간 대기한후 다시 ls명령을 실행한다.

7. tty
(1) 설명: 현재 로그온되어 있는 터미널의 장치 이름을 알려준다. 보통 텔넷등으로 동일한 계정으로
          여러 개 로그인했을 경우 확인할 때 유용하다.
(2) 사용법
   tty
(3) 사용예
   [posein@www posein]$ tty
   /dev/pts/3

Trackback
Reply

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

 

1. 압축에 대하여
압축은 파일의 크기를 작게 만드는 것이다. 파일의 크기를 작게 만듬으로써 파일의 전송이나 다운로
드시 시간을 절약할 수 있다. 일반 텍스트 파일인 경우 최대 75%까지 압축이 가능하다. 그러나 바이
너리 파일인 경우에는 압축이 거의 되지 않거나 오히려 파일의 크기가 더욱 커질 수도 있으니 유의해
야 한다.

2. 압축 관련 명령어
(1) bzip2
   1) 설명 : 새로운 리눅스용 압축 프로그램이다. 전통적인 압축 프로그램이 gzip보다 압축율이
            매우 뛰어나다. 보통 gzip으로 압축한 것의 60-70%의 크기로 만든다. 압축으로 생성된
            파일 뒤에 .bz2를 붙이면 된다. 일반적인 사용법과 옵션은 gzip과 유사하다.
   2) 사용법
     bzip2 [options] 파일명
   3) option
     -d : 압축을 푸는 옵션이다.
     -f : bzip2와 bunzip2는 기본적으로 존재하는 파일을 덮어쓰지 않는다. 덮어쓰기 등의 명령을
        내릴 때 사용하는 옵션이다.
   4) 사용예
     ㄱ. [posein@www posein]$ bzip2 www.tar
           => www.tar라는 파일을 압축한다. 특별한 옵션없이 명령을 내리면 www.tar.bz2 라는 파일
             이 생성된다.
     ㄴ. [posein@www posein]$ bzip2 -d www.tar.bz2
           => www.tar.bz2 파일의 압축을 푼다. 기본적으로 bzip2 -d 는 bunzip2 명령과 같다.
(2) bunzip2
   1) 설명: bzip2로 압축된 파일을 풀 때 사용하는 명령이다.
   2) 사용법
     bunzip2 [options] 압축된_파일명
   3) 사용예
     [posein@www posein]$ bunzip2 www.tar.bz2
       => www.tar.bz2라는 파일의 압축을 푼다. www.tar라는 파일이 생성된다.
(3) zip와 unzip: 레드햇 리눅스에서 DOS/WINDOWS 계열의 zip과의 호환성 유지를 위해 사용되는 명
                 령으로 사용법은 다른 압축 프로그램과 유사하다. zip이 압축할 때, unzip은 압축
                 풀 때 사용하는 명령이다.
(4) tar
   1) 설명: 일반적으로 tar는 파일이나 디렉토리를 묶을 때 사용한다. 전통적인 유닉스의 tar는
          묶는 기능만을 할 뿐 압축을 하지 못한다. 그러나, 리눅스의 GNU tar는 GNU gzip 압축을
          위한 z command 이외에 최신의 리눅스 압축프로그램인 bzip2도 -j command을 통하여 지원
          한다. 추가적으로 백업시 필요한 command을 알아본다
   2) 사용법
     tar command 디렉토리
   3) command
     -p : 해당 파일이나 디렉토리의 퍼미션을 그대로 유지한다.
     -g list : 증분백업(incremental backup)에 사용되는 옵션으로 백업과 동시에 list라는 파일에
              저장한 목록을 기록한다.
     -C : 묶여진 파일을 풀 때 디렉토리를 변경할 수 있다.
   4) 사용예
    ㄱ. tar cvpf home.tar /home
         => /home 디렉토리의 모든 내용을 퍼미션을 그대로 유지하면서 home.tar로 묶는다.
    ㄴ. tar -g list -cvpf home.tar /home
         => /home이라는 디렉토리를 home.tar라는 파일로 묶고 list파일 목록파일도 만든다. 처음에
           는 전체백업이 된다. 다시 시도하면 증가된 부분만 백업하므로 생성되는 파일명을 변경하
           도록 한다. 예를 들면 "tar -g list -cvpf home1.tar /home"
    ㄷ. tar xvpf home.tar -C /home
         => home.tar의 퍼미션을 그대로 유지하면서 /home이라는 디렉토리에 푼다.

Trackback
Reply

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

 

1. tar
(1) 설명 : 파일들을 하나의 파일로 묶는 명령이다. 파일을 묶을 때 디렉토리를 지정하면 그 디렉
           토리의 모든 파일과 서브디렉토리들이 함께 묶여진다. 또한 파일의속성, 하드링크,
           심볼릭 링크등도 고스란히 보존된다. 보통 압축명령 gzip명령과 함께 쓰여 tarball파일
           (.tar.gz)을 생성한다.
(2) 사용법
   tar command file(s)
(3) command : 일반적으로 -(dash)를 사용하지 않아도 된다.
   c : 지정한 파일이나 디렉토리를 하나로 묶어 새로운 tar 파일을 생성한다.
   x : 기존의 생성된 tar파일을 푼다.
   v : 어떤 명령을 실행할 때 대상이 되고 있는 파일들을 보여준다. 예를 들면 c명령과 같이 쓰면
      묶여지는 동안 파일의 이름을 보여준다.
   f filename : 작업 대상이 되는 tar파일의 이름을 지정한다. filename대신 '- '를 쓰면 표준입
               력/표준 출력이 된다. '-'는 파이프를 이용한 명령에서 많이 쓰인다.
   r : 기존의 tar파일 뒤에 파일을 추가한다.
   t : tar파일안에 들어 있는 파일들의 리스트를 보여준다.
   h : 심볼릭 링크가 가리키고 있는 파일을 저장한다. 원래 tar는 심볼릭링크가 있는 경우, 그 링크
      를 그대로 저장하는데, 이 옵션을 주면 링크 자체 대신에 링크가 가리키고 있는 파일을 저장
      한다.
   p : 파일의 생성되었을 때의 권한을 그대로 유지하게 해준다.
   z : zip옵션으로 최근에 추가되었다. 묶는 것과 동시에 압축을 해준다. 보통 .tgz(.tar.gz)이라는
      확장자를 사용한다.
(4) 사용예
   1) tar cvf cc.tar *.c => 현재디렉토리에서 *.c로 된 모든 파일을 cc.tar
                           파일로 묶어라.
   2) tar cvf posein.tar posein/ => posein이라는 디렉토리와 서브디렉토리의 모든파일을 posein
                                   .tar로 묶는다.
   3) tar xvf cc.tar => 현재 디렉토리에 cc.tar파일을 푼다.
   4) tar tvf cc.tar => cc.tar의 내용을 보여준다.
   5) tar rvf cc.tar test.txt => 현재 디렉토리에 있는 test.txt라는 파일을 cc.tar라는 파일에
                                추가하여 묶는다.
   6) tar cvfz ccc.tgz *.c => 현재 디렉토리에서 *.c로 끝나는 파일을 모두 묶어서 ccc.tgz라는
                             파일로 압축한다.
   7) tar zxvf php-4.0.4.tar.gz => 압축해제와 묶여짐을 동시에 푼다.
(5) 참고: tar 어원의 유래
    원래 tar는 테이프 관련장치를 백업할 때 사용하는 명령이었다. 그래서 tar의 어원도 tape
   archive의 약어이다.

2. compress/uncompress/zcat
(1) 설명 : 전통적으로 유닉스에서 쓰여왔던 압축 프로그램이지만 압축률이 낮아 현재는 많이 쓰이
           지는 않는다.
(2) 사용법
   compress [option] file
     => 파일을 압축하는 명령이다.
   uncompress [option] file
    => 압축된 파일을 푸는 명령이다.
   zcat file
    => 압축되어 있는 텍스트파일의 내용을 풀어서 보여주는 명령이다.
(3) option
   -c : 표준 출력으로 쓴다. 일반 출력시는 생략가능하지만, tar 등과 병행해서 사용시는 반드시
       표기해야 한다. zcat은 uncompress -c와 똑같다.
   -v : 압축율을 화면에 보여준다.
(4) 특징 : 파일 이름이 생략되면 표준입력을 사용하고, 이때 출력 역시 표준 출력으로 보내진다.
           압축된 파일은 이름 뒤에 .Z가 붙게되고 원래파일은 지워진다. uncompress는 파일 이름을
           써줄때 무조건 파일 이름 뒤에 .Z를 붙여서 해석하므로 파일 이름 뒤에 .Z가 붙지 않은
           파일은 압축을 풀 수가 없다.
(5) 사용예
   1) [posein@www posein]$ compress text.txt
       => compress 명령을 옵션없이 사용하면 기본적으로 파일이름뒤에 .Z 를 붙여 압축파일을
        생성한다. 즉'text.txt.Z' 라는 파일이 생성된다.
   2) tar cvf - * | compress > backup.tar.Z
       => 현재 디렉토리의 모든 파일을 tar로 묶어 압축한 다음 결과를 backup.tar.Z로 저장한다.
   3) uncompress -c backup.tar.Z | tar xvf -
       => backup.tar.Z라는 파일을 압축을 푼 후 결과로 나온 tar파일을 현재 디렉토리에 푼다.
         'zcat backup.tar.Z | tar xvf -' 와 같다.
   4) [posein@www posein]$ zcat text.txt.Z
      I love linux
      I love windows
      I love unix
       => 압축되어 있는 text.txt.Z 파일의 내용을 보여준다.
   5) compress txt.tar
       => txt.tar파일을 압축한다. 결과로 txt.tar.Z이라는 파일이 생성된다.
   6) zcat txt.tar.Z
       => 묶여져 있는 텍스트파일의 내용을 화면상으로 보여준다.

3. gzip
(1) 설명 : GNU에서 만든 압축 프로그램으로 유닉스 표준 압축프로그램은 아니지만, 압축율이 뛰어
           나다. 이것 역시 파일을 묶는 기능이 없으므로, 여러 개의 파일들을 묶으려면 tar와 같이
           써야한다.
(2) 사용법
   gzip [option] file
    => 파일이름이 생략되면 표준 출력을 사용하며 원래 파일이름뒤에 .gz라는 이름을 붙이고 압축을
      해제하거나 압축할 때 기존의 파일을 지운다.
(3) option
   -d : 압축을 푸는 옵션이다.
   -1 : 파일을 압축하는 시간을 줄인다. 이 옵션을 사용하면 압축은 빠르지만 압축율이 떨어진다.
   -9 : 파일을 최대로 압축한다. 시간이 많이 걸린다.
   -r : 서브디렉토리까지 압축을 한다.
   -c : 출력을 표준 출력으로 보낸다. tar등과 병행해서 쓸 경우 꼭 필요하다.
(4) 사용예
   1) gzip -9 -r * => 현재 디렉토리와 서브디렉토리의 모든 파일을 최대효율로 압축한다.
   2) gzip -cd aa.tar.gz | tar xvf -
       => aa.tar.gz이라는 파일의 압축을 해제후 tar를 사용하여 현재디렉토리에 푼다.
(5) 참고
   1) 압축을 할때 : gzip 파일명
   2) 압축을 풀때 : gzip -d 파일명 = gunzip 파일명
   3).tgz파일 : .tar.gz로 인식하여 .tgz가 붙는 파일을 풀면 .tar가 붙은 파일이 생기게 된다.

4. gunzip
(1) 설명: gzip으로 압축된 파일을 풀 때 사용한다.
(2) 사용법
   gunzip [option] file
(3) option
   -d: 압축을 풀 때 사용한다. 생략해도 기본값이다.
(4) 사용예
   1) [posein@www posein]$ gunzip *.gz
       => 현재디렉토리에서 *.gz으로 끝나는 파일 전부푼다. gzip -d 사용한 것과 같다.
   2) [posein@www posein]$ gunzip -d *.gz
       => 현재디렉토리에서 *.gz으로 끝나는 압축파일의 압축을 푼다. 위와 동일하다.

(참고) tar 로 묶은 후에 gzip 명령으로 압축하는 것과 tar의 z 옵션사용 비교
1. tar 후에 gzip 명령을 이용하여 압축
   [posein@www posein]$ tar cvf text.tar *.txt
   a.txt
   aaa.txt
   b.txt
   bbb.txt
   c.txt
   err.txt
   passwd.txt
   samba.txt
   snort.txt
   [posein@www posein]$ gzip text.tar
   [posein@www posein]$ ls -l text.tar.gz
   -rw-rw-r--    1 posein   posein       4381  5월  6 23:37 text.tar.gz
2. tar의 z 옵션을 이용하여 한번에 실행
   [posein@www posein]$ tar zcvf text.tar.gz *.txt
   a.txt
   aaa.txt
   b.txt
   bbb.txt
   c.txt
   err.txt
   passwd.txt
   samba.txt
   snort.txt
   [posein@www posein]$ ls -l text.tar.gz
   -rw-rw-r--    1 posein   posein       4372  5월  6 23:38 text.tar.gz
     => tar와 gzip명령을 따로 하는 것보다 tar의 z옵션을 이용하는 것이 더 효율적이다.

Trackback
Reply

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

 

1. 파일링크의 개요
(1) inode(index node)
  i-node는 파일의 생성과 동시에 임의로 부여되며,  번호확인은 ls -i 로 확인할 수 있다. 또한
리눅스에서는 모든 디바이스나 디렉토리를 파일개념으로 인식하기 때문에 전부 inode를 부여받는다.
만약 inode가 같은 파일이 있다면 파일 이름이 다르더라도 이 파일은 같은 파일이 된다.
(2) Link File의 종류
   1) Hard link : 하나의 파일을 여러 이름으로 사용하는 것(=복사의 의미)으로 원본파일과 대상파
                 일은 같은 파일로 인식한다.
   2) Soft link : 여러 개의 파일명이 하나의 파일명을 가리키게 하는 것으로 원본과 대상파일은
                 완전히 다른 파일로 인식한다.

2. ln
(1) 설명: 하드링크 또는 심볼릭링크 파일을 생성하는 명령이다.
(2) 사용법
   ln [option] 소스파일 대상파일
(3) option
   -s : 심볼릭링크(소프트링크)를 생성한다. 만약 이 옵션이 없으면 하드링크가 생성된다.
   -v : 링크를 만드는 정보를 자세히 출력한다.
(4) 사용예
   1) ln aa.txt aa
     => aa.txt라는 파일을 aa라는 파일로 하드링크시킨다.
   2) ln -s aa.txt aa
     => aa.txt라는 파일을 aa라는 파일로 심볼릭링크시킨다.

3. 하드링크와 소프트링크
(1) 하드링크
   1) 사용법
     ln 소스파일 대상파일
   2) 특징
     ㄱ. ls -i 명령으로 inode번호를 확인해 보면 두개의 파일이 서로 같다.
     ㄴ. 두 개 파일의 크기와 내용이 같다.
     ㄷ. 하드링크로 생성된 파일은 한쪽을 수정하면 같이 수정되나 링크된 파일이나 원본을
        삭제해도 다른 한쪽은 아무런 영향을 받지 않는다.
     ㄹ. 하드링크를 해야만 ls -l명령시 나오는 링크의 숫자가 올라간다.
   3) 사용예
     ln /etc/passwd passwd
      => /etc/passwd 라는 파일의 하드링크파일을 현재디렉토리의 passwd라는 이름으로 생성한다.
   4) 하드링크시 유의점
     ㄱ. 파티션이나 드라이브를 가로질러 사용할 수는 없다.
     ㄴ. 같은 파일시스템내에서 사용해야 한다.
     ㄷ. 디렉토리는 하드링크를 사용할 수 없다.
(2) Soft link(=symbolic link)
   1) 사용법
     ln -s 소스파일 대상파일
      => 하드링크에 -s 옵션만 추가하면 되고 aa가 aa.txt를 가리키기만 한다.
   2) 특징
     ㄱ. 전혀 다른 inode번호를 값을 갖는다.
     ㄴ. 소프트링크된 파일의 크기는 매우 작다
     ㄷ. 소프트링크를 하면 ls -l했을때 나타나는 권한 맨 앞쪽에 l이라구 표시된다.
     ㄹ. 소프트링크도 한쪽이 변경되면 다른쪽도 변경된다.
     ㅁ. 링크된 파일이 삭제되면 원본파일에 아무런 영향이 없지만, 원본이 삭제되면 링크된 파일은
        아무 구실을 못한다.
     ㅂ. 디렉토리를 링크하면 윈도우즈의 바로가기 기능과 같다.
     ㅅ. 디렉토리를 링크해도 기본 개념은 파일이다. 즉 삭제할 때 rm 같은 파일삭제 명령어를 사용
        해야 한다.
   3) 사용예
     ㄱ. /etc/xinetd.d 라는 디렉토리를 자주간다면 현재 나의 홈디렉토리에 링크해보자.
        ln -s /etc/xinetd.d xx
         => /etc/xinetd.d라는 디렉토리를 현재 디렉토리의 xx라는 것으로 링크한다. ls xx하면
           ls /etc/xinetd.d의 내용과 동일한 내용이 나타나고 또한 cd xx하면 그 디렉토리안으로
           들어간 것과 같다.
   4) 참고 : 소프트링크의 퍼미션
     소프트링크를 걸면 해당 파일의 퍼미션값이 777이 된다. 그러나 이 값은 원래 파일의 퍼미션 값
    과는 다르다.

Trackback
Reply

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

 

1.vi편집기란?
vi는 visual의 약자로 유닉스의 표준 편집기이다. ex라는 editor를 바탕으로 만들어진 스크린 편집
기로, 프로그램의 사이즈도 작고 기능이 많다. 윈도우의 editor에 익숙한 사용자에겐 불편하게 느껴
지겠지만, 아주 편리한 환경과 막강한 기능을 제공하는 편집기이다.
(참고) vi는 full screen editor이므로 정확한 단말기 특성이 /etc/termcap안에 있어야 하며, 환경
      변수 $TERM이 정확히 정의되어 있어야 한다.

2.vi 편집기 시작하기
(1) 사용법
   vi [option] [filename]
(2) option
   -c  : -c옵션은 시작하면서 어떠한 명령을 실행한다.
   -r  : 손상된 파일을 복구할 때 쓴다. 파일을 편집하던 중 갑작스런 사고 등으로 인해 시스템이
        다운되었을 경우 대개 이 명령으로 복구 할 수 있다.
   +n  : 파일을 열면서 n번째 줄로 커서를 이동시킨다.
   +   : 파일을 열면서 마지막 줄에 커서를 이동시킨다.
   -wn : 기본적인 윈도우 크기를 n라인으로 한다.(기본값은 20라인)
(3) 사용예
   1) vi                 
       => 빈문서로 시작한다.
   2) vi index.html      
       => 주어진 파일(index.html) 이름으로 편집을 시작한다. 만약 파일이 존재하지 않으면 새로
         만들게 된다.
   3) vi +15 index.html   
       => index.html 파일을 열면서 커서를 15번째 줄로 보낸다.
   4) vi -c 15 index.html 
       => -c옵션은 시작하면서 어떠한 명령을 실행하라는 뜻이다. 따라서, -c 15 라고 쓰면 +15
         옵션과 동일한 결과를 얻는다.
   5) view index.html     
       => index.html파일을 읽기 전용으로 파일을 연다. 참고로 저장할 때 ':wq!'형식으로 ! 표를
         붙이면 읽기전용이라도 저장된다
   6) vi + index.html     
       => index.html파일을 열면서 커서의 위치를 마지막라인에 둔다.
   7) vi +/posein /etc/passwd
       => /etc/passwd 라는 파일을 열면서 posein이라는 문자열이 있는 위치에 커서를 둔다.

3. vi 종료하기
(1) 설명: 모드에 대한 설명이 아래에 나오지만 미리 종료에 대해 설명하면 일단 [ESC]키를 눌러
          명령모드로 전환한 후, 필요에 맞게 다음 중 하나의 키워드를 사용하면 된다.
(2) 명령
   :wq => 파일을 저장한 후 종료한다. 같은 명령으로는 ZZ 또는 :x 가 있다.
   :q! => 편집하여 변경된 내용을 저장하지 않고 강제 종료한다.
   :q  => 편집중인 내용이 없는 경우, vi를 종료한다.
   :w  => 편집중인 파일 내용을 저장한다. vi는 종료하지 않는다.

4. vi편집기의 모드
(1) 설명: vi편집기에는 크게 2가지모드로 구분된다. 첫번째는 명령모드(command mode)이고, 두번째
          는 입력모드(input mode)또는 편집모드라고 한다. 또 명령모드는 다시 일반명령모드와
          ex명령모드로 구분된다. 명령모드상태에서 입력명령(i,I,a,A,o,O)을 실행하면 입력모드로
          전환된다. 입력모드에서 타이핑한 문자들이 문서에 삽입된다. 여기에서 다시 [ESC]키를
          누르면 명령모드로 돌아온다. 명령 모드에서 ':'를 입력하면 화면 아래쪽에 ':'라는 프롬
         프트가 나타나게 되는 데 이것이 ex명령모드이다.
참고)입력모드 키워드가 위 나열한 것외에 (c,C,s,S,R)등이 있다.

(2) 모드
   1) 명령모드 : vi라고 입력한뒤 처음 접하는 모드
    ㄱ. 커서 이동 명령
       h           : 왼쪽으로 이동
       j           : 아래로 이동
       k           : 위로 이동
       l           : 오른쪽으로 이동
       w           : 다음 단어의 처음으로 이동
       -           : 앞 라인의 첫문자로 이동
       ^           : 라인의 첫 문자로 이동
       $           : 라인의 맨 끝으로 이동
       +           : 다음 라인의 첫문자로 이동
       0(zero)     : 첫번째 열로 이동
       G           : 제일 끝줄로 이동
       nG          : n번째 행으로 이동
       gg          : 파일의 처음으로 이동
       (           : 문장의 처음으로 이동
       )           : 다음 문장의 처음으로 이동
       {           : 문단(paragraph)의 처음으로 이동
       }           : 다음 문단의 처음으로 이동
       H           : 화면의 첫 라인으로 이동
       M           : 화면의 중간으로 이동
       L           : 화면의 끝라인으로 이동
       ctrl+b(back)    : 한 화면 위로 이동
       ctrl+f(forward) : 한 화면 아래로 이동
       ctrl+u(up)      : 반 화면 위로 이동
       ctrl+d(down)    : 반 화면 아래로 이동
       e           : 한 단어 뒤로 이동
       b           : 한 단어 앞으로 이동
       :0(zero)     : 줄의 제일 처음으로 이동
       :$           : 줄의 제일 끝으로 이동
    ㄴ. 편집상태로 진입 : 입력모드로 전환하는 키워드이고 하단에 'INSERT' 등과 같은 문자열이
                         표시된다.
       i   : 현재 커서 위치에 삽입
       a   : 현재 커서 위치 다음에 삽입
       o   : 현재 커서가 위치한 줄의 아랫줄에 삽입
       I   : 현재 커서가 위치한 줄의 제일 앞에 삽입
       A   : 현재 커서가 위치한 줄의 제일 뒤에 삽입
       O   : 현재 커서가 위치한 줄 위에 삽입
       ESC : 명령모드로 재전환
    ㄷ. 복사하기와 붙이기
       Y     : 현재 커서가 위치한 줄을 버퍼에 복사한다.
       yy    : Y와 같다.
       yw    : 현재 커서가 위치한 단어를 버퍼에 복사한다.
       'n'Y  : 현재 커서가 위치한 줄에서 아래로 n개 만큼의 줄을 버퍼에 복사한다.
       'n'yy : nY와 같다.
       'n'yw : 현재 커서가 위치한 단어로 부터 뒤로 n개의 단어를 버퍼에 복사한다.
       yh    : 커서의 왼쪽 문자를 복사한다.
       yl    : 커서가 위치한 문자를 복사한다.
       yB    : 커서의 왼쪽 비공백 단어를 복사한다.
       yW    : 커서의 오른쪽 비공백 단어를 복사한다.
       y0    : 커서 왼쪽부터 라인의 처음까지 복사한다.
       p     : 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 아래에 붙인다.
       P     : 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 위에 붙인다.
    ㄹ. 지우기
       x     : 현재 커서 위치의 문자를 지운다.(dh와 동일)
       X     : 커서 왼쪽의 문자를 지운다.(dl과 동일)
       dd    : 현재 커서가 위치한 줄을 지운다. (단어 뒤의 스페이스 포함)
       'n'dd : 현재 커서가 위치한 줄에서 아래로 n개 만큼의 줄을 지운다.
       dw    : 현재 커서가 위치한 단어를 지운다.
       db    : 현재 커서의 왼쪽 단어를 지운다.
       'n'dw : 현재 커서가 위치한 단어로 부터 뒤로 n개 만큼의 단어를 지운다.
       dB    : 현재 커서 왼쪽 비공백 단어를 지운다.
       dW    : 현재 커서 오른쪽 비공백 단어를 지운다.
       d$    : 현재 커서가 있는 라인부터 끝까지 지운다.(D와 동일)
       - d0  : 커서 왼쪽부터 라인의 처음까지 지운다.
    ㅁ. 바꾸기
       r    : 현재 위치의 문자를 바꾼다.
       R    : 현재 커서 위치부터 원하는 만큼 다른 문자로 바꾼다.
       cb   : 현재 커서 왼쪽 단어를 바꾼다.
       cw   : 현재 위치의 단어를 바꾼다.
       cc   : 현재 커서가 위치한 줄을 바꾼다.
       c$   : 커서부터 라인의 끝까지 바꾼다.(C와 동일)
       c0   : 커서 왼쪽부터 라인의 처음까지 바꾼다.
       C    : 현재 커서가 위치한 곳으로부터 줄의 끝까지 바꾼다.
      'n'cw : 현재 위치로부터 'n'개의 단어를 바꾼다.
      'n'cc : 현재 위치로부터 'n'개의 줄을 바꾼다.
    ㅂ. 기타
       ctrl+g   : 현재 편집하고 있는 파일의 정보를 보여준다.
       shift+v  : 블록을 지정한다.
       u        : 방금 한 명령을 취소한다.
       U        : 현재 커서가 위치한 줄에 대한 편집 명령을 취소한다.
       .        : 방금한 명령을 되풀이 한다.
       'n'.     : 방금한 명령을 n번만큼 되풀이 한다.
       J        : 현재 줄과 다음 줄을 합한다.
       ZZ       : 현재 내용을 저장하고 끝낸다.
       /exp     : 'exp'와 같은 내용을 현재 위치 다음부터 찾는다.
       ?exp     : 'exp'와 같은 내용을 현재 위치부터 위쪽으로 찾는다.
       n        : 앞에서 찾은 내용을 현재 위치 다음부터 찾는다.
       N        : 앞에서 찾은 내용을 반대 방향으로 계속 찾는다.
       >>       : 현재 커서 위치 줄을 오른쪽으로 한 열씩 이동한다.
       <<       : 현재 커서 위치 줄을 왼쪽으로 한 열씩 이동한다.
       ~        : 현재 커서가 위치한 문자의 대소문자를 서로 변환한다.
       ctrl+l   : 화면 다시 그린다.
       !        : vi편집중에 shell명령을 내린다.
   3) ex명령모드 : ex란 초기 유닉스에서부터 쓰이던 line editor이다. vi는 자체 명령어외에
                  ex편집기 명령어를 지원한다. 명령모드에서 ':'누르면 화면 아래쪽에 ':'라는
                  프롬프트가 나타나면서 ex명령모드로 들어간다.
    ㄱ. 명령
       :w              => 현재 내용을 저장한다.
       :w filename     => 현재 내용을 지정된 파일 이름으로 저장한다.
       :w!             => 강제로 덮어쓰기를 한다.
       :q              => 그냥 종료한다. 약간이라도 변경사항이 있으면 종료안된다.
       :wq             => 현재 내용을 저장하고 종료한다.
       :wq filename    => filename 으로 저장하고 종료한다. 새이름으로 저장할 때 쓴다.
       :q!             => 현재 내용을 저장하지 않고 종료한다.
       :e filename     => 새로운 파일을 편집한다.
       :r filename     => 현재 커서 위치 다음에 파일을 읽어 삽입한다.
       :14 r filename  => 14행 이후에 파일을 읽어 삽입한다.
       :10             => 10번째 줄로 커서를 이동시킨다.
       :10, 20d        => 10번째 행에서 20번째 행까지 지운다.

     (참고) 줄 번호를 쓸 때 '.'는 현재 줄을, '$'는 끝줄을 의미하므로 ':3,$d'는 3번째행에서
           끝행까지 지운다는 의미가 된다. 또 첫줄부터 현재 커서가 위치한 줄까지를 지우려면
           ':1,.d'라고 쓰면 된다.

    ㄴ. 문자열의 치환
      :s/문자열/새문자열       => 커서가 위치하고 있는 줄의 첫번째 해당문자열을 새문자열로
                                 치환한다.
      :s/문자열/새문자열/g     => 커서가 위치하고 있는 줄의 모든 해당문자열을 새 문자열로 치
                                 환한다.
      :1,$ s/문자열/새문자열/g => 파일 전체에 대해 해당문자열을 새문자열로 치환한다.
                                :%s/문자열/새문자열/g 와 같다.

5. vi편집기의 환경설정
(1) 설명 : vi환경설정을 위해서는 명령모드에서 :set을 사용한다.
(2) 사용법
   1) 설정
     set [환경변수][=값]
   2) 해제
     set no환경변수
(3) 환경변수
   1) ignorecase : 문자열을 검색할 때 대소문자에 관계없이 검색한다.
   2) number     : 행의 앞에 행번호를 붙여준다. 약자로 'nu'라고 해도 된다.
   3) autoindent : 라인변경시 커서의 위치를 바로 위라인의 수준과 같이 해준다. 프로그램작성시에
                 용이하다. 약자로 'ai'라고 해도 된다.
   4) showmatch  : '}'또는 ')'를 입력하였을 경우 짝이되는 '{','('를 찾아 커서가 1초동안 머무르
                 다 돌아온다. 이 기능은 C등의 프로그램을 작성할 때 편리하다. 약자로 'sm'이라고
                 해도 된다.
   5) showmode   : 화면 아래쪽에 현재 모드를 표시한다. 즉 편집모드인 경우에 'INSERT'등의 값으
                  로 표시해준다. 기본값으로 설정되어 있다.
   6) tabstop    : 탭의크기를 표시한다. '=n'를 붙이면 탭의크기를 n값에 따라 부여할 수 있다.
(4) 사용예
   1) :set 
       => 여러가지 환경 변수를 설정한다. set all하면 현재 설정되어 있는 환경변수를 보여준다.
   2) :set nu
       => 행의 앞에 행번호를 표시한다. ':set number'와 같다.
   3) :set nonu
       => 행의 앞에 붙은 행번호 표시를 없앤다.
   4) :set ai
       => [Enter]키를 입력하면 행을 바꾸었을 경우 위 줄과 같은 열에 커서를 위치시킨다.
   5) :set noai
       => 'ai'설정을 해제한다. ':set noautoindent'와 같다.
   6) :set ignorecase
       => 명령모드에서 문자열을 검색시에 대소문자를 구분하지 않는다. 즉 '/linux'라고 입력하면
         linux, Linux, LINUX 등의 모든 문자열을 찾아준다.
   7) :set noignorecase
       => 검색시에 대소문자를 구분하도록 한다.
   8) :set tabstop
       => 현재 설정된 탭의 크기(기본값은 4)를 보여준다.
   9) :set tabstop=8
       => 탭의 크기를 10으로 바꾼다.
   10) :set noshowmode
       => 리눅스에서는 기본적으로 모드를 표시해준다. 즉 입력모드인 경우에는 화면하단에INSERT
         등을 표시해준다. 위와 같이 명령을 내리면 모드전환을 해도 표시해주지 않는다.
(5) 관련파일 : .exrc
   1) 설명: set명령을 사용자의 홈 디렉토리의 .exrc(또는 .vimrc)안에 써 놓으면 vi가 시작될 때
          디폴트로 설정되어 시작하게 된다.
   2) 사용법
     set [환경변수] [값]
   3) 사용예
     [posein@www posein]$ cat .exrc
     set nu
     set ai
       => vi편집기 실행할 때마다 각 행 앞에 행번호를 붙여주고 autoindent를 적용한다. ':'는
         적지 않는다.

Trackback
Reply

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

 

1. dumpe2fs
(1) 설명: dumpe2fs는 파일시스템의 슈퍼블록과 블록 그룹에 대한 정보를 보여주고 이 명령어는 BSD
          Fast File System의 dumpfs와 유사하다. ext2 파일시스템과 ext3파일시스템에서 사용가능
          하다.
(2) 사용법
   dumpe2fs [options] 장치명
(3) 사용예
   dumpe2fs /dev/hda7

2. debugfs
(1) 설명: ext2 파일시스템 디버거로 파일시스템의 상태를 조사하고 변화시킬 수 있는 명령이다.
          대화형 디버거로 해당 명령을 알아야 하고 ext3 도 일부지원한다.
(2) 사용법
   debugfs [option] [장치명]
(3) option
   -w : 쓰기가 가능한 상태로 파티션을 만들어준다.
(4) debugfs의 명령어
   1) cat 파일명: 파일의 내용을 보여준다.
   2) cd 디렉토리: 작업디렉토리를 변경한다.
   3) chroot 디렉토리: 지정한 디렉토리를 루트디렉토리로 변경한다.
   4) close : 현재 열려진 파일시스템을 닫는다.
   5) clri 파일명: 파일에 해당하는 아이노드의 내용을 지운다.
   6) dump 파일명 출력파일명: 아이노드의 내용을 파일로 덤프한다.
   7) expand_dir 파일명: 디렉토리를 확장한다.
   8) find_free_block 목표: 목표로부터 시작해서 첫번째 블록을 찾아 할당한다.
   9) find_free_inode 디렉토리 : 빈 아이노드를 찾아서 할당한다.
   10) freeb 블록: 블록을 할당되지 않은 것으로 표시한다.
   11) freei 파일명: 파일명에 해당하는 아이노드를 해제한다.
   12) help :debugfs가 인식하는 명령어 목록을 출력한다.
   13) icheck 블록: 블록의 아이노드 변환을 수행한다.
   14) iname 아이노드: 아이노드에 해당하는 파일명을 출력한다.(현재 구현되지 않는다. ncheck를
                      참고할 것)
   15) initialize 장치명: 장치명에 ext2 파일시스템을 생성
   16) kill_file 파일명: 파일을 삭제하고 사용한 블록을 해제한다.
   17) ln 원본파일 링크파일: 링크를 만든다.
   18) ls : 디렉토리나 파일의 목록을 보여준다.
   19) modify_inode : 파일명에 해당하는 아이노드의 내용을 수정한다.
   20) mknod : 특별한 장치파일을 생성한다.
   21) ncheck 아이노드: 아이노드의 이름을 변환한다.
   22) open 디바이스명 : 해당 디바이스의 파일시스템을 연다.
   23) pwd : 현재 작업디렉토리를 출력한다.
   24) quit : debugfs를 종료한다.
   25) rm 파일명: 파일을 삭제한다.
   26) rmdir 디렉토리명: 디렉토리를 삭제한다.
   27) setb 블록: 블록을 할당된 것으로 표시한다.
   28) seti 파일명: 파일명에 해당하는 아이노드를 사용중이라고 표시한다.
   29) show_super_stats : 슈퍼블록의 내용을 보여준다.
   30) stat 파일명: 파일에 해당하는 아이노드의 내용을 덤프한다.
   31) testb 블록넘버: 블록이 할당되어 있다고 표시되어 있는 확인한다.
   32) testi 파일명: 해당파일에 아이노드가 할당되어 있는지 표시한다.
   33) unlink 파일명 : 파일의 링크를 지운다.
   34) write 원본파일 파일명: 파일명을 갖는 파일 시스템에 파일하나를 만들고 나서 원본파일의
                             내용을 복사한다.
(5) 사용예
   1) [root@www root]# debugfs /dev/hda7
       => /dev/hda7 디바이스를 debugfs로 디버깅한다. 기본 읽기전용이다.
   2) [root@www root]# debugfs -w /dev/hda7
       => /dev/hda7 디바이스를 debugfs로 디버깅하는데 쓰기가 가능하도록 한다.
(6) command 사용예
   1) debugfs:  ls -l
       128258   40750 (2)      0      0    4096  5-Feb-2003 21:56 .
            2   40755 (2)      0      0    4096  5-Feb-2003 16:43 ..
       128259  100644 (1)      0      0   66420 27-Dec-2002 01:13 install.log
       128260  100644 (1)      0      0    4096 27-Dec-2002 00:48 install.log.syslog
        32102   40700 (2)      0      0    4096  5-Feb-2003 11:13 .gconfd
       132579  100644 (1)      0      0      24 11-Jun-2000 06:00 .bash_logout
       132578  100644 (1)      0      0    1126 24-Aug-1995 04:02 .Xresources
        48673   40700 (2)      0      0    4096 26-Dec-2002 19:24 .kde
       177385   40700 (2)      0      0    4096  5-Feb-2003 11:13 .gconf
       132580  100644 (1)      0      0     234  6-Jul-2001 03:23 .bash_profile
       132581  100644 (1)      0      0     176 24-Aug-1995 04:04 .bashrc
       132582  100644 (1)      0      0     210 11-Jun-2000 06:09 .cshrc
        => (설명) 총 8개의 필드로 구성되어 있다.
                 1. Inode 번호
                 2. 맨 앞 두 숫자는 inode의 종류를 의미하고 남은 4개의 숫자는 운영체제에서
                   정해진다. 또한 (1)은 파일을, (2)는 디렉토리를 의미한다.
                    2 : 문자디바이스
                    4 : 디렉토리
                    6 : 블록 디바이스
                    10 : 일반 파일
                    12 : 심볼릭 링크
                 3. 소유자의 UID
                 4. 소유그룹의 GID
                 5. 파일이나 디렉토리의 크기(바이트)
                 6. 날짜
                 7. 시간
                 8. 파일이나 디렉토리명
   2) debugfs:  quit
       => debugfs를 종료한다.
(7) 참고 : ext2 파일시스템에서 파일 복구하기 (ext3에서는 안됨)
   1) 가정 : /home/doc.txt 라는 파일이 존재하고 문서를 삭제했다고 가정하자.
   2) 복구절차
    ㄱ. debugfs -w /dev/hda6
        => /dev/hda6 파티션을 디버깅한다. (/home의 파티션을 /dev/hda6이라고 가정)
    ㄴ. debugfs: 프롬프트에서 'lsdel' 이라고 친다.
        debugfs:  lsdel
         Inode  Owner  Mode    Size    Blocks   Time deleted
        48730    500 100644   9232    3/   3 Thu Jan 30 00:02:05 2003
        16346    500 100644   8947    1/   3 Sun Feb  2 16:50:44 2003
         => 그럼 지워진 목록이 나온다. 시간과 파일명을 알고 있어야 한다.
    ㄷ. debugfs에서 'dump <아이노드번호> 경로를_포함한_파일명'을 입력한다.
        debugfs: dump <16436> /home/doc.txt
         => 파일이 복구되었음을 알 수 있다.

3. tune2fs
(1) 설명: ext2파일시스템을 튜닝하고 조정하는 명령어이다.
(2) 사용법
   tune2fs [option] 장치명
(3) option
   -j : ext2파일시스템을 ext3파일시스템으로 바꾼다.
   -c 마운트횟수: ext2파일시스템에서는 어느 정도의 수를 마운트한 뒤에는 자동으로 파일시스템을
                 체크하도록 되어 있다. 이 마운트횟수를 지정하는 옵션이다. 0으로 하면 마운트횟
                 수의 제한이 없다.
   -i 점검시간[d|w|n] : 파일시스템의 점검시간을 설정한다. 접미어를 쓰기않거나 'd'를 사용하면
                       날짜단위로 설정하는 것이고, 'm'은 달, 'w'은 주 단위로 설정한다. 값을
                       0으로하면 시간 점검을 하지 않는다.
(4) 사용예
   1) [root@www root]# tune2fs -j /dev/hda6
       => /dev/hda6을 ext3파일시스템으로 바꾼다.
   2) [root@www root]# tune2fs -c 0 -i 0 -j /dev/hda7
       => /dev/hda7을 마운트횟수제한이 없고 기간제한이 없도록 하고 ext3파일시스템으로 바꾼다.
   3) [root@www root]# tune2fs -L /backup /dev/hda8
       => /dev/hda8에 backup이라는 레이블을 설정한다.
(5) 주의 : 이 명령을 이용하여 파일시스템을 조정할 경우에는 마운트가 되지 상태에서 해야한다.

4. stat
(1) 설명: 파일이나 파일시스템의 상태를 보여준다.
(2) 사용법
   stat [options] 파일이름
(3) 사용예
    [root@www root]# stat /etc/passwd
      File: "/etc/passwd"
      Size: 2386            Blocks: 8          IO Block: 4096   Regular File
    Device: 307h/775d       Inode: 225622      Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: Sun Jan 12 19:33:00 2003
    Modify: Mon Jan  6 00:54:42 2003
    Change: Mon Jan  6 00:54:42 2003
      => 파일명, 사이즈, 파일타입, 권한, 접근시간, 수정정보, 변경정보 등을 알 수 있다.

5. mkfs.ext2
(1) 설명: ext2 파일시스템 생성해주는 명령이다.
(2) 사용법
   mkfs.ext2 장치명
(3) 사용예
   mkfs.ext2 /dev/hdb1

6. mkfs.ext3
(1) 설명: ext3파일시스템을 생성해주는 명령이다.
(2) 사용법
   mkfs.ext3 장치명
(3) 사용예
   mkfs.ext3 /dev/hdb1

7. lsattr
(1) 설명: ext2 와 ext3파일시스템은 파일의 권한이외에 속성을 조작할 수 있는 명령을 제공한다.
          이 명령은 해당 파일의 속성을 보여주는 명령이다.
(2) 사용법
   lsattr [option] [파일명]
(3) option
   -R : 서브디렉토리까지 한꺼번에 파일속성을 확인할 수 있다.
   -a : .으로 시작되는 숨김파일과 디렉토리까지 모두 속성을 확인할 수 있다.
   -V : 프로그램의 버전을 확인할 수 있다.
   -v : 파일생성과 관련된 넘버를 확인할 수 있다.
(4) 사용예
   [posein@www posein]$ lsattr /etc/passwd
   -------------- /etc/passwd
    => 현재 이 파일은 어떠한 속성도 설정되어 있지 않다.

8. chattr
(1) 설명: 이 명령은 파일의 속성을 변경시키는 명령이다. 참고로 몇가지 속성은 리눅스커널에서
         지원하지 않을 수도 있다.
(2) 사용법
   chattr [option] mode 파일명
(3) option
   -R : 서브디렉토리까지 그 속성을 변경할 때 지정한다.
   -V : 프로그램의 버전을 출력해준다.
   -v : 지정된 파일에 넘버를 설정할 수 있다.
(4) mode: 기호와 속성으로 이루어진다.
   1) 기호
     + : 해당 속성을 부여한다.
     - : 해당 속성을 해제한다.
     = : 해당 속성만 부여하고 나머지는 해제한다.
   2) 속성
     A : 파일수정시에 atime을 수정하지 않는다.
     a : 해당 파일에 추가만을 할 수 있는 속성이다.
     d : 이 속성이 설정된 파일은 dump로 백업되지 않는다.
     i : 이 속성이 지정되면 해당 파일의 변경, 삭제, 이름변경, 파일추가 및 링크파일도 불가능해
        진다.
     c : 이 속성이 설정되면 커널에 의해 디스크상에 자동적으로 압축된 상태로 저장이 되어 있다.
        파일을 읽을 경우에는 압축을 해제한 상태로 되돌려주며 쓰기시에는 디스크에 저장하기 전에
        파일을 압축한다.
     j : 이 속성을 지정되면 저장할 때 저널링 파일시스템으로 데이타를 저장한다.
     s : 이 속성이 설정된 파일은 파일삭제가 될 경우에 해당블록이 모두 0으로 되어 버리고 디스크
        에 다시 쓰기가 발생한다. 따라서 보안상 안전한 삭제가 이루어진다.
     S : 이 속성이 설정되면 파일이 변경될 경우 디스크동기화가 일어나는 효과를 누릴 수 있다.
     u : 이 속성을 가진 파일이 삭제되면 그 내용이 저장되어 삭제되기 전의 데이터로 복구가 가능
        하다.
(5) 사용예
   1) [root@www root]# chattr +i test.txt
       => test.txt 불변의 속성(i)을 지정하였다.
         (확인) [root@www root]# lsattr test.txt
                ---i---------- test.txt
         (제거) [root@www root]# rm test.txt
                rm: remove write-protected regular file `test.txt'? y
                rm: cannot remove `test.txt': 명령이 허용되지 않음
   2) [root@www root]# chattr +a /var/log/messages
       => /var/log/messages 파일에 삭제는 불가하고 추가만 가능하게 설정하였다.

9. badblocks
(1) 설명: 장치의 배드블록(Bad Block)을 검색한다.
(2) 사용법
   badblocks [option] 장치명
(3) option
   -b 블록사이즈: 블록의 크기를 바이트수로 나타낸다.
   -o 출력파일 : 배드블록의 목록을 지정한 파일에 기록한다.
   -v : 자세히 보여준다.
   -w : 쓰기 모드 테스트를 해서 배드블록을 찾아낸다. 이 옵션을 사용하면 파일시스템의 내용이
       지워지므로 주의를 요한다.
(4) 사용예
   1) [root@www root]# badblocks /dev/fd0H1440
      8
      9
      10
      11
      60
      171
      1438
      1439
        => 배드블록의 목록을 보여준다.
   2) [root@www root]# badblocks -o badblock /dev/fd0H1440
        => 배드블록의 목록을 badblock이라는 파일에 저장한다.

10. mknod
(1) 설명: 블록디바이스나 캐릭터디바이스 같은 특별한 파일을 만들 때 쓰는 명령어이다.
(2) 사용법
   mknod  파일명 type [major minor]
(3) type
   b : block 장치 파일을 생성한다.
   c : character 장치 파일을 생성한다.
   p : FIFO 장치파일을 생성한다.
(4) 사용예
   mknod myfd0 b 2 0
    => myfd0라는 블록디바이스 파일을 생성하고 major 넘버는 2이고 minor넘버는 0이다.
      현재 이 설정은 첫번째 플로피디스크에 대한 설정이다. 즉 /dev/fd0 와 같다. 이 장치파일로
      마운트시킬 수 있다.

11. hdparm
(1) 설명: HDD Parmeters의 약자로 하드디스크의 설정을 보여주거나 설정을 조절할 수 있는 명령어
          이다. 하드디스크의 튜닝하여 최적의 성능을 발휘하도록 할 때 사용한다. 잘못사용하면
          하드디스크의 자료를 잃어버릴 수 있으니 사용에 주의를 요한다.
(2) 사용법
   hdparm [option] 디바이스명
(3) option
   -i : 부팅시에 확인되는 정보를 표시해준다.
   -t : 비교를 목적으로 벤치마크를 위해 장치의 읽는 시간을 잰다.
   -T : 비교를 목적으로 벤치마크를 위해 캐쉬의 읽는 시간을 잰다.
   -d 값 : 직접 메모리 접근(DMA)옵션의 on/off를 지정한다. 1이면 on, 0이면 off
   -c 값 : 32bit 입출력(I/O)기능을 켜거나 끌 수 있다. 0이면 16bit, 1 이면 32bit, 3이면 동기배
          열(Sync Sequence)을 포함한 32bit 입출력을 한다.
   -m 값 : 다중섹터(MultSec)의 값을 지정한다.
   -X 값 : IDE의 전송모드를 설정한다. PIO 모드는 8을 기본으로 해서 더하고, 일반 DMA 모드는 32
          를 기본으로 더하고, UltraDMA인 경우에 는 64를 기본으로 더한다. -i 옵션으로 나온 결과
          를 토대로 지원여부를 확인한다.
   -a 값 : 미리읽기(Read-ahead) 섹터값을 설정한다. 기본값은 8이다.
   -u 값 : unmaskirq 설정유무를 지정한다. 1이면 on, 0이면 off 이다.
(4) 사용예
   1) [root@www root]# hdparm /dev/hda

      /dev/hda:
       multcount    = 16 (on)
       IO_support   =  0 (default 16-bit)
       unmaskirq    =  0 (off)
       using_dma    =  0 (off)
       keepsettings =  0 (off)
       readonly     =  0 (off)
       readahead    =  8 (on)
       geometry     = 2481/255/63, sectors = 39865392, start = 0
        => 하드디스크에 대한 정보를 보여준다.
          (주요설정 설명)
           multcount : 한번에 읽는 섹터의 수
           IO_support : 하드디스크의 동작모드(16/32/32sync)
           unmaskirq : 한 디스크 인터럽트를 처리할 때 다른 인터럽트를 언마스크하도록 허용할 것
                      인지를 지정한다. 요청된 데이터를 디스크가 리턴하기를 기다리는 동안, 시스
                      템이 다른 인터럽트와 관련된 작업을 처리하도록 한다. 이것은 전체적인 반응
                      시간(response time)을 향상시켜 주지만 주의해야 한다.
           using_dma : DMA 기능 사용여부를 표시한다.
           keepsettings : 소프트 리셋(Soft Reset)후의 설정을 유지하도록 한다.
           readonly : 장치가 읽기전용인지 아닌지를 시스템에 알려준다. 일반적으로 CD-ROM에만
                     1로 설정한다.
           readahead    =  8 (on)
           geometry : 하드디스크의 물리적인 정보를 보여준다. 실린더/헤드/섹터
   2) [root@www root]# hdparm -i /dev/hda

      /dev/hda:

       Model=SAMSUNG SV2042H, FwRev=PK100-12, SerialNo=0273J1FNB12589
       Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
       RawCHS=16383/16/63, TrkSize=34902, SectSize=554, ECCbytes=4
       BuffType=DualPortCache, BuffSize=426kB, MaxMultSect=16, MultSect=16
       CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=39865392
       IORDY=yes, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
       PIO modes:  pio0 pio1 pio2 pio3 pio4
       DMA modes:  mdma0 mdma1 mdma2
       UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5
       AdvancedPM=no WriteCache=enabled
       Drive conforms to: ATA/ATAPI-4 T13 1153D revision 17:  1 2 3 4 5 6
         => (주요설정 설명)
             MaxMultSect : 하드디스크가 한번에 읽을 수 있는 최대 섹터(Sector)의 수
             MultSect : 현재 한번에 읽는 섹터의 수
             PIO & DMA & UDMA modes : 하드디스크가 지원하는 모드를 나타내고 *로 표시된 것이
                                     현재 사용 하는 모드이다.
             AdvancedPM : APM(Advanced Power Management: 고급전원관리)지원여부를 표시한다.
             WriteCache : 쓰기 캐쉬의 지원여부이다.
   3) [root@www root]# hdparm -t /dev/hda

      /dev/hda:
       Timing buffered disk reads:  64 MB in 18.67 seconds =  3.43 MB/sec
        => 하드디스크의 읽는 시간을 잰다.
   4) [root@www root]# hdparm -Tt /dev/hda

      /dev/hda:
       Timing buffer-cache reads:   128 MB in  0.25 seconds =520.16 MB/sec
       Timing buffered disk reads:  64 MB in 18.54 seconds =  3.45 MB/sec
        => 디스크와 캐쉬의 읽는 시간을 잰다.
   5) hdparm -d 1 /dev/hda
        => DMA를 사용한다.
   6) hdparm -c 1 /dev/hda
        => 32bit I/O로 세팅한다.
   7) hdparm -m 8 /dev/hda
        => MultSec의 값을 8로 설정한다.
   8) hdparm -X34 /dev/hda
        => 일반 DMA모드인 mdma2로 설정한다.
   9) hdparm -X69 /dev/hda
        => UltraDMA모드인 umda5로 설정한다.
   10) hdparm /dev/cdrom
        => CD-ROM드라이브의 정보를 보여준다.
(5) 관련파일 : /etc/sysconfig/harddisks
    hdparm 명령의 실행시 설정과 관련된 파일이다.

12. e2label
(1) 설명: ext2 파일시스템을 사용하는 하드디스크 디바이스에 label을 부여하거나 확인하는 명령어
          이다.
(2) 사용법
   e2label 장치명 [새로운 label]
(3) 사용예
   1) [root@linux245 root]# e2label /dev/hda5
      /home
       => /dev/hda5에 부여된 레이블을 확인한다.
   2) [root@linux245 root]# e2label /dev/hda8 /backup
       => /dev/hda8의 레이블을 backup로 부여한다.
(4) 참고: 레이블을 부여하면 /etc/fstab파일에서 디바이스명 대신에 레이블을 사용해서 등록할 수
          있다.
    예) LABEL=/backup           /backup                 ext3    defaults        0 0

13. mkinitrd
(1) 설명: make init ramdisk의 약자로 초기화 램디스크 이미지를 만들어주는 명령이다. 보통 부팅
          할 때 필요한 블록 디바이스 모듈을 이미지로 만들때 사용하는 명령이다.
(2) 사용법
   mkinitrd 이미지파일명 커널버전
(3) 사용예
   mkinitrd /boot/initrd-2.4.21.img 2.4.21

Trackback
Reply

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

 

1. 파일시스템의 개요
(1) 파일시스템이란? : 운영체제가 파티션이나 디스크에 파일들이 연속되게 하기 위한 구성 방식을
                      말한다.
(2) 리눅스의 파일시스템 : 현재는 ext2과 ext3파일시스템을 사용하며 계층적인 트리 구조형태로
                          되어 있다.
   1) ext3파일시스템
     ㄱ. 초기의 리눅스 파일시스템을 확장한 형태의 파일시스템이다.
     ㄴ. 파일에 들어있는 데이터는 저장 디스크의 데이터 블록에 저장되는 형태로 되어있다.
   2) 리눅스가 현재 지원하는 파일시스템의 종류
     ext2, ext3, minix, msdos, vfat, proc, smb, nfs, iso9660, sysv, hpfs, ufs등

2. mount
(1) 설명: 영어로 mount는'오르다'또는 '어떠한 장비를 설치하다.(탑재하다)'라는 뜻으로
          유닉스에서는 보조기억장치(HDD,FDD,CD-ROM등)를 디렉토리로 만들어 쓰게 해주거나
          파일시스템이 다른 디스크에 접근하기 위한 진입점을 만들어 준다. mount명령은
          /etc/fstab의 설정을 기초로 수행하며 기본적으로는 루트권한자에게만 가능한 명령이다.
(참고1) 파일시스템에 대하여
       DOS, Windows95초기버젼      : FAT16(리눅스에서는 msdos)
       Windows 95 OSR2, Windows 98 : FAT32(리눅스에서는 vfat)
       Windows NT, 2000계열        : ntfs
       Linux                       : ext2, ext3
       CD-ROM                      : iso9660
(2) 사용법
   mount [option] [device] [directory]
    => 옵션없이 mount 명령만 입력하면 현재 마운트된 내용을 보여준다.
(3) option
   -a : /etc/fstab에 명시된 시스템을 마운트할 때 쓰이는 옵션이다.
   -t 파일시스템타입: 파일시스템의 타입을 지정하는 옵션으로 이 옵션을 지정하지 않으면
                    /etc/fstab 파일에서 참조한다. 보통 5가지타입이 있다.
      * 파일시스템타입
       msdos   => 긴 이름을 지원하지 못하는 타입으로 파일이름도 최대 8.3구조이다. MS-DOS, 윈도
                 우95 파일시스템을 마운트할 때 사용한다.
       vfat    => 긴 이름의 디렉토리를 지원하는 타입으로 요즘 윈도우타입이다. 윈도우98 파일시
                스템을 보기 위해선 보통 이 타입으로 설정하면 된다.
       ntfs    => 윈도우 NT, 2000 계열 파일시스템이다.
       ext2,ext3   => 리눅스 파일시스템 타입이다.
       iso9660 => CD-ROM파일시스템이다.
   -o 옵션: 마운트할 때 ro(읽기전용)와 rw(읽기/쓰기)를 지정한다. 또는 시스템을 다시 마운트할때
       사용한다.
     * 옵션
      ro : 읽기전용으로 마운트한다.
      rw : 읽기/쓰기 모드로 마운트한다. 기본값이다.
      remount : 해당 파티션을 다시 마운트한다. 파티션 정보를 바꾸었을 때 사용한다.
      loop : loop 디바이스로 마운트할 때 쓴다. CD 이미지인 iso이미지등을 마운트해서 사용할 때
            쓴다.
      noatime: 노트북에서 사용하는 옵션으로 디스크 접근에 따른 배터리시간을 늘려준다.
   --bind : 커널 2.4부터 지원하는 옵션으로 이미 마운트되어 있는 디렉토리를 추가로 다른 디렉토
           리로 마운트시켜준다.
(4) devive
   1) 설명: 장치를 말하며 대부분 유닉스에서는 /dev라는 디렉토리에서 모든 장치를 파일화하여
           관리한다.
   2) 사용예
     fdd    : /dev/fd0, /dev/fd1 등
     CD-ROM : /dev/cdrom
     HDD    : /dev/hda1 등
(5) 관련파일 : /etc/fstab
   1) 설명: 이 파일은 다양한 파일시스템에 관한 정보를 알려주고 있는 파일로서 mount, umount,
           fsck 등의 명령들과 밀접한 관계를 가지고 있다. 파일의 기본 내용은 다음과 같다.
   2) 기본설정
     /dev/sda2               /                       ext2    defaults        1 1
     /dev/cdrom              /mnt/cdrom              iso9660 noauto,owner,ro 0 0
     /dev/fd0                /mnt/floppy             auto    noauto,owner    0 0
     none                    /proc                   proc    defaults        0 0
     none                    /dev/pts                devpts  gid=5,mode=620  0 0
     /dev/sda1               swap                    swap    defaults        0 0
   3) /etc/fstab의 필드설명: 6개의 필드로 구성되어 있고 다음과 같다
    ㄱ. 첫번째필드: 디바이스를 가리킨다. 현재 커널 2.4 버전에서는 LABEL 처리되고 있다.
    ㄴ. 두번째필드: 마운트될 디렉토리를 가리킨다.
    ㄷ. 세번째필드: 파일시스템의 타입을 나타낸다.
    ㄹ. 네번째필드: 마운트될 때의 옵션을 나타낸다.
       auto: -a 옵션을 이용한 마운트를 가능하게 한다.
       noauto: 명시적으로만 마운트가 가능하다. 즉 -a 옵션을 이용한 마운트는 되지 않는다.
       owner: 로컬(Local)에서 일반사용자가 마운트할 수 있는 권한을 할당하는 값이다. user라고
             입력해도 된다. 예를 들면 로컬에서 posein이라는 일반사용자권한으로 'mount
            /mnt/cdrom' 이라고 명령을 내리면 마운트가 된다.
       default: rw, suid, dev, exec, auto, nouser, async가 적용된다.
         rw    : 읽기 및 쓰기 파일시스템으로 마운트된다.(read-write)
         suid  : setuid와 setgid를 사용할 수 있다.
         dev   : 문자장치와 블록장치를 모두 지원한다.
         exec  : 실행파일을 만들 수 있다.
         auto  : mount -a 명령으로 마운트할 수 있다.
         nouser: 슈퍼유저만이 파일시스템을 마운트할 수 있다.
         async : 파일을 비동기적으로 관리할 수 있다.
       usrquota: 사용자의 용량을 제한하는 disk quota를 사용할 때 해당 파티션에 적는다.
       grpquota: 사용자의 용량을 제한하는 disk quota를 그룹별로 사용할 때 해당 파티션에 적는다.
       noquota: 해당파티션에서 사용자들의 quota를 설정하지 않는다.
       nosuid: 해당파티션에서 SUID나 SGID를 설정을 허용하지 않는다.
       nodev: 해당파티션에서 문자나 특별한 장치(디바이스)를 허용하지 않는다.
       noexec: 해당파티션에서 모든 실행 파일들을 실행할 수 없다.
       suid: 해당 파티션에서 SUID나 SGID의 사용을 허가한다.
       ro: 해당파티션을 읽기전용(read-only)으로 설정한다.
       rw: 해당파티션을 읽고 쓰기(read-write)모드로 설정한다.
    ㅁ. 다섯번째필드: 쌓여있을 필요가 있을지 없을지를 정의한다. 1이면 데이터등이 쌓여 있을 것을
                     나타내고, 0이면 버린다.즉 0인 경우에는 dump명령으로 백업되지 않는다.
    ㅂ. 여섯번째필드: fsck 명령의 순서를 정한다. 1을 포함하고 있으면 먼저점검하고 2의 값이면
                   두번째로 점검한다. 0은 체크하지 않는다.

(6) 사용예
   1) 다른 파일시스템 디스크 사용하기
    ㄱ. 설명: 원래는 파일시스템이 다른 디스크는 사용이 불가능하지만 리눅스에서는 mount라는
            명령을 이용하여 다른 파일시스템을 서브디렉토리처럼 이용할 수 있다.
    ㄴ. 사용법
       mount -t 파일시스템 장치명 마운트할_디렉토리
    ㄷ. 사용예
     a. 디스크의 앞부분에 windows98 운영체제가 설치 되어있으면 /win 과 같이 디렉토리를 만든 후
       에 해당디렉토리로 마운트시켜 윈도우영역도 사용가능하다.
        mount -t vfat /dev/hda1 /win
          => /dev/hda1 이라는 파티션이 vfat파일 시스템을 사용하는데 이를 /win라는 디렉토리로
            사용하겠다는 뜻이다.

   2) 플로피디스크 사용하기
    ㄱ. 사용예 윈도우에서 사용하던 플로피디스크 사용하기
       mount -t vfat /dev/fd0 /mnt/floppy
        => 플로피디스크를 /mnt/floppy라는 디렉토리로 쓴다.
    ㄴ. 참고
     a. 설명: 리눅스에서는  mount를 위해 기본적으로 플로피디스크와 CD-ROM 디렉토리를
             /mnt/floppy 및 /mnt/cdrom으로 제공한다. 그러나, 꼭 이 디렉토리를 사용하지 않아도
             된다. 디렉토리생성후 그 디렉토리로 마운트하면 된다.
     b. 사용예 : /fdd라는 디렉토리로 플로피디스크 마운트하기
       mkdir /fdd
         => 마운트하고자할 디렉토리를 생성한다.
       mount -t vfat /dev/fd0 /fdd
         => 해당 디렉토리로 마운트한다.
   3) CD-ROM드라이브 사용하기
    ㄱ. 설명: CD-ROM은 iso9660이라는 파일시스템을 가지고 디바이스는 /dev/cdrom이다.
    ㄴ. 사용예
       mount -t iso9660 /dev/cdrom /mnt/cdrom
        => cdrom을 /mnt/cdrom이라는 디렉토리로 사용하라는 명령이다.
   4) 기타 사용예
    ㄱ. mount
         => 현재 설정된 마운트 목록을 보여준다.
    ㄴ. mount -a -t ext2
         => /etc/fstab에 명시된 파일시스템중에서 ext2된 된 파일시스템을 마운트한다.
    ㄷ. mount -t ext3 -o ro /dev/hdb1 /disk
         => 파일시스템이 ext3인 /dev/hdb1 을 /disk로 마운트하되 읽기전용으로 한다.
    ㄹ. mount -o remount /home
         => /home파티션을 다시 마운트한다.
    ㅁ. mount /mnt/cdrom
         => CD-ROM을 /mnt/cdrom디렉토리로 마운트한다.
           원칙적으로는 'mount -t iso9660 /dev/cdrom /mnt/cdrom'이라고 명령을 내려야 한다.
           그러나, mount명령은 /etc/fstab파일의 내용을 참고해서 명령을 수행하므로 위와 같이
           간략하게 해도 마운트된다. 참고로 위와 같은 명령은 로컬에서 일반사용자도 수행가능
           하다.
    ㅂ. mount /mnt/floppy
         => 플로피디스크도 위 예제인 CD-ROM 드라아브와 마찬가지로 형식에 맞추어서 명령을 내려
           야 하지만, /etc/fstab파일에 명기되어 있으므로 간략하게 가능하다.
    ㅅ. mount -L /backup /backup
         => label이 설정되어 있을 경우에 label값으로 마운트한다.
           mount LABEL=/backup /backup 과 같다.
    ㅇ. mount -t iso9660 -o ro,loop /iso/redhat.iso /mnt/image
         => redhat.iso라는 CD이미지를 읽기전용이고 루프백장치로 /mnt/image라는 디렉토리로 마운
           트한다.
    ㅈ. mount --bind /backup /backup2
         => 이미 마운트되어 있는 /backup 이라는 파티션을 추가로 /backup2로 마운트한다. 물론
           /backup2 라는 디렉토리는 생성되어 있어야 한다.

3. umount

(1) 설명: 마운트된 디렉토리를 제거해주는 명령이다. 이 명령을 사용하지 않으면 cdrom안에 들어있
          는 디스크를 꺼낼수 없다.
(2) 사용법
   umount 언마운트될_디렉토리
(3) 사용예
   1) umount /mnt/cdrom
       => /mnt/cdrom으로 마운트된 파일시스템을 언마운트하는 것이다. 마운트 포인트에 관한 것은
         /etc/fstab파일에 명기되어 있다. umount하기전에 mount명령을 내려 마운트된 파일시스템을
         확인해야 한다.
   2) umount -a -t iso9660
       => 파일시스템이 iso9660으로 마운트된 것들을 모두 언마운트한다.

4. df(disk free)
(1) 설명: 현재 마운트된 디스크의 남은 공간 등 사용정도를 보여주며 파티션들에 대한 정보도 보여
          준다.
(2) 사용법
   df [option] [file or filesystem]
(3) option
   -h : 용량의 단위 표시(KB,MB,GB)를 해준다.(human readable)
   -k : kilobyte단위로 보여준다. 기본값이다.
   -m : megabyte단위로 보여준다.
   -T : 각 파티션에 대한 파일시스템의 유형을 보여준다.
   -i : inodes의 사용량을 보여준다. 'No space left on device'라는 메시지가 떴을 때 대부분
       inodes를 다 써버린 경우이다.
(4)사용예
   1) [posein@www posein]$ df -h
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/hda5            1004M  108M  896M  11% /
      /dev/hda6             988M  289M  649M  31% /home
      /dev/hda8              15G  7.2G  7.0G  51% /usr
      /dev/hda1              19G   97M   18G   1% /var
   2) [posein@www posein]$ df -T
      Filesystem    Type   1k-blocks      Used Available Use% Mounted on
      /dev/hda5 reiserfs     1028092    110172    917920  11% /
      /dev/hda6     ext2     1011928    295928    664596  31% /home
      /dev/hda8     ext2    15757248   7525416   7431396  51% /usr
      /dev/hda1     ext2    20161172     98392  19038640   1% /var
   3) [posein@www posein]$ df -i
      Filesystem            Inodes   IUsed   IFree IUse% Mounted on
      /dev/hda10            384768   17277  367491    5% /
      /dev/hda5               6024      14    6010    1% /boot
      /dev/hda6             513024    3243  509781    1% /home
      /dev/hda12            128768      11  128757    1% /opt
      /dev/hda13             72288      11   72277    1% /secu
      /dev/hda11            256512      29  256483    1% /tmp
      /dev/hda7             384768   82743  302025   22% /usr
      /dev/hda9             384768   21873  362895    6% /usr/local
      /dev/hda8             384768    2210  382558    1% /var

5. du(disk usage)
(1) 설명 : 파일들이 디스크에서 차지하고 있는 크기들을 보여준다.
(2) 사용법
   du [option] [filename(s)] => 파일 이름을 지정해 주지 않으면 현재 디렉토리에 대한 정보를
                               보여준다.
(3) option
   -a : 디렉토리에 존재하는 모든 파일에 대해 각각의 크기를 보여준다.
   -s : 파일들의 전체 크기를 합한 값만 보여준다.
   -r : System V계열에서만 쓰이는 옵션으로 서브디렉토리까지 계산한다. BSD계열에서는 자동적으
      로 계산한다.
   -h : 용량을 보기 좋게(KB, MB, GB단위로) 표시해 준다.(human readable)
   -b : 결과값을 Byte단위로 출력한다.
   -k : 결과값을 KB단위로 출력한다.
   -m : 결과값을 MB단위로 출력한다.
(4) 사용예
   1) [posein@www posein]$ du -sh
      9.9M    .
        => 현재 디렉토리의 총 용량을 나타낸다.
   2) [posein@www posein]$ du -h
        => 현재 디렉토리의 모든 파일과 디렉토리에 대해 크기를 단위(KB,MB 등)을 붙여 보여준다.
(참고4) 유닉스에서 파일의 크기 정보를 출력해주는 수치는 byte단위가 아니고 block단위이다.
        유닉스에서는 디스크상의 데이터들을 512byte, 1024byte등을 1block으로 관리한다. 이것은
        도스의 cluster와 비슷한 개념이다. 리눅스에서는 기본값으로 kilobyte단위로 출력한다.

6. fdformat
(1) 설명 : 플로피디스켓을 low-level format하는 프로그램이다. 참고로 플로피디스크를 마운트할
           필요가 없다.
(2) 사용법
    fdformat [option] 장치명
(3) option
   -n : 포맷한 후에 디스크 표면 검사를 하지 않는다.
(4) 사용예
   1) fdformat /dev/fd0H1440
       => 플로피디스켓을 1.44MB 포맷으로 포맷한다. 기본적으로 첫번째플로피가 3.5" 드라이브이므
         로 'H1440'을 생략하고, 'fdformat /dev/fd0'라고 해도 사용가능하다. 그러나 자동검색하지
         못하면 지정해야 한다.
   2) fdformat -n /dev/fd0H1440
       => 디스크 표면검사를 통한 배드블록 조사를 하지 않는다.

7. mkfs
(1) 설명 : make filesystem의 약자로 새로운 파일시스템을 만드는 명령이다. 루트권한자만 사용
           가능하다 참고로 플로피디스크를 마운트할 필요없이 수행가능하다.
(2) 사용법
   mkfs -t 파일시스템타입 [option] 디바이스
(3) option
   -c : bad block을 체크한 후 파일시스템을 구축한다.
   -v : 결과를 상세히 출력한다.
   -l 파일명: badblocks 라는 명령을 이용하여 작성된 '파일명'으로부터 bad blocks 리스트를 읽어
            들인다
(4) 사용예
   1) mkfs -t ext2 /dev/hdb1
       => /dev/hdb1 을 리눅스파일시스템인 ext2로 만든다.
   2) mkfs -t ext2 /dev/fd0
       => 플로피디스크의 파일시스템을 리눅스파일시스템인 ext2로 만든다.
   3) mkfs -t ext2 -c /dev/fd0H1440
       => 플로피디스크의 bad block을 체크하면서 파일시스템을 만든다.

8. mke2fs
(1) 설명: ext2 파일시스템으로 만드는 명령이다. mkfs와 사용법이 유사하다.
(2) 사용법
   mke2fs [option] 디바이스
(3) option
   -j : ext3 파일시스템인 저널링(journaling) 파일시스템으로 만든다.
(4) 사용예
   1) mke2fs /dev/fd0
       => 플로피디스켓의 파일시스템을 ext2로 만든다.
   2) mke2fs -j /dev/hda6
       => /dev/hda6 파일시스템을 ext3파일시스템으로 만든다.

9. fsck
(1) 설명: 'file system check'의 약자로 리눅스 파일시스템에서 파일을 체크하고 수리하는 명령
          이다. 도스의 chkdsk나 scandisk명령과 유사하다.
(2) 사용법
   fsck [option] 장치명
   fsck [option] 마운트포인트
(3) option
   -a : 명령 수행에 대한 확인 질문 없이 무조건 수행한다.
   -r : 명령 수행에 대한 확인 질문을 한다. 여러개의 fsck가 병렬모드형태로 작동하고 있을 때
       유용하다.
   -A : /etc/fstab에 정의되어 있는 모든 파일 시스템을 체크한다.
   -P : -A옵션을 사용할 때, 루트 파일시스템을 다른 파일시스템과 병렬로 함께 체크한다.
   -R : -A옵션을 사용할 때, 루트 파일시스템은 체크하지 않고 건너 뛴다.
   -N : 실행을 하지 않고 단지 어떤 것이 실행되어지는 지 보여준다.
   -T : 검사를 시작할 때 제목을 보여주지 않는다.
   -s : fsck동작은 시리얼화한다. 대화형모드에서 여러 파일시스템을 점검할 때 유용하다.
   -V : 실행되는 각 파일시스템용 명령을 포함해 자세한 출력을 수행한다.
   -v : 버전 정보를 보여준다.
   -t fstype : 점검할 파일시스템의 유형을 지정한다. 파일시스템 앞에 no를 붙이면 지정한 파일
              시스템을 제외한 나머지를 검사하고, -A옵션이 설정돼 있는 경우 /etc/fstab에서
              파일시스템 유형이 맞는 것만 검사한다.
(4) 사용예
   1) [root@www /root]# fsck -v
      Parallelizing fsck version 1.19 (13-Jul-2000)
   2) fsck /   => / 마운트포인트의 파일시스템을 체크한다.
   3) fsck /dev/hda2 => /dev/hda2파티션의 파일시스템을 체크한다.
(5) 참고 : fsck명령은 손상된 디렉토리나 파일을 수정할 때 임시로 /lost+found 디렉토리에 연결한
           뒤에 오류를 수정한다. 작업이 끝나면 사라진다.
(6) 종료코드
   0 : 에러없음
   1 : 파일시스템 에러 고쳐짐
   2 : 에러는 수정되었으나 리부팅이 필요함
   4 : 파일시스템 에러를 고치지 않고 그대로 둠
   8 : 실행중 에러 발생
   16 : 사용법과 문법에 대항 에러 발생
   128 : 공유 라이브러리에 대한 에러 발생
(7) 유의점 : fsck를 사용하기 전에 리눅스를 single모드로 부팅해 검사하는 것이 좋다. 또한
             마운트되어 있는 파일시스템을 fsck로 검사하는 것은 좋은 방법이 아니다. 현재 실행중
             인 파일시스템이 손상될 우려가 있으므로 fsck로 검사하기 전에 반드시 마운트되어
             있는 파일시스템은 언마운트한 다음에 검사하도록 한다.

10. e2fsck
(1) 설명 : 리눅스 파일시스템중 ext2(Linux second extend)파일시스템을 체크한다. 현재 리눅스에
          서 ext2를 사용하므로 이 명령을 내려 사용하면 된다. fsck명령을 내려도 자동으로 이 명
          령으로 전환된다. 사용법은 fsck와 유사하다.
(2) 사용법
   e2fsck [option] 장치명
   e2fsck [option] 마운트포인트
(3) option
   -n : 상황이 발생했을 때 물음에 대해 'no'라고 인식하여 처리한다.
   -y : 상황이 발생했을 때 물음에 대해 'yes'라고 인식하여 처리한다.
   -c : BAD Block을 체크한다.
   -f : 깨끗한 파일시스템까지 강제적으로 체크한다.
(4) 사용예
   1) e2fsck -y /dev/hda2
       => /dev/hda2 의 파일시스템을 체크하는데 상황발생시 물음에 대해 모두 'yes'라고 인식하여
         처리한다.
   2) e2fsck /home
       => /home 파티션의 파일시스템을 체크한다

11. dd
(1) 설명: Data Dumper의 약자로 디스크를 이미지형태로 백업하거나 파일의 포맷 즉, 형식을 바꾸는
          명령으로 텍스트파일의 대소문자변환과 부팅디스크를 만들때도 쓰인다.
(2) 사용법
   dd if=입력파일 [conv=conversion type] of=출력파일 [bs=] [count=] [skip=]
(3) option
   if= : 입력파일을 지정
   of= : 출력파일을 지정
   conv= : 변환하는 데이터지정
   bs= : 출력되는 블록사이즈를 지정, 즉 한번에 얼마나 많은 데이터가 변환되는지를 지정
   count= : 변환되는 블록의 수 지정
   skip= : 입력파일의 시작되는 블록지정. 데이터를 나누어 이미지를 뜰 때 사용
(4) 사용예
   1) dd if=/tmp/aaa.txt conv=ucase of=/tmp/bbb.txt
     => /tmp/aaa.txt 파일에서 모든 글자를 대문자로 바꾼뒤 /tmp/bbb.txt파일로 저장하라.
   2) dd if=ccc.txt conv=lcase of=ddd.txt
     => 현재디렉토리의 ccc.txt 파일의 모든 글자를 소문자로 바꾼뒤 현재디렉토리의 ddd.txt파일로
     저장하라. 참고로 대소문자 변환시 if와 of의 파일명을 같게 해서는 안된다. 같게 하면 파일의
     크기가 0인 파일로 바뀐다.
   3) dd if=/boot/vmlinuz of=/dev/fd0
       => 부팅이미지인 /boot/vmlinuz 를 /dev/fd0 즉, 플로피 디스크에 저장하라는 명령으로 부팅
         디스크를 만드는 것이다
   4) dd if=/mnt/cdrom/images/boot.img of=/dev/fd0
       => 리눅스설치 디스크용 이미지를 플로피디스크에 저장한다. 리눅스 설치디스크가 만들어진
         다.
   5) dd if=/dev/hda of=/dev/hdb
    => /dev/hda 를 그대로 /dev/hdb로 디스크 백업한다.
   6) 4개의 620MB 이미지를 만드는 경우
    dd if=/dev/hda of=/mnt/data/disk1.img bs=1M count=620
    dd if=/dev/hda of=/mnt/data/disk2.img bs=1M count=620 skip=621
    dd if=/dev/hda of=/mnt/data/disk3.img bs=1M count=620 sklp=1241
    dd if=/dev/hda of=/mnt/data/disk4.img bs=1M count=620 skip=1861
     => 특정디스크의 내용을 백업할 때 CD로 구울 수 있는 620MB의 크기로 나눈 것이다. 여기서 of
       에 기록되어 지는 디스크는 다른 디스크(예를 들면 /dev/hdb같은)이어야 한다.
(5) 정리: dd 명령을 사용하는 경우
   1) 텍스트파일의 문자들을 대/소문자로 전환할 때 사용한다.
   2) 부팅디스크 또는 설치디스크를 만들 때 사용한다.
   3) 디스크 단위로 백업할 때 사용한다.

(참고) 리눅스 설치디스크 만들기
(1) 설명: 요즘 나오는 시스템은 바이오스에서 CD-ROM부팅을 지원하지만 CD-ROM부팅이 지원하지
         않는 경우에는 플로피 디스크로 부팅해서 리눅스를 설치해야 한다. 예를 들면 펜티엄초기
         모델중에는 플로피디스크나 하드디스크만 부팅이 되는 시스템이 있다 .이 경우에는 CD-ROM
         으로 제공되는 리눅스를 설치하려면 설치디스크를 만들어 부팅한 후 설치해야 한다.
(2) 방법
   1) 윈도우에서 만들기
    ㄱ. 리눅스 배포판 1번 CD-ROM을 삽입하고 CD-ROM 드라이브로 이동한다. 만약 CD-ROM이 F:인경우
       'F:\>CD DOSUTILS' 명령을 내린다.
    ㄴ. 'F:\DOSUTILS>rawrite' 를 실행시킨다.
    ㄷ. 'Enter disk image source file name :' 이라고 나오면
         '..\images\boot.img' 또는 'F:\images\boot.img'
         라고 입력한다.
    ㄹ. Enter target disk drive : 이라고 나오면
        'a:'
        라고 입력한다.
    ㅁ. Please insert a formatted diskette into drive A: and press -ENTER- : 가 나오면
        플로피 디스크를 삽입하고 [ENTER]키를 누른다.
    ㅂ. 리눅스용 설치디스크가 만들어진다.
   2) 리눅스에서 만들기
    ㄱ.리눅스설치 1번 디스크를 CDROM에 삽입한다.
    ㄴ. mount /mnt/cdrom
         => CD-ROM 을 마운트한다.
    ㄷ. cd /mnt/cdrom/images
         => CD-ROM 의 images 디렉토리로 이동한다.
    ㄹ. dd if=boot.img of=/dev/fd0
         => dd 명령을 이용하여 부팅이미지를 플로피디스켓에 넣는다.
(3) 리눅스설치: 만들어진 설치디스크로 부팅한 후 리눅스설치 CD-ROM으로 설치한다.

12. fdisk
(1) 설명 : 디스크 파티션을 만들고 삭제하는 명령이다.
(2) 사용법
   fdisk [option] 장치명
(3) option
   -l : 파티션 테이블 목록을 보여준다.
   -s partition : 해당파티션의 크기를 보여준다. 역시 단위는 block이다.
   -v : fdisk의 버전을 보여준다.
(4) 사용예
   1) fdisk -l
     => 현재 디스크의 파티션 테이블 목록을 보여준다.
   2) fdisk /dev/hdb
     => Primary의 Slave 디스크 파티션을 설정한다.
   3) [root@www root]# fdisk -s /dev/hda9
      4024251
       => /dev/hda9의 크기를 보여준다.


- 파일시스템 관련 명령어(1) - 실습

1. 리눅스서버를 사용중인데 사용자가 증가하여 /home 파티션의 공간이 부족하게 되었다. 그래서,
   새로운 하드디스크를 서버에 추가로 장착하여 파티션을 하나로 만들어 /home2로 사용하고자 한다.
   어떠한 절차를 거쳐야 하는가? (참고로 새로운 하드디스크는 IDE 타입으로 Primary의 Slave로
   장착하였다.)

   => (방법)
     1. fdisk 를 한다.
       1) 설명: 새로운 하드디스크를 장착하면 가장 먼저 해야 한다. 또한 새로이 장착한 하드디스
               크가 Primary Slave에 위치하므로 리눅스에서 장치명은 /dev/hdb 가 된다.
       2) 사용예
         [root@www root]# fdisk /dev/hdb
           => fdisk를 이용하여 파티션을 하나로 만든다.
     2. mkfs를 이용하여 파일시스템을 생성한다.
       1) 설명: fdisk 후에는 파일시스템을 생성해줘야 한다. 위에서 새로이 장착한 하드디스크를
               하나의 파티션으로 만들었으므로 정확한 장치명은 /dev/hdb1이 된다.
       2) 사용예
         [root@www root]# mkfs -t ext3 /dev/hdb1
           => /dev/hdb1을 ext3 파일시스템으로 만든다. mkfs 대신에 mke2fs, mkfs.ext2, mkfs.ext3
             등의 명령을 이용하여 파일시스템을 만들 수 있다.
     3. mount 한다.
       1) 설명: /home2로 사용하려면 해당디렉토리가 존재해야 하고 그 디렉토리로 마운트하면
               된다.
       2) 사용예
         [root@www root]# mkdir /home2                      // 미리 디렉토리를 생성한다.
         [root@www root]# mount -t ext3 /dev/hdb1 /home2
     4. 참고 : /etc/fstab 이용하기
       1) 설명: 명령어 상태를 mount명령을 내리면 시스템 재부팅시 해당 파티션이 마운트되어 있지
               않는다. 재부팅시에도 언제라도 /home2 파티션을 사용하려면 /etc/fstab파일에 등록
               해야 한다.
       2) 사용예 : /etc/fstab파일에 아래와 같이 등록한다.
         /dev/hdb1          /home2                  ext3    defaults        1 2


2. 리눅스 설치시에 파티션을 swap과 '/ ' 두 개로 나누어서 설치하였다. 현재 /home 디렉토리로
   사용중인 공간을 확인하려면 어떻게 해야 하는가?

    => (방법)
      1. 설명: 일반적으로 파티션별 사용공간과 관련된 명령어는 남은 공간을 보여주는 df 이지만
              실제 리눅스에서 사용하는 파티션을 '/' 하나로만 분할하였기 때문에 df 명령은 사용
              할 수 없고 du 명령을 사용해야 한다.
      2. 방법
        1) 해당디렉토리로 이동한다.
          [root@www root]# cd /home
        2) du -sh 명령을 내린다.
          [root@www home]# du -sh
          985M    .
           => 현재 /home 디렉토리에서 사용중인 공간은 985M 이다.



3. 현재 /home 디렉토리의 공간이 과도하게 사용중이다. 사용자 쿼터(Quota)를 설정하지 않아 각
   사용자들은 현재 서버에 사용공간에 제한이 없다. 특정사용자인 posein 이라는 사용자가 사용중
   인 공간을 확인하고 싶다. 어떻게 해야 하는가?

   => (방법)
     1. 설명: 특정사용자가 사용중인 공간을 확인하는 방법도 사실 위 문제2와 같다. 해당사용자의
             홈디렉토리로 이동후에 du -sh 명령을 내리면 된다.
     2. 방법
       1) posein 이라는 사용자의 홈디렉토리로 이동한다.
         [root@www root]# cd ~posein
       2) du -sh 명령을 내린다.
         [root@www posein]# du -sh
         550M    .



4. posein 이라는 사용자가 공간을 많이 차지하고 있다. 어떤 파일이나 디렉토리가 얼마만큼 차지
   하는지 알고 싶다면 어떻게 해야 하는가?
   => (방법)
     1. 설명: 사용자의 디렉토리로 이동한 뒤에 du -sh * 명령을 내리면 파일이나 디렉토리단위로
            차지하는 공간을 나열해서 보여준다.
     2. 방법
       [root@www posein]# du -sh *

Trackback
Reply

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

 

1. 개요
일반적으로 유닉스에서는 3계층(사용자, 그룹, 기타사용자)에 3가지권한(읽기, 쓰기, 실행)를 부여
한다. 쉬운 방법으로 8진수방법을 많이 이용하는 데 'chmod 755 a.out'라 하면 사용자에게는 모든
권한를 부여하고, 그룹사용자와 기타 사용자는 읽기와 실행권한만 부여한다. 이런 방법이 일반적이
지만 사실은 8진수 4자리를 이용한다.

2. 8진수를 이용한 허가권
(1) 4개의 8진수를 이용한 허가권표
  

8진수의 값 8진수 1번째자리 8진수 2번째자리 8진수 3번째자리 8진수 4번째자리
4 set-UID r r r
2 set-GID w w w
1 sticky-bit x x x
  Special User group Others


(설명) 첫번째 8진수는 특수 허가권 설정에 사용되고, 두번째는 파일의 소유자에 대한 허가권, 세번
       째는 그룹에 대한 허가권, 네번째는 나머지 모든 사용자에 대한 허가권을 설정하는 데 사용된
       다. 보통 사용시에는 첫번째인 특수허가권이 빠지고, 3자리만으로 소유권을 부여하는 데 이런
       경우에는 특수허가권에 대한 값이 0이다.

(2) 허가권 값의 예
   1) 0400 => 파일의 소유자에게 읽기(r)만을 허가함. 400과 동일하다.
   2) 0755 => 파일의 소유자에게는 읽기, 쓰기, 실행권한을 부여하고, 나머지 모든 사용자에게는
          읽기와 실행권한만을 부여함 755와 동일하다.
   3) 4755 => set-UID 허가권이 지정되어 있다는 점을 제외하고는 755와 동일함. set-UID허가권을
             가진 파일을 실행할 경우 프로세스는 이 프로세스를 실행한 사용자의 권한이 아니라,
             파일 소유자와 동등한 권한을 가지게 된다. 따라서, 소유자가 루트이고 파일이 set-UID
             허가권이 있으면 이 파일을 실행시킬 수 있는 사람은 누구라도 슈퍼유저의 권한을 가진
             다. set-UID는 보안상의 허점이 발견될 수 있으니 지정시 주의해야 한다.
   4) 2755 => 755와 비슷하지만 set-GID허가권이 설정되어 있다는 점이 다르다. set-GID 허가권을
             가진 파일이 실행되면 그 파일의 그룹이 가지는 모든 권한을 가지게 된다.
   5) 1755 => 755와 비슷하지만 sticky-bit를 지정한다는 점이 다르다. sticky-bit는 프로그램의
             실행이 종료된 뒤에도 실행코드를 계속해서 메모리에 남겨두어 다음번에 그 프로그램을
             다시 실행시킬 때 상대적으로 실행속도를 빠르게 하는 역할을 하고 공식적으로는 텍스
             트모드저장 허가로 알려져 있다. 실질적으로는 공유모드로 사용된다.

3. 문자열을 이용한 허가권
(1) 문자열을 이용한 허가권표

set-UID(s) read(r) read(r) read(r)
set-GID(s) write(w) write(w) write(w)
sticky-bit(t) excute(x) excute(x) excute(x)
Special User(u) Group(g) Others(o)


   (설명) 허가권을 각각 u(사용자), g(그룹), o(다른 사용자) 또는 a(all=전체)로 허가권을 부여
         한다. 또한 허가권을 r(읽기), w(쓰기), x(실행), s(set-UID 또는 set-GID), 또는
         t(sticky-bit)로 부여한다. 허가권 부여의 기호는 +로, 허가권의 회수는 -를 사용한다.
(2) 사용예
   chmod a+rw * => 모든 사용자에게 현재 디렉토리의 모든파일에 대하여 읽기와 쓰기권한을 부여함.
   chmod a+rx,u+w a.out => a.out이라는 파일에 대해 모든 사람에게 읽기와 쓰기권한을 부여하고,
                          소유자에게는 쓰기권한까지 부여한다.
   chmod u+s aa => aa라는 파일에 set-UID를 지정한다.
   chmod g+s aa => aa라는 파일에 set-GID를 지정한다.

4. Set-Bit 이해하기
(1) Set-Bit : Set-Bit란 기본권한이외에 특수한 목적을 위해 부여되는 특수권한이다. Set-Bit에는
              Set-UID, Set-GID, Sticky Bit이 있으며, 이러한 권한은 시스템운영에 꼭 필요하지만
              보안상의 위험을 초래할 수 있으므로 정확한 이해가 필요하다.

(참고1) 'ls -l'을 이용한 파일의 종류확인하기
  보통 'ls -l' 명령을 내리면 다음과 같이 나온다.
   -rwxrw-r--    1 posein   posein         95  4월  9 15:13 a.out
  파일의 권한과 관련된 부분이 -rwxrw-r--이다. 처음 -부분이 파일의 종류를 나타내는 것이다.
    - : 일반파일
    d : 디렉토리
    l : 링크파일
    b : 블럭디바이스(디스크 드라이버)
    c : 캐릭터 디바이스(입출력 관련 특수 파일)
    P : 네임드 파이프
    s : 소켓

(2) set-UID가 부여된 파일을 살펴보기
   1) 설명: Set-UID가 설정된 파일로는 passwd명령이 있다. 이 명령은 보통 패스워드를 변경하는
          명령이다. 이 명령어를 가지고 Set-bit에 대해 알아보자.
   2) 예
    ㄱ. [root@www bin]# cd /usr/bin 한다.
    ㄴ. [root@www bin]# ls -l passwd
        -r-s--x--x    1 root     root        15368  5월 29  2002 passwd
         => 살펴보면 사용자권한의 x자리에 s라는 글자가 있다. 이것이 set-UID가 부여된 것이다.
           이 명령의 소유자는 root이다. 따라서 이 명령어를 실행시킬 수 있는 사람은 root와 동일
          하게 passwd 명령을 이용하는 것이다.
   3) Set-Bit가 필요한 이유
     일반사용자가 자기 자신의 패스워드를 변경한다고 가정하자. 이 경우에 passwd명령으로 패스워
    드변경한 후에 실제적인 기록은 /etc/shadow파일에 변경되어야 한다. 그러나, 일반사용자는
    /etc/shadow파일에 쓰기권한은 물론 읽기권한조차 부여가 되어있지 않다. 이런 경우에는 passwd
    명령을 이용한 순간에는 root권한으로 /etc/shadow라는 파일에 기록할 필요가 있게 된다. 이러한
    이유로 Set-Bit가 필요하다. 보안상 Set-Bit는 위험하지만 꼭 필요한 요소이다.

(3)set-UID를 이용해보기
   1) 설명: Set-Bit가 이해되지 않는다면 와우리눅스 6.2(커널 2.2버전)을 설치하여 다음을 테스트
           해보면 쉽게 이해되리라 생각된다. 현재 리눅스(커널 2.4버전이상)에서는 되지 않는다.
           예전에 백도어(Back Door)로 많이 이용되면 방법이다.
   2) 방법 : 보통 리눅스에서는 bash를 사용한다. 이 bash파일을 이용하여 set-UID를 이용해보자.
    ㄱ. bash의 실행파일이 /bin/bash이므로, /bin디렉토리로 이동하자.
        [posein@house posein]$ cd /bin
    ㄴ. 'ls -l bash' 해본다.
       [posein@house /bin]$ ls -l bash
       -rwxr-xr-x    1 root     root       377960  5월 19  2000 bash*
        => 이 파일의 특성을 살펴보면 소유자는 root이고 실행파일로서 실행권한은 모든 계층에서
          사용가능하게 되어 있다. 다른 것이 있다면 속성은 변경권한은 루트에게만 있다는 것이다.
          이 파일은 모든 사용자들이 로그인과 동시에 사용된다.
    ㄷ. bash파일에 set-UID를 부여해본다. 일단 속성의 변경은 파일의 소유자인 root에게 있으므로
       루트권한을 획득했다고 가정한다.
      [root@house /bin]# chmod u+s bash
    ㄹ. bash파일의 속성을 확인해보자.
       [root@house /bin]# ls -l bash
       -rwsr-xr-x    1 root     root       377960  5월 19  2000 bash*
        => 속성이 바뀌었음을 알 수 있다.
    ㅁ. 이 파일은 모든 사용자들이 사용하는 파일이므로 일반사용자로 로그인해보자. 로그인해보면
       무엇인가 다름을 느낄 수 있다.
       [posein@house posein]#
        => 프롬프트부터 다르다. 리눅스에서 '$'는 일반사용자를 나타내고 '#'은 루트권한자임을
          나타낸다. 리눅스에서 현재접속한 일반사용자는 루트권한자로 처리한다는 것을 알 수 있
          다.
    ㅂ. 명령어를 이용하여 사용자 확인해보자. 먼저, who명령어를 이용해보자.
       [posein@house posein]# who
       posein   pts/0    Jun 25 01:20
        => 접속한 사람은 'posein'이라는 것을 알 수 있다.
    ㅅ. 또 다른 명령인 whoami명령을 이용해보자.
       [posein@house posein]# whoami
       root
        => 루트로 인식함을 알 수 있다.
    ㅇ. 루트의 권한인지 사용해보자.
      파일의 소유자가 루트이고 루트만이 변경가능한 파일인 /etc/inittab파일을 이용하여 테스트해
      보도록 하자.
      [posein@house posein]# vi /etc/inittab
       => 편집을 해보도록 한다. 편집을 시작하자 마자 ex모드 명령줄에서 'Warning: Changing a
         readonly file'라고 경고메시지가 뜬다. 즉 일단은 일반사용자로 인식했기 때문에 읽기전용
         이라는 메시지가 뜬다. 그러나, 무시하고 ':wq!'를 이용하여 저장해보자. 저장이 되서 변경
         됨을 알 수 있다. 즉 루트권한자로서 실행이 가능함을 알 수 있다. 참고로 뛰어난 해커들은
         이런식으로 원본파일에 set-UID속성을 부여하지 않는다. 일단 루트권한을 획득한 뒤 원본파
         일을 다른 이름으로 바꿔서 복사시킨 후에 set-UID를 걸어서 백도어로 사용한다.

(4) sticky bit에 대하여
   1) 설명: sticky bit는 /tmp디렉토리에서 사용되고 있다. 이 디렉토리를 살펴본다.
   2) 방법
    ㄱ. 일단 최상위 디렉토리로 이동해보자.
       [posein@house posein]$ cd /
    ㄴ. 속성의 확인
       [posein@house /]$ ls -l
       drwxrwxrwt    9 root     root         4096  6월 25 01:45 tmp/
        => /tmp디렉토리에 sticky 비트가 설정되어 있음을 알 수 있다. 이 디렉토리에서는 모든
          사용자가 파일이나 디렉토리를 만들고 지울 수 있다. 그러나, 해당파일이나 디렉토리를
          지울 수 있는 것은 그 파일이나 디렉토리의 소유자만 가능한다. 즉 절대로 다른 사람들이
          만든 파일이나 디렉토리등은 지울 수 없다. 그래서 sticky bit를 공유모드라고 한다.

5. umask
(1) 설명 : 새로운 파일 생성시 기본 허가권을 설정하는 명령이다.
(2) 사용법
   umask [option] [값]
(3) option
   -S : umask의 값을 문자로 표기한다.
(4) 사용예
   1) 현재 설정된 umask의 값을 보여준다.
    [posein@house posein]$ umask
    002
   2) 설정된 umask의 값을 문자로 보여줌.
    [posein@house posein]$ umask -S
    u=rwx,g=rwx,o=rx
   3) umask의 값을 바꾼다.
    [posein@house posein]$ umask 022
     => umask의 값을 022로 바꾼다.
   4) 문자값을 이용한 umask의 값 설정
    [posein@house posein]$ umask u=rwx,g=rw,o=rw
  (5) umask값과 기본 허가권과의 관계
    기본적으로 새 파일이 생성되면 보통 0666이라는 허가권을 요청한다. 즉, 모든 사용자에게 실행
   권한을 제외한 모든 권한이 부여된다. 그 후 umask의 설정상태를 참조하여 부여해야 될 권한은
   부여하게 되고 부여하지 않아야 될 권한은 부여하지 않는다. 만약에 umask값이 002라면
   기본값인 0666을 이진수화하면 000 110 110 110 이 되고,
   umask인 002를 이진수화하면  000 000 010이 된다. 여기서 umask값은 역수화 된다. 따라서
   111 111 101이 된다. 기본값과 umask값을 AND연산을 한다.
   000 110 110 110 + 000 111 111 101 = 000 110 110 100 이 된다.
   따라서 생성되는 기본 권한은 'rw-rw-r--'이다.
   (실습) umask값과 기본 권한
     1. 현재 umask값을 확인해 보기
       [posein@house posein]$ umask
       002
     2. 빈 파일을 생성하는 touch 명령으로 파일을 생성한다.
       [posein@house posein]$ touch aaa
     3. 기본 허가권을 확인해본다.
       [posein@house posein]$ ls -l
       -rw-rw-r--    1 posein   posein          0  5월  2 21:24 aaa
       => 기본 권한이 rw-rw-r--인 것을 알 수 있다.
     4. umask값을 변경한다. 022로 변경
       [posein@house posein]$ umask 022
     5. 빈 파일을 생성한다.
       [posein@house posein]$ touch bbb
     6. 기본 허가권을 확인해 본다.
       [posein@house posein]$ ls -l
       -rw-r--r--    1 posein   posein          0  5월  2 23:07 bbb
       => 기본 허가권이 rw-r--r-- 로 바뀐다.

Trackback
Reply

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

 

1. chmod(change mode)
(1) 설명: 모든 파일에는 접근할 수 있는 허가권이 있는데 이 허가권을 설정하거나 해제하는 명령어
         이다.
(2) 사용법
    chmod [option] mode file(s)
(3) option
    -R : 서브 디렉토리까지 설정된다.
(4) mode
   1) 문자모드(symbolic mode) : 특정문자를 사용하여 허가권을 설정하는 방법으로 유연성있게 권한
                               을 설정할 수 있다.
    ㄱ. 기본권한과 문자의 의미

기본권한 file인 경우 directory인 경우
r 읽기 파일의 내용을 볼 수 있는 권한 디렉토리안의 파일을 볼 수 있는 권한
w 쓰기 파일의 내용을 수정할 수 있는 권한 디렉토리안의 파일을 삭제/생성할 수 있는 권한
x 실행 실행파일을 실행시킬수 있는 권한 디렉토리안으로 접근할 수 있는 권한


    ㄴ. 사용자와 문자
      u :  파일의 소유자(user)
      g : 그룹(group)
      o : 다른 사용자(other)
      a  : 전체(all) - 소유자, 그룹, 다른 사용자 전부를 가리킨다.
    ㄷ. 권한지정문자
      + : 설정
      - : 해제
      = : 지정된 계층에서 해당권한만 설정하고 나머지는 해제시킴
   2) 숫자모드(numberic mode) : 숫자(4,2,1,0)를 조합하여 8진수형태의 값을 만들어 권한을 설정한
                               다. 기본계층이 3계층이므로 숫자 3자리(예를 들면 755)로 부여하는
                               데 앞에서부터 각각 소유자(100의 자리), 소유 그룹(10의 자리),
                               다른사용자(1의 자리)의 접근 권한을 나타낸다.
    ㄱ. 숫자와 권한
      4 : 읽기
      2 : 쓰기
      1 : 실행
      0 : 어떠한 권한도 부여하지 않음
    ㄴ. 중복권한: 두가지 이상의 권한을 같이 설정하려면 각 숫자를 더한 값을 지정하면 된다.
       예) 7 : 읽기, 쓰기, 실행
           6 : 읽기, 쓰기
           5 : 읽기, 실행
(5) 사용예
   1) chmod ugo+rwx aa.txt : 모든 사용자에게 모든 권한을 준다.
     = chmod a+rwx aa.txt , chmod 777 aa.txt
   2) chmod 755 aa.txt
     => aa.txt라는 파일에 대해 소유자는 읽기, 쓰기, 실행이 가능하고 그룹과 기타 사용자는
       읽기와 실행만 가능하게 설정된다.
   3) chmod o-r,o-w *
     = chmod o-rw *
      => 현재 디렉토리 안의 모든 파일을 다른 사용자가 읽지도 쓰지도 못하게 만든다.
   4) chmod a+r *.txt
     => *.txt로 끝나는 모든 파일을 모든 사용자가 읽을 수 있게 만든다.
   5) chmod o=r /etc/lilo.conf
     => /etc/lilo.conf라는 파일을 다른 사용자가 읽을 수만 있게 만든다.
   6) chmod -R go-rwx *
     => 현재 디렉토리의 모든 파일과 서브 디렉토리의 모든 파일에 대해 그룹과 다른 사용자가 아무
       것도 할 수 없게 만든다.

2. chown(change owner)
(1) 설명: 파일의 소유자를 바꾼다. 이 명령은 누구나 실행가능하지만, root가 아닌 경우에는
           제약이 많다.
(2) 사용법
   chown [option] newowner file(s)
    => 파일 이름 대신 디렉토리 이름도 가능. newowner에서 사용자의 ID나 사용자 번호를 쓸 수
      있다.
(3) option
   -R : 서브 디렉토리까지 바꾼다.
(4) 사용예
   chown -R posein * => 현재 디렉토리의 모든 파일과 서브 디렉토리의 모든 파일의 소유자를
                       posein로 바꾼다.
(5) 참고 : chown명령을 통해서 파일의 소유권과 그룹의 소유권을 동시에 변경할 수 있다. 이를
          위해서는 다음과 같이 동시에 써준다.
  예) chown medic.terran /home/prehee/data => /home/prehee/data의 파일 소유권은 medic에, 그룹
                                             소유권은 terran이 된다.
      chown 500.500 * => 현재 디렉토리의 모든 파일의 소유자는 UID가 500인 사용자에게, 소유그룹
                        은 500인 그룹으로 넘긴다.

3. chgrp(change group)
(1) 설명: 파일의 소유 그룹을 바꾼다. root가 아니면 거의 쓸모가 없다.
(2) 사용법
   chgrp [option] newgroup file(s)
    => 사용법은 option은 chown과 비슷하다.
(3) 옵션
  -R : 한 디렉토리내의 모든 파일이나 하위 디렉토리의 그룹소유권을 바꾼다.
(4) 사용예
   chgrp eles logo.gif => logo.gif라는 파일의 소유그룹을 eles로 바꾼다.

(참고) 사용자 번호
  모든 사용자는 사용자 번호를 가지고 있으며, 파일들의 소유자도 사용자 번호로 기록되어 있다.
  ls 명령등에서 파일의 소유자를 사용자 ID로 보여주는 것은 /etc/passwd 파일 안에 사용자 번호와
  사용자의 ID가 기록되어 있으므로 유닉스가 참조하여 사용자번호 대신에 사용자 ID를 보여주는 것
  이다. 사용자 번호는 처음 계정을 만들때 시스템이 임의로 부여한다. (대부분 사용자번호는 500부
  터 부여가 됨) 어떤 파일의 소유자가 /etc/passwd파일 안에 등록되어 있지 않은 경우 ls명령을 실
  행하여 파일의 소유자를 프린트하게 한다면 사용자 ID대신에 파일의 소유자 번호를 보여주게 된다.
  파일의 소유 그룹도 비슷한 방식으로 관리되며, 그룹번호와 그룹이름에 대한 정보는 /etc/group에
  들어 있다.

Trackback
Reply

출처 : 대전국제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
우주곰:지구곰이 아닙니다.
지구곰이 아닙니다.
Categories (190)
Information (5)
About uzoogom (5)
My Advanced Linux (73)
Learning Linux (96)
OperatingSystem (5)
Databases (4)
OpenSource (1)
Tips! (1)
«   2024/05   »
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