mail [-옵션] [-s 제목] [-c 참조] [-b 숨은참조] 받는사람 mail [-옵션] -f 파일명 mail [-옵션] -u 사용자 ID
-v : 메일을 보내는 과정의 메시지를 자세히 보여준다. -i : tty 인터럽트 신호를 무시한다. -n : 메일프로그램 시작 시 /etc/mail.rc 파일을 읽지 않는다. -N : 초기 화면에서 메일목록을 보여주지 않는다. -s 제목 : 발송 메일의 제목을 적는다. -c 참조 : 같이 메일을 받을 사람을 추가한다. -b 숨은참조 : 같이 메일을 받는 사람을 추가한다. 숨은 참조 된 사람은 메일을 받은 다른사람에게는 보이지 않는다. -f : 파일로부터 메일을 읽어 온다. -u : 사용자 계정 지정
mail은 터미널에서 사용하는 메일 클라이언트 프로그램이다. 메일을 보내고 받고 정리할 수 있다.
– 받은 편지 확인 자신의 계정을 사용 중에 받은 편지를 확인하려면 mail 만 입력한다. 다음은 관리자 모드에서 특정 계정의 받은 편지를 확인할 때 쓰인다.
mail 을 실행하면 초기 화면에 받은 편지의 목록이 나온다. 초기 화면에 나오는 부분을 메일의 헤더 부분이라 하는데 다음과 같이 구성되어 있다.
처음 수신된 편지부터 확인하려면 <Enter> 를 누른다. 특정 편지를 보기를 원한다면 & 편지 번호를 지정한다.
– mail 명령어 mail의 여러 기능은 명령어를 통해 이루어진다. 명령어 입력 모드는 “&”로 표시한다.
명령어 설명 n 다음 편지로 이동한다. f <편지 번호> 편지 목록을 보여준다. f* 또는 & f a 모든 편지 목록을 볼 수 있다. d <편지 번호> 지정한 편지 번호의 편지를 지운다. s <편지 번호> 파일파일에 지정한 편지 내용을 저장한다. u <편지 번호> 편지를 지우지 않는다. R <편지 번호> 회신 한다. r <편지 번호> 전체 회신 한다. q mail 종료 x mail 종료, 시스템 메일박스에서 삭제 하지 않는다. h 메시지의 헤더 부분을 출력한다. ! 쉘 명령어를 실행한다 e Ex 모드로 메시지를 편집한다.
– 회신 보내기 편지 보기 명령 창에서 현재 메일에 회신을 보내기를 원하면 R 명령을 입력한다. 내용을 다 입력하면 <Ctrl+D> 를 눌러 편지 입력을 종료한다. 참조인이 없을 경우 그냥 <Enter> 키를 누른다
– 편지 보내기 mail을 실행한 상태에서 명령창에 &m 주소의 형식으로 입력하는 것 만으로도 편지를 발송할 수 있다. 메일을 쓰다가 내용을 수정하고 싶을 때에는 새 줄 첫 번째 칸에 ~v 라고 입력하면 vi 편집기 상태에서 내용을 수정할 수 있다. 본문 중에 텍스트 파일을 첨부할 때에는 새 줄 첫 번째 칸에 ~r 파일이름 형식으로 입력한다.
mail 명령으로는 바이너리 파일을 바로 첨부할 수 없었다. 그래서 파일을 디코드하여 텍스트 형태로 전송할 수 있게 만들어 보내곤 했다. 현재에는 pine이나 넷스케이프 메일러, K 메일러 등 파일 첨부가 자유로운 메일 클라이언트를 많이 사용한다.
-A chain, –append chain : chain을 추가한다. -D chain, –delete chain : chain에서 룰을 삭제한다. -D chain 룰넘버, –delete chain 룰넘버 : chain 정책 중 지정한 룰넘버를 삭제한다. 만일 룰넘버가 1이라면 chain 규칙의 첫 번째 룰을 삭제한다. -I chain [룰넘버], –insert chain [룰넘버] : chain 정책에 지정한 숫자번째에 삽입하거나, 마지막에 룰을 삽입한다. -R chain 룰넘버, –relace : chain 정책 중 지정한 숫자번째의 룰을 교체한다. -L [chain], –list [chain] 모든 chain 정책을 보거나, 지정한 chain 정책을 본다. -F [chain], –flush : 모든 chain 정책을 삭제하거나, 지정한 chain 정책을 삭제한다. -Z [chain], –zero : 모든 chain 정책을 제로로 만들거나, 지정한 chain 정책을 제로로 만든다. -C chain, –check chain : 설정한 chain 정책을 테스트한다. -N chain, –new-chain : 새로운 정책을 만든다. -X [chain], –delete-chain : 사용자가 만든 chain이나 모든 chain을 삭제한다. -P chain target, –policy chain target : chain 정책을 지정한 chain 정책으로 바꾼다. -E old-chain new-chain, –rename-chain old-chain new-chain : chain명을 바꾼다. -p, –protocol [!] proto : 프로토콜을 지정한다. !은 제외의 의미이다. -s, –source [!] address[/mask] : 출발지 주소를 지정한다. mask는 C클래스면 255.255.255.0이나 24비트로 표현된다. -d, –destination [!] address[/mask] : 목적지 주소를 지정한다. -i, –in-interface [!] input name[+] 수신하는 네트워크 인터페이스 이름을 지정한다. name+은 name으로 시작하는 모든 인터페이스 이름이다. -j –jump target : 지정하는 target으로 리다이렉트 시킨다. -m : 지정한 match로 확장이 가능하다. -n : IP주소와 포트번호를 숫자 그대로 보여준다. -o, –out-interface [!] output name[+] : 발신하는 네트워크 인터페이스 이름을 지정한다. -v, –verbose : 상세한 정보를 보여준다. –line-numbers : 룰정책을 보여줄 때 줄번호도 나타낸다. -x, –exact : 정확한 값으로 나타낸다. -V, –version : 버전 정보를 보여준다.
iptables는 netfilter 필터링 룰에 사용한다. 대부분 ipchains와 사용법이 거의 같으나, 가장 큰 차이점은 확장성에 있다. 정상적으로 커널 확장은 커널 모듈 하부 디렉토리(/lib/modules/커널버전/kernel/net)에 존재하는데, iptables는 요구에 의하여 적재된다. 그래서, 아들 모듈을 직접 적재할 필요는 없다. iptables의 확장들은 공유 라이브러리 형태로 보통 /usr/local/lib/iptables 에 위치한다. 배포판은 이것을 /lib/tables나 /usr/lib/tables 에 넣으려 할 것이다.
우분투 8.10-Desktop 의 경우 /lib/iptables 밑에 존재한다.
ipchain이 iptables에서 변경된 사항들은 다음과 같다.
* 미리 만들어진 체인 이름 (input, output, forward)가 소문자에서 대문자로 바뀌었다.
* -i 지시자는 들어오는 인터페이스만 의미하고 INPUT과 FORWARD chain에서만 작동한다. FORWARD나 OUTPUT chain은 -o 로 사용한다.
* TCP와 UDP 포트는 –source-port, –sport (–destination-port, –dport)과 사용하게 된다. -p tcp 또는 -p udp 옵션과 함께 사용되어져야 한다.
* TCP -y 지시자는 –syn 으로 바뀌었고 -p tcp 다음에 와야한다.
* DENY target 는 DROP으로 바뀌었다.
* iptables 를 이용하여 정책들을 입력하였다면, 이는 메모리에 적재될 뿐이므로 시스템을 다시 시작한 후에는 모두 사라질 것이다. 이를 iptables-save 명령으로 저장이 가능하다.
# iptables-save > iptables_test
아래와 같이 iptables-restore 명령으로 저장한 정책 파일을 불러올 수도 있다.
# iptables-restore < iptables_test
* 매스커레이딩(iptables) ipchain 명령과 마찬가지로 내부 인터넷 연결 공유를 할 수 있다. masquerading 기법으로 한 컴퓨터에 두 개의 네트워크 인터페이스를 설정한 다음, 하나는 외부의 인터넷과 연결되어 있고, 다른 하나는 내부 게이트웨이(192.168.0.1 이라고 가정)의 역할을 하도록 설정한다. 내부 게이트웨이 역할을 하는 인터페이스와 연결된 허브를 통해 같은 192.168.0.0/24 대역의 아이피를 설정하여, 내부에서도 인터넷을 사용할 수 있도록 할 수 있다. 아래의 스크립트는 최소의 masquerading 기법을 위한 입력으로 손쉽게 내부에 인터넷을 공유할 수 있다.
* 솔라리스(Solaris) 솔라리스는 BSD 계열의 SunOS를 바탕으로 하여, System V 계열의 영향을 받은 SunOS 5 버전부터는 Solaris 2.x 라는 이름도 함께 사용해 왔다. 이후 Solaris 2.7 부터는 다시 Solaris 7이라는 이름으로도 통용되고 있다. Sun 사에서는 이 OS를 자사에서 생산하는 스팍 플랫폼 용으로만 개발하였으나 인텔 플랫폼을 사용하는 경우가 늘어나며 인텔용 버전도 함께 개발하였다. 그러나 본질적으로는 거의 동일한 소스를 기반으로 컴파일한 제품이므로 성능 면에서는 큰 차이가 없다.
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 가 받아 파일의 공백을 기준으로 나누어 첫 번째 필도와 8 번째 필도를 출력한다.
awk 로 필터링하여 파일의 권한과 파일명만 출력한다. 위와 같이 awk 는 라인을 받아 구분자를 통해 구분하고 print 명령으로 출력하게 된다.
ls -al 로 출력되는 행을 공백으로 구분하면 8가지의 필드로 구분된다. 각 필드는 공백을 기준으로 구분된다. $1 ~ $8 까지로 각 필드의 변수를 표현하며, $0 은 모든 필드를 말한다.
파일 목록 중 1 Mb 이상의 용량을 갖는 파일명과 용량을 출력하고 싶다면 awk 의 조건문을 사용하여 가능하다. 1 Mb = 1048576 bit 이기 때문에 용량을 나타내는 5번째 필드 중 1048576 보다 큰 라인을 출력하며 그 중 5번째와 9번째 필드만 출력한다.
awk 를 이용하면 문서의 특정 문자나 문자열을 검색하여 검색되어 나온 라인만 출력할 수 있다.
root 계정을 포함한 라인만 검색하여 출력하였다.
첫 번째 예제에서는 문자열 중 구분 되어 있는 필드를 지정하여 원하는 필드만 출력하였고 두 번째 예제에서는 보기를 원하는 패턴을 가진 라인만 검색하여 출력하였다. 이 두 가지를 조합하면 보기를 원하는 라인에 특정 필드만 출력이 가능하다.
두 번째 예제는 /etc/passwd 파일을 root 라는 패턴으로 검색하여 root 라는 문자열을 포함한 라인만 출력되었다. “:표시로 구분지은 필드 중 제일 먼저 나오는 것이” 그룹명인데 다음 예제는 이 그룹명만 출력 되도록 만들었다.
-F 는 구분자를 정의한 옵션으로 기본은 공백을 사용하지만 이 파일과 같이 “-F:”로 구분자를 지정해 사용할 수 있다.
/root/ 로 검색한 패턴 부분에, 정규 표현식을 사용하면 더욱 자세한 패턴을 검색할 수 있다.
스크립트 파일 이용
=========================================================================================== 시작(Begin) | 시작 단계로서 전체 스크립트를 위한 정의 단계이다.(Preprocessor) ——————————————————————————————- 실행(Routin) | 실행단계로서 이 스크립트의 기능을 수행하는 단계라고 할 수 있다. ——————————————————————————————- 끝(End) | 마무리 단계이다. 결과를 출력한다. ===========================================================================================
awk 의 스크립트 구조는 시작, 실행, 마무리의 3단계로 나누어져 있다.
awk 는 여러 연산자나 루프 사용법 등이 C 와 같아 C 를 알고 있는 사용자라면 어려움 없이 사용할 수 있다.
다음의 스크립트는 파일의 단어 수를 검사한다. wc 라는 명렁어로 쉽게 단어 개수를 체크해 볼 수 있지만 여기서는 간단한 awk 스크립트 예제로 awk 스크립트 사용법을 알아보자.
=========================================================================================== awk 스크립트 | 구조 | 설명 =========================================================================================== #!/bin/awk | 선언 | awk 로 스크립트가 실행될 수 있게 선언한다. ——————————————————————————————- BEGIN { | 시작 | 변수 word 를 0으로 초기화 한다. word = 0; | (Begin) | } | | ——————————————————————————————- { | 실행 | NF는 각 라인마다의 필드 수를 나타내는 awk 시스템 변수이다. awk 는 word += NF; | (Routin) | 구분자가 정의되어 있지 않을 때 공백을 구분자로 사용하므로 각 라인의 } | | 단어의 수가 NF 로 들어가고 “+=” 연산자에 의해서 마지막 라인의 단어 | | 갯수까지 더해준다. ——————————————————————————————- END { | 끝 (END) | 마무리 단계이다. 결과를 출력한다. print “Word Count: ” | | word;(End) | | } | | ===========================================================================================
작성된 스크립트는 -f 옵션으로 실행한다. wordcount.txt 라는 임의의 텍스트 문서를 방금 작성한 스크립트로 검사해 보자. 작성된 awk 스크립트 파일을 실행하려면 awk -f [스크립트 파일 이름] 형식으로 사용한다.
awk 시스템 변수
=============================================================================================== 변수 : 내용 =============================================================================================== $0 : 입력 라인 모두 $n : 입력 라인에서 n 번째 필드 값 ARGC : 명령 라인 인자 수를 갖는 변수 ARGV : 명령 라인의 인자를 포함하는 배열 ENVIRON : 환경변수들을 모아둔 관계형 배열 FILENAME : 현재 파일명 FS : 구분자 정의, 공백을 기본으로 사용 FNR : 입력파일의 레코드 총수(라인 수) NF : 현재 레코드 필드 수 NR : 현재 레코드 번호 OFMT : 숫자에 대한 출력 포멧 OFS : 출력 레코드 구분 (newline 을 기본으로 사용) RLENGTH : 지정한 패턴으로 검색되어 나온 문자열의 길이 RS : 입력 레코드 구분 (newline 을 기본으로 사용) RSTART : 지정한 패턴으로 검색되어 나온 문자열의 가장 앞부분 =============================================================================================
awk 연산자
c 를 참조하여 만들어 졌으므로 사용버이나 종류가 거의 같다.
=============================================================================================== 연산자 | 설명 =============================================================================================== ? | 조건연산 | 사용자로 등록된 아이디가 user1, user2, user3 로 되어 있고 그 중 검색하고 싶은 내용이 | 1, ,2, 3 중 어떤 것인지 명확하지 않을 경우 ? 를 이용하여 모두 검색할 수 있다. | # awk /user? /etc/passwd | user1:x:…… | user2:x:…… | user3:x:….. ———————————————————————————————– ||, &&, ! | 논리연산, or, and, not ———————————————————————————————– ~, !~ | 검색된 패턴에 부합되는 것을 참으로 사용하려면 “~”, 거짓으로 사용하려면 “!~”을 사용함. ———————————————————————————————– <. <=. >, >=. !=, == | 비교 연산자 ———————————————————————————————– +, -, *, /, %, ^ | 더하기, 빼기, 곱하기, 나누기, 나머지, 제곱 ———————————————————————————————– ++, — | 증가 연산자, 감소 연산자 ===============================================================================================