사용자의 개별 crontab 파일 관리를 위한 명령어

사용법 : crontab [-u 사용자ID] 파일, crontab [-u 사용자ID] {-l|-r|-e} 
-l : 현재 crontab 내용을 표준 출력으로 보여준다. 
-r : 현재 crontab 내용을 지운다. 
-e : .crontab 파일의 내용을 편집한다. 편집기는 VISUAL이나 EDITOR 환경변수의 편집기를 사용한다. 

crontab은 지정한 시간에 지정한 작업을 하도록 설정하기 위한 주기적인 작업 스케쥴이다. 이에 반해 at 명령은 지정한 시간에 한번만 작업이 시행된다.
crontab 설정 파일은 /etc/crontab 이다.

# cat /etc/crontab 
SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
MAILTO=root 
HOME=/ 

# run-parts 
01 * * * * root run-parts /etc/cron.hourly 
02 4 * * * root run-parts /etc/cron.daily 
22 4 * * 0 root run-parts /etc/cron.weekly 
42 4 1 * * root run-parts /etc/cron.monthly 

0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg 

그럼, root 계정에 새로운 작업 스케줄을 등록해 보자.
먼저 이전에 crontab에 설정되어 있는 작업이 있는지 확인해 보자. 등록된 작업은 없다.

# crontab -l 
no crontab for root 

-e 옵션으로 편집을 하게 되면, 편집기가 실행되어 새로운 cron 작업을 등록할 수 있다.

# crontab -e 
no crontab for root - using an empty one 

다음과 같이 입력해 보자.

0 4 * * * echo crontab testing 

저장하고 나오게 되면 아래의 메세지를 볼 수 있을 것이다.

"crontab.1314" 1L, 31C written 
crontab: installing new crontab 

그럼, 등록된 작업을 -l 옵션으로 살펴보자

# crontab -l 
# DO NOT EDIT THIS FILE - edit the master and reinstall. 
# (/tmp/crontab.1314 installed on Tue Mar 30 18:51:41 2004) 
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) 
0 4 * * * echo crontab testing 

cron 스케줄에 등록하는 시간지정에 대한 각 항목은 다음과 같다.
분(Minutes) 0-59
시(Hour) 0-23
일(Day of month) 1-31
월(Month) 1-12 or Jan, Feb, Mar,...
요일(Day of week) 0-6(0은 Sunday) or Sun, Mon, Tue,...
2005/06/21 20:41 2005/06/21 20:41
지정하는 기준을 바탕으로 파일을 자동으로 나누어 주는 명령, 내용이 긴 문서 파일을 효과적으로 나누어 읽을 수 있게 한다.

사용법 : csplit [옵션]... 파일 인자... 
- : 표준입력으로부터 입력을 받는다. 
-b suffix, --suffix-format=suffix : 새롭게 생성되는 파일의 접미사를 지정한다. 
  보통 파일은 00,01로 시장해서 99까지 생성된다. 아래와 같은 형식 지정이 가능하다. 
   %d 부호 있는 10진수 
   %i %d와 같다 
   %u 부호 없는 10진수 
   %o 8진수 
   %x 16진수 
   %X %x와 같다. 
-f prefix,--prefix=prefix : 새롭게 생성되는 파일의 접두사를 지정할 수 있다. 
   prefix00에서 prefix99까지 중 prefix부분을 지정하는 것이다. 
-k, --keep-files : 생성 도중 에러가 발생하여도, 새롭게 생성된 파일들을 유지한다. 
-n, --digits=num : 생성되는 파일의 길이를 지정한다. 기본값은 2자리이다. 
-s, --quiet,--silent : 문자 개수를 보여주지 않는다. 
-z, --elide-empty-files : 빈 파일을 제거한다. 
--help : 도움말을 보여준다. 
--version : 버전정보를 보여준다. 

csplit는 파일내의 내용들 중 지정하는 기준을 바탕으로 여러개의 파일로 분리 생성하는 기능을 한다. 아래에 csplit 명령어 파일명 다음 올 수 있는 인자들을 설명하였다.
이 인자는 파일들을 나눌 기준으로 생각하면 된다.
n : 현재 라인부터 n번째 라인까지의 범위를 파일로 생성한다.

정규표현식/[+n/-n] : 현재 라인부터 정규표현식을 포함하는 라인까지 파일을 생성한다. +n이면 정규표현식을 기준으로 n번째 줄까지 더 포함하며, -n이면 정규표현식을 기준으로 n번째 줄까지를 제외하게 된다.
%정규 표현식%/[+n/-n] : 정규 표현식의 라인 앞 부분은 저장되지 않는다.
{n} : n번 반복한다.
{*} : 입력이 있을 때까지 반복한다.

예제를 통해 알아보자. 다음에 볼 수 있는 song.txt 파일은 노래 가사를 저장해놓은 것이다. 이 노래들을 각각의 파일로 나누어 저장해 보겠다.

# cat song.txt 
song.1 
어린시절 우리 고왔던 
시간 저 편의 추억들은 
잃어버렸뜬 날들의 크기만큼 
사라져갔지 서로의 약속을 잊고 

song.2 
늘 행복하기를 모두 바라고 있어 
수많은 축복에 미소지는 
아름다운 내사랑 
새햐얀 웨딩 드레스 입고서 
눈시울 적시던 너 

song.3 
부드러운 손길 달콤한 속삭임 
내가 원한 것은 그것만은 아니었지 
내가 바란 것은 당신이 아니라 
내 환상일 뿐 

이 파일을 각 챕터 별로 나누어 보겠다.

# csplit songtxt %song.1% /song.2/ /song.3/ 
111 
120 
111 

csplit 명령으로 xx00,xx01,xx02 파일이 생성되었다.

# cat xx00 
song.1 
어린시절 우리 고왔던 
시간 저 편의 추억들은 
잃어버렸뜬 날들의 크기만큼 
사라져갔지 서로의 약속을 잊고 

# cat xx01 
song.2 
늘 행복하기를 모두 바라고 있어 
수많은 축복에 미소지는 
아름다운 내사랑 
새햐얀 웨딩 드레스 입고서 
눈시울 적시던 너 

# cat xx02 
song.3 
부드러운 손길 달콤한 속삭임 
내가 원한 것은 그것만은 아니었지 
내가 바란 것은 당신이 아니라 
내 환상일 뿐 

새로 생성되는 파일의 숫자는 00부터 시작한다는 것에 주의하자.
2005/06/21 20:39 2005/06/21 20:39
파일에서 원하는 필드를 뽑아내는 명령어

사용법 : cut [OPTION]... [FILE]... 
-b, --bytes=LIST : 바이트 단위로 나타낸다. 
-c, --characters=LIST : 문자단위로 나타낸다. 
-d, --delimiter=DELIM : 기본 필드 구분자는 TAB이지만 이를 사용하지 않고 지정된 필드 구분자를 사용한다. 
-f, --fields=LIST : 지정한 필드만을 보여준다. 
-s, --only-delimited : 필드구분자에 포함되지 않는 라인은 보여주지 않는다. 
--output-delimiter=STRING : 출력되는 필드구분자를 지정된 것을 사용한다. 
--help : 도움말 정보를 보여준다. 
--version : 버전 정보를 보여준다. 

cut 명령어는 awk에서 print $N과 비슷하지만, awk보다 더 간단하게 사용될수있다. -b,-c,-f 옵션에서는 다음과 같이 특정 숫자 범위를 사용할 수 있다.
N : N번째
N- : N번째부터 마지막까지의 범위
N-M : N번째부터 M번째지의 범위
-M : 첫번째부터 N번째까지의 범위

a. OS와 커널 버전 얻기.

# uname -a 
Linux airz.net 2.4.20-28.7 #1 Thu Dec 18 11:31:59 EST 2003 i686 unknown 

# uname -a | cut -d ' ' -f1,3 
Linux 2.4.20-28.7 

b. 마운트된 파일 시스템 목록 얻기

# cat /etc/mtab | cut -d ' ' -f1,2 
/dev/hda8 / 
none /proc 
usbdevfs /proc/bus/usb 
/dev/hda1 /boot 
none /dev/pts 
/dev/hda3 /home 
none /dev/shm 
/dev/hda2 /tmp 
/dev/hda7 /var 
/dev/hdb1 /hdb1 
/dev/hdb2 /hdb2 
/dev/hdc1 /hdc1 
2005/06/21 20:37 2005/06/21 20:37