▒▒▒ 쉘 다루기 ▒▒▒
리눅스는 쉘프롬프트 상태에서 필요한 명령어를 실행할수 있습니다.
자 그럼 자신의 시스템에 적합한 최적화된 쉘을 구축해보겠습니다...

도스를 예로 들어보겠다. 도스를 처음 사용할때 가장 중요한 파일은 command.com 이다.
즉 모든 명령어는 command.com을 거쳐야만 실행이 된다.
리눅스에서 command.com 역할을 하는것이 바로 쉘이다.
그럼 이 쉘의 종류부터 알아보자

▶ 쉘의종류
Bourn shell
유닉스의 기본적인 쉘이며 구조적 문제를 해결할수 있는 문법언어를 내부적으로 갖춘 매우
강력한 쉘이다. 또한 뛰어난 입출력 제어기능을 가지고 있다.

C shell
많은 사용자를 확보하고 있는 쉘로서 스크립트 언어가 C와 비슷하여 C shell이라 불린다.

BASH(Bourne Again Shell)
요즘 리눅스에서 기본적으로 체택되며 기본쉘의 장점만 수용하고있다.

▶ 자신이 사용하고 있는 쉘 확인
확인방법 : #echo $SHELL
여기서 $SHELL은 환경변수이다. 환경변수 앞에서는 반드시 '$' 표시가 붙는다는 사실을 기억하자

▶ 자신이 사용하고 있는 쉘 변경 
변경방법 : #chsh
Changing shell for forwhom
Password:
New shell[/bin/bash] : /bin/csh
Shell changed

▶ Bash 설정파일(.bashrc .bash_profile)
각 사용자 디렉토리에 존재하며 쉘이 작동할때 자동으로 실행된다.
PATH경로 라이브러리 경로 프롬프트 모양등 여러가지 환경이 들어가 있다.

.bash_profil
PATH=$PATH:$HOME/bin
BASE_ENV=$HOME/.bashrc
USERNAME=""
export USERNAME BASE_ENV PATH

.bashrc
alias cp='cp -i'
alias mv='mv -i'
alais rm ='rm -i'
PATH=$PATH:/usr/local/bin 요 뒤에 추가가능

위에서 환경변수에 대해 언급한바가 있다. 내친김에 변수 만드는 방법도 알아보도록 하자

▶ 지역변수 : 사용자가 임으로 만들어 사용 새로운 쉘 시작시 유효하지 않다.
만드는 방법
#Linuxer=Phper
#echo $Linuxer 출력결과는 예상대로 Phper 이 된다.

▶ 환경변수 : 쉘내에서 가장 중요한 변수로 프로그램이나 사용자환경에 대한 정보가 저장된다.
#export Accel // 변수추가
#unset Accel //변수삭제

▶ 프롬프트 바꾸기
--바꾸는 방법
#$echo $PS1
$PS1="[\u@\h\d\t\W]$"

프롬프트에 달수 있는 기타 옵션들에 대해서 알아보자
\d 요일/달/날짜 형식의 날짜표시
\e ASCII의 excape 문자
\h 첫번째 ','까지의 hostname
\n 새로운 줄(바꾸기)
\t 24시간으로 현재시간
\T 12시간으로 현재시간
\u 현재사용자의 username
\w 현재 작업 디렉토리
\W 현재 작업 디렉토리의 basename
\! 현재 명령어의 history 번호
\# 현재 명령어의 command 번호
\\ backslash

▶ Alias 지정
alias cp='cp-i'
alias ls='ls -F --show-control-chars --color=auto'

[TIP] 리다이렉션...
명령을 실행했을때 실행결과를 나중에도 확인할수 있게 파일에 저장하는 기능이다.
#명령어 > 파일명 (실행결과가 새로운 파일에 저장)
#명령어 >> 파일명 (실행결과가 기존의 파일에 추가되어 저장)

'Server' 카테고리의 다른 글

쉘에서 PATH 보이기  (0) 2017.01.06
Telnet, Ssh 특정 계정 접속 못하게 하기  (0) 2017.01.06
DISK Quota 설정하기  (0) 2017.01.06
httpd.conf  (0) 2017.01.06
/etc/alias 사용법  (0) 2017.01.06

CPU정보 : cat /proc/cpu
디바이스정보 : cat /proc/devices
사용중인 파일 시스템 : cat /proc/filesystems
인터럽트(IRQ) : cat /proc/interrupts
메모리 : cat /proc/meminfo
작동중인 모듈확인 : cat /proc/modules 또는 lsmod
마운트정보 : cat /proc/mounts
파티션정보 : cat /proc/partitions
PCI정보 : cat /proc/pci
스왑정보 : cat /proc/swaps
커널버전,호스트정보,커널컴파일일자 등 : cat /proc/version

'Tip' 카테고리의 다른 글

mysql backup  (0) 2017.01.06
host 커맨드를 이용해 특정 도메인의 메일서버 알아내기  (0) 2017.01.06
mutt 메일 보내기  (0) 2017.01.06
TCP 연결수 확인 스크립트  (0) 2017.01.06
nslookup  (0) 2017.01.06
▒▒▒ 쿼타설정 ▒▒▒

1. 우선 커널에 quota설정이 되어있는지 확인해야합니다.
make xconfig 혹은 make menuconfig 실행하셔서 FileSystem으로 들어가시면 quota라는 항목이 있습니다.
이부분이 체크되어있어야 합니다. 체크가 되어있지 않으면 체크하시고 컴파일하셔요..

2. 부팅할때마다 적용을 시키기 위해 /etc/fstab 파일을 다음과같이 설정합니다.
지금부터는 쿼타설정할 파티션이 /dev/hda7 레이블은 /home 이라고 간주하겠습니다.
etc/fstab파일을 열어서 /home 이 있는 라인을 다음과같이 수정합니다.

/home /home ext2 defaults,usrquota,usrgroup 1 1

이렇게 설정한후 저장하고 나오세요

3. 쿼타적용할 디렉토리에 두개의 파일을 생성합니다.
#> touch /home/aquota.{user,group} <-- 요렇게 하시면 두개의 파일이 생성됩니다^^

4. 생성한 파일의 소유권을 수정합니다.
#> chmod 600 /home/aquota.*

5. 해당파일시스템 마운트 리로드..
#> mount -o remount /home

6. 다음과같이 디스크체크를 합니다.
#> quotacheck -auvg <-- 이과정에서 혹시 머라고머라고 이상한 거 나오면 그냥 무시하세요

7. 이제마지막 부분.. 
#> quotaon /home

이제 재부팅하시면 끝입니다


'Server' 카테고리의 다른 글

Telnet, Ssh 특정 계정 접속 못하게 하기  (0) 2017.01.06
쉘다루기/쉘의 종류  (0) 2017.01.06
httpd.conf  (0) 2017.01.06
/etc/alias 사용법  (0) 2017.01.06
FTP Command  (0) 2017.01.06

-------------------------------------------------------------------------------
◎ Apache 웹서버 환경설정


현재 아파치가 설치되어 있는 곳의 conf라는 디렉토리를 보면 httpd.conf라는 파일이 있슴다.
일단 이 파일을 vi편집기로 열어놓세요 아파치웹서버의 환경설정은 이 파일안에서 다함다.
그럼 순서대로 나열하고 중요한부분은 해석하고 사용법을 알아보겠슴다.

ServerType -standalone : 요청이 들어오기전 항상 응답할 준비가 되어있음 (대부분 사용, 빠름)
-inet : 요청이 들어오면 응답 (속도 떨어짐) 장점 : 메모리 적게사용

PidFile /var/run/httpd.pid : 아파치웹서버 PS id 정보가 여기에 저장

ResourceCondig conf/srm.conf : #으로 주석처리

AccessConfig conf/access.conf : #으로 주석처리

Timeout 300 : 요청이 들어왔을 때 300초까지 응답해줌 변경시에는 숫자만 바꿔주면 됨다

KeepAliv On : 홈페이지 접속한 상태를 계속 유지하면서 빠른시간내에 메뉴를 클릭(15초 횟수:100번) 

MaxKeepAliveRequests 100

KeepAliveTimeout 15

MinSpareServers 6 : 첨 실행되는 PS 개수 10개 줄어드는거 최소 6개 가장많이 늘어나는거 64 (메모리땜시 설정)

MaxSpareServers 64

StartServers 10

MaxClients 150 // 클라이언트 접속할수 있는 수

MaxRequestsPerChild // 자식PS가 100번정도 요청을 받고 사용하고 다시 삭제(ps 오랫동안 존재하면 보안상 문제)

Listen 3000 // 일반사용자 사용가능

User nobody // 권한을 주지않음으로 시스템 보안 유지

Group nobody

ServerAdmin root@localhost // 웹서버 문제가 생겼을 때 정보를 받을수 있는 멜주소 

ServerName new.host.name // DNS에 등록되어있는 호스트명 /etc/host 에 등록된 호스트명
IP Address 입력해도 됨

DocumentRoot // 홈페이지 내용 저장 디렉토리

UserDir public_html // 유저 디렉토리

DirectoryIndex // 시작페이지 파일이름 지정(순서대로)

AccessFileName .htaccess // 웹상에서 인증화면 뜸.. 

ThpesConfig /etc/mime.types // 아파치에서 적용하는 확장자 정의(ex 쇽웨이브정의)

HostNameLookups off // on 으로 되어있으면 클라이언트의 네임서버까지 추적(시간이 오래걸림)

ErrorLog // 아파치 에러메세지 디렉토리

LogLevel warn // warn(중간)뿐만아니라 debug notice 등등 있음 (로그메세지의 양)

ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/" //별칭정의

AddType application/x-httpd-php3 .php3 // 확장자 추가

AddHandler cgi-script .cgi // cgi 사용시 이부분의 주석을 풀어주어야 함

AddType text/html .shtml

AddType text/html .htm

버추얼호스트 설정방법(중요)

하나의 서버에 여러게 도메인 사용이 가능하다

NameVirtualHost 202.31.150.148 // 아파치웹서버에 아이피 어드레스


ServerAdmin webmaster@abc.co.kr //문제발생시 받을수 있는 주소
DocumentRoot /home/abc // 밑의 서버네임 홈페이지가 존재하는 위치
ServerName www.abc.co.kr
ErrorLog logs/abc.co.kr-error_log // 위 도메인에 문제가 생겼을 경우 저장되는 경위 (보통 안만듬) 
/var/log 에 있음
CustomLog logs/abc.co.kr-access_log common // 이것도 보통 안만듬


사용예.. (300~400개 정도 사용가능함)

NameVirtualHost 211.171.255.78



..





..



◎ 아파치 환경설정 두 번째..

//루트 디렉토리 이하의 디렉토리 환경설정 ex) 

Options All : MultiView를 제외한 모든부분 허가
ExecCGI : cgi 허가
FollowSymLinks : 심볼링크로 설정된 파일에 대해 원본을 찾아서 제공
Includes : server side include 서버가 이전하면 홈페이지의 주소를 변경하여야함 그러나 주소가 
입력된 파일하나만 수정해서 바꾸지 않아도 됨
IncludesNOEXEC : ssi를 지원하면서 cgi만 거부(보안상)
Indexes : 디렉토리 보여줌
None : 모든 옵션 불허
MultiViews : 홈페이지안에 영국어 한국어 중국어 세계의 언어가 있으면 특정 옵션을 사용하여 
나라마다 언어를 자동으로 제공, 이미지 이름이 동일한 경우 선택적으로 보여줌
SymLinksIfOwnerMatch : 심볼링크로 설정된 파일에 대해서 원본과 링크파일의 소유자가 
동일한 경우 원본만 보여줌

AllowOverride All : 모든 것을 허가
AuthConfig : 사용자 인증과 관련된 명령을 디렉토리 단위로 사용가능케 함 
FileInfo : 파일정보 표시 가능
Limit : 사용자의 접근을 제한할수 있음 아이피나 도메인을 이용해서..
None : 접근제한기능을 사용하지 않음
Options : 접근제한설정을 사용가능하게 지시


간단히 예를 들자면...

Options ExecCGI Indexes 
AllowOverride None

이렇게 하면 /home이라는 디렉토리에 CGI를 적용하고 웹상에서 index파일이 없을 때 해당디렉토리의 
파일이나 디렉토리를 보여주고 접근제한기능을 사용하지 않는다는 뜻이죠..

SSI (SERVER SIDE INCLUDE)를 설정해보자

ssi를 설치하면 웹상에서 텔넷명령을 실행할 수 있다. ex) 
- 단점 : 아파치 웹서버에 부담을 줄수 있다


Options All ExecCGIInclude IncludesNOEXEC Indexes


SSI를 설정하고나서 문서를 작성할 때 
// 파일의 수정일 표기
// 파일의 크기 표기
// food 파일내용을 삽입

이제 SSI 서비스를 받아보자

(SSI : 웹상에서 어떤 일을 첨부할수 있고 웹상에서 텔넷명령 실행가능)


최종수정일: 
파일의크기: 







ssi를 서비스하면 웹상에서 위와같은 서비스를 받을수 있다
그렇나 아파치 웹서버에 부담을 준당..

인증서비스(htaccess) 
다음은 home 디렉토리에 인증서비스를 하는 요령이다.


Options Includes ExecCGI // cgi 사용가능
AllowOverride ALL //.htaccess를 사용가능케 함


이제 public_html 밑에 인증서비스를 한다

.htaccess라는 파일 생성
Options All 
AuthType "Basic" // 인증방식을 베이직으로
AuthName "Administrator" // 인증화면 사용주체
AuthUserFile /home/wawacampus/public_html/.htpasswd //계정하과 비번이 있는 파일


require valid-user // AuthUserfile에 있는 사용자만 접근가능
allow from IP주소 (그사람은 허용함)
deny from all (모든 사람은 거부하고 특정한 IP주소만 허용)


.htpasswd 파일 생성방법

#> htpasswd -c .htpasswd person

두 번째부터는 -c 옵션은 사용하지 않음


혹시 틀린부분이 있다거나 하시면 아낌없는 질타를 바랍니다. - Leopit

'Server' 카테고리의 다른 글

쉘다루기/쉘의 종류  (0) 2017.01.06
DISK Quota 설정하기  (0) 2017.01.06
/etc/alias 사용법  (0) 2017.01.06
FTP Command  (0) 2017.01.06
sendmail.cf  (0) 2017.01.06

:: 쉘 프로그래밍 문법 ::

- 학습목표 
매개변수와 쉘 변수를 이해하고 활용한다. 
연산자들을 이해하고 활용한다. 
조건문과 반복문을 이해한다 

1. 매개변수(파라메타) 
쉘 변수에는 세가지 유형이 있으며 이는 매개 변수로 알려져 있다. 그종류는 키워드 
매개 변수, 위치 매개변수, 특수 쉘 매개변수 등이다. 
1) 키워드 매개 변수 
키워드 매개변수명은 알파벳 문자나 _ (밑줄) 문자로 시작 되어야 한다. 그리고 그 
다음에는 알파벳이나 밑줄문자의 임의의 숫자가 올 수 있다. 그 값들은 다음과 같이 
기록함으로써 키워드 매개변수에 배정된다. 
변수=값 변수=값 ... 
2) 위치 매개 변수 
쉘 프로그램이 실행될 때마다 프로그램명은 변수 $0에 배정되고, 명령 라인에 타이
프된 인수들은 변수 $1, $2, $3 ...에 배정된다. 위치 매개변수들 set 명령으로 값
을 배정 받을 수 있다. $9 이상의 매개변수는 ${nn}으로 표현할 수 있다. 
Examples: 
$ cat hi 
print hello $1 
$ hi there world 
hello there 

3) 특수 매개 변수 
$# 프로그램에 전달된 인수들의 수 또는 set문 실행에 의해 세트된 매개 변수들
의 수 
$* $1, $2, $3 ...과 같은 모든 위치 매개변수들을 집단적으로 참조 
$@ $* 과 같이 위치 매개변수들을 집단적으로 참조 
$0 실행중인 프로그램 이름 
$$ 실행중인 프로그램의 프로세스 번호 
$! 실행을 위해 백그라운드로 보내진 마지막 프로그램의 프로세스 번호 
$? 백그라운드로 실행되지 않은 마지막 명령의 종료 값 
$- 현재 설정된 옵션값 


2. 매개변수 치환 
가장 간단한 경우로서, 매개변수의 값은 달러표시($)를 가진 매개 변수를 선행함으
로써 접근될 수 있다. 매개 변수의 치환은 파일명 치환전에, 그리고 명령 라인이 
인수로 분리되기 전에 쉘에 의해 수행된다. 
$parameter 또는 ${parameter} 
매개변수의 값을 치환한다. 
$ print $PWD ${11} $$ 
/usr/dgk arg11 1234 
$ file=test_f 
$ cp $file ${file}x 

$ ls -x 
$ test_f test_fx 
${parameter:-value} 
parameter의 값이 null이 아닌 경우 그값을 치환하고, null인 경우에는 
value값만을 치환. 
$ EDITOR=/bin/ed 
$ echo ${EDITOR:-/bin/vi} 
/bin/ed 
$ EDITOR= 
$ echo ${EDITOR:-/bin/vi} 
/bin/vi 
$ echo $EDITOR 

${parameter:=value} 
parameter값이 null이 아닌경우 그값을 치환하고, null인 경우 value값을 
치환하고 그것을 parameter에 대입. 
$ unset x 
$ typeset -u x 
$ print ${x=abc} 
ABC 

$ BOOKS= 
$ : ${BOOKS:=$HOME/books} 
$ echo $BOOKS 
/usr/kys/books 
$ : ${BOOKS:=tester} 
$ echo $BOOKS 
/usr/kys/books 

${parameter:?value} 
parameter 값이 null이 아닐경우 그값을 치환. 그렇지 않으면 value을 표준 
에러에 기록하고 빠져나옴. 
만약 value가 생략되어 있으면 parameter와 메서지를 출력프로그램에서 요구
되는 변수들이 모두 설정되었는지 또는 무효가 아닌지의 여부를 알아보기위
해 쉽게 사용하여 체크할수 있다. 
$ print ${foo?} 
ksh: foo: parameter null or not set 
$ BOOKS= 
$ : ${BOOKS:?\"No BOOKS file\"} 
No BOOKS file 
${parameter:+value} 
parameter가 null이 아닐 경우 value를 치환.  null인 경우 아무것도 치환
하지 않음. 
$ set a b c 
$ print ${3+foobar} 
foobar 

$ toption= 
$ echo options: ${toption:+ \"T mode\"} 
options: 

${#parameter} 
매개변수의 길이를 치환 
$ HOME=/home/klog 
$ print ${#HOME} 
10 

${#array[*]} , ${#array[@]} 
배열의 요소들의 수를 치환 
$ unset x 
$ x[1]=5 x[3]=8 x[6]=abc x[12]= 
$ print ${#x[*]} 

${parameter#pattern} 
매개변수의 값을 치환하며 이때 pattern과 부합되는 왼쪽 부분은 제거된다. 
쉘 화일명 치환문자들(*,?,[..],@,!)을 사용할 수 있다. 
$ cd $HOME/src/cmd 
$ print ${PWD#$HOME/} 
src/cmd 

${parameter##pattern} 
가장 큰 pattern과 부합되는 왼쪽 부분은 제거된다. 
$ x=/one/two/three 
$ print ${x##*/} 
three 

${parameter%pattern} 
pattern과 부합되는 오른쪽 작은 부분이 제거된다. 
$ x=file.c 
$ print ${x%.c}.o 
file.o 

${parameter%%pattern} 
pattern과 부합되는 오른쪽 큰 부분이 제거된다. 
$ x=foo/fun/bar 
$ print ${x%%/*} 
foo 


3. 파일 입출력 
1) 파일 열고 닫기 
exec 명령을 아무런 아규먼터 없이 사용하여 현재 환경에서 파일을 열고 닫을 수 
있으며, I/O 방향재설정 방법을 사용하며 이때 파일디스크립터 값은 0-9까지 사용
할 수 있다. 
Examples: 
exec 3< foo  <- foo을 파일디스크립터3 으로 지정하여 읽기위해 
open 
$ exec 3<&- <- 파일디스크립터3 을 close 



4. 다큐먼트, 반환값 
1) 다큐먼트 
문자 #로 단어가 시작된다면 셀은 라인의 나머지를 주석으로 취급하고 ksh이 실행하
지 않는다 
Examples: 
$ cat samp_1 
# This is comment line 
# pwd 
ls -x # display listing of the directory 
$ samp_1 
samp_1 samp_2 samp_3 samp_4 samp_5 

2) 반환값 
각각의 명령어는 반환값을 가진다. 명령어의 반환값은 조건 명령이나 순환명령에서 
많이 사용된다. 반환값은 0에서부터 255의 값을 가진다. 
반환값 0 은 정상적인 종료인 경우의 값이며 조건이나 순환명령어에서 TRUE로 사용
되는 값이다. 그 이외의 모든 다른 값은 FALSE로 취급된다. 
반환값 1은 명령의 실행이 실패한 경우 129-160은 명령어가 신호를 수신하고 종료한 
경우에 발생되는 값이다. 
ksh에서는 $? 변수에 가장 최근에 종료된 명령어의 반환값이 저장된다. 

5. 병렬 프로세스 기능 
병렬프로세스 기능은 동시에 실행되면서 상호간에 통신하고 동기화를 하는 프로세스
간의 상호 작용 기능을 제공한다. 병렬프로세스의 시작은 명령어 라인의 끝에 \"|&\" 
을 추가하므로서 구현할 수 있다. 
기본적으로 병렬 프로세스의 표준입력은 그 프로세스의 부모 프로세스의 표준 출력
과 연결되며, 병렬 프로세스의 표준 출력은 그 프로세스의 부모 프로세스의 표준 입
력과 연결된다. 
cat /etc/passwd |& 
while true 
do 
if [ -z \"$FLINE\" ] 
then 
exit 0 
else 
read -p FLINE 
fi 
echo $FLINE 
done 




6. 쉘 스크립트 실행 방법 
1) . Script ( Dot Command ) 
도트 명령은 지시된 파일이 마치 그 파일로 부터의 라인들이 그지점에서 타이프 된
 것처럼 쉘에 의해 판독되고 실행되도록 한다. file은 실행하도록 하는 것이 아니
라 다만 읽기 쉽게 한다. 
Examples: 
$ cat > .profile 
export PS1=\'$PWD> \' 
export PATH=$PATH:$HOME 
^d 
$ . .profile 
/home/edu01> _ 
-> 변경된 .profile의 내용을 로그아웃, 로그인 순서를 그치지 않고 현재 쉘
에서 실행하여 사용자 환경을 지정할 수 있다. 
2) ksh script_filename 
서브쉘을 생성하여 그 쉘이 스크립트를 읽어서 실행하도록 한다. 이 경우 
script_filename 파일이 실행 퍼미션이 지정되어 있지 않아도 된다. 
Examples: 
$ cat > test_sub_shell 
echo \"test execution of shell script file \" 
echo $PWD 
^d 

$ ls -l test_sub_shell 
-rw-r--r-- 1 edu01 other 54 Jan 29 10:00 test_sub_shell 
$ ksh test_sub_shell 
test execution of shell script file 
/home/edu01 

3) chmod +x script_filename 
script 파일에 실행 퍼미션을 설정하여 실행한다. 
Examples: 
$ chmod +x test_sub_shell 
$ ls -l test_sub_shell 
-rwxr-xr-x 1 edu01 other 54 Jan 29 10:00 test_sub_shell 
$ test_sub_shell 
ksh: No such file or directory 
-> 현재 디렉토리 경로가 PATH에 설정되어 있지 않다. 
$ export PATH=$PATH:. 
-> 현재 디렉토리를 PATH 환경변수에 설정한다 
$ test_sub_shell 
test execution of shell script file 
/home/edu01 

7. 파일과 문자 테스트 연산자 
test 명령이나 [ ... ] 연산 결과 TRUE로 반환 받는 조건이다. 
1) 파일연산자 
-r file 프로세스에 의해 판독가능한 파일 
-w file 프로세스에 의해 기록 가능한 파일 
-x file 프로세스에 의해 실행 가능한 파일 
-f file 보통 파일 
-d file 디렉토리 
-c file 문자 특수 파일 
-b 2file 블록 특수 파일 
-p file 파이프 파일 
-u file 파일이 SUID(집합사용자 확인) 비트세트를 가진 경우 
-g file 파일이 SGID(집합그룹확인) 비트 세트를 가진 경우 
-k file sticky bit이 설정된 파일 
-s file 비제로 길이를 가진 파일 
-L file 심볼릭 링크 파일 
-O file 파일의 주인이 effective user id인 경우 
-G file 파일의 그룹이 effective user id인 경우 
-S file socket 형태의 특수 파일인 경우 
-t file file descriptor가 어떤 단말기와 연관된 개방된 파일 디스크립
터인 경우 


2) 스트링 연산자 
string 스트링이 널이 아닌 경우 
-n string 스트링이 널이 아닌경우 
-z string 스트링이 널인 경우 
string1 = string2 string1 과 string2 가 같은 경우 
string1 != string2 string1 과 string2 가 같지 않은 경우 
3) 정수 비교 연산자 
int1 -eq int2 int1 이 int2 와 같은 경우 
int1 -ge int2 int1 이 int2 와 같거나 그보다 큰경우 
int1 -gt int2 int1 이 int2 보다 큰경우 
int1 -le int2 int1 이 int2 와 같거나 작은 경우 
int1 -lt int2 int1 이 int2 보다 작은 경우 
int1 -ne int2 int1 이 int2 와 같지 않은 경우 
4) 부울 연산자 
!expr expr이 FALSE 
expr1 -a expr2 expr1이 TRUE, 그리고 expr2가 TRUE 
expr1 -o expr2 expr1이 TRUE 혹은 expr2가 TRUE 


Examples: 
$ test -x file -a ! -d file 
-> file이 실행 가능하고 디렉토리가 아닌 경우 
$ test \"x$1\" = xabc 
-> $1이 abc인 경우 
$ [ \"x$1\" = xabc ] 
-> $1이 abc인 경우 
$ test ! \\( -w file -o -x file \\) 
-> file 이 쓸 수 있거나 실행 가능한 파일이 아닌경우 
$ [ ! ( -w file || -x file ) ] 
-> file 이 쓸 수 있거나 실행가능한 파일이 아닌경우 



8. 내장된 정수 연산 
1) 정수 연산 
일반적인 대부분의 수식 연산을 ksh 에서는 지원하고 있다. 다음은 ksh에서 지원 되
는 연산자들이다. 
- 단항 - 
~ NOT 
! 논리부정 
* , / , % 곱하기, 나누기, 나머지 
+ , - 더하기, 빼기 
<< , >> 왼쪽 시프트, 오른쪽 시프트 
< , > , <= , >= 비교 
== , != 동등, 비동등 
& 그리고 
^ 배타적 또는 
| 또는 
&& 논리적 and 
|| 논리적 or 
= 배정 



2) let 명령 
Korn쉘은 expr 명령없이 정수 연산을 수행하기 위한 메커니즘을 제공하고 있는데 그
것이 let 명령이다. let은 쉘에 내장되어 있기 때문에 계산을 위한 새로운 과정을 
만들거나 찾거나 프로그램을 로딩할 필요도 없다. let의 형식은 
$ i=100 
$ let i = i + 1 
$ echo $i 
101 

$ let \' i = i + 1 \' \'j = j + 10\' 
개별적인 식들이 중간에 공백으로 가지고 있다면 인용부호로 묶어서 사용해야하며 
이것은 수식 쉘로부터의 *, &, <, > 와 같은 문자들이 가지는 특별한 의미를 제거하
는 부가적 효과를 가진다. 
$ let \'i = ( i + 10 ) * j \' 
둥근 괄호를 이용하여 수식을 그룹화할 수도 있다. 

3) (( expression )) 
(( expression )) 은 let \"expression\" 과 같은 의미이다. 쌍으로된 둥근 괄호를 이
용하여 let에 대한 대안적 형식을 취할수 있다. 
$ (( i = i * 5 )) 
$ (( i >= 0 && i <= 100 )) 
4) expr 
expr 명령을 사용하여 수식 계산을 실행한 후에 변수에 그 값을 지정한다. 
Examples: 
$ aa=10 
$ aa=`expr $aa + 10` 
$ echo $aa 
20 

5) integer variable 
수식계산에 사용되는 변수를 정수로 선언하여 일반적인 형태의 수식계산 방식을 ksh
에서 사용하도록 지정한다. 하지만 이렇데 지정된 변수는 반드시 정수 값만 가질수 
있다. 
Examples: 
$ integer aa 
$ aa=100 
$ aa=aa+1 
$ echo $aa 
101 
$ aa=\"test a integer variable\" 
ksh: aa: bad number 


9. 배열 
Korn쉘은 제한된 배열 능력을 제공한다. 배열은 1차원으로 512요소를 가지며, 배열
의 인덱싱은 0에서 시작하고 511까지 지정할수 있다. 
배열의 요소는 한쌍의 각괄호( [ ] ) 안에 넣어진 정수값으로 된 색인첨자와 함께 
호출되는 것으로 자신이 요구하는 만큼 요소에 값을 할당하여 사용한다. 
$ arr[0]=hello 
$ arr[1]=\"some text\" 
$ arr[2]=/home/dgk/memos 
배열로부터 값을 불러오는 방법은 배열의 이름과 각 괄호안에 원하는 요소의 번호를 
넣고 그것을 ${ }에 넣어 사용한다. 
$ echo ${arr[0]} 
hello 
$ echo ${arr[2]} 
/home/dgk/memos 
$ echo $arr 
hello 
-> 첨자가 없는 경우 요소 0이 이용된다. 
$ echo $arr[1] 
hello[1] 
-> { }을 사용하지 않고 출력한 경우 예상치 않은 결과 값을 출력한다. 

$ echo ${arr[*]} 
hello some text /home/dgk/memos 
-> 배열에 들어있는 모든 내용을 불러 온다 

$ echo ${#arr[*]} 

-> 배열 arr에 있는 요소들의 갯수. 이때 수는 실제 요소의 갯수가 아니고 
가장 큰 첨자 + 1 한 값이 출력된다. 이 값은 배열안에 다음 요소를 저장하
기 위한 첨자로 사용된다. 

$ arr[10]=foo 
$ echo ${arr[*]} 
hello some text /home/dgk/memos foo 
$ echo ${#arr[*]} 
11 
-> 사용자가 정수 명령을 배열명에 선언해 줌으로써 Korn쉘에게 정수 배열을 
선언하게 한다. 
$ integer arr 
$ arr[0]=100 
$ arr[1]=50 
$ (( arr[2] = arr[0] + arr[1] )) 
$ echo ${arr[2]} 
150 



배열구성요약 
${array[i]} 요소 i 값을 치환 
$array 첫번째 요소 array[0]값을 치환 
${array[*]} 모든 요소값을 치환 
${#array[*]} 요소들의 수를 치환 
array[i]=value value을 array[i]로 치환 

10. 함수 정의 
ksh에서의 function명령은 name ( ) { ....; } 형식으로 선언된다. 기능을 분류하거
나 순환적으로 일어나는 일들을 하나의 변수 형식으로 지정하여 불러 사용할 수 있
도록 한다. 
function identifier 

compound-list 

identifier( ) 

compound-list 

Examples: 등록된 사용자수를 세는 nu 라는 함수를 정의한다. 
$ function nu 
> { 
> who | wc -l 
> } 
$ nu 
13 


$ cat funt1 
function check_yesno 

typeset -l reply 
while true 
do 
read -r \"reply?$1? \" || return 1 
case $reply in 
y|yes} return 0;; 
n|no) return 1;; 
*) print \'please answer y or n\';; 
esac 
done 

while check_yesno \'Do you want to continue? \' 
do 
foobar 
done 

일반적으로 정의된 함수는 서브쉘에 보내지지 않는다. 하지만 typeset이라는 명령을 
사용하여 함수정의를 export 시킬 수 있다. 
$ typeset -fx funtion-name 
-> function-name을 주지 않으면 엑스포트된 함수들의 명단을 출력한다. 

$ typeset -f -> 정의된 함수의 리스트를 출력한다. 
funcrion nu 

who | wc -l 


함수정의 삭제 
함수정의를 삭제하기 위해 -f 옵션을 가진 unset명령을 사용한다. 
$ type nu 
nu is a function 
$ unset -f nu 
$ type nu 
ksh: nu: not found 



11. 변수의 속성 정의 
매개변수의 종류는 앞에서 키워드 매개변수, 위치매개변수, 특수매개변수로 나누어 
설명하였다. 이런 각각의 변수는 하나 또는 그 이상의 특성을 정의할 수 있으며 
typeset 이라는 명령어를 사용하여 변수의 특성을 on/off 하거나 설정되어 있는 내
용을 리스트할 수 있다. 
Command: typeset [-options] vasriable 
Options: 
-u Uppercase 소문자를 대문자로 변환한다. -l 옵션은 자동적으로 off된다 
$ typeset -u x=abc 
$ print $x 
ABC 
-l Lowercase 대문자를 소문자로 변환한다. -u 옵션은 자동적으로 off 된다. 
$ typeset -l x=ABC 
$ print $x 
abc 
-i or -ibase Integer 정수 변수로 정의된다. base는 수의 진법 정의 
$ integer x=6 
$ typeset -i8 y=x+x 
$ print $y 
8#14 
-L or -Lwidth Left-justified 앞에오는 공란들을 왼편 자리 맞춤시키고 
스트립 시킴. width가 비제로로 정의 되어 있으면 자리수를 width로 설정한다. -R옵
션은 자동적으로 off된다. 
$ typeset -L3 x=abcd y 
$ y=3 
print \"$y-$x\" 
3 -abc 
-LZ or -LZwidth Strip Leading Zero 앞에오는 제로들은 스트립되고 왼
편으로 자리 맞춤한다. 
$ typeset -LZ3 x=abcd y 
$ y=03 
print \"$y-$x\" 
3 -abc 
-R or -Rwidth Right-justified 오른편 자리 맞춤시키고 스트립시킴. 
width가 비제로인 경우 자리수를 width 로 설정. 
$ typeset -R3 x=abcd y 
$ y=3 
$ print \"$y-$x\" 
3-bcd 

-Z or -Zwidth Zero-filled 
-RZ or -RZwidth Zero-filled 
-Z만 설정된 경우 -L 옵션이 굛 되어있지 않다면 오른편로 자리 맞춤 시키고 스트립
시킨다. width가 비제로 값이면 자리수를 width로 설정한다. 만약 처음의 비공란 문
자가 숫자이면 0으로 채워진다. 
$ typeset -Z3 x=abcd y 
$ y=3 
$ print \"$y-$x\" 
003-bcd 
-r Read-only 변수가 읽기전용으로 설정되어 있다면 그 변수값을 변경하려 하
면 에러 메세지를 출력하고 변경이 불가능하다. 
$ typeset -r foo=bar 
$ foo=nobar 
ksh: foo: is read only 
$ unset foo 
ksh: foo: is read only 
-x Exported 모든 변수에 값이 설정되면 자동적으로 현재 환경에 값을 배당
한다. 
$ typeset -x foo=bar 
$ export foo=bar 

12. 패턴 
[ . . . ] 부호 문자들을 정의하여 그중 어느 하나의 문자와 일치하는 패턴 정
의할수 있다. \' - \' 부호를 사용하여 범위를지정 할수 있다. \' ! \' 부호를 사용하여 
역으로 매치 시킬수도 있다. 
$ ls 
chap1 chap10 chap11 chap2 chap3 chapa chapb chapc 
$ ls chap[123] 
chap1 chap2 chap3 
$ ls chap[12][01] 
chap10 chap11 
$ ls chap[!2-4] 
chap1 
$ ls chap[1-3] 
chap1 chap2 chap3 
? 문자 어떤 문자이든 상관없이 한 문자와 매치 된다 
$ ls chap? 
chap1 chap2 chap3 
chapa chapb chapc 
* 문자 어떤 문자든 0번 또는 그 이상과 매치 
$ ls chap* 
-> chap 으로 시작되는 모든 스트링 
$ ls x*y 
-> x로 시작하고 y로 끝나는 모든 스트링 
?(pattern[|pattern]...) 패턴 0번 또는 한번 발생되는 pattern과 매치 
$ ls para?([345]|99)1 
-> para1, para31, para41, para51, para991 과 매치 
*(pattern[|pattern]...) 패턴 0번 이상 발생되는 pattern과 매치 
$ ls para*([0-9]) 
-> para, para뒤에 어떤 숫자라도 붙어 있는 스트링과 매치 
+(pattern[|pattern]...) 패턴 1번 이상 발생되는 pattern과 매치 
$ ls para+([0-9]) 
-> para뒤에 숫자가 붙어 있는 모든 스트링과 매치 
@(pattern[|pattern]...) 패턴 정확히 한번 발생되는 pattern과 매치 
$ ls para@(chute|graph) 
-> parachute, paragraph 과 매치 
!(pattern[|pattern]...) 패턴 pattern에 정의된것을 제외한 모든것과 
매치 
$ ls para!(*.[0-9]) 
-> para로 시작하고 .숫자로 끝나지 않는 모든 스트링과 매치 


13. 조건문 
[ [ test-expression ] ] 또는 [ test-expression ] 기호 
test 명령을 대신하여 테스트하는데 사용할 수 있다. 
$ [ [ foo > bar && $PWD -ef . ] ] && print foobar 
foobar 
1) if . . . then . . . else . . . fi 
if 는 일반적으로 3가지 패턴으로 사용할수있다. 
형식1: 
if test -f $1 
then 
echo $1 exist 
fi 
형식2: 
if test -f $1 
then 
echo $1 exist 
else 
echo $1 does not exist 
fi 

형식3: 
if (( score < 65 ) 
then grade=F 
elif (( score < 80 ) 
then grade=C 
elif (( score < 90 ) 
then grade=B 
else grade=A 
fi 
Examples: 
if print \'Please enter your name: \\c\' ; read -r name 
then if mail \"$name\" < mailfile 
then : 
else print \"Cannot mail to $name\" 
fi 
else print \'end-of file\'
exit 1 
fi 
2) case 
case word in 
[ ( ) pattern [ | pattern.... ] ... ] compound-list ;; ] 
. . . . 
esac 
word와 매치되는 pattern을 찾아서 해당되는 compound-list를 실행한다. 
Examples: 
$ cat case1 
case $x in 
-d*) dflag=1;; 
-e*) eflag=1;; 
\"\") print -r -u2 - \"x must have a value\";; 
*) if test ! -r \"$x\" 
then print -r - \"$x: no read permission\" 
fi ;; 
esac 
$ cat case2 
read -r line 
case $line in 
[$1]*) : ;; # ok 
*) print \'Line must begin with one of: $1\" 
exit 1;; 
esac 



14. 반복 
1) for 문 
for identifier [ in word .... ] 
do compound-list 
done 
word의 개수만큼 do와 done사이의 명령어들을 반복적으로 실행한다 
Examples: 
$ cat for1 
for i in apple banana mango 
do 
echo \"$i\\t\" 
done 

$ for1 
apple banana mango 

$ cat for2 
for i in * ## 현재 디렉토리의 모든 파일 
do 
if test -d \"$i\" 
then print -r - \"$i\" 
fi 
done 
다음 예제는 트럼프 놀이를 쉘 스크립트로 작성한 것이다. 한번 키를 칠 때 
마다 카드 번호를 한 장씩 출력해준다. 총 7장의 카드를 출력해준다. 
$ cat for3 
integer i=0 ; typeset -u card 
echo \"Gamer I : 이름을 입력하시오: \\c\" 
read gamer01 
echo \"Gamer II : 이름을 입력하시오: \\c\" 
read gamer02 
echo \"카드를 섞고 있습니다\" 
for suit in clubs diamonds hearts spades 
do 
for n in ace 2 3 4 5 6 7 8 9 10 jack queen king 
do 
card[i]=\"$n of $suit\" 
i=i+1 
done 
done 
echo \"게임을 시작하겠습니다\" 
for gamer in $gamer01 $gamer02 
do 
echo \"$gamer: \\c\" 
i=0 
while [ $i -le 7 ] 
do 
read 
echo \" ${card[RANDOM%52]} \\t\" 
i=i+1 
done 
echo 
done 

2) select문 
select identifier [ in word .... ] 
do compound-list 
done 
나열하는 word를 화면에 메뉴 형태로 표준 출력 화면으로 출력해 주고, 표준 입력으
로부터 무한 반복으로 값을 입력 받는다. 값을 입력 받기위해 프롬프트를 출력해 주
는데 디폴트 프롬프트는 \'?\' 이다. 프롬프트는 환경변수 PS3에서 지정할 수 있다. 
Examples: 
$ cat select1 
PS3=\'Please enter a number: \' 
select i in add delete modify list exit 
do 
case $i in 
add|modify) 
print Select editing file 
break;; 
delete) 
print Select removing job;; 
list) 
print Select display job;; 
exit) 
print Select exit job 
print Good-bye 
exit ;; 
*) print \'Invalid number\';; 
esac 
done 
$ select1 
1) add 
2) delete 
3) modify 
4) list 
5) exit 
Please enter a number:_ 



3) while문 
while test문 또는 명령어 실행 
do compound-list 
done 
while 반복문은 test문 또는 명령의 실행결과가 참(true)인 동안 루틴을 반복적으로 
수행한다. 
Examples: 
$ cat while1 
while read -r line 
do 
print -r - \"$line\" 
done 

$ cat while2 
while [ $line -le $maxline ] 
do 
echo >> $BUFFER 
lines=`expr $lines + 1` 
done 
$ cat while3 
while true 
do 
read name 
if [ ${name}x = x ] 
then 
break 
fi 
done 
4) until 문 
until test문 또는 명령어 실행 
do compound-list 
done 
test문 또는 명령 실행결과가 거짓(false)인 경우 루틴을 반복 수행한다. 
Examples: 
$ cat until1 
until cc -c foo.c 
do vi foo.c 
done 
$ cat until2 
until who | grep klog >/dev/null 
do 
echo waiting 5 seconds 
sleep 5 
done 
echo klog has logged on 
$ cat until3 
until false 
do 
read name 
if [ ${name}x = x ] 
then 
break 
fi 
done 

15. 흐름 제어 
1) break [ n ] 
이 명령의 실행은 가장 안쪽 n개의 for, while, until 루프의 실행이 즉시 종료시키
고 빠져 나오며 루프다음의 명령을 계속 실행한다. 
Examples: 

$ cat break1 
for i in * 
do
for j in foo bar bam 
do 
if test \"$j\" = \"$i\" 
then 
break 2 
fi 
done 
done 


2) continue [ n ] 
for, while, until 루프안에서의 이명령의 실행은 continue 다음에 오는 임의의 명
령들이 skip 되도록 한다. 
Examples: 
$ cat continue1 
for i in * 
do 
if test -d \"$i\" 
then continue 
fi 
print -r - \"$i is not a directory\" 
done 



16. 쉘 프로그래밍 응용 
1) vi with backup the file 
vi 편집기를 호출하여 파일을 편집하여 저장하기전 이전의 파일을 filename.bak 파
일에 저장하도록 하는 쉘 스크립트를 작성한다. 
$ cat vvi 
#!/usr/bin/ksh 

if [ $# -le 0 ] 
then 
vi 
exit 
fi 
cp $1 ${1}.tmp 
vi $1 
if cmp -s $1 ${1}.tmp 
then 
rm ${1}.tmp 
else 
cp ${1}.tmp ${1}.bak 
rm ${1}.tmp 
fi 

2) newcat 
출력용 필터인 newcat 을 생성한다. 내용의 각 라인에 라인번호를 붙여서 23개 라인
씩 출력한다. 
$ cat newcat 
#!/usr/bin/ksh 
if [ $# -lt 1 ] 
then 
echo \"Usage Error: newcat filenames... \" ; exit 
fi 
for filename in $* 
do 
integer count=1 
integer page=1 
exec < $filename 
echo \"Filename : $filename\\t\\tPage: $page \" 
while read line 
do 
if [ $count -eq 22 ] 
then 
echo \"--More-- \" 
read 
echo \"\\f\" 
page=page+1 
echo \"Filename : $filename\\t\\tPage: $page \" 
fi 
echo \"$count\\t$line\" 
count=count+1 
done 
done 
3) exec_check 실행 점검 스크립트 
program_01 이라는 프로그램을 실행하는 스크립트를 작성한다. 이미 이 프로그램이 
실행중이라면 30초간 대기하면서 이미 실행중인 프로그램의 실행종료를 대기한다. 
대기중 실행종료가 확인되면 프로그램을 실행시킨다. 30초가 초과되면 타임아웃으로 
인식하고 메시지를 출력하고 스크립트를 종료한다. 
$ cat exec_check 
#!/usr/bin/ksh 

trap \"echo off > ex_check_file; echo \"인터럽트 수신/종료\"; exit 200\" 2 
if [ $# -ne 1 ] 
then 
echo \"실행할 프로그램명이 입력되지 않았습니다\" 
echo \"USAGE: exec_check program-name\" 
exit 
fi 
if [ ! -f ex_check_file ] 
then 
echo off > ex_check_file 
fi 
integer count=0 
while read e_flag < ex_check_file; [ e_flag = \'on\' ] 
do 
echo \"$1 프로그램이 실행중입니다. 프로그램 종료 대기중...\" 
sleep 5 
count=count+1 
if [ $count -eq 6 ] 
then 
echo \"TIME OUT....\" 
echo \"$1 프로그램이 아직 실행중입니다\" 
echo \"잠시후 다시 실행하여 주십시오\" 
echo \"스크립트를 종료합니다\" 
exit 
fi 
done 
echo on > ex_check_file 
$1 
echo off > ex_check_file 
echo \"$1 프로그램 실행을 정상 종료합니다\" 


4) 웹으로 finger을 실행하게 하는 CGI 프로그램 
#!/bin/sh !/usr/bin/ksh 
FINGER=/usr/bin/finger 
echo Content-type: text/html 
echo 
if [ -x $FINGER ] 
then 
if [ $# -eq 0 ] 
then 
cat << EOM 



Finger Gateway



This is a gateway to \"finger\". Type a user@host combination in your 
browser\'s search dialog.


EOM 
else 
echo \\

 
$FINGER \"$*\"
echo \\


fi 
else 
echo Cannot find finger on this system. 
fi 
cat << EOM 

EOM

'Coding' 카테고리의 다른 글

색을 랜덤하게 뽑아서 출력합니다.  (0) 2017.01.07
php predefined variables  (0) 2017.01.06
주민번호 생성원리  (0) 2017.01.06
CGI Setting  (0) 2017.01.06
Vi(m) 사용시 ^M 없애기  (0) 2017.01.06

1. 이 파일의 기능은?
일종의 메일계정을 다른 메일주소나 다른 계정으로 매칭하는 기능을 합니다.
이런 면에서 /etc/mail/virtusertable 과 거의 비슷하지만 약간 성격이 다릅니다.
/etc/mail/virtusertable은 가상 도메인이 많이 있을 경우에 일반적으로 사용하는 방법입니다.

2. 작성할 형식은?
<계정 또는 가상유저>: <포워딩할 계정또는 가상유저 또는 다른 메일주소 리스트>

계정 :
/etc/passwd 파일에 등록된 유저를 말합니다. 즉 시스템 유저와 일반 유저를 포함한
계정입니다.

가상유저 :
/etc/passwd 파일에 존재하지 않은 유저로 시스템 관리자가 정하는 유저를 말합니다.

포워딩할 계정 :
/etc/passwd 파일에 존재하는 시스템 유저가 아닌 일반 유저의 계정

다른 메일주소 :
localhost에 등록되어 있지 않은 다른 메일서버(기계)의 메일주소


3. 리스트 작성은?
컴마(,)로 구분하여 계정또는 메일주소를 나열

4. love: love,hanym6@hanmail.net의 의미는 ?
localhost의 love의 계정으로 오는 메일은 localhost 계정인 love과
hanym@hanmail.net의 메일주소로 가게됩니다.
따라서 양쪽에 똑같은 메일이 존재하게 됩니다.

5. 가상유저 생성은?
예를 들어, /etc/passwd 파일에 aaa, bbb, ccc 라는 계정이 없고, love 라는 계정은
존재한다면,

aaa: love
bbb: love
ccc: love

으로 설정하여 aaa@localhost, bbb@localhost, 모두 love 계정으로 3개의 메일이
가게됩니다.

따라서 event, help, admin 등과 같은 계정은 가상유저로 설정하는게 좋겠죠..

6. 센드메일을 재시작해야 하나요?
센드메일을 재시작할 필요는 없습니다.

# newaliases 명령을 내려주면 됩니다.

7. root로 오는 메일은?

root: admin

으로 설정하면 root로 오는 메일을 admin이라는 유저가 받을 수 있습니다.

자료출처 : 리눅스채널'

'Server' 카테고리의 다른 글

DISK Quota 설정하기  (0) 2017.01.06
httpd.conf  (0) 2017.01.06
FTP Command  (0) 2017.01.06
sendmail.cf  (0) 2017.01.06
네임서버 구축  (0) 2017.01.06

.

- ftp 명령어

ascii : 전송모드를 ASCII모드로 설정한다.(ascii또는 as) 

binary : 전송모드를 BINARY모드로 설정한다.( binary또는 bi) 

bell : 명령어 완료시에 벨소리를 나게한다.(bell) 

bye : ftp접속을 종료하고 빠져나간다.(bye) 

cd : remote시스템의 디렉토리를 변경한다.(cd 디렉토리명) 

cdup : remote시스템에서 한단계 상위디렉토리로 이동한다.(cdup) 

chmod : remote시스템의 파일퍼미션을 변경한다.(chmod 755 index.html) 

close : ftp접속을 종료한다. (close) 

delete : remote시스템의 파일을 삭제한다.(delete index.old) 

dir : remote시스템의 디렉토리 내용을 디스플레이한다.(dir) 

disconnect : ftp접속을 종료한다.(disconnect) 

exit : ftp접속을 종료하고 빠져나간다.(exit) 

get : 지정된 파일하나를 가져온다.(get index.html) 

hash : 파일전송 도중에 "#"표시를 하여 전송중임을 나타낸다.(hash) 

help : ftp명령어 도움말을 볼 수 있다.(help또는 help 명령어) 

lcd : local시스템의 디렉토리를 변경한다.(lcd 디렉토리명) 

ls : remote시스템의 디렉토리 내용을 디스플레이한다. (ls 또는 ls -l) 

mdelete : 여러개의 파일을 한꺼번에 지울 때 사용한다.( mdelete *.old) 

mget : 여러개의 파일을 한꺼번에 가져오려할 때 사용한다. ( mget *.gz) 

mput : 한꺼번에 여러개의 파일을 remote시스템에 올린다.(mput *.html) 

open : ftp접속을 시도한다.(open 168.126.72.51또는 open ftp.kornet.net) 

prompt : 파일전송시에 확인과정을 거친다. on/off 토글 (prompt) 

put : 하나의 파일을 remote시스템에 올린다.(put index.html) 

pwd : remote시스템의 현재 작업디렉토리를 표시한다.(pwd) 

quit : ftp접속을 종료하고 빠져나간다.(quit) 

rstatus : remote시스템의 상황(version, 어디서, 접속ID등)을 표시한다.(rstatus) 

rename : remote시스템의 파일명을 바꾼다.(remote 현재파일명 바꿀파일명) 

rmdir : remote시스템의 디렉토리을 삭제한다.(rmdir 디렉토리명) 

size :remote시스템에 있는 파일의 크기를 byte단위로 표시한다.(size index.html) 

status : 현재 연결된 ftp세션모드에 대한 설정을 보여준다.(status) 

type : 전송모드를 설정한다.(type 또는 type ascii 또는 type binary) 

'Server' 카테고리의 다른 글

httpd.conf  (0) 2017.01.06
/etc/alias 사용법  (0) 2017.01.06
sendmail.cf  (0) 2017.01.06
네임서버 구축  (0) 2017.01.06
samba 설정으로 윈도우에서 리눅스 접근하기  (0) 2017.01.06

echo "test test test test" | mutt -x -a aaa.txt -s "test4" "leopit@naver.com"

'Tip' 카테고리의 다른 글

host 커맨드를 이용해 특정 도메인의 메일서버 알아내기  (0) 2017.01.06
Linux cpu, mem 등 확인하기  (0) 2017.01.06
TCP 연결수 확인 스크립트  (0) 2017.01.06
nslookup  (0) 2017.01.06
증분백업/복구  (0) 2016.12.31

power off
power on ctrl + break 여러번
>o/r 0x2142
>i
sh version

Would you like to enter the initial configuration dialog? [yes]: no

Router> en
Router#

conf t
enable secret cisco
config-register 0x2102
end
write
reload

sh flash (4096K bytes)
----------------------------------------------------------------------

*test2*

#router config#
en
conf t
hostname r1
int s0 
ip address 10.1.1.1 255.255.255.0
no shut
clock rate 64000
enc ppp
end
sh run
sh ip int brief
ping 10.1.1.2


#ethernet config#
conf t
int e0
ip address 192.168.1.1 255.255.255.0
no shut
end
sh ip int brief
#pc config#
ipconfig ip/ip 192.168.1.2 255.255.255.0
ipconfig dg 192.168.1.1

#network add#
conf t
router rip
network 10.0.0.0 <-- 자신이 서비스 하는 네트웍
network 192.168.1.0 <-- 상동 
end

----------------------------------------
telnet.console 접속및 비밀번호 설정 과 접속 해제실습
conf t
line con 0
login
password cisco
line vty 0 4
login password sist
exit
1.enable password cisco
2.enable secret router
sh run
telnet
x
sh sess
sh user
resum 1e

disconnect
세션은 끊는다(자신이 연결한것을 자신이 끊는다)
clear line 11
세션을 끊는다(상대방이 접속한 세션을 강제로 끊는다)

*부팅 플러쉬내용을 램으로 불러온다
bootstrap rom(sub ios)
ios flash
설정 파일 nvram 
ram 

0x2142 :nvram설정파일을 무시하고 부팅하라
네크웍이 연결된곳에서 ios가져온다
롬모드
0x0 수동으로 부팅
0x1 자동으로 부팅 
0x2 to 0xF 정상적으로 플래쉬에서 부팅
command configer-regeister 0x2102
ctol+z =end
reload =reboot

ram <-------->pc ip로 통신한다
라우터와 랜카드 L3 L3 cross cable
라우터와 연결된 스위치(etrhnet interface)와 랜카드 L2-L3 direct cable
랜카드가 2개인경우 남는 이더넷카드와 라우터와 연결
ㄱ.2번째랜카드에 ip.gateway설정
ㄴ.ping 확인
ㄷ.tftp server 활성
ㄹ.copy run tftp
ㅁ.tftp>cisco system>cisco tftp server>file 저장확인

*버전 다른 라우터
라우터 ㅡㅡ네트웍서버ㅡㅡ라우터
access,space,filename contconvention
=>sh flash 로 파일명 확인
copy flash tftp
copy fftp flash(filename 주의)
----------------------------------------------------------------------
*스위치 중요한 3가지 기능
1 address learning(mac)
2 forward/filter decision
3 loop avoidance 
unicast / broadcast
동일 프레임이 쌓이므로(broadcast storm)
맥테이블이 불안

stp :포트를 블락 시킴으로서 루프를 없앨수 있다

*스위치설정*

r1 192.168.1.1
r2 192.168.1.2
sw 192.168.1.6
송pc 192.168.1.5
second lan192.168.1.4
스위치에 아이피 부여
텔넷설정
라우터에서 텔넷접근
conf t
int vlan 1
ip address 192.168.1.6 255.255.255.0
no shut
exit
enable pasword cisco
line vty 0 4
login
password cisco
end
telnet 192.168.1.5//라우터에서 스위치로 테스트

*스위치 명령어
interface vlan 1
ip address
duplx auto full 전화 half 무전
sh mac address
sh port-security
*erase startip-config*
show version
reload

*Spanning Tree Protocol
역할:루프 해결
동작방법:한포트를 블락
어떤 포트를 블락 할 것인가..
stp
rstp
*stp 포트 결정
네트웍당 루트 브릿지는 하나 (패킷을 받는다)이며 각포트들은 designated port
루트포트 :루트 브릿지로 가는 최적경로 norootbrige 는 하나의 루트 포트만 있다
dp;세그먼트당 지정이 포트는 하나

루트브릿지 결정
*브릿지 아이디(브릿지 piority+mac address)를 보고 결정
BPDU 
root bridge =brige with the lowest brigde id

*
새로운루트스위치 추가시 연결되는 norootbridge의 root port를 막는 후에 루트스위치를 설정


BPDU 루프가 어디서 돌고 있는지 알아낼수 있다
root id = b id 자신이 바로 루트인경우
root id x b id 자신이 루트가 아닌경우

세션을 연결하기 위해 확인 :헬로우 타임bpdu 2초
----------------------------------
sw1실습
1홀수:192.168.1.0/24
짝수 :192.168.2.0/24

2홀수:vlan3
짝수 :valn4

3domail:sist
4server:s1(s2.s3 client mode)
--------------------------------
router 활성

##si setting##
vlan database
vtp domain sist
vtp server
vlan 3 name vlan3
vlan 4 name vlan4
end
sh vtp status//확인명령
sh vlan //확인명령

client(s2.s3)
vlan database
vtp domain sist
vtp client

*trunk port 설정
conf t
int f0/11 
switchport trunk enc 
switchport mode trunk

sh spanning-tree
sh vlan


*vlan setting*
int f0/1
switchport mode access
switchport access vlan 3

sh span
sh run

'Network' 카테고리의 다른 글

netstat 상태 설명  (0) 2017.01.06
각 포트별 TCP/UDP 서비스  (0) 2017.01.06
PCAP 파일에서 UNIX 도구를 이용한 IP 주소 요약  (0) 2017.01.06
SLB 구성 - DSR vs Inline  (0) 2017.01.05
tcpdump  (0) 2017.01.04

HOW-TO Configuration sendmail.cf

SMTP(Simple Mail Transport Protocol)는 TCP/IP 메일 전송 프로토콜입니다. Linux 에서는 기본적으로 sendmail프로그램을
통해 SMTP를 완벽하게 지원합니다. 간혹 sendmail데몬과 pop3데몬의 역할에 대해 잘못 알고 계시는 분이 계신데 sendmail
은 메일의 발신, 수신, 중계의 역할을 합니다. 즉 sendmail데몬은 메일을 보내고 받고 하는 역할을 합니다.
pop3데몬은 sendmail이 수신한 사용자의 메일을 사용자의 메일 클라이언트에서 받아 볼 수 있는 역할을 합니다.

0. 들어가기 전에
sendmail.cf 파일을 다루는 능력이 안된다고 해서 sendmail을 사용할 수 없는건 아닙니다. sendmail을 설치하면 기본적으로 설정되어 있는 sendmail.cf파일만으로도 충분히 아니 만족스러울 정도로 sendmail을 가동할 수 있습니다.
이번 강좌에서 다루는 sendmail.cf 설정들의 설명은 쉽고 자주 이용되는 설정에 대해서만 다룰려고 합니다. 하지만 이번 강좌에서 다루는 내용만으로도 sendmail을 사용하는데 아무런 지장이 없을 것입니다. 센드메일 관련 질문들을 봐도 이 범위에 벗어난 질문은 없는 것 같군요. 사실 더 이상 자세히 다룰 실력도 안되고, 워낙 sendmail의 기능이 많아서...
(800페이지 분량의 sendmail만을 다룬 책도 있습니다)
사실 sendmail.cf 파일에 대해서 공부하는것이 무척 부담스러울 것이다. 부담 되시는 분이나 처음부터 이해가 되지 않아 이 페이지를 닫으실 분들은 \"1.3 Options 섹션\" 부분만이라도 한번 읽어 보길 바란다.

1. sendmail.cf(sendmail 환경설정)
1.1-1 sendmail.cf의 규칙
-->>sendmail.cf의 각 행들은 다음과 같은 규칙이 적용됩니다.
1) 빈행은 무시한다.
2) #로 시작하는 행은 주석행이다.
3) C, D, F, H, K, M, O, P, R, S, V로 시작하는 행은 설정행이다.
4) 하나이상의 빈 공간으로 시작하는 행은 앞 행의 연장이다.

sendmail.cf 파일은 7개의 색션으로 나누어져 있는 아주 복잡한 파일이다.
아마 초보 분들은 sendmail.cf파일을 열고 그 내용의 방대함에 놀라 그냥 파일을 닫는 분도 있을 겁니다. 저도 첨에sendmail.cf 파일을 열어봤을 땐 짜증이 확 밀려 왔으니까.....
우선 간략하게 7개의 섹션들에 대해서 잠깐 살펴보고 넘어 갑니다.. 아주 간략하게.. 지금부터 바짝 긴장 하시길.. ^^;

Local Info
--->> 0이 섹션은 해당 로컬 호스트의 구성 정보를 정의합니다.
Options
--->> sendmail 환경을 정의하는 옵션을 정의 한다.
Message Precedence 
--->> sendmail 메시지 순서 값을 정의 합니다.
Trusted Users 
--->> 발신인의 주소를 변경할 권한을 갖는 사용자를 정의합니다.
Format of Headers 
--->> 메일에 삽입도는 메일 헤더를 정의합니다.
Rewriting Rules
--->> 사용자의 메일 프로그램에 있는 e-mail 주소를 메일 배달 프로그램에 필요한 폼으로 다시 작성하는 명령이 들어 있습니다.
Mailer Definitions
--->> 메일을 배달하는데 사용되는 프로그램을 정의합니다. Mailer가 사용하는 재작성 규칙도 이 섹션에 정의되어
있습니다.

1.1-2 sendmai.cf에서 사용되는 명령
C : 클래스 정의(문자열)
D : 메크로 정의
E : 환경변수 지정
F : 클래스 정의(file, pipe)
H : Herder 정의
K : Key file 정의(map 정의)
M : mailer 정의
O : 옵션
P : Message precedences
R : 덮어쓰기
S : Ruleset(새로운 규칙 시작)
T : Truseted users(사용자 지정)
V : 설정파일 버젼

1.2 local info 섹션
Cwlocalhost
localhost를 w클래스로 정의 한겁니다.
다음에 나오는 Fw와의 차이점은 C는 문자열을 정의하고 F는 파일을 정의합니다.

Fw/etc/mail/local-host-names
Cwlocalhost와 같이 w클래스를 정의하는데 문자열 대신 파일을 정의합니다.
즉 /etc/mail/local-host-names에 추가할 내용을 Cwlocalhost aaa.com bbb.com 으로 설정해도 같은 효과가 납니다..

FR-o /etc/mail/relay-domains
Relay를 허용할 도메인을 설정합니다.
그러나 /etc/mail/access에서 Relay 제어를 할 수 있기 때문에 이 파일은 거의 쓰기 않는 파일입니다.

DnMAILER-DAEMON
sendmail이 return 메일을 보낼 때 사용하는 사용자 이름을 정의한다.
sendmail로부터 return 메일을 받아 본 사람들은 MAILER-DAEMON의 메일을 받아본 기억이 있을 겁니다.

Kmailertable hash -o /etc/mail/mailertable
Mailer 테이블을 작성하는 파일을 정의합니다.
K 명령은 모든 정보와 내부 이름, 데이터베이스의 유형, 이 데이터베이스를 가지고 있는 파일을 정의할 때 사용한다.
K명령은 \"mailertable\"라는 이름의 데이터 베이스를 선언하는데 이 데이터 베이스는 표준 Unix 데이터베이스 포맷인 hash 포맷으로 되었있다는 것을 정의한다.

Kvirtuser hash -o /etc/mail/virtusertable
가상 유저 테이블을 정의하고 있다.

Kaccess hash -o /etc/mail/access
메일 수신자 데이터 베이스 파일을 정의하고 있다.

1.3 Options 섹션
아마 서버 관리자의 취향에 따라 가장 많이 수정되어 지는 부분이 Options 섹션의 설정들이 아닌가 생각된다.
모든 옵션에 대해서 설명을 하지 않았지만 특별한 경우가 아니면 이 밖의 설정들을 건드릴 일은 없을 것이라고 생각된다.
O SevenBitInput=False
7비트로 받아 들이지 않게 설정하고 있다.

O EightBitMode=pass8
8비트 데이트로 처리하게 설정하고 있다.

O AliasFile=/etc/aliases
aliases파일의 위치를 정의하고 있다.

O MaxMessageSize=1000000
메일의 최대 용량을 제한하는 옵션이다. 기본적으로 주석처리 되어 있어 무제한으로 설정되어 있다.
메일 박스 용량과는 무관한 설정이다.

O DeliveryMode=background
센드메일을 백그라운드로 작동하게 설정하고 있다.

O MaxHopCount=17
최대 메일 포워딩 수를 정의하고 있다.
큐잉 서버를 만들 때 사용되는 것으로 기본적으로 주석 처리 되어 있다.

O HelpFile=/usr/lib/sendmail.hf
help파일의 위치를 정의하고 있다.

O ForwardPath=$z/.forward.$w:$z/.forward
.forward 파일의 위치를 정의하고 있다.
$w는 호스트 이름을 가리키는 매크로 값이고 $z는 사용자 홈 디렉토리를 가리킨다.

O QueueDirectory=/var/spool/mqeue
센드메일의 큐 디렉토리의 위치를 지정한다.
큐 디렉토리는 메일 발송 실패 또는 대기 하고 있는 메일들이 임시로 저장되는 곳이다.

O Timeout.connect=1m
타임 아웃을 1분으로 설정하고 있다.

O Timeout.queuereturn=5d
Return메일이 발송될 시간을 설정하고 있다.
특정 이유로 메일이 5일동안 발송되지 않으면 메일을 보낸 사람에게 반송된다.

O Timeout.queuewarn=4h
메일이 최종 발신지까지 4시간동안 발송되지 않으면 메일을 보낸 사람에게 경고 메일을 보낸다.
sendmail.cf 파일에는 위 3가지 Timeout 설정외에 많은 Timeout 설정들이 있다.

O StatusFile=/var/log/sendmail.st
센드메일의 status 파일의 위치를 지정한다.

O DefaultUser=8:12
Mailer 의 UID와 GID를 설정한다. (UID : 8 , GID : 12)

O MinQueueAge=30m
메일을 바로 발송하지 않고 최소한 30분동안 큐잉 상태로 대기 시킨다. 기본적으로 주석 처리 되어 있다

O

1.4 Mesage Procedure 섹션
메 시지 대기열에 들어가는 메시지의 우선 순위를 할당할 때 사용한다. 디폴트로 메일은 \"1종 우편물\"로 간주되어 0이라는 우선 순위가 할당된다. 우선 순위를 나타내는 수가 음수일 경우 메일로 보낼 에러 메시지가 만들어지지 않기 때문에 대량 메일링에는 낮은 우선 순위를가 유리하다. 아래의 우선 순위 설정들은 수정하지 말고 기본값으로 사용하길 바란다.
Pfirst-class=0
Pspecial-delivery=100
Plist=-30
Pbulk=-60
Pjunk=-100

1.5 Trusted Users 섹션
Trust 된 사용자는 메일을 보낼 때 발신의의 주소를 변경할 수 있다. 단 trust된 사용자는 /etc/passwd 파일에 존재하는 사용자이어야 된다. 기본적으로 root, daemon, uucp가 설정되어 있다. 보안상 아래의 값을 변경하는 일은 없기 바란다.
Troot
Tdaemon
Tuucp

1.6 Format of Headers 섹션
메일 헤더를 정의하는 부분이다.
H?P?Return-Path: <$g>
HReceived: $?sfrom $s $.$?_($?s$|from $.$_)
$.$?{auth_type}(authenticated$?{auth_ssf} (${auth_ssf} bits)$.)
$.by $j ($v/$Z)$?r with $r$. id $i$?{tls_version}
(using ${tls_version} with cipher ${cipher} (${cipher_bits} bits) verified ${verify})$.$?u
for $u; $|;
$.$b
H?D?Resent-Date: $a
H?D?Date: $a
H?F?Resent-From: $?x$x <$g>$|$g$.
H?F?From: $?x$x <$g>$|$g$.
H?x?Full-Name: $x
# HPosted-Date: $a
# H?l?Received-Date: $b
H?M?Resent-Message-Id: <$t.$i@$j>
H?M?Message-Id: <$t.$i@$j>
#^L 

1.7 Rewritng Rules 섹션
R$* $#error $@ 5.7.1 $: \"550 Relaying denied\"
이 설정은 localhost에서만 RELAY를 허용하라는 설정이다. 절대 주석 처리 되어 있으면 안된다.
만약 주석 처리 되어 있을 경우 스패머들의 놀리터가 될 수 있다.

Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
M=1000000, T=DNS/RFC822/X-Unix, A=procmail -Y -a $h -d $u 
위의 \"M=1000000\" 설정을 통해서 사용자가 사용할 수 있는 전체 메일 용량이 아니라 들어오는 메일 용량을 제한 할 수
있다. 기본적으로 설정이 되어 있지 않다. (단위: bytes)

// 윤 일(admin@rootman.org)

'Server' 카테고리의 다른 글

/etc/alias 사용법  (0) 2017.01.06
FTP Command  (0) 2017.01.06
네임서버 구축  (0) 2017.01.06
samba 설정으로 윈도우에서 리눅스 접근하기  (0) 2017.01.06
/etc/passwd /etc/shadow 합치기/나누기  (0) 2017.01.06

+ Recent posts