예제 http://blog.naver.com/delusion1224/50175392681 

[출처] Makefile 예제|작성자 착각쟁이

 

makefile 예제

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

CC = gcc

CFLAGS = -D_DEBUG

TARGET = test

SRCS = $(wildcard *.c)

OBJECTS = $(SRCS:.c=.o)

 

.SUFFIXES : .o .c

%.o : %.c

$(CC) $(CFLAGS) -c -o $@ $<

 

all : $(TARGET)

 

$(TARGET) : $(OBJECTS)

$(CC)  $(CFLAGS) -o $@ $^

 

clean :

rm -rf *.o $(TARGET)

 

4~5 line은 다음과 같이 한 줄로 축약될 수도 있다

OBJECTS = $(patsubst %c, %o, $(wildcard *.c))

 

7~9 line은 현재 Makefile에 정의된 CC와 CFLAGS를 사용하기 위해 추가된 내용이다.

해당 내용이 없더라도 각 object들은 자동으로 compile이 되지만, make 내부에 정의된 매크로가 사용된다.

 

make 내부에 정의된 매크로에 대한 자세한 내용은 make -p를 해보면 알 수 있다.

다음은 make -p의 일부분

...

#기본값

COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c 

...

%.o: %.c
#  실행할 명령어 (내장):
 $(COMPILE.c) $(OUTPUT_OPTION) $<

...

 

추가로, Makefile 작성 시 주의해야 할 점은,

각 명령어들은 다른 shell에서 실행된다.

즉, 다음과 같이 Makefile을 작성하면,

 ...

del :

cd ./backup

rm -rf *

두 명령이 각자 다른 shell에서 실행되기 때문에 현재 folder의 모든 내용이 삭제가 된다.

올바른 방법은 다음과 같이 한 line에 적는것이다.

cd ./backup && rm -rf *

&& 대신 ;를 사용해도 되지만 backup folder가 없을 경우에는 역시 현재 folder의 내용들이 삭제 되므로 좋지 않다.

[출처] Makefile 예제|작성자 착각쟁이

 

 

리눅스 터미널에서 소스코드를 편집하려면 vi 혹은 emacs 에디터를 사용해야 한다. 이에 익숙치 않은 사람이라면 이클립스를 이용하여 원격에 있는 소스 코드를 편집할 수 있다.
다음의 안내에 따라, 이클립스를 설치 및 설정한 후 사용해보도록 한다.

주의 사항
리눅스 계정이 활성화 되어 있지 않으면, 마지막에 접속이 되지 않으므로, 먼저 계정을 활성화 시킨다.

CDE 환경을 지원하는 이클립스를 다운로드 받는다. 이클립스는 www.eclipse.org에서 다운로드 받을 수 있다.


이클립스를 실행한다.


위 그림과 같이 우측 상단의 워크스페이스 추가 버튼을 누른 후 "Remote System Explorer"를 선택한다.


리모트 시스템 탐색기(Remote System Explorer)를 선택하면 이클립스의 화면이 아래와 같이 바뀐다.


메뉴>File>New>Other 를 선택한다. 아래와 같이 마법사가 나타나면, Remote System Explorer 밑에 있는 Connection을 선택한다.


다음 대화 상자에서 SSH Only 를 선택하고 다음(Next)으로 이동한다.


Host namelinux.cs.kookmin.ac.kr을 입력하고 저장(Finish)한다.


화면에 아래와 같이 나타나면, Ssh Shells을 선택하고 아래쪽의 Port에서 포트 번호를 22에서 2222로 수정한다.


여기가지 따라하면, 이제 이클립스를 이용해서 서버에 접속할 준비는 모두 끝이 났다. 이클립스의 에디터 설정을 변경해주어야 한다.
메뉴>Window>Preferences  를 선택하여 다음의 대화상자를 연다.
우선 대화상자의 왼쪽 트리에서  General>Workspace 를 선택하고 텍스트 파일 인코딩을 UTF-8로 바꾸고, 라인 구분자를 Unix 타입으로 수정한다.
LMC 소스코드의 한글을 올바르게 보고, linux 서버에서 컴파일 하기위해서는 꼭 설정해야 한다.


그리고 나서 왼쪽 트리에서 C/C++ > Code Style 을 선택하여 코드 스타일 프로필을 GNU 스타일로 변경한다. 


대화상자의 확인 버튼을 눌러 설정을 저장한 후, 서버에 접속을 한다. 접속 방법은 아래 그림과 같이 Sftp Files>My Home을 열면 로그인 대화상자가 나타난다.
자신의 계정과 비밀번호를 입력하면 된다. 만약, ssh 관련한 경고나 대화창이 나타나면 Yes 혹은 OK 버튼을 누른다.



 

vim

scripte utf-8
"vim:set fenc=utf-8 tw=0:
"Vim setting for sirini

" Vim 전용 기능 사용
set nocp
" 옵션 복원
set all&

" 명령어 기록 갯수
set hi=100

" 백스페이스 사용
set bs=indent,eol,start
" 인코딩 설정
"let &tenc=&enc
"set enc=utf-8
set fenc=utf-8
set fencs=utf-8,cp949,cp932,euc-jp,shift-jis,big5,ucs-2le,latin1

" 커서 위치 항상 보이기
set ru

" 완성중인 명령을 표시
set sc

" 줄번호 표시
set nu

" 줄 번호 표시 너비 설정
set nuw=5

" 탭 크기 설정
set ts=4
set sw=4

" 탭 >> 공백 변환 사용안함
set noet
set sts=0

" 자동 줄바꿈 안함
set nowrap

" 마지막 편집 위치 복원 기능
"au BufReadPost *
"₩if line("'₩"")>0 && line("'₩"") <= line("$") |
"₩ exe "norm g'₩"" |
"₩endif

" magic 기능 사용
set magic

" 이동 동작시 줄의 시작으로 자동 이동
set sol

" 비쥬얼 모드 동작 설정
set sel=exclusive

" 괄호짝 찾기에서 <> 도 찾도록 추가
set mps+=<:>

" 새로 추가된 괄호 짝 보여주기
"set sm

" 검색어 강조
set hls

" 검색시 파일 끝에서 되돌리기 안함
set nows

" 검색시 대소문자 구별 안함
set ic

" 스마트한 대소문자 구별 기능 사용
set scs

" 항상 status 라인을 표시
set ls=2
" 커스텀 확장자들에게 파일 형식 설정
"au BufRead,BufNewFile *.dic setl ft=php

"파일 형식에 따른 신택스 하이라이팅 켜기
sy enable

'리눅스 서버에 대해서 > 리눅스 팁들' 카테고리의 다른 글

MakeFile 예제  (0) 2013.10.14
vi 대신 이클립스로 소스 수정하기  (0) 2013.09.20
vimrc 설정  (0) 2013.09.20
리눅스 iptables 사용법  (0) 2013.04.22
Linux System 정보 보기 (BIOS정보)  (0) 2013.04.19
크론탭  (0) 2013.02.28

리눅스 iptables 사용법:
iptables는 리눅스를 설치하면 보통 기본적으로 설치되므로 
설치방법은 따로 설명하지 않으며 예제 위주로 간단히 사용법을 알아 보겠습니다.
아래 명령어는 모두 root권한으로 실행해야 됨을 미리 알려 드립니다.


1. 리눅스에서 부팅시 자동으로 iptables 서비스 시작하기:
  아래 2가지 방법 중에 하나로 보통 서비스를 자동실행하도록 등록한다.

1) 쉘창에서 3, 5 모드에서 재부팅시 자동으로 iptables 서비스가 시작되도록 하는 명령어

# chkconfig --level 35 iptables on 
--> 3: multi console 모드 , 5: X윈도우즈 모드 


2) ntsysv 에서 iptalbes 서비스 체크

# ntsysv


2. 먼저 iptables 의 옵션은 아래와 같다.
iptables 에는 3가지 chain 이 존재: INPUT, OUTPUT, FORWARD


1) 필터링 사슬 전체 조작 옵션

-N : 새로운 사슬 만들기
-L : 사슬의 규칙을 보여주기
-X : 비어 있는 사슬을 없애기
-P : 사슬의 규칙을 바꾸기
-F : 사슬에 있는 모든규칙을 지우기


2) 사슬의 규칙을 조작하는 옵션

-A : 사슬에 새로운 규칙을 추가하기(맨아래에 추가됨)
-I : 사슬에 규칙을 삽입하기(맨앞쪽에 삽입됨)
-R : 사슬에 있는 규칙을 다른 규칙과 교환하기
-D : 사슬에 있는 규칙을 없애기


3) 규칙을 정의하는데 필요한 하위옵션

-s : 출발지 주소
-d : 목적지 주소
--sport : 출발지(source) 포트번호
--dport : 목적지 포트번호
-p : 프로토콜(tcp, udp, icmp ..)
-i : 패킷이 들어오는 네트워크 인터페이스(inbound interface)
-o : 패킷이 나가는
-f : 분절된(fragment) packet
-j : 규칙을 지정(jump)


3. 기본정책을 ACCEPT로 설정하는 법:

# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -P FORWARD ACCEPT


4. 현재 자신의 방화벽 규칙을 볼 수 있는 명령:

# iptables --list 또는 iptables -L
처음으로 명령을 실행하면 아래와 같이 아무 정책도 설정되어 있지 않는 것을 볼 수 있다.


# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        

Chain RH-Firewall-1-INPUT (0 references)


5. 규칙 추가 후에 저장하기 :

현재 규칙을 저장하는 명령어는 아래와 같다.
# /etc/rc.d/init.d/iptables save  
-> /etc/sysconfig/iptables 에 저장됨
(솔라리스의 경우 /etc/ipf/ipf.conf)

위 명령어로 저장후에 실제 저장된 파일을 확인해 보면 아래와 같이 아무 설정이 안된것을 알 수 있다.


# vi /etc/sysconfig/iptables
# Generated by iptables-save v1.3.5 on Thu Jun 25 18:25:02 2009
*filter
:INPUT ACCEPT [11:764]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [320:65885]
:RH-Firewall-1-INPUT - [0:0]
COMMIT
# Completed on Thu Jun 25 18:25:02 2009


이제 간단한 규칙을 추가해 보자. 
예를 들어 ip= 192.168.0.111 를 입력단에서 패킷을 drop하는 규칙을 추가하고 현재 정책을 확인한다.


# iptables -A INPUT -s 192.168.0.111 -j DROP
# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  192.168.0.111       anywhere           

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        

Chain RH-Firewall-1-INPUT (0 references)

이제 저장을 한 후에 저장된 파일을 확인해 보면 아래와 같이 규칙이 저장되어 있는것을 볼 수 있다.


# /etc/rc.d/init.d/iptables save 
# vi /etc/sysconfig/iptables
# Generated by iptables-save v1.3.5 on Mon Dec  7 14:55:45 2009
*filter
:INPUT ACCEPT [6561:820283]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5984:1470873]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -s 192.168.0.111 -j DROP  <--- 이부분이 새로 추가한 규칙
COMMIT
# Completed on Mon Dec  7 14:55:45 2009


6. 현재 iptables 규칙을 초기화 하기:

# iptables -F
위 명령어를 실행하고 정책을 보면 아래와 같이 초기화 되어 있는 것을 알 수 있다


# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        

Chain RH-Firewall-1-INPUT (0 references)


그러나 실제 저장되어 있는 내용을 보면 아래와 같이 초기화가 되어 있지 않는 것을 볼 수 있다.
# vi /etc/sysconfig/iptables
# Generated by iptables-save v1.3.5 on Mon Dec  7 14:55:45 2009
*filter
:INPUT ACCEPT [6561:820283]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5984:1470873]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -s 192.168.0.111 -j DROP  <--- 이부분이 새로 추가한 규칙
COMMIT
# Completed on Mon Dec  7 14:55:45 2009


즉, 초기화 명령어는 현재상태에만 적용되며, 
iptables 서비스가 재시작되거나 서버가 리부팅되면 /etc/sysconfig/iptables 에 저장되었던
규칙이 다시 적용된다는 것을 알 수 있다.


7. 정책을 빠르게 수정하여 적용하는 법 :


 6 에서와 같이 정책을 초기화 하고 서비스를 재시작해야 하는 방법은 상당히 비효율적인것을 알 수 있다.
따라서 현재 적용되는 정책을 특정파일(날짜별)로 저장해서 수정사항이 있다면
바로 그 저장된 파일을 수정한후 바로 정책에 적용하는 방법은 아래와 같다.


1) 현재 적용되고 있는 정책을 읽기 가능한 텍스트파일 형태로 저장하는 명령어는 아래와 같다.


# iptables-save > /root/iptable_091207.save

확인해 보면 똑같이 저장되어 있는것을 볼 수 있다. 
# cat  /root/iptable_091207.save
# Generated by iptables-save v1.3.5 on Mon Dec  7 14:55:45 2009
*filter
:INPUT ACCEPT [6561:820283]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5984:1470873]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -s 192.168.0.111 -j DROP  <--- 이부분이 새로 추가한 규칙
COMMIT
# Completed on Mon Dec  7 14:55:45 2009

2) 이제 저장되어 있는 iptables 파일을 바로 편집기로 수정 한후 저장한다.
# vi /root/iptable_091207.save
# Generated by iptables-save v1.3.5 on Mon Dec  7 14:55:45 2009
*filter
:INPUT ACCEPT [6561:820283]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5984:1470873]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -s 192.168.0.199 -j DROP  <--- 편집기에서 111 -> 199 로 변경
-A INPUT -s 222.222.222.222 -j DROP <--- 편집기에서 새로 정책 추가
COMMIT
# Completed on Mon Dec  7 14:55:45 2009

3) 저장된 정책을 바로 적용하는 명령어는 다음과 같다.
# cat /root/iptable_091207.save | iptables-restore

확인해 보면 편집기로 수정했던 부분이 아래와 같이 바로 iptables 정책이 적용되어 있는 것을 알 수 있다
# iptables -L
# Generated by iptables-save v1.3.5 on Mon Dec  7 14:55:45 2009
*filter
:INPUT ACCEPT [6561:820283]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5984:1470873]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -s 192.168.0.199 -j DROP  <--- 편집기에서 111 -> 199 로 변경했던 부분
-A INPUT -s 222.222.222.222 -j DROP <--- 편집기에서 새로 정책 추가했던 부분
COMMIT
# Completed on Mon Dec  7 14:55:45 2009

8. iptables 사용예 :
마지막으로 사용예를 몇개 알아보면 아래와 같다.

예1) 소스 ip가 192.168.0.111 인 접속의 모든 접속 포트를 막아라.

# iptables -A INPUT -s 192.168.0.111 -j DROP


예2) INPUT 사슬에 출발지 주소가 127.0.0.1(-s127.0.0.1) 인 icmp 프로토콜(-p icmp) 패킷을 거부(-j DROP)하는 정책을 추가(-A)하라
# iptables -A INPUT -p icmp -s 127.0.0.1 -j DROP


예3) INPUT 사슬에 목적지 포트가 23번(--dport23)인 tcp 프로토콜(-p tcp) 패킷을 거부하는(-j DROP)규칙을
추가(-A) 하라.
# iptables -A INPUT -p tcp --dport 23 -j DROP


예4) INPUT 사슬에 목적지 포트 번호가 80번(--dport 80)인 tcp 프로토콜(-p tcp)패킷을 받아들이는(-j ACCEPT) 규칙을 추가(-A) 하라
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT


예5) INPUT 사슬에 목적지 포트번호가 1023번 보다 작은 모든 포트(--dport :1023)인 tcp프로토콜(-p tcp)패킷을 거부하는(-j DROP)규칙을 추가(-A)하라
# iptables -A INPUT -p tcp --dport :1023 -j DROP


예6) ftp포트를 열어라
# iptables -I INPUT -p tcp --dport 21 -j ACCEPT


예7) imap 서비스를 방화벽에서 열어라
# iptables -I INPUT -s 192.168.0.0/255.255.255.0 -p udp --dport 143 -j ACCEPT


예8) 웹서버 방화벽 열어라
# iptables -I INPUT -p tcp --dport 80 -j ACCEPT


예9) 웹서버 포트 80 -> 8880으로 교체하라( 웹서비스 포트 변경시 /etc/services 에서도 변경 해줘야 함)
# iptables -R INPUT 2 -p tcp --dport 8880 -j ACCEPT


예10) domain-access_log 파일에 있는 모든 ip의 모든 접속 포트를 막아라(DOS공격 방어시 사용)
# cat domain-access_log |awk '{print $1}'|sort |uniq |awk '{print "iptables -A INPUT -s "$1" -j DROP"}'|/bin/bash 

                                                                                        by 블루웹 호스팅사업부 유희주

'리눅스 서버에 대해서 > 리눅스 팁들' 카테고리의 다른 글

vi 대신 이클립스로 소스 수정하기  (0) 2013.09.20
vimrc 설정  (0) 2013.09.20
리눅스 iptables 사용법  (0) 2013.04.22
Linux System 정보 보기 (BIOS정보)  (0) 2013.04.19
크론탭  (0) 2013.02.28
메모리 관리  (0) 2013.02.17

+ Recent posts