전공과목 정리/리눅스시스템 + 시스템프로그래밍

[리눅스시스템🐧] 9장 유틸리티

최연재 2024. 1. 5. 04:57

교재 : 리눅스 시스템 원리와 실제 (창병모, 생능출판)

9.1 명령어 스케줄링

1) 주기적 실행 : cron

- cron 시스템 : 유닉스의 명령어 스케줄링 시스템으로 crontab 파일에 명시된대로 주기적으로 명령을 실행한다.

- crontab 파일 등록법 : crontab 파일을 cron 시스템에 등록한다.

$ crontab 파일

- crontab 파일 : 7개의 필드로 구성 (분 시 일 월 요일 [사용자] 명령)

- crontab 명령어

$ crontab -옵션 [사용자]
  • -l : 사용자의 등록된 crontab 파일 리스트를 보여준다.
  • -e : 사용자의 등록된 crontab 파일을 수정 혹은 생성한다.
  • -r : 사용자의 등록된 crontab 파일을 삭제한다.

ex) crontab 파일 예시

30 1 * 2,4,5,8,10,12 3-5 /usr/bin/wall /var/tmp/message

: 2개월마다 수요일부터 금요일까지 1시 30분에 wall 명령을 사용하여 시스템의 모든 사용자에게 메시지 전송 

 

2) 한 번 실행 : at

- at 명령어

  • 미래의 특정 시간에 지정한 명령어가 한 번 실행되도록 한다.
  • 실행할 명령은 표준입력을 통해서 받는다.

- 사용법

$ at [-f 파일] 시간

: 지정된 시간에 명령이 실행되도록 등록한다. 실행할 명령은 표준입력으로 받는다. (-f :실행할 명령들을 파일로 작성해서 등록할 수도 있다.)

- atq 명령어 : at 시스템이 큐에 등록되어 있는 at 작업을 볼 수 있다.

- at -r 옵션 : 지정된 작업번호에 해당하는 작업을 제거한다.

$ at-r 작업번호

 

9.2 디스크 및 아카이브

1) 디스크 사용 : df

- 사용법 : 파일 시스템에 대한 디스크 사용정보를 보여준다.

$ df 파일시스템*

 

2) 디스크 사용 : du

- 사용법

$ du [-s] 파일*
  • 파일이나 디렉토리가 사용하는 디스크 사용량(블록 수)을 알려준다.
  • 파일을 명시하지 않으면 현재 디렉터리의 사용 공간을 보여준다.

 

3) tar 아카이브

- 아카이브

  • 백업 또는 다른 장소로의 이동을 위해 여러 파일들을 하나로 묶어놓은 묶음.
  • 아카이브를 만들거나 푸는데 tar(tape archive) 명령어 사용

- tar 명령어

  • 옵션 : c(create), v(verbose), x(extract), t(table of contents), f(file)
$ tar -cvf 타르파일 파일+

: 여러 파일들을 하나의 타르파일로 묶는다. 보통 확장자로 .tar 사용

$ tar -xvf 타르파일

: 하나의 타르파일을 풀어서 원래 파일들을 복원한다.

$ tar -tvf 타르파일

: 타르파일의 내용을 확인한다.

9.3 파일 압축

1) 파일 압축 : gzip

- 사용법 : 파일(들)을 압축하여 .gz 파일을 만든다.

$ gzip [옵션] 파일*
  • -d : 압축을 해제한다.
  • -l : 압축파일 안에 있는 파일 정보(압축된 크기, 압축률)를 출력한다.
  • -r : 하위 디렉터리까지 모두 압축한다.
  • -v : 압축하거나 풀 때 압축률, 파일명을 출력한다.

 

2) 압축 풀기 : gzip으로 압축된 파일들을 복원한다.

$ gzip -d 파일.gz*
$ gunzip 파일.gz*

 

2) 파일 압축 : compress

- compress 명령어 : 파일(들)을 압축하여 .Z 파일을 만든다.

$ compress 파일*

- uncompress 명령어 : 압축된 파일(들)을 복원한다.

$ uncompress 파일.Z*

 

9.4 AWK

1) AWK

- 일반 스크립트 언어

- Aho, Weinberger, Kernighan

- 텍스트 형태로 되어 있는 줄을 필드(줄을 구성하는 단어)로 구분하여 처리한다.

 

2) AWK 프로그램

- 간단한 프로그램은 명령줄에 직접 작성하여 수행

- awk 프로그램을 파일로 작성하여 -f 옵션을 이용하여 수행

- 사용법 : 텍스트 파일을 대상으로 하여 각 줄을 필드로 구분하고 이들을 awk 프로그램이 지시하는 대로 처리한다.

$ awk 프로그램 파일*
$ awk [-f 프로그램파일] 파일*

 

- awk 프로그램

  • 조건과 액션을 기술하는 명령어들로 구성됨.
  • [조건]  [{액션}]
  • 대상 파일의 각 줄을 스캔하여 조건을 만족하는 줄에 액션 수행

ex) $ awk 'NR > 1 && NR < 4' {print NR, $1, $3, $NF}' test.txt

  • NF : 각 줄의 필드 수
  • NR : 줄 번호
  • $0 : 해당 줄 전체
  • $n : n번째 필드

 

3) 조건(condition)

  • BEGIN : 파일 시작
  • END : 파일 끝
  • 관계연산자 혹은 논리연산자를 포함한 조건식
  • /패턴/ : 패턴에 해당하는 줄
  • /패턴1/,/패턴2/ : 패턴1을 포함한 줄부터 패턴2를 포함한 줄까지.

 

4) 액션(action)

  • if (조건) 실행문 [else 실행문]
  • while (조건) 실행문
  • for (식; 조건; 식) 실행문
  • break
  • continue
  • 변수 = 식
  • print [식들의 리스트]
  • printf 포맷 [,식들의 리스트]
  • next : 현재 줄에 대한 나머지 패턴 건너뛰기
  • exit : 현재 줄의 나머지부분 건너뛰기
  • { 실행문 리스트 }

 

5) 연산자

  • 산술 연산자 : +, -, *, /, %, ++, --
  • 대입 연산자 : =, +=, -=, *=, /=, %=
  • 조건 연산자 : ? :
  • 논리 연산자 : ||, &&, !
  • 패턴 비교 연산자 : ~, !~
  • 비교 연산자 : <, <=, >, >=, !=, ==
  • 필드참조 연산자 : $

 

9.5 AWK 프로그램 작성

1) 프로그램 예시 : 단어별 출현 빈도 수 계산

BEGIN {

    FS = "[^a-zA-Z]+"

}

{

    for (i = 1; i<=NF; i++)

        words[tolower($i)]++ // 단어를 인덱스로 하는연관배열 사용

}

END {    for (i in words)        print i, words[i]}

 

2) AWK 내장함수

- 문자열 함수

: index(s1, s2), length([s]), match(s, r), sub(r, s), tolower(s),toupper(s), ...

- 입출력 함수 

: getline, next, print, printf, system, ...

- 수학 함수

: atan2(x, y), cos(x), sin(x), exp(arg), log(arg), sqrt(arg), int(arg), rand(), srand(expr)