노트북 등 장치에서 베터리의 현재 잔여량을 확인하고 상태에 따라 시스템을 대기/종료시킨다.

사용법 : apm [-옵션] 
 -V, --version : apm 프로그램의 버전을 보여준다. 
 -v, --verbose : APM 바이오스의 버전과 전원 상태 정보를 보여준다. 
 -m, --minutes : 배터리의 남은 시간을 보여준다.(단위 : 분) 
 -s, --suspend : 시스템을 정지 상태로 만든다. 
 -S, --standby : 시스템을 대기 상태로 만든다. 
 -i, --ignore : AC전원을 사용할 때 APM의 시스템 정지, 대기 명령을 무시한다.  노트북의 경우 배터리를 사용하지 않고 바로 AC전원을 사용할 경우 배터리를 사용하지 않고 바로 AC전원을 사용할 경우 이용된다. 
 -n, --noignore : AC전원을 사용할 때 APM의 시스템 정지, 대기 명령을 무시하지 않도록 한다. 

노트북 사용자의 경우 베터리의 관리는 아주 중요한 문제이다. apm은 APM(Advanced Power Management) Bios의 정보가 들어 있는 /proc/apm을 읽어들여 시스템의 전원 상태를 보여준다. 이 명령은 배터리의 현재 잔여량을 알 수 있으며 시스템을 정지상태나 대기상태로 만들 수 있어 노트북에서 리눅스를 사용하는 사람에게는 꼭 필요한 명령이다.

#apm -m 
5 

그러면 다음과 같이 베터리의 남은 시간을 확인해 보자.
여기에서 5는 현재 상태에서 계속 사용할 경우 앞으로 베테리를 사용할 수 있는 시간을 분으로 환산한 것이다. 만약에 데스크탑 환경이나 혹은 노트북을 직접 전원에 연결한 상태에서 이 명령을 실행한다면 다음과 같은 메세지를 보게 될 것이다.

AC on-line, no system battery 

[관련명령어]
apmd 전원 관리 데몬
battstat_applet 베터리 잔량을 실시간으로 확인할 수 있는 애플릿 프로그램
2005/06/27 18:08 2005/06/27 18:08
웹 페이지를 읽어 자바 애플릿을 실행하고 디버그한다.

사용법 : /usr/java/bin/appletviewer [옵션] URL 
URL : 작동할 자바 애플릿이 있는 주소 또는 경로 

-debug : java debugger(jdb)에서 애플릿을 실행한다. 
-encoding name : 입력도는 HTML 파일 인코딩 지정 
-J opt: Java 명령에 사용하는 옵션을 연결한다. 

애플릿 뷰어는 인터넷 상의 자바 애플릿 혹은 자신의 컴퓨터에 있는 자바 애플릿을 따로 보기 위한 것으로, 주로 애플릿이 정상적으로 동작하는지 확인하고 디버그하기 위해 사용한다. 애플릿을 컴파일 하여 확이할 때마다 웹 브라우저를 사용하는 것은 자원낭비이다. 가벼운 애플릿 뷰어를 사용하여 손쉽게 확인하자.
원래는 솔라리스에서 사용하던 명령이었지만, 지금은 리눅스에도 jdk를 설치하면 사용할 수 있다. 애플릿 그 자체는 불러들일 수 없으며, 애플릿이 포함된 html 페이지를 읽어 수행한다.
애플릿은 단독으로 실행할 수 없다. 사용할 때에는 html 파일 안에 다음과 같은 내용을 삽입하여 불러들여야 한다.

<object width="pixelWidth" height="pixelHeight"> 
     <param name="code" value="MyClass.class"> 
     <param name="object" value="serializedObjectOrJavaBean"> 
     <param name="codebase" value="classFileDirectory"> 
     ... 
     (기타필요한 내용) 
</object> 

직접 만든 애플릿인 MyClass를 시험해 보고 싶다면, 먼저 위와 같은 내용으로 MyClass.html을 저장한다. 다음으로 이 MyClass.html을 불러들여 애플릿을 확인한다.

#appletviewer MyClass.html 

자바 애플릿이 있는 웹페이지를 디버깅 해주기 위해 불러올 때에는 다음과 같이 윂 페이지 주소와 -debug 옵션을 함께 사용한다.

#appletviewer MyClass.html 

#appletviewer -debug http://www.nfoz.net 
2005/06/27 18:08 2005/06/27 18:08
whatis DB를 검색하여 검색하는 명령어와 관련이 있는 명령어를 간단한 설명과 함께 보여준다.

사용법 : apropos [키워드] 
키워드 : 검색하고 싶은 문자열 

apropos는 whatis DB를 검색해 관련 명령어와 그 명령어에 대한 간단한 설명을 보여준다.
whatis는 whatis DB에서 명령어만 검색하여 출력하지만 apropos는 명령어, 설명 모두를 검색해 결과를 보여준다.
예를 들어 이런 상황을 생각해 보자. 리눅스에서는 굳이 gimp 등의 그래픽 툴을 사용하지 않고도 비트맵 파일 등을 jpeg 포맷으로 압축할 수 있다. 그런데 그 명령이 생각 나지 않을 경우 다음과 같이 입력한다.

# apropos jpeg 
cjpeg                (1)  - compress an image file to a JPEG file 
djpeg                (1)  - decompress a JPEG file to an image file 
jpegtopnm            (1) - convert JPEG/JFIF file to portable pixmap 
                                 or graymap 
jpegtran             (1)  - lossless transformation of JPEG files 
ppmtojpeg            (1) - convert portable pixmap into a JPEG/JFIF file 
rdjpgcom             (1)  - display text comments from a JPEG file 
wrjpgcom             (1)  - insert text comments into a JPEG file 

이 명령을 사용하면, 명령이나 혹은 핵심 설명에 jpeg이라는 단어가 들어가는 명령을 확인할 수 있다. 우리가 찾고자 하는, 일반 파일을 jpg 파일로 만들어 주는 명령어는 맨 위에 있는 cjpeg임을 확인할 수 있다. 또한 jpeg 파일을 비트맵이나 그 외의 파일로 만들어 주는 명령어는 djpeg라는 사실도 확인할 수 있었다.

[관련 명령어]
man -k 옵션을 사용하면 apropos와 같은 기능을 한다.
whatis whatis DB에서 명령어와 일치하는 요약 내용을 검색하여 보여준다.
2005/06/27 18:06 2005/06/27 18:06
시스템 아키텍처를 확인한다.

사용법 : arch 

시스템의 cpu타입을 보여준다. x86의 인텔계열 cpu는 I386, I486, I586, I686, athlon으로 보여 주며 그 외에 cpu의 경우 alpah, sparc, arm, m68k, mpis, ppc 같이 보여 준다.

# arch 
I686 

펜티엄3 733Mhz를 사용하고 있는 시스템에서 cpu 타입을 확인하는 경우를 살펴보자.
2005/06/27 18:06 2005/06/27 18:06
연결하고자 하는 시스템의 MAC 주소 확인

사용법 : arp [옵션] 
-v : arp상태를 보여준다. 
-t type : ARP 캐쉬에 올라와 있는 타입을 검색한다. ether(Ethernet) 또는 ax25 
            (AX.25 packet radio)등이 있으며 ehter가 기본 타입이다. 
-a [hosts] : 등록된 호스트 중 지정한 호스트의 내용을 보여준다. 호스트를 지정하지 
            않으면 등록된 모든 호스트를 보여준다. 
-d [host] : 지정한 호스트를 목록에서 삭제한다. 
-s host hardware-address : 호스트의 하드웨어 주소 즉 호스트 MAC 주소를 
            추가한다. 이더넷 카드의 경우 6자리의 16진수로 되어있다. 
-f file : 파일에 있는 목록을 추가한다. 

TCP/IP 명령어이다. 시스템 사이의 통신에는 상대방의 MAC 주소가 필요하다. 이때 arp는 ARP(Address Resolution Protocol)를 이용하여 연결하고자 하는 시스템 IP 에 신호를 보내 MAC 주소를 받아온다.
서브넷의 arp 정보는 연결 효율을 높이기 위해 /proc/net/arp에 저장된다. 캐시에 저장된 정보는 추가/삭제할 수 있다. 이와 같이 저장된 arp캐시의 내용을 자세히 보고 싶을 경우에는 다음과 같이 실행한다.

# arp -v 
Address               HWtype  HWaddress           Flags Mask       Iface 
www.nfoz.net       ether      00:04:76:71:F4:88      C                     eth0 
218.147.124.63       ether      00:00:0C:76:BF:6C     C                     eth0 
218.147.123.79       ether      00:50:DA:90:44:2A     C                     eth0 
218.147.123.30       ether      00:04:76:71:3B:85      C                     eth0 
Entries: 4      Skipped: 0      Found: 4 

www.nfoz.net 라는 호스트에 대한 정보만 알고 싶다면 다음과 같이한다.

# arp -a nfoz 
www.nfoz.net (218.147.124.104) at 
00:04:76:71:F4:88 [ether] on eth0 

경우에 따라, 시스템에서 기존의 이더넷 카드 대신 새 이더넷 카드를 설치헀을 때 내부 네트워크 연결이 잘 되지 않는 경우가 있다. 이것은 arp 캐시가 기존 이더넷 카드의 MAC 주소를 저장하고 있어, 같은 IP를 사용하더라도 인식하지 못하는 경우이다. 이 경우에는 arp -d 명령을 사용하여 정보를 삭제한 뒤 다시 시도한다.

# arp -d nfoz : 호스트명이 nfoz인 정보삭제 

# arp -v 
Address               HWtype  HWaddress           Flags Mask       Iface 
www.nfoz.net                                                (incomplete)      eth0 
218.147.124.63       ether      00:00:0C:76:BF:6C     C                     eth0 
218.147.123.79       ether      00:50:DA:90:44:2A     C                     eth0 
218.147.123.30       ether      00:04:76:71:3B:85      C                     eth0 
Entries: 4      Skipped: 0      Found: 4 

[관련 명령어]
arping 대상 주소에 ARP패킷을 보낸다.
arpwatch Ethernet/IP 주소의 진로를 추적한다.
arpsnmp Ethernet/IP 주소의 진로를 추적한다.
tcpdump 네트워크 인터페이스에서의 패킷 헤더들을 출력한다.
2005/06/27 18:05 2005/06/27 18:05
ARP요청을 이용한 네트워크 연결 확인 명령

사용법 : arping [옵션] 
-c count : arping의 개수를 지정한다. 
-w timeout : w 옵션 뒤 시간초)을 지정하여 그 시간(초)까지만 arping를 실행한다. 
-I device : 이더넷 장치를 지정한다. 
-s source : 소스(source) IP를 지정한다. 

ping의 변형으로 ICMP 패킷 대신 ARP 요청과 응답으로 사용중인 IP주소로 MAC(Meduim Access Control) 주소를 찾거나, MAC주소가 있을 때 IP주소를 찾을 수도 있다. 또한, ICMP 패킷을 차단한 호스트라도 단지 연결성만을 검사하고 싶을 경우라면, arping은 유효한 수단이 될 수 있다.
다음은 자신의 시스템으로 arping을 3번 보내서 확인하는 예제이다.

# arping -c3 localhost 
ARPING 127.0.0.1 from 218.143.214.112 eth0 
Unicast reply from 127.0.0.1 [00:01:96:72:47:C3] 2.101ms 
Unicast reply from 127.0.0.1 [00:01:96:72:47:C3] 2.025ms 
Unicast reply from 127.0.0.1 [00:01:96:72:47:C3] 2.049ms 
Sent 3 probes (1 broadcast(s)) 
Received 3 response(s) 

시스템에 네트워크 디바이스가 여러 개 장치되어 있어 각 장치별 연결성을 테스트하고 싶다면 "-I" 옵션을 이용하여 장치를 지정하여준다.

# arping -I eth1 -c3 www.nfoz.net 
ARPING 211.255.252.57 from 218.143.214.112 eth0 
Unicast reply from 211.255.252.57 [00:01:96:72:47:C3] 2.231ms 
Unicast reply from 211.255.252.57 [00:01:96:72:47:C3] 2.245ms 
Unicast reply from 211.255.252.57 [00:01:96:72:47:C3] 2.119ms 
Sent 3 probes (1 broadcast(s)) 
Received 3 response(s) 

[관련 명령어]
ping 네트워크 연결성을 분석한다.
2005/06/27 18:03 2005/06/27 18:03
명령어나 스크립트의 실행을 예약한다.

사용법 : at [옵션]시간 [날짜][+증가시간] 
시간 : 명령어나 스크립트를 실행할 시간을 지정한다. 
+증가시간 : 증가 시간만큼 지난 후 실행한다. 

-q queue: queue이름을 지정한다. 큐 이름으로는 a~z, A~Z가 쓰일 수 있다. 
     큐이름을 지정해 주지 않으면 at는 a를 batch는 b를 사용한다. 알파벳 순서로 
     뒤의 이름을 갖는 큐는 더 큰 niceness 값을 갖는다. = 큐는 현재 수행되는 작업 
     에 대한 큐로 예약되어 있다. 대문자 이름의 큐에 추가된 작업의 batch의 작업 
     처럼 처리된다. 
-m : 출력 결과가 없더라도 작업이 완료될 때 사용자에게 메일을 보낸다. 
-f 파일명 : 스크립트 파일 등을 실행해 줄 때 사용한다. 
-l : 예약된 작업 목록을 보여준다. 
-v : 작업이 수행될 시간을 보여준다. 
-d : 예약된 작업을 삭제한다. (linux) 
-r : 예약된 작업을 삭제한다. (Unix) 

at는 등록된 명령어를 원하는 시간에 실행하게 하는 기능을 한다. 즉 시스템의 부하가 적은 시간에 실행시키거나 예약된 시간에 꼭 실행되어야 하는 작업을 자동으로 처리 하고자 할 때 사용한다.

at에 의해 실행할 시간설정
예약 작업 기능이므로 시간에 대한 설정이 중요하다. at의 시간 설정은 날짜와 시간을 정해주는 시간 설정과 현재 시간 혹은 정해진 시간에서 증가시간으로 설정해 주는 방법이 있다.

시간표현 방법
[시간]
hh:mm -hh(시간), mm(분)으로 설정 ex)16:18
am, pm -표시가 없는 경우 Linux나 Unix에서는 하루를 24시간으로 표현한다. am과 pm을 이용하여 12시간 단위로 표현이 가능하다. ex)4:18pm
midnight, noon, teatime, now -midnight(00:00), noon(12:00), teatime (16:00) 같은 서술형 시간으로도 지정이 가능하다, now는 현재시간이며 증가시간 설정에 많이 쓰인다.
[날짜]
yyyy-mm-dd -일반적인 날짜구성으로 표현 ex)2002-4-13
month num -4월13일은 "April 13"로 표현한다. 혹은 약자로 "Apr 13"로 표현할수 있다. ex)April 13
today, tomorrow -오늘 또는 내일로 지정할 수 있다. 각 요일별로도 표현이 가능하다.

test1 파일을 만들어주는 명령어인 tocuh test1이란 명령어를 at에 등록하여 2002년 4월 13일 0시에 실행한다. 2002년 4월 13일 0시는 "00:00 2002-04-13" 또는 "midnight April 13"등으로 시간을 표현해 줄 수 있다.

# at 00:00 2002-04-13 
at>touch test1 
at><ctrl+d> 

예약된 작업 확인

# at -l 
20  2002-04-13 00:00 a root 

at에 예약된 작업정보
작업번호 20 날짜 2002-04-13 시간 00:00 이름 a 사용자 root
.작업번호 : at에 등록 된 작업 번호, 등록된 순서로 매겨지며 at -d, 또는 atrm을 이용해 at작업을 삭제해 줄 때 사용
.날짜/시간 : 등록된 명령이 실행 될 시간
.queue 이름 : "-q"옵션을 이용하여 큐 이름을 지정
.사용자 : at에 작업을 예약한 사용자

증가시간을 이용한 설정
현재시간으로부터 6시간 후에 Control.sh 스크립트가 실행 되도록 예약하고 싶다면 다음과 같이 f 옵션을 사용하여 예약 자업으로 등록한다.
또한 리다이렉션을 이용해도 같은 결과를 얻을 수 있다.

# at now + 6 hours -f Control.sh : 파일을 예약 작업으로 등록 

# at now + 6 hours < Control.sh : 리다이렉션을 이용한 예약작업 등록 

예약된 작업을 확인해 보자.

# at -l :예약된 작업 확인 
20 2002-04-13 00:00 a root 
21 2002-04-12 18:00 a root 

20번 예약된 작업을 삭제하고 싶다면 다음과 같이 삭제할 작업번호를 지정한다.

# at -d 20 
# at -l 
21 2002-04-12 18:00 a root 

20번에 예약된 작업이 취소 된 것을 확인할 수 있다.

at의 사용 권한 설정
at 명령어는 at.allow와 at.deny 두 파일을 이용해 일반 사용자의 at 명령어 사용 권한을 지정해 줄 수 있다.
/etc/at.allow 파일이 있으면 at.allow에 기록된 사용자만 at 명령어를 사용이 가능하며 /etc/at.allow 파일이 없으면 /etc/at.deny에 기록이 안 된 사용자 만 사용이 가능하다. 두 파일 모두 없다면 관리자만 사용할 수 있다.

[관련 명령어]
atq 예약된 작업 목록을 보여준다
atrm 예약된 작업 목록을 삭제한다
batch 시스템 부하가 일정 이하일 때 명령을 실행한다.
cron 정기적으로 예약된 작업을 수행한다.
2005/06/27 18:03 2005/06/27 18:03
at를 사용하여 예약한 작업 목록을 보여준다.

사용법 : atq [옵션] 
[Linux] 
-q queue : 지정된 큐에 예약된 작업만 보여준다. 
-V : 버전을 보여준다. 

[Unix] 
-c : 예약된 작업을 시간별로 정렬해 보여준다. 
-n : queue에 예약된 모든 작업 개수를 보여준다. 

at에 의해 예약된 작업 목록을 보여준다. at -l와 같은 기능을 한다.
이 중에서 특정 큐에 예약된 작업을 보기 위해서는 atq -q라고 입력한다. 아래는 t 큐에 예약된 작업을 보여준다.

# atq -q t 
27     2002-04-16 10:00 t root 

[관련 명령어]
at 작업을 특정 시간에 예약한다.
atrm 예약된 작업 목록을 삭제한다.
2005/06/27 18:01 2005/06/27 18:01
at를 사용하여 예약한 작업 중 불필요한 내용을 삭제한다.

사용법 : atrm 작업번호 
작업번호 : atq를 사용하여 확인할 수 있다. 

atq를 사용하여 예약된 작업 목록을 확인한 후, 첫 번째 필드에 있는 작업 번호를 확인 하자.

# atq 
29    2002-04-13 12:00 A root 
25    2002-04-14 05:28 A root 
27    2002-04-16 10:00 t root 
28    2002-04-15 12:00 A root 

이 중에서 2002년 4월 16일 10시에 예약된 작업을 삭제해 보겠다. 이 작업의 작업 번호는 27이므로 다음과 같이 삭제하자

# atrm 27 

제대로 삭제되었는지 확안해 보자.

# atq 
29    2002-04-13 12:00 A root 
25    2002-04-14 05:28 A root 
28    2002-04-15 12:00 A root 

27번 작업이 목록에서 사라졌다.

[관련 명령어]
at 작업을 특정 시간에 예약한다.
atq 예약된 작업 목록을 보여 준다.
batch 시스템 부하가 일정 이하일 때 명령을 실행한다.
cron 정기적으로 예약된 작업을 실행한다.
2005/06/27 18:00 2005/06/27 18:00
원본 문서에서 패턴을 검사해 원하는 값을 얻는다.

사용법 : 
   awk [옵션] -F'script' [변수=값] [파일]또는 
   awk [옵션] -f 스크립트 파일 [변수=값] [파일] 
스크립트 파일 : awk 스크립트로 작성된 파일 
변수 : awk 내의 변수를 지정한다. 
파일 : 대상파일 
-F : 구분자를 나타낸다. -F로 구분자를 지정하지 않을 경우에는 공백을 구분자로 사용한다. 
-f : 스크립트 파일을 이용할 경우 사용한다. 

표준 입력으로 값을 받아 awk 스크립트를 통해 원하는 표준 출력을 얻어낸다.
awk는 1977년에 AT&T 연구소의 Alfred V.Aho, Peter J. Weinverger, Brain W. Kernighan 세 사람이 만들었다. awk라는 이름도 이 세 사람의 앞 글자로 만들어졌다. 리눅스에서는 1986년 Paul Rubin과 Jay Fenlason에 의해 GNU 버전의 awk가 만들어 졌다.
awk는 일정한 규칙을 가지고 있는 데이터를 처리하여 계산, 통계, 비교분석 혹은 필터링을 통한 데이터 추출 등에 다양하게 사용될 수 있다. sed와 비슷한 기능을 한다고 할 수 있으며 awk와 sed의 장점을 묶어서 만들어진 perl로 발전되었지만 단순한 구조의 데이터의 경우 더 효과적으로 쓰일 수 있어서 지금도 많이 사용되고 있다.
awk는 쉽고 유용하게 쓰일 수 있다. 단순히 명령어로 사용되거나 다른 스크립트에 sed와 함께 다른 스크립트에 이용될 수 있고 awk 만의 스크립트 파일의 작성도 가능하다.

명령어 사용
현재 디렉토리의 파일 정보를 보기 위해 ls -al 명령어를 이용하여 파일 목록을 출력한다. 이 목록 중 파일의 권한과 파일명만 보기를 원한다면 awk를 이용해 어렵지 않게 편집 할 수 있다. ls -al 명령으로 출력되는 데이터를 파이프 ( | )로 awk가 받아 파일의 공백을 기준으로 나누어 첫 번째 필드와 9 번째 필드를 출력한다.

# la -al 
drwxr-x---    6 root   root     4096 Mar 27 23:22  . 
drwx-----x   19 root   root     4096 Mar 17 09:23  .. 
-rw-r--r--    1 root   root     578260811 Nov 12 00:17  anaconda-ks.cfg 
-rw-------    1 root   root    5761641 Mar 27 10:34  .bash_history 
-rw-r--r--    1 root   root       33735 Jun 11  2000  .bash_logout 
-rw-r--r--    1 root   root      23376 Jul  6  2001  .bash_profile 
-rw-r--r--    1 root   root      4017 Aug 24  1995  .bashrc 
-rw-r--r--    1 root   root      1698368 Jun 11  2000  .cshrc 

#ls -al | awk '{print $1, $9}' 
합계 
-rw-r--r--      anaconda-ks.cfg 
-rw-------      .bash_history 
-rw-r--r--      .bash_logout 
-rw-r--r--      .bash_profile 
-rw-r--r--      .bashrc 
-rw-r--r--      .cshrc 

awk로 필터링하여 파일의 권한과 파일명만 출력한다. 위와 같이 awk는 라인을 받아와 구분자를 통해 구분하고 print 명령으로 출력하게 된다.
ls -al로 출력되는 행을 공백으로 구분하면 아래와 같이 구분된 $1~$9 까지 필드이다 각 필드는 공백을 기준으로 아래와 같은 번호로 구분된다. $0은 모든 필드를 말한다.

파일권환$1 하드링크번호$2 사용자$3 그룹$4 용량$5 월$6 일$7 시간$8 파일명$9

파일 목록 중 1 Mb 이상의 용량을 갖는 파일명과 용량을 출력하고 싶다면 awk의 조건문을 사용하여 가능하다. 1Mb = 1048576bit 이기 때문에 용량을 나타내는 5번째 필드 중 1048576 보다 큰 라인을 출력하며 그 중 5 번째와 9번째 필드만 출력한다.

#la -al | awk '$5 > 1048576{print $5, $9}' 
578260811 anaconda-ks.cfg 
5761641 .bash_history 
1698368 .cshrc 

awk를 이요하면 문서의 특정 문자나 문자열을 검색하여 검색되어 나온 라인만 출력 할 수 있다.

# awk /root/ /etc/group 
root:x:0:root 
bin:x:1:boot,bin,daemon 
daemon:x:2:root,bin,daemon 
sys:x:3:root,bin,adm 
adm:x:4:root,adm,daemon 
disk:x:6:root 
wheel:x:10:root 

root계정을 포함한 라이만 검색하여 출력하였다.
첫 번째 예제에서는 문자열 중 구분 되어 있는 필드를 지정하여 원하는 필드만 출력 하였고 두 번째 예제에서는 보기를 원하는 패턴을 가진 라인만 검색하여 출력하였다 이 두가지를 조합하면 보기를 원하는 라인에 특정 필드만 출력이 가능하다.
두 번째 예제는 /etc/group 파일을 root라는 패턴으로 검색하여 root라는 문자열을 포함한 라인만 출력되었다. ":표시로 구분지은 필드 중 제일 먼저 나오는 것이"그룹 명인데 다음 예제는 이 그룹명만 출력 되도록 만들었다.
-F는 구분자를 정의한 옵션으로 기본을 공백을 사용하지만 이 파일과 같이 "-F:"로 구분자를 지정해 사용할 수 있다.

#awk -F: /root/'{print $1}' /etc/group 
root 
bin 
daemon 
sys 
adm 
disk 
wheel 

/root/로 검색한 패턴부분에, 정규 표현식을 사용하면 더욱 자세한 패턴을 검색할 수 있다.

스크립트 파일 이용
시작(Begin) -시작 단계로서 전체 스크립트를 위한 정의 단계이다. (Preprocessor)
실행(Routin) -실행단계로서 이 스크립트의 기능을 수행하는 단계라고 할 수 있다.
끝(End) -마무리 단계이다. 결과를 출력한다.

awk의 스크립트 구조는 시작, 실행, 마무리의 3단계로 나누어져 있따.
awk는 여러 연산자나 루프사용법 등이 c와 같아 c를 알고 있는 사용자라면 어려움 없이 사용할 수 있다.
다음의 스크립트는 파일의 단어 수를 검사한다. wc라는 명령어로 쉽게 단어 개수를 체크해 볼 수 있겠지만 여기서는 간단한 awk 스크립트 예제로 awk 스크립트 사용법을 알아보자.

[b]awk 스크립트[/b] 
#!/bin/awk 
-선언 : awk로 스크립트가 실행될수 있게 선언한다. 
Begin { 
     word = 0; 
        } 
-시작(Begin) :  변수 word를 0으로 초기화 한다. 
{ 
word += NF; 
} 
-실행(Routin) : NF는 각 라인마디의 필드 수를 나타내는 awk시스템 변수이다. awk는 구분자가 정의되어 있지 않을 때 공백을 구분자로 사용 하므로 각 라인의 단어의 수가 NF로 들어가고 "+="연산자에 의해서 마지막 라인의 단어 갯수까지 더해 준다. 
END { 
print "Word Count:" 
word:(End) 
} 
-끝(End) : 마무리 단계이다. 결과를 출력한다. 

작성된 스크립트는 -f 옵션으로 실행한다. wordrest.txt라는 임의의 텍스트 문서를 방금 작성한 스크립트로 검사해 보자. 작성된 awk 스크립트 파일을 실행하려면 awk -f [스크립트 파일 이름]형식으로 사용한다.

# awk -f word.awk wordcount.txt 
Word Count: 580 

awk 시스템 변수
$0 입력 라인 모두
$n 입력 라인에서 n번째 필드 값
ARGC -명령 라인 인자 수를 갖는 변수
ARGV -명령 라인의 인자를 포함하는 배열
ENVIRON -환경변수들을 모아둔 관계형 배열
FILENAME -현재 파일명
FS구 -분자 정의, 공백을 기본으로 사용
FNR -입력파일의 레코딩 총수(라인 수)
NF -현재 레코드 필드 수
NR -현재 레코드 번호
OFMT -숫자에 대한 출력 포멧
OFS -출력 필드 구분, 빈 라인을 기본으로 사용
ORS -출력 레코드 구분 (newline을 기본으로 사용)
RLENGTH -지정한 페턴으로 검색되어 나온 문자열의 길이
RS -입력 레코드 구분 (newline을 기본으로 사용)
RSTART -지정한 패턴으로 검색되어 나온 문자열의 가장 앞부분

awk 연산자
c를 참조하여 만들어 졌으므로 c와 사용법이나 종류가 거의 같다.
? -조건연산
사용자로 등록된 아이디가 user1, user2, user3 로 되어있고 그 중 검색하고 싶은 내용이 1/2/3 중 어떤 것일지 명확하지 않을 경우 ?를 이용하여 모두 검색할 수 있다.
#awk /usr1?/ /etc/passwd/
user1:x:516:516::/home/usre1:/bin/bash
user1:x:516:517::/home/usre2:/bin/bash
user1:x:516:518::/home/usre2:/bin/bash
||, &&, ! -논리연산 or, and,not
~, !~ -검색된 패턴에 부함되는 것을 참으로 사용하려면 ~, 거짓으로 사용하려면 "!~"을 사용한다.
<, <=, >, >= ,!= ,== -비교연산자
+, -, *, /, %, ^ -더하기, 빼기, 곱하기, 나누기, 나머지, 제곱
++,-- -증가연산자, 감소연산자
2005/06/27 17:59 2005/06/27 17:59
awk 스크립트를 perl 스크립트로 바꾸는 명령이다.

사용법 : a2p [옵션] 파일명 
-F<문자> : 구분자를 정의한다. awk의 필드를 나누는 기준이 되는 구분자 변수인 FS 변수를 지정된 문자로 정의한다. 
-o : 예전 awk 형식의 스크립트를 변환한다. 

awk 스크립트를 perl 스크립트로 변환하는 명령어이다.
awk 명령어에서 예제로 만든 간단한 스크립트를 가져와 변환해보자. 이 예제는 문서의 단어 개수를 체크하는 스크립트이다.
word.txt 라는 문서의 단어 수를 체크해 보자.

# awk -f word.awk word.txt 
Word Count: 580 

이 awk 스크립트를 perl 스크립트로 변환 한다.

# a2p word.awk 

#!/usr/bin/perl 
eval 'exec /usr/bin/perl -S $0 $(1+"$@"}' 
   if $running_under_some_shell; 
            # this emulates #! processing on NIH machines. 
            # (remove #! line above if indigestible) 
eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift; 
            # process any FOO=bar switches 

$[ = 1;   # set array base to 1 
$, = ' ';    # set output field separator 
$\ = "\n";   # set output record separator 

$word = 0; 

while (<>) { 
   chomp;     # strip recored separator 
   @Fld = split(' ', $_, 9999); 
   $word += $#Fld; 
} 

print 'Word Count: ' . $word; 

a2p는 perl 스크립트로 변환하여 표준 출력으로 변환된 문서를 화면에 보여준다. 이 표준 출력을 word.perl 이라는 perl 스크립트 파일로 만들어 실행하면 같은 결과를 얻을수 있다.

# a2p word.awk > word.perl 
# perl word.perl word.txt 
Word Count : 580 

[관련명령어]
s2p sed스크립트를 perl 스크립트로 변환
2005/06/27 17:57 2005/06/27 17:57
저장 장치의 배드 블록을 검사하는 명령어

사용법 : badblocks [옵션] [장치] [블록 개수] 
장치 : 검사할 장치를 지정한다. 
블록 개수 : 검사할 장치의 블록 개수 

-b 블록 크기 : 블록 크기를 바이트 수로 나타낸다. 
-o 파일 : 배드 블록 체크내용을 파일에 저장한다 
-v : 배드 블록 체크 내용을 상세히 보여준다. 
-w : 각 블록에 몇 가지 패턴으로 쓰기, 읽기를 하면서 테스트한다. 

각 디스크의 배드 블록을 검사하는 명령이다.
시스템의 /dev/hda2 디스크의 배드 블록을 검사한다. 이 때 블록 개수를 알기 위해 먼저 fdisk를 실행하여 디스크 정보를 확인하자. 블록 개수는 다음과 같은 방법으로 확인할 수 있다.

# fdisk -l /dev/hda 
Device   Boot    Start     End    Blocks   Id  System 
/dev/hda1   *      1    261      2096451  83  Linux 
/dev/hda2          262   587     2618595  83  Linux 
/dev/hda3          588   848     2096482+  83 Linux 
/dev/hda4          849   1027     1437817+  5 Extended 
/dev/hda5          849   913      522081   83 Linux 
/dev/hda6          914   1027      915673+   83 Linux swap 

위 명령의 결과로, /dev/hda2에는 2618595개의 블록이 있다는 사실을 알 수 있다.

#badblocks -v /dev/hda2 2618595 
Checking for bad blocks in read-only mode 
From block 0 to 136521 
136520 : 배드 블록이 발견 디스크 블록 
Pass completed, 1 bad blocks found. 
1개의 배드 볼록이 발견되었다. 

136521 디스크 블록에 1개의 배드 블록이 발견되었음을 보여 준다.
2005/06/27 17:56 2005/06/27 17:56
워드 프로세서가 보편적이지 않았을 때 큰 글자의 출력을 위해 많이 사용된 명령이다.

사용법 : banner [-wn] 문자열 
-w : 기본적으로 출력되는 칸수는 132칸이나 -w 옵션을 사용하여 열 수를 정해 줄 주 있다. n값이 없을 경우 80열로 표현된다. 
n : 확대되어 출력되는 열 수 

문자열을 확대 출력할 때 사용된다. 문자가 #으로 표현되어 확대 출력된다. 지금은 거의 사용하지 않는 명령이지만, 간혹 아스키 아트 등에서 큰 글씨를 표현할 때 이용하기도 한다.
banner 명령에 별다른 옵션을 주지 않았을 경우에는 기본 값으로 132열을 사용해서 활대 출력을 하게 된다. -w 옵션을 사용하면 확대하고 싶은 크기의 열 수를 정해 줄 수있다.
2005/06/27 17:55 2005/06/27 17:55
경로와 확장자를 제거한 순수 파일 이름만 돌려받는 명령이다.

사용법 : basename 경로+파일 이름[확장자] 
경로+파일 이름 : 경로를 포함한 파일 이름 
확장자 : 선택 옵션으로 확장자까지 게거하고 싶을 때에만 사용한다. 이 확장자가 파일 이름의 맨 마지막에 오는 문자열일 경우 삭제한다. 

--help : 도움말을 보여준다. 
--version : 버전 정보를 보여준다. 

이 명령은 경로를 포함한 파일 이름을 인수로 받아, 파일의 경로를 제거하고 필요에 따라서는 확장자를 삭제하여 순수하게 파일명만 남게 한다.
/etc/issue.net 에서 파일 경로와 확장자를 지우는 경우를 생각해 보자.

# basename /etc/issue.net .net 
issue 

스크립트를 작성할 때, 어떤 변수가 경로를 포함한 파일 이름을 뜻한다고 생각해 보자. 이 변수에서 파일 이름만 추출하여 사용하고 싶을 때 basenam을 사용하면 편리하다. 시스템 변수 중 MAIL은 로그인 사용자의 mail 파일과 경로를 저장한다. 로그인 사용자 명을 출력할 때에는 다음과 같이 할 수 있다.

# echo $MAIL 
/var/spool/mail/root 
# basename $MAIL 
root 

이런 점을 응용하면 스크립트를 만들 때 여러 가지를 경로에서 추출하여 쉽게 사용한다.

[관련 명령어]
dirname 경로-파일명에서 경로명만 추출한다.
2005/06/27 17:54 2005/06/27 17:54
시스템 부하가 일정 이하가 되면 예약해 둔 명령을 실행한다.

사용법 : batch [-V] [-q큐이름] [-f파일명] [-mv] [시간] 
-q queue : queue이름을 지정한다. queue 이름으로는 a~z, A~Z가 쓰일 수 있다. 
 queeue이름을 지정해 주지 않으면 at는 a를 batch는 b를 사용한다. 알파벳 순서로  뒤의 이름을 갖는 큐는 더 큰 niceness 값을 갖는다. "="큐는 현재 수행되는 작업에 대한 큐로 예약되어 있다. 대문자 이름의 큐에 추가된 작업은 batch의 작업처럼 처리된다. 
-m : 출력 결과가 없더라도 작업이 완료될 때 사용자에게 메일을 보낸다. 
-f 파일명 : 스크립트 파일 등을 실행해 줄 때 사용한다. 
-v : 직업이 수행될 시간을 보여준다.

시스템의 평균 부하가 0.8 이하로 내려가면 예약해 둔 내용을 실행한다. 시스템에 부하가 많이 걸리는 명령을 실행할 때 사용할 수 있다. 먼저 현재 시스템의 평균 부하를 살펴보자.

# uptime 
3:51 up 19 days, 3:30, 14 users, load average: 6.00, 6.00, 5.93 

평균 부하가 6 정도인 것을 확인 할 수 있다. 시스템의 부하를 피해 실행할 스크립트 명령을 batch를 이용해 등록한다. 등록 후 atq 명령어를 사용하여 예약된 작업 목록을 확인할 수 있다.

# batch -f system_backup -m now 
job 9 at 2002-06-25 04:01 
# atq 
9   2002-06-25 04:01 b root 

등록된 시간을 보고 예약한 내용을 확인할 수 있다.

[관련 명령어]
at 특정 시간에 명령어 실행을 예약한다.
atq 예약된 작업 목록을 보여 준다.
atrm 예약된 작업 목록을 삭제한다.
cron 정기적으로 예약된 작업을 수행한다.
batch 시스템 부하가 일정 이하일 때 명령을 수행한다.
2005/06/27 17:53 2005/06/27 17:53
터미널에서 사용하는 대화형 계산기 언어

사용법 : bc [-lws] [파일...] 
-l : 표준 수학 라이브러리를 정의한다. 
-w : POSIX bc에 대한 확장기능에 대하여 경고 메시지를 보여준다. 
-s : POSIX bc 언어로만 작동하게 한다. 

bc는 대화형으로 문장을 실행하는 무한 정확도의 숫자를 지원하는 언어이며, 일반적으로는 계산기로 사용한다. 문법은 C언어에서 사용하는 연산과 비슷하게 사용할 수 있으며, 명령행 옵션을 주면 표준 수학 라이브러리의 함수를 사용할 수도 있다.
그러나 계산기로 사용할 때에는 일반적으로 계산하는 순서대로 식을 입력하여 답을 얻어낼 수 있다.
상당히 액수가 크기는 하지만 98,700,000원의 돈이 있다고 하자. 이것을 연리 7%로 13년 동안 은행에 맡겨 놓으면 얼마가 되는지 생각해 보자. 이자를 계산하는 방법은 여러 가지가 있겠지만, 우리는 단순하게 원금*((1+이자)^기간)의 식으로 계산해 보겠다.

# bc 
bc 1.06 
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. 
This is free software with ABSOLUTELY NO WARRANTY. 
For details type `warranty'. 
98700000*((1+0.07)^13) 
236880000.00 
quit 

우리가 생각한 식을 그대로 입력한 것만으로도 원하는 계산 결과를 얻을 수 있었다. 이 외에도 bc는 일반 계산기보다 훨씬 뛰어난 정밀도를 자랑한다. 작업을 하다가 다른 계산기를 뛰울 필요 없이 바로 사용할 수 있는 것은 물론, 복잡하면서도 정교한 계산을 할 때에도 도움이 될 것이다.
2005/06/27 17:52 2005/06/27 17:52
메일 서버를 일정 간격으로 체크하여 새 메일이 도착하면 신호한다.

사용법 : biff [옵션] 
y : 메일 도착을 통지해 준다. 
n : 메일 도착을 통지하지 않는다. 

이 명령은 sendmail의 MTA를 사용할 때 유용하게 쓸 수 있는 명령이다. biff의 설정이 y로 되어 있으며 새 메일이 도착했을 때 메일을 보낸 사람과 메일의 첫 부분이 화면에 나타난다. 그러면 현재 biff의 상태를 보도록 하자.

# biff 
is n 

대부분의 시스템에서는 biff의 기본 설정이 off로 되어 있다. 이것을 on 상태로 만들면 이후에 메일이 올 때마다 통지를 받을 수 있다. on 상태로 만들고 확인해 보자.

# biff y 
# biff 
is y 

y 대신 yes를 사용할 수도 있다.
2005/06/27 17:51 2005/06/27 17:51
높은 성능의 압축률을 자랑하는 압축 유틸리티이다.

사용법 : bzip2 [-옵션] [파일명...] 
-c --stdout : 파일을 압축 또는 풀어서 표준 출력으로 보낸다. 
-d --decompress : 압축을 푼다. 
-z --compress : 파일을 압축한다. 
-t --test : 지정된 파일의 무결성을 검사하지만, 압축을 풀지는 않는다. 
-f --force : 압축, 해제할 때 같은 이름의 파일이 있을 경우 덮어쓰기 한다. 
-k --keep : 파일을 압축이나 해제 할 때 원본파일을 지우지 않는다. 
-s --small : bzip2가 작업 중 사용하는 메로리의 양을 줄인다. bzip2 작업에 2.5byte 만을 사용한다. 이렇게 작업하게 되면 속도는 2배 이상 더 걸리지만 2.5byte 라는 적은 메모리에서 bzip2를 사용할 수 있다. 
-q --quiet : 경고 메시지가 나오지 않는다. 
-v --verbose : bzip2 작업사항을 자세히 볼수 있다. 
-L --license -V --version : 버전과 라이센스를 보여준다. 
-1 ~ -9 : 압축할때의 블록 크기를 정해 준다. 

bzip2는 Burrows-Wheeler 블록 정렬 테스트 압축 알고리즘과 Huffman 코딩을 사용하여 압축률이 뛰어나다. bzip2는 GNU gzip 과 비슷한 사용법을 갖는다. 압축된 파일은 압축 전의 날짜, 퍼미션, 소유자 등의 속성을 그대로 갖는다. 그러므로 압축된 파일을 풀었을 때에도 원본파일의 속성을 그대로 간직한다.
bzip2의 확장자는 .bz2이다.

# ls 
q-mail.hwp routing 

위 두 파일을 bzip2 명령으로 압축해보겠다.

파일압축

# bzip2 q-mail.hwp routing 
# ls 
q-mail.hwp.bz2 routing.bz2 

파일압축 해제
bzip2 -d 옵션으로 파일을 압축 해제한다.

# bzip2 -d q-mail.hwp.bz2 
# ls 
q-mail.hwp routing.bz2 

bzip -d 옵션은 bunzip2명령과 동일한 명령이다.

# bunzip2 routing.bz2 
# ls 
q-mail.hwp routing 

[관련 명령어]
compress 압축 유틸리티. 확장자 .Z
gzip 표준 GNU/UNIX 압축 유틸리티. 확장자 .gz
2005/06/25 11:39 2005/06/25 11:39
시스템에서 달력의 기능을 하는 명령어

사용법 : cal [옵션] [[month]year] 
-j :율리우스(구태양력)으로 출력. 
-y :현재 년도 모든 달을 모두 보여준다. 
-V :버전 정보를 보여준다. 

사용할 수 있는 년도는 서기 원년에서 9999년까지이다. 9999년 이후의 달력을 볼 수 없는 것은 아쉽지만, 틀림없이 9999년이 오기 전에 9999년 이후의 달력을 볼 수 있도록 수정될 것이라 생각된다. 1999년을 보고자 한다면 cal 99가 아니라, cal 1999라고 입력해야 한다. 아무런 명령행 인자가 없으면 시스템의 현재 달을 보여준다.

# cal 
# cal 8 1973 
# cal 2004 
# cal 2004 | lpr   --프린터로 출력 


[관련 명령어]
date 오늘의 날짜 혹은 지정한 날의 날짜를 주어진 형식대로 출력한다.
2005/06/25 11:36 2005/06/25 11:36
텍스트 파일 내용을 표준 출력으로 보여준다.

사용법 : cat [옵션] [파일]... 
-A, --show-all : -vET 와 같다. 
-b, --number-nonblank : 공백을 제외한 파일 내용의 줄의 맨 앞에 1부터 시작하는 줄 수를 보여준다. 
-e : -vE 와 같다. 
-E, --show-ends : 각 줄의 끝에 $로 끝줄을 나타낸다. 
-n, --number : 모든 줄의 앞에 1부터 시작하는 줄 수를 보여준다. 
-s, --squeeze-blank : 공백의 줄 수를 하나이상 보여주지 않는다. 
-t : -vT 과 같다. 
-T, --show-tabs : 탭 문자를 ^|로 보여준다. 
-v, --show-nonprinting : 개행 문자와 탭 문자를 제외한 ^|와 M 표시를 보여준다. 
--help : 도움말을 보여준다. 
--version : 버전 정보를 보여준다. 

cat은 파일의 내용을 출력하여 보여주는 대표적인 명령어이다. cat은 파일 내용을 한번 보여주기만 할 뿐 많은 줄의 내용은 제대로 살펴 볼 수 없다. 이 때는 보통 more 명령이나 less, tail 명령을 사용하거나, 출력 내용을 파이프를 통해 다른 프로그램과 조합하여 사용해야 할 것이다.
다음의 query 파일을 보자. 한 줄이 길어 한 줄인지 구별이 가지 않는다.

# cat query 
select date_format(uregdate,'%Y%m') date,count(uid) from cst_users u, cst_productregs p, cst_productregdetail d 
where u.uno=p.preguno 
and p.pregno=d.preggno 
group by date 

-n 옵션은 줄 앞에 줄 번호를 붙여 주는 역할을 한다. 이 파일은 총 4줄임을 알 수 있다.

1 select date_format(uregdate,'%Y%m') date,count(uid) from cst_users u, cst_productregs p, cst_productregdetail d 
2 where u.uno=p.preguno 
3 and p.pregno=d.preggno 
4 group by date 

줄 수가 많은 경우 파이프로 more 명령을 실행하여 한 페이지씩 살펴 볼 수 있다. 다음 페이지를 보려면 스페이스 키를 입력하고, 한 줄씩 내려가려면 엔터 키를 입력한다.
물론 more만 실행하더라도 같은 결과를 볼 수는 있다.

# cat /etc/httpd/conf/httpd.conf | more 
# 
# Based upon the NCSA server configuration files originally by Rob McCool. 
# 
# This is the main Apache server configuration file.  It contains the 
# configuration directives that give the server its instructions. 
# See <URL:http://www.apache.org/docs/> for detailed information about 
# the directives. 
# 
# Do NOT simply read the instructions in here without understanding 
# what they do.  They're here only as hints or reminders.  If you are unsure 
# consult the online docs. You have been warned.  
# 
# After this file is processed, the server will look for and process 
# /etc/httpd/conf/srm.conf and then /etc/httpd/conf/access.conf 
# unless you have overridden these with ResourceConfig and/or 
# AccessConfig directives here. 
# 
# The configuration directives are grouped into three basic sections: 
#  1. Directives that control the operation of the Apache server process as a 
#     whole (the 'global environment'). 
#  2. Directives that define the parameters of the 'main' or 'default' server, 
#     which responds to requests that aren't handled by a virtual host. 
--More-- 

마지막으로 cat은, 간단한 라인 편집기의 역할을 할 수 있다. 라인 편집기란 현재 입력 하고 있는 행은 수정할 수 있지만 이미 지나 온 행은 수정할 수 없는 것으로, 지금은 거의 쓰이지 않는 것이지만, 나우누리나 하이텔 등의 PC 통신을 사용하는 사람이라면 한번쯤 사용해 보았을 것이다. 사용 방법은 다음과 같다.

# cat > [파일 이름] 

그러면 실제로 파일을 만들어 저장해 보자. 파일을 다 쓰고 나서는 Ctrl+D를 눌러 cat 명령을 종료한다.

# cat > boa.txt 
You Still my No.1, 
날 차지 말아 줘, 
나의 슬픔 가려 줘, 저 구름 뒤에 
너를 숨겨 빛을 닫아 줘. 
Ctrl+D 

노래 가사를 입력해 보았다. 그러면 제대로 저장이 되었는지, 새로 만들어진 boa.txt 파일을 읽어보자

# cat boa.txt 
You Still my No.1, 
날 차지 말아 줘, 
나의 슬픔 가려 줘, 저 구름 뒤에 
너를 숨겨 빛을 닫아 줘. 

잘 저장된 것을 알 수 있다. 그러나 이 경우에 한 가지 주의할 점이 있다. 다음 내용을 살펴 보자. 다음과 같이 사용하면 100m.txt 파일의 내용을 화면에 출력하는 대신 boa.txt 파일에 입력하여 저장한다.

# cat 100m.txt > bat.txt 
# cat boa.txt 
저기 보이는 노란 찻집 
오늘은 그녀를 세번째 만나는 날 

앞서 작성한 boa.txt의 내용이 사라지고 100m.txt의 내용이 저장되어 있다. 그렇다면 먼저 저장된 내용의 뒤에 새 내용을 저장하려면 어떻게 해야 할까? 이 때에는 > 를 두개 사용하여 문제를 해결할 수 있다.

# cat sarah.txt >> boa.txt 

[관련 명령어]
more 한 페이지씩 파일을 볼 수 있다.
tail 파일의 끝 부분부터 지정한 라인 수만큼 보여준다.
less more와 같은 기능을 하지만, 좀 더 추가적인 기능들이 있다.
2005/06/22 23:58 2005/06/22 23:58