system7

Document Sample
system7 Powered By Docstoc
					컴퓨터 시스템 실험7



         김영균

 ygkim@cespc1.kumoh.ac.kr


School of Computer Engineering
7. 유틸리티

- 약 30가지의 유틸리티를 소개 함.

  구분                            유틸리티

화일 여과                   egrep, fgrep, grep, uniq
화일 정렬                   sort
화일 비교                   cmp, diff
화일 보관                   tar, cpio, dump
화일 탐색                   find
명령어 스케줄                 at, cron, crontab
프로그램 가능한 텍스트 처리         awk
하드 및 소프트 링크             ln
사용자 대치                  su
전자우편 검사                 biff
화일 변환                   compress, crypt, sed, tr, ul, uncompress
순수 화일 내용 보기             od
화일 시스템 마운팅              mount, unmount
셸 확인                    whoami
문서 준비                   nroff, spell, style, troff
7.2 화일 여과

- 어떤 조건과 일치하는 줄만을 골라내는 것 같이, 화일의 내용을 여과(제거)할 수
  있는 것은 아주 유용하다.

- 패턴 여과 : egrep/fgrep/grep

 옵션 -n은 각각 일치하는 줄 앞에 줄 번호가 먼저 표시되도록 한다.
 옵션 -i은 패턴의 대소문자를 무시한다.
 옵션 -l은 지정된 패턴이 포함된 화일들의 목록을 보여 준다.
 옵션 -v은 패턴과 일치하지 않는 줄을 보여 준다.
 옵션 -w은 전체 단어로서 비교 한다.
 옵션 -x는 스트링과 정확하게 동일한 줄만을 출력 한다.

- fgrep은 일정한 문자열들만 조사하는 grep의 빠른 버젼.
- egrep은 grep의 확장된 버젼으로 정규식을 지원 한다.

$ grep the grepfile ---> 단어 the를 grepfile로부터 탐색.

$ grep -wn the grepfile ---> 단어 the를 grepfile로부터 탐색,
                             전체 단어와 비교, 줄 번호표시
7.2 화일 여과


$ grep -w x *.c      ---> “.c”로 끝나는 모든 화일들에서 x라는 단어를 탐색

a.c : test (int x )
fact2.c:long factorial (x)
fact2.c:int x;
fact2.c: if (( x == 1 ) || (x == 0 ))
fact2.c: result = x * factorial (x-1);

$ grep -wl x *.c         ---> 일치하는 화일들 이름 표시
a.c
fact2.c

$-
7.3 화일 정렬

- sort유틸리티는 화일을 오름 또는 내림 차순으로 1개 이상의 정렬 항목을 기준으로
  정렬 시킨다.


$ cat sortfile ---> 정렬할 화일의 내용 표시
jan Start chapter 3     10th
Jan Start chapter 1     30th
    Jan Start chapter 5   23rd
    Jan End chapter 3    23rd
Mar Start chapter 7      27
...

$ sort sortfile    ---> 정렬 실행 (오름 차순, 아스키 코드 값을 기준으로)
   Feb End          chapter 1  14
   Jan End          chapter 3   23rd
   Jan Start         chapter 5   23rd
   may ...
$ sort -r sortfile    ---> 정렬 실행(내림 차순, 아스키 코드 값을 기준으로
7.4 화일 비교

- 두 화일의 내용을 비교하는 두 가지 유틸리티가 있다.

 cmp : 두 화일 사이에 서로 다른 첫번째 바이트를 찾아 낸다.
 diff : 두 화일 간의 모든 차이점과 비슷한 점을 보여 준다.


$cmp lady1 lady2      ---> 화일이 서로 다른 경우
lady1 lady2 differ: char 48, line 3

$cmp lady3 lady3     ---> 화일이 서로 똑같은 경우

- 옵션 -l은 일치하지 않는 모든 바이트 값과 바이트 옵셋을 출력 해 준다.

- diff는 두 화일을 비교하여, 그 차이를 출력하는 유틸리티.
  한 화일을 다른 화일로 전환시킬 편집 변경의 목록을 보여 준다.
  첨가(a), 삭제(d), 변경(c)의 형태로 출력 됨.

$ diff lady1 lady2   ---> lady1과 lady2 비교
7.5 화일 보관

- 어떤 화일들을 디스크나 테이프 같은 보조 기억 장치에 보관하고자 하는 경우.

- cpio는 디렉토리 구조를 하나의 백업 볼륨(backup volume)으로 저장하게 한다.

- tar는 디렉토리 구조를 하나의 백업 볼륨으로 저장하게 한다.

- dump는 화일 시스템이 여러 개의 백업 볼륨에 저장되게 한다.
7.5 화일 보관

- cpio는 디렉토리 구조를 하나의 백업 볼륨(backup volume)으로 저장하게 한다.

 옵션 -o는 표준 입력으로부터 화일명의 목록을 가지고 와서, 그 화일들의 백업을
         포함하는 cpio형식 화일을 생성 한다.
 옵션 -v는 화일을 복사하는 동안 각 화일의 이름을 보여 준다.
 옵션 -i는 cpio형식 화일의 표준 입력으로부터 읽기.
 옵션 -t는 목차를 보여 준다.

$ ls *.c | cpio -ov > backup   ---> “backup”화일에 저장
main1.c
main2.c
palindrome.c
reverse.c
3 blocks

$ ls -l backup      ---> “backup”을 조사
-rw-r--r--    1   glass       1536  Jan 9 18:34 backup
7.5 화일 보관

$ rm *.c

$ cpio -it < backup
main1.c
main2.c
palindrome.c
reverse.c

$ ls -l *.c
7.5 화일 보관


- 패턴 “*.c”와 일치하는 모든 화일들을 서브 디렉토리를 포함하여 백업하려면,
  find유틸리티의 출력을 cpio의 입력으로 사용하면 된다.


$ find . -name \*.c -depth -print | cpio -ov > backup2
main1.c
main2.c
palindrome.c
reverse.c
tmp/b.c
tmp/a.c
3 blocks

$ rm -r *.c ---> 원래 화일들 삭제
$ cpio -it < backup2 ---> 화일들 복구
main1.c
main2.c
palindrome.c
...
7.5 화일 보관


- 테이프에 화일 보관 tar
  tar유틸리티는 화일을 자기 테이프에 보관하도록 설계 되었다.
  tar는 특별한 tar-형식의 보관 화일을 생성하고, 접근할 수 있게 한다.

 옵션 -c는 tar-형식의 화일을 생성 한다.
 옵션 -f는 필요한 화일명을 지정해 준다.
 옵션 -x는 지정된 화일을 추출해 낸다.
 옵션 -t은 목차를 보여 준다.
 옵션 -v옵션은 장황하게 긴 출력을 조장 한다.
 옵션 -u옵션은 이미 보관된 화일보다 더 최근의 화일을 덧 붙인다.

$ tar -cvf tarfile   .    ---> 현 디렉토리를 tarfile에 보관
...

$ ls -l tarfile   ---> 생성 화일 보기
-rw-r--r--      1   glass        65536 Jan 10 12:44   tarfile
$-
$ tar -tvf tarfile       ---> tar화일의 목차 보기
7.5 화일 보관

$ tar -xvf tarfile   ---> tar화일들을 추출하기

...


- dump는 화일 시스템을 백업하기 위해 사용하는 유틸리티

$ dump 0 fv /dev/rmt0 /dev/da0      ---> 화일 시스템 /dev/da0의 단계 0 dump(모든
                                         화일을 덤프)를
                                         테이프 드라이버 /dev/rmt0로 확인하며 실행

- 옵션 f는 덤프 파일을 지정할때 사용, v는 쓰기가 일어난후 매체의 각 볼륨들을
  확인하기 위해 사용.

- restore는 이전에 저장되어 있는 화일들을 dump장치인 /dev/rmt0로부터 복구함.

$ restore -x f /dev/rmt0   wine.c hacking.c   ---> 명시된 2개의 화일을
                                                  덤프 화일로부터 복구.
7.6 화일 탐색 find


- find유틸리티는 특수한 조건들을 만족하는 화일들을 찾는다.

 옵션 -name 은 화일의 이름을 pattern으로 지정한다.

 옵션 -print는 현재 화일명을 출력 한다.

 옵션 -mtime은 화일이 count날 수 이내에 수정된 것만을 대상으로 한다.
 (자세한 옵션은 교재 pp307, 표 참조)



$ find . -name „*.c‟     -print   ---> 현재 디렉토리나 그의 부디렉토리의
                                       모든 C소스 화일들의 이름을 출력.
...


$ find . -mtime 14 -ls    ---> 지난 14일 동안 수정된 화일들을 표시

...
7.7 명령 스케쥴링


- 시간이 지난 후에 명령이 수행되도록 스케쥴하도록 2개의 유틸리티가 있음.

- crontab는 주기적으로 수행되는 작업들을 나타내는 스케쥴링 표를 생성.

- at는 지정된 시간에 수행되는 작업을 스케쥴
7.7 명령 스케쥴링

- crontab는 주기적으로 수행되는 작업들을 나타내는 스케쥴링 표를 생성.
- crontab을 사용하기 위해서는 아래 형식의 줄을 포함한 입력화일을 준비.

minute     hour      day    month     weekday      command
0~59       0~23      1~31   1~12        1~7        유닉스 명령어

                                       1=Mon
                                         ...
                                       7=Sun

$ cat crontab.cron   ---> crontab 화일 내용 표시
0 8       *     *     1      echo Happy Monday Morning
* *       *     *     *      echo One Minute Passed > /dev/tty1
30 14 1         *     1      mail users % Jan Meeting At 3pm

$-

첫번째 줄 : 월요일 아침 8시 에 echo명령 수행
두번째 줄 : 매 분마다 터미널인 장치 “/dev/tty1”에 echo명령 수행
세번째 줄 : 1월 1일 오후 2:30에 모든 사용자에게 전자 우편을 전송.
7.7 명령 스케쥴링

- crontab화일을 등록시키기 위해서는 crontab화일명을 인수로 준다.

$crontab crontab.cron   ---> crontab화일을 등록
$-

- crontab화일의 내용 표시

$ crontab -l ---> crontab 화일의 내용을 표시
0      8     *      *      1   echo Happy Monday Morning
...

$

- “cron”이라는 단일 프로세스가 crontab화일에 저장되어 있는 명령들의 실행을
  책임 진다. 이것은 유닉스 시스템이 부팅되면서 시작되고 시스템이 종료될 때까지
  멈추지 않는다.

- 모든 등록된 crontab화일들의 복사본은 “/var/spool/cron/crontabs” 디렉토리에
  저장 된다.
7.7 명령 스케쥴링

- 지정된 시간에 실행 : at

 at유틸리티는 지정된 시간에 실행되는 명령어나 스크립트를 스케줄 하도록
 한다.

- 스크립트가 2분 후에 수행되도록 스케줄 하려면,

$ cat at.csh
#! /bin/csh
echo at done > /dev/tty1

$ at now + 2 minutes at.csh

$ at -l        ---> 스케쥴 내용 표시
$
$ at 17:35 at.csh       ---> 스크립트를 다시 스케쥴
job 2520 at Fri Jan 10 17:35:00 1992
$ at -r 2520         ---> 스케줄 취소
$
7.7 명령 스케쥴링

- 수퍼 유저는 사용자들이 at기능을 사용 가능 또는 불가능하도록 “at.allow”와
  “at.deny”라는 화일들을 “/var/spool/cron” 디렉토리에 생성할 수 있다.

- 각 화일은 각기 별도의 줄에 있는 사용자의 이름들의 목록으로 구성 된다.

- 만일 두 화일이 모두 존재하지 않으면, 단지 수펴 유저만이 at를 사용할 수 있다.

- 만일 “at.deny”가 비어 있고 “at.allow”가 존재하지 않으면,
  모든 사용자들이 at를 사용할 수 있다.
7.8 프로그램 가능한 텍스트 처리: awk

- awk유틸리티는 하나 이상의 화일을 스캔하여 특정한 조건에 맞는 모든 줄에
  필요한 동작을 실행 한다.
  조건과 동작들은 awk프로그램에 의해 기술 됨

- awk는 Aho, Weinberger와 Kernighan의 이름의 첫자를 따서 생성된 이름.

- awk는 프로그램 가능한 텍스트 처리 유틸리티, 입력 줄을 스캔하여, 특정한 조건을
  만족하는 모든 줄들에 대해 작업을 수행.

- awk는 한 줄을 읽을 때 탭, 또는 공백으로 줄 내의 항목을 구분.

- awk프로그램은 다음 형식으로 된 하나의 명령어.

[ condition ] [ \{ action \} ]

condition은 특수 토큰인 BEGIN 또는 END
논리 연산자, 관계 연산자 또는 정규식을 포함하는 식.
7.8 프로그램 가능한 텍스트 처리: awk

- action은 다음과 같은 C와 유사한 문장들이며, 세미콜론으로 종료 된다.

 if(조건부) 문장 [else 문장]
 while(조건부) 문장
 for(연산식;조건부;연산식) 문장
 break
 continue
 변수 = 연산식
 print [연산식의 리스트] [> 연산식]
 printf 형식[, 연산식의 리스트] [>연산식]
 next (현재 입력 줄에 남은 패턴ㅇ르 건너 뛴다)
 exit(현재 줄의 나머지는 건너 뛴다)
 {문장의 리스트 }
7.8 프로그램 가능한 텍스트 처리: awk

- 입력 화일의 공백 또는 탭으로 구분되는 현재 행의 첫번째 항목은 $1에 의해 접근,
  두번째는 $2에 의해 접근, $0은 전체 행을 의미.
  내장 변수 NF는 현재 줄에 있는 항목의 개수.

- 각 행에 항목의 개수를 삽입하기 위한 awk프로그램은 텍스트 화일이 “float”일 때,

$ cat float
wish i was floating in blue across the sky,
my imagination is strong,

...

$ awk „{ print NF, $0 }‟ float
9 wish i was floating in blue across the sky,
4 my imagination is strong,
...
7.8 프로그램 가능한 텍스트 처리: awk

- 특수 조건 BEGIN은 첫번째 줄을 읽기 전에 실행되며,
  END는 줄을 다 읽고 난 후에 구동 된다.
- 내장 변수 FILENAME은 입력 화일 이름과 같다.
  모든 줄의 첫번째, 세번째 그리고 마지막 항목을 보여 주는 프로그램이 실행 된다.

$ cat awk2
BEGIN { print “Start of file:”, FILENAME }
{ print $1 $3 $NF }
END { print “End of file” }

$ awk -f awk2 float    --> awk2라는 스크립트를 float라는 텍스트 화일을 대상으로
                          수행 한다.
Start of file: float
Wishwassky,
Myisstrong,
Andoftendays
Whenseemedclear.
Nowwonderall...
End of file
$-
7.8 프로그램 가능한 텍스트 처리: awk

- print 문장에서 콤마(,)가 올 때, 공백이 출력 됨.

- 다음 예는 “float”화일의 2,3번째 줄의 첫번째, 세번째 그리고 마지막 항목을
  보여 주는 프로그램을 실행.
  NR은 현재 줄의 줄 번호를 가지고 있는 내장 변수
  NF는 현재 줄의 항목의 개수를 가지고 있는 내장 변수

- cat awk3
 NR > 1 && NR < 4 { print NR, $1, $3, $NF }

$ awk -f awk3 float    ---> awk3스크립트 실행
2 My is strong,
3 And often days

$-
7.8 프로그램 가능한 텍스트 처리: awk

- awk는 사용자 정의 변수를 제공 한다.

다음 예는 텍스트 화일의 내용을 표준 출력에 출력하면서,
awk스크립트가 행수와 단어의 수를 센다.


$cat awk4 ---> awk 스크립트 내용 표시
BEGIN { print “Scanning file” }
{
   printf “line %d: %s\n”, NR, $0;
   lineCount++;
   wordCount +=NF;
}
END { printf “lines = %d, words = %d \n”, lineCount, wordCount }

$ awk -f awk4 float ---> awk4라는 스크립트를 float라는 텍스트 화일에 대해 수행.
(결과는 pp317 참조)
7.8 프로그램 가능한 텍스트 처리: awk

- awk는 대부분의 표준 C 제어 구조를 지원 한다.

다음예는 각 줄에 있는 항목들을 역순으로 프린트 한다.

$ cat awk5
{
  for ( i = NF; i>= 1; i--)
       printf “%s”, $i;

    printf “\n”;

}

$ awk -f awk5 float     ---> awk5 스크립트를 실행.
Sky, the across blue in floating was I wish
...

$-
7.8 프로그램 가능한 텍스트 처리: awk

- awk는 exp(), log(), sqrt(), int() 그리고 substr()을 포함하는 여러 내장 함수를 지원.
$ cat test
1.1 a
2.2 at
3.3 eat
4.4 beat

$ cat awk8
{
  printf “$1 = %g “, $1;
  printf “exp = %.2g “, exp($1);
  printf “log = %.2g “, log($1);
  printf “sqrt = %d”, int ($1);
  printf “int = %d”, int ($1);
  printf “substr ( %s, 1, 2) = %s\n”, $2, substr ( $2, 1, 2);
}

$ awk -f awk8 test ---> awk8스크립트 실행
(실행 결과는 pp319 참조 )
7.9 하드 링크와 소프트 링크 : ln

- ln 유틸리트는 화일 간의 하드 링크와 심볼릭 링크를 모두 생성할 수 있게 해준다.

옵션 -s는 ln이 심볼릭 링크를 생성하게 한다.

$ ln hold.3 hold    ---> hold.3화일에 대한 새로운 하드 링크 hold생성
$ ls -l
  ...
$ rm hold
  ...

- 하나의 화일 시스템에 있는 화일에서 다른 화일 시스템에 있는 화일로의
  하드 링크는 생성되지 못한다.

 이 문제를 해결하기 위해서 심볼릭 링크를 생성 한다.
 심볼릭 링크는 화일 시스템을 확장 시킬 수 있다.

$ ln -s /usr/include/stdio.h stdio.h   ---> 심볼릭 링크 사용

- ls -F 옵션으로 보면, 심볼릭 링크는 @문자가 표시 된다.
7.10 사용자 대치 : su

- 사용자 대치 (substitute user)는 다른 사용자가 소유하는 서브 셸을 생성할 수 있게
  해 준다.
- su는 지정된 사용자 id를 갖는 임시 셸을 생성한다. 생략되면 루트로 가정 한다.

$ whoami   --> 현 사용자 id 보기
glass
$ su       ---> 사용자 대치
Password: 여기에 수퍼 유저의 패스워드 입력

$whoami    ---> 현 사용자 id가 변경 되었음을 확인 해 보면,
root
$
$ ^D       ---> 사용자 대치 셸 종료

$ whoami
glass
$
7.11 전자 우편 검사 : biff

- 유닉스 셸은 주기적으로 수신되는 전자 우편을 검사.
  전자우편을 수신하는 것과 셸이 터미널에 통고하는 사이에 얼마간의 시간 차이가
  생김.

 biff유틸리티는 전자우편의 수신시 즉시 통고를 하도록 함.

$ biff      ---> 현재의 biff 설정 표시
biff is n
$ biff y    ---> 전자우편 즉시 알림을 가능케 함.
$ biff      ---> 새로운 biff설정 확인
biff is y

$-
7.12 화일 변환

- 화일의 내용에 변화를 수행하는 유틸리티

- compress/uncompress 유틸리티
  화일을 공간-효율적인 중간 형식으로 변화시킨 후 다시 복귀시키며,
  이 유틸리티는 디스크 공간을 절약하는데 유용 함.

- crypt 유틸리티
  화일을 코드화 하여 다른 사람이 알아볼 수 없게 한다.

- sed 유틸리티는 스트림 편집기,

- tr 유틸리티는 문자를 하나의 집합에서 다른 집합으로 변환.
     화일을 소문자에서 대문자로 바꾸는 등의 단순 변환을 수행

- ul 화일 내의 밑줄 친 열들을 특정한 터미널에 적절한 형식으로 변환.
7.13 순수 화일 내용 보기 : od

- od 유틸리트는 화일의 내용을 8진수로 덤프(dump)하는 유틸리티.

$ od /bin/od   ---> “/bin/od”화일을 8진수로 덤프.

 ... (결과는 교재 pp334 참조)

- 여러 가지 다른 옵션에 대해서는 교재 pp333참조.
7.14 화일 시스템 마운트 : mount/umount

- mount 유틸리티는 장치의 화일 시스템을 루트 계층 구조로 결합 시킬 수 있게
  한다.
  인수 없이 사용되면, mount는 현재 마운트 된 장치의 목록을 보여 준다.

$ mount ---> 현재 마운트된 장치들 표시
/dev/dsk1 on / (rw)
$ ls /usr                 ---> /usr에는 현재 아무것도 없음.
$ mount /dev/dsk2 /usr    ---> /dev/dsk2장치를 /usr로 마운트
$ mount
/dev/dsk1 on / (rw)
/dev/dsk2 on /usr (rw)
$ ls /usr                 ---> 마운트된 장치의 내용을 표시
bin/      etc/   include/    lost_found/  src/    ucb/
...

$ umount /dev/dsk2 ---> 장치를 마운트 해제 시키기 위해 umount를 사용
$ mount            ---> 현재 마운트된 장치들 표시
/dev/dsk1 on    / (rw)
$ ls /usr          ---> /usr가 다시 비어 있게 됨.
$-
7.15 셸 확인 : whoami


- whoami는 셸의 소요자를 확인할 수 있게 한다.

$whoami
glass

$-


7.16 터미널 확인 : tty

- tty는 터미널의 경로명을 보여 준다.

$tty
/dev/ttyp0
$-
7.17 텍스트 포매팅 : nroff/troff/style/spell


- nroff/troff/style/spell 등의 유틸리티는 텍스트 포매팅 출력을 위해 만들어 진
 유틸리티.

- 특수한 명령어를 수작업으로 텍스트 문서 안에 삽입하여 텍스트의 출력 형태를
  제어하기 위해 사용.

- 현재는 그래픽적으로 처리할 수 있는 WYSIWYG(what you see is what you get)
  소프트웨어들에 의해 대치되어, 사용되지 않음.

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:5
posted:9/2/2011
language:Korean
pages:34