Programming/linux왕초보 2013.01.31 15:11

원문 : 

http://forum.falinux.com/zbxe/?_filter=search&mid=question&search_target=title&search_keyword=iptables&document_srl=533111



현재 1.4.9.1과 커널과 뭔지 모르지만 약간의 문제가 있는듯 합니다. 1.4.8버젼도 같은 증상이 나오네요.

일단 1.4.2버젼으로 해결하였습니다.

1. 먼저 커널을 다음과 같이 컴파일합니다.

[root@JiuHost linux]# make menuconfig

    Networking  --->

      Networking options  --->

         [*] Network packet filtering framework (Netfilter)  --->

             Core Netfilter Configuration  --->

                 <*> Netfilter connection tracking support 

           <*> Netfilter Xtables support (required for ip_tables)

             IP: Netfilter Configuration  --->

                 <*> IPv4 connection tracking support (required for NAT)

                 [*]   proc/sysctl compatibility with old connection tracking (NEW)

           <*> IP tables support (required for filtering/masq/NAT)

           <*>   Packet filtering

           <*>     REJECT target support

           <*>   Full NAT

           <*> MASQUERADE target support

 

2. iptables를 다음과 같이 컴파일합니다.

[root@JiuHost IPTU270]# wget http://ftp.netfilter.org/pub/iptables/iptables-1.4.2.tar.bz2

[root@JiuHost IPTU270]# tar -jxf iptables-1.4.2.tar.bz2 

[root@JiuHost IPTU270]# cd iptables-1.4.2

// 제 경우에는 크로스 컴파일러가 다음 경로에 설치되어 있어 경로설정을 했습니다.

// ./configure시에 크로스 컴파일러를 체크합니다. 반드시 그 이전에 패스를 등록해야 됩니다.

[root@JiuHost iptables-1.4.2]# export PATH=$PATH:/home/youster/Board/cross-compiler/arm-3.4.3/bin

[root@JiuHost iptables-1.4.2]# ./configure --enable-static --host=arm-linux --prefix=/usr/iptables

[root@JiuHost iptables-1.4.2]# make

[root@JiuHost iptables-1.4.2]# make install

// 설치될 경로를 --prefix=/usr/iptables로 하였습니다. 타켓보드에도 똑같은 폴더를 만들어서 그쪽으로 복사할 겁니다.

// 이 설치 경로가 틀리면 실행이 안됩니다.

[root@JiuHost iptables-1.4.2]# cd /usr/iptables/sbin

// 아무래도 스트립을 하는 것이 좋겠지요.

[root@JiuHost sbin]# arm-linux-strip iptables* 

[root@JiuHost sbin]# arm-linux-strip ip6tables*

[root@JiuHost sbin]# cd ..

// 필요없는 폴더를 지웁시다.

[root@JiuHost iptables]# rm -rf share

[root@JiuHost iptables]# rm -rf include

 

3. 이제 타겟보드의 램디스크 이미지에 /usr/iptables 폴더를 만들고

호스트에 있는 폴더를 그대로 복사해옵니다.

먼저 mnt에 마운트되어 있으면,

cd mnt/usr

cp -a /usr/iptables .

 

4. 저는 nat 를 하기 위해서 사용했습니다.

다음과 같이 사용하였는데 참고하실분 참고하세요.

- 발신지 NAT 설정

  패킷이 머신밖으로 나가기 직전(POSTROUTING chain)에 수행되며,

 내부네트워크 사설IP가 외부로 나가기전에 공인 IP로 변환되는 것을 의미한다.

 고정IP라면 SNAT를 이용하여 추가하지만 동적으로 IP주소를 할당받는 경우에는

 발신지 NAT의 특수한 케이스중 하나인 매스커레이딩을 사용한다.

# iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE

=> eth0를 wan으로 사용하고 eth1을 lan으로 사용한다.

- IP 패킷이 포워딩되도록 설정

# echo 1 > /proc/sys/net/ipv4/ip_forward

- 수신지 NAT설정

패킷이 머신안으로 들어온 직후(PREROUTING chain)에 수행되며 실제적으로 내부서버로 포트매핑을 수행한다.

나는 eth1에 물려 있는 192.168.129.10으로 7021번 포트를 포워딩했다.

먼저 모든 포트매핑을 지우자.

# iptables -F PREROUTING -t nat

매핑할 포트를 지정하자.

# iptables -A PREROUTING -t nat -p tcp --dport 7021 -i eth0 -j DNAT --to 192.168.129.10:7021

확인

# iptables -t nat -L

Chain PREROUTING (policy ACCEPT)

target     prot opt source               destination

DNAT       tcp  --  anywhere             anywhere            tcp dpt:7021 to:192.168.129.10:7021

Chain POSTROUTING (policy ACCEPT)

target     prot opt source               destination

MASQUERADE  all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination



======================================================

1~3까지 test했을 때 정상적으로 동작 확인.

posted by bluelimn
Programming/linux왕초보 2012.03.30 17:33

1. Alt+F2 : 실행창 띄운다

 

2. gconf-editor  실행

 

3. apps \ nautilus \ desktop 접근

 

 4. 휴지통 보이기 클릭

posted by bluelimn
TAG Linux, ubuntu
Programming/linux왕초보 2012.02.21 08:38

4. File advice (일반적인 파일입출력을 위한 advice)

posix_fadvise (커널 2.5.60부터 등장)

#include <fcntl.h>

int posix_fadvise(int fd, off_t offsert, off_t len, int advice);

advice 옵션 (POSIX_FADV_NOREUSE가 추가되며 나머지는 madvice와 같다; 커널이 하는 동작을 application에서 한다는 차이가 있다.)
 

POSIX_FADV_NOREUSE application이 당분간은 정해진 범위에 있는 자료에 단 한번만 접근하려고 한다.

advice 옵션 (2.6 커널에서의 동작)

POSIX_FADV_NORMAL 커널이 적절히 미리읽기를 수행(평상시와 동일)

POSIX_FADV_RANDOM 커널이 미리읽기를 비활성화, 매번 물리적 연산이 일어날 때마다 최소 자료만 읽음

POSIX_FADV_SEQUENTIAL 커널이 공격적인 미리읽기 수행, 미리읽기 범위 크기를 두배로 늘림

POSIX_FADV_WILLNEED 커널이 미리읽기 작업을 시작해서 페이지를 메모리로 읽음

POSIX_FADV_NOREUSE 현재는 POSIX_FADV_WILLNEED와 동일(향후 한번만 사용한다는 방식을 이용하여 추가적인 최적화를 추가할 가능성 있음)

POSIX_FADV_DONTNEED 커널이 페이지 캐시에서 해당 영역에 있는 자료를 비움(madvise()의 DONTNEED와 다르게 동작)
 

readahead(리눅스용 인터페이스)

posix_fadvise()의 POSIX_FADV_WILLNEED와 동일한 동작: kernel 2.6 이전에는 posix_fadvise()대신 readahead() 사용함.
 

#include <fcntl.h>

ssize_t readahead(int fd, off64_t offset, size_t count);
 

해당 영역에 페이지 캐시가 자리 잡도록 만든다.
 

* 파일의 일부를 읽기에 앞서 POSIX_FADV_WILLNEED로 페이지 캐시에 파일을 읽어 들이도록 지시하면 입출력은 비동기식 background로 수행된다. application이 최종적으로 파일에 점근할 때, 입출력 차단 없이 연산이 완료될 수 있다.
 

*연속적으로 비디오를 디스크에 스트리밍하는 경우(많은 자료를 읽고 쓴 다음), POSIX_FADV_DONTNEED로 페이지 캐시에서 파일 조각을 비우라고 지시. application이 다시 접근할 의도가 없다면 페이지 캐시를 다른 용도로 사용할 수 있게 비워서 효율을 높임.
 

*파일 전체를 읽을 때는 POSIX_FADV_SEQUENTIAL을 제공

posted by bluelimn
TAG Linux
Programming/linux왕초보 2012.02.17 08:30

3. Memory mapped I/O
 

#include <sys/mman.h>

void * mmap(void* addr,//힌트일 뿐이며 보통 NULL을 넘긴다.

size_t len,

int prot,//접근권한

int flags,//추가적인 동작 방식

int fd,//대상

off_t offset);//시작위치

prot 옵션

PROT_NONE 권한없음

PROT_READ 읽기 가능한 페이지

PROT_WRITE 쓰기 가능한 페이지

PROT_EXEC 실행 가능한 페이지

flags 옵션

MAP_FIXED addr을 요구사항으로 취급하다록 지시. 해당주소에 mapping하지 못하면 호출실패

프로세스 주소공간에 대한 상세한 지식을 요구, 호환성이 떨어짐.

MAP_PRIVATE mapping을 공유하지 않음. 파일은 write후 복사로 mapping되며 변경된 메모리 속성은 실제 파일이나 다른 프로세스의 map에는 반영되지 않는다.

MAP_SHARED 동일파일을 mapping한 모든 프로세스들이 mapping을 공유.

read시 다른 프로세스가 write한 내용도 반영

mapping은 page단위로 구성됨 -> addr과 offset은 반드시 page size의 정수배가 되어야 함

ex)

void *p;

p = mmap (0, len, PROT_READ, MAP_SHARED, fd, 0);

if(p == MAP_FAILED) //ERROR

#include <unistd.h>

long sysconf(int name); // page size를 얻기위한 표준 method(POSIX)

int getpagesize(void); // page size를 얻기위한 표준 method(linux)

<asm/page.h>

PAGE_SIZE //정의된 정적 매크로, 실행시점이 아니라 컴파일 시점에서

시스템 페이지 크기를 조회

#include <sys/mman.h>

int munmap (void *addr, size_t len);

mmap()으로 만들어진 mapping 제거

ex)

#include <stdio.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcn시.h>

#include <unistd.h>

#include <sys/mman.h>

struct stat sb;

off_t len;

char *p;

int fd;

fd = open (filename, O_RDONLY);

if(fstat(fd, &sb) == -1) // ERROR

if(!S_ISREG (sb.st_mode)) //ERROR

p = mmap (0, sb.st_size, PROT_READ, MAP_SHARED, fd, 0);

if(p == MAP_FAILED) //ERROR

if(close (fd) == -1)//ERROR

for(len = 0; len < sb.st_size; len++)

putchar(p[len]);

if(munmap(p, sb.st_size) == -1) //ERROR



장점

- 사용이 편리(다른 작업없이 메모리에 접근하기만 하면 된다. 포인터로 접근)

- 메모리 절약(추가적인 버퍼 메모리가 필요 없다.)

- 속도가 빠르다. (파일이 클수록, OS영역에 캐싱되어 있을수록 속도차이가 난다.)

- 다중 프로세스가 동일 객체를 메모리에 mapping할 때, 모든 프로세스가 자료를 공유한다

단점

- memory와 I/O가 주소공간을 공유(사용 가능한 주소 공간이 제한됨)

- page size의 정수배만 가능하다.(여분의 공간이 낭비됨)

- 연속적인 공간이 있어야 하므로 크기가 다른 mapping이 많으면 단편화 때문에 적당한 공간을 찾지 못할 수도 있다.(32bit일때. 64bit 주소공간에서는 크게 문제되지 않는다)

추가

- 파일이 모두 메모리에 올라오는 것이 아니라 메모리 access시 메모리를 할당해주고 I/O가 발생
 

mmap size 조정 // 리눅스 전용

#define _GNU_SOURCE

#include <unistd.h>

#include <sys/mman.h>

void * mremap (void *addr, size_t old_size,

size_t new_size, unsigned long flags);

접근 권한 변경

#include <sys/mman.h>

int mprotect (const void *addr, size_t len, int prot);

성공하면 0을 return.

mapping으로 파일 동기화 // fsync()와 유사

#incldue <sys/mman.h>

int msync (void *addr, size_t len, int flags);

flags 설정(OR연산 가능)

MS_ASYNC 동기화가 비동기식으로 일어나야 함

MS_INVALIDATE 캐시된 복사본이 유효하지 않음을 명세, 향후 이 파일의 map에 접근할 경우 새롭게 동기화된 디스크 내용을 반영

MS_SYNC 동기화가 동기식으로 일어나야 함,

msync() 호출은 모든 페이지를 드스크에 다시 쓰기 전까지 결과를 반환하지 않음.


madvise

memorymap에 포함된 page와 관련된 동작방식을 조언. 리눅스 커널은 기본적으로 동적으로 동작방식을 조율하며 성능을 최적화하지만 madvise는 부하상황에서 바람직한 캐시와 미리읽기 동작방식을 보장한다.

#include <sys/mman.h>

int madvise (void *addr, size_t len, int advice);

advice 설정(POSIX에서 정의한 의미)

MADV_NORMAL 특별한 조언을 하지 않는다.

MADV_RANDOM page에 random 순서로 접근하려고 함

MADV_SEQUENTIAL 낮은 주소에서 높은 주소의 순서대로 페이지 접근

MADV_WILLNEED 당분간은 지정된 영역에 있는 페이지에 접근하려고 함

MADV_DONTNEED 당분간은 지정된 영역에 있는 페이지에 접근하지 않음

advice 옵션(linux 2.6 kernel에서의 동작)

MADV_NORMAL 커널이 적절히 미리읽기 작업을 수행(평상시와 동일)

MADV_RANDOM 커널이 미리읽기를 비활성화함, 매번 물리적인 연산이 일어날 때마다 최소 자료만 읽음

MADV_SEQUENTIAL 커널이 공격적인(적극적인) 미리읽기 작업을 수행

MADV_WILLNEED 커널이 미리읽기 작업을 시작해서 페이지를 메모리로 읽어 들인다.

MADV_DONTNEED 커널이 페이지와 관련된 자원을 해제하고, 변경되었지만 아직 동기화되지 않은 페이지는 버린다. 이후 mapping된 자료에 대한 접근이 있으면 파일에서 페이지를 읽어들인다.

posted by bluelimn
Programming/linux왕초보 2012.01.29 23:58

1. Scatter/gather I/O(vectored I/O)

vector를 이용한 입출력으로 한번의 연산을 통해 선형 입출력 연산 여러개를 대체할 수 있다.(시스템 호출 횟수를 줄이며 원자성을 가진다.)

readv(), writev()

#include <sys/uio.h>

ssize_t readv(int fd, const struct iovec *iov, int count);

ssize_t writev(int fd, const struct iovec *iov, int count);

struct iovec{ void *iov_base; size_t iov_len;}

count가 작으면 리눅스 커널에서 동적할당 대신 segment array를 만들기 때문에 count가 충분히 작은 경우 성능이 개선된다.(현재 한계값은 8)

posted by bluelimn
Programming/linux왕초보 2012.01.29 23:51

1. Scatter/gather I/O

여러개의 버퍼를 이용한 입출력

2. Epoll

Event Poll: poll()과 select()를 개선한 형태

3. Memory-mapped I/O

file을 memory mapping하여 사용

4. File advice

Allows a process to provide hints to the kernel on its usage scenarios; can result in improved I/O performance. (힌트일 뿐 명령은 아님)

5. Asynchronous I/O

thread를 이용하지 않고 동시에 입출력 처리 가능.

posted by bluelimn
Programming/linux왕초보 2008.09.10 14:38

 option

-l : 현재 crontab 에 의해 설정된 내용을 출력한다.

-e : crontab 의 내용을 작성하거나 수정한다.

-r : crontab 의 모든 내용을 삭제한다.

-u : root권한자가 해당사용자의 crontab 파일을 다룰때 사용한다.

 

 crontab 의 작업형식

5개의 날짜필드와 1개의 명령필드로 구성되어있다.

MM HH DD mm d  command

MM : 분을 의미한다 ( 0 ~ 59까지 사용)

HH : 시를 의미한다. ( 0 ~ 23 까지 사용)

DD : 날짜를 의미한다 ( 1 ~ 31까지 사용)

mm : 달을 의미한다.( 1 ~ 12까지 사용)

D : 요일을 의미한다.( 0 ~ 7 까지 사용, 0  7은 일요일을 나타낸다)

Command : 실행할 명령을 입력한다.

 

※ 참고

위 형식에서 시간을 나타내는 각 필드에서 와일드 카드 '*'를 사용할수 있고

각각의 요일을 구분할 때 ',' 를 사용하고 연일을 나타낼때는 '-'를 사용한다.

즉 월요일과 수요일은 '1,3' 월요일부터 금요일까지는 '1-5' 로 표시할수있다

각항은 space로 구분된다.

 

 cron 파일이 저장되는 장소

/var/spool/cron/사용자명 ( "/var/spool/cron/crontab/사용자명" 으로 되어 있을 수도 있다)

 

cron을 사용할 땐 crontab 이라는 명령을 이용해서 설정한다.

crontab의 형식은 다음과 같다.

 

 cron 사용자 제한

 /etc/cron.allow (허가목록)  /etc/cron.deny(거부목록) 을 참조하게된다.

1./etc/cron.deny 만 존재하는경우

→ 기본적으로 모든사용자가 사용가능하고 cron.deny 에 등록된 사용자만 사용 불가능하다.

2./etc/cron.allow 만 존재하는 경우

 cron.allow 파일에 등록된 사용자만 사용가능하다.

3. 두 파일 모두 없을경우

→ 모든 사용자가가능하다

4. 두 파일 모두 있을경우

 cron.deny 내용을 무시하고 cron.allow 명기된 사용자만 사용가능하다

 

▶ 예제

 

01 * * * * root run-parts /etc/cron.hourly : 매월 매일 요일상관없이 매시 01분마다 실행

02 4 * * * root run-parts /etc/cron.daily : 매월 매일 요일상관없이 4시 2마다 실행

22 4 * * 0 root run-parts /etc/cron.weekly : 매월 일요일마다 4시 22마다 실행

42 4 1 * * root run-parts /etc/cron.monthly : 매월 요일상관없이 1 4시 42마다 실행

1 12 14 * * find / -mtime -15 -print > /tmp/filelist.15

03,08,13,18,23,28,33,38,43,48,53,58 * * * * root run-parts /etc/cron.5min 5분마다 실행

*/1 * * * * root run-parts /etc/cron.file_save : 매분마다 실행

0 12 * * 1-5 /home/bluetree/start : 월요일부터 금요일까지 /home/bluetree/start 란 스크립트를 실행

0 12 1 1-12/2 * /home/bluetree/babo : 1월부터 12월까지 2개월마다 /home/blutree/babo 란 화일을 실행

0 4 * * 1,3,5 cat /root/notice | mail -s "notice" aaa@naver.com : ,, 오전 4 notice 라는 문서의 내용을 메일로 발송한다.

 

다른 명령도 추가 해주고 싶을 땐 ";" 로 구분해서 ";" 뒤에 명령을 더 달아 주면 됩니다.

출처 : http://blog.naver.com/jecu7/150009037578

'Programming > linux왕초보' 카테고리의 다른 글

shell programming - 명령어  (0) 2008.09.11
crontab 사용  (0) 2008.09.11
네트워크 모니터링  (0) 2008.09.10
실행중인 리눅스 관리하기  (0) 2008.09.10
리눅스 gcc 설치 방법  (0) 2008.09.10
CRON  (0) 2008.09.10
리눅스에서 압축파일 다루기  (0) 2008.09.10
iptables  (0) 2008.09.10
vsftp 설정 옵션  (0) 2008.09.10
vsftpd 설치하기  (0) 2008.09.10
RPM으로 패키지 관리하기  (0) 2008.09.10
posted by bluelimn
TAG Linux
Programming/linux왕초보 2008.09.10 14:37

리눅스에서 압축파일 다루기


 

리눅스는 파일을 압축하거나 묶는 많은 방법을 제공합니다. 
윈도우의 편한(?) 환경은 아니지만, 유닉스의 기본 철학 '작은 것이 아름답다'는 정신을 이어 받아 여러 프로그램이 엮어져서 사용됩니다.

리눅스에서는 디렉토리나 여러 파일들을 압축하기 위해서 파일들을 묶고 압축하는 순서로 합니다. 물론, 하나의 파일을 할 경우에는 바로 압축을 하면 됩니다. 리눅스에서 압축 방법은 소프트웨어를 설치하거나 업그레이드 할 때와 시스템을 백업하는데 사용되므로, 반드시 익혀두시기 바랍니다.


tar를 이용하여 파일들을 하나로 묶기

앞에서 리눅스에서 여러 파일들을 압축하기 위해서는 파일들을 묶어야 한다고 했습니다.
이러한 역할을 하는 프로그램이 바로 tar 입니다. tar 은 단순히 여러 파일들을 묶어서 하나의 덩어리로 만드는 작업을 하며, 압축의 효과는 없습니다. 그러므로, 다음에 소개할 압축 프로그램들로 이 덩어리 파일을 압축하면 됩니다. 한가지 주의 할 점은,  tar 사용할 때 반드시 f 옵션을 사용하여 대상 파일을 지정해야 한다는 것입니다. 그래야 다른 옵션을 사용할 때 대상 파일을 사용할 수 있습니다.

 

     사용법 :  tar   <옵션>  <만들 파일이름>  <묶을 파일이름>

옵 션

설   명

-c

tar 파일을 만들때 사용합니다.

-x

묶여진 tar 파일을 해체할 때 사용합니다.

-v

파일들을 묶거나 해체할 때 파일들의 이름과 크기를 표시합니다.

-f

사용할 tar 파일을 지정합니다.

-t

묶여진 tar 파일의 내용물을 출력합니다.

* 위의 옵션들은 -cvf 와 같이 이어서 사용할 수 있습니다. 더 자세한 옵션을 알고 싶다면 tar --help 하세요.


      tar 의 사용방법은 몇가지 예제로 알아 보도록 하겠습니다.

예  제

설  명

tar -xvf example.tar example.tar의 파일들을 해체하고 해체되는 파일들을 표시합니다.
tar -cvf backup.tar /home/ftp/pub /home/ftp/pub 디렉토리와 그 안의 파일들을 backup.tar 이름으로 묶습니다.
tar -tvf example.tar example.tar 안에 묶여있는 파일들의 리스트를 표시합니다.

 

[tar 사용 화면]

사용자 삽입 이미지

 

gzip 사용하기

가장 인기있는 압축 방법은 gzip 을 사용하는 것입니다. 
gzip 파일은, 확장자 .gz 으로 구분할 수 있으며,  gzip 파일의 압축을 해제 하려면, 단순히 gunzip <파일이름.gz> 라고 입력하거나 gzip -d <파일이름.gz> 과 같이 합니다.  gzip 으로 압축된 tar 파일의 확장자는 tgz 일때도 있습니다. 이러한 파일의 압축을 해제하고 아카이브를 푸는 방법에는 두 가지가 있습니다.  .tgz 파일에 대해 gunzip 을 실행한 다음 tar를 실행하여 파일을 푸는 방법과  tar 명령에서 옵션 z를 사용하여 두 가지 작업을 한꺼번에 하는 것입니다. gzip 으로 압축명령을 실행하면 압축을 하는 대상파일은 삭제되며 또한 gzip으로 압축을 푸는 경우에는 압축 되었던 파일이 삭제됩니다.

사용법 :  gzip  <옵션>  <파일이름>

압축하기 gzip cvs.pdf
압축풀기 gzip -d cvs.pdf.gz 또는 gunzip cvs.pdf.gz
-l gzip으로 압축된 파일의 정보를 출력합니다.
-1 빠르게 압축을 하는 대신에 압축율이 떨어집니다.
-9 압축률이 높은 대신 압축시간이 길어집니다.

 

bzip2 사용하기

bzip2 는 gzip 보다 10%-20% 정도 압축률이 훨씬 뛰어나서 빠르게 인기를 얻고 있습니다. 
bzip2 압축은 bz2 파일 확장자로 알 수 있으며, 
단순히 bunzip2 <파일이름.bz2>라고 입력하여 압축을 해제할 수 있습니다. 
또한 gzip 압축과 마찬가지로 tar 에서 j 옵션(tar-1.13 이하는 I -대문자 i)을 사용하여 압축을 해제 할 수 있습니다. tar xvfj <파일이름.tar.bz2> 와 같이 사용합니다. gzip과 마찬가지로 bzip2으로 작업하면 대상파일은 작업 후 삭제됩니다.

사용법 :  bzip2    <옵션>   <파일이름>

압축하기 bzip2   cvs.pdf
압축풀기 bzip2   -d   cvs.pdf.bz2    또는   bunzip2 cvs.pdf.bz2


아래 화면은 gzip와 bzip2의 압축률을 비교한 화면입니다. 
test-1.pdf.gz 은  gzip의 -1 옵션을 test-9.pdf.gz 는 gzip의 -9 옵션을 사용한 결과입니다. 
bzip2가 가장 높은 압축률을 보여주고 있습니다.

[gzip 와 bzip2의 압축률 비교]

사용자 삽입 이미지


마지막으로, compress 명령을 사용하는 유닉스의 오래된 압축 포멧이 있습니다. 
이 포맷의 파일은 더 이상 보기 힘들지만, 여전히 어딘가에서 마주칠 때가 있습니다. 파일 이름에 .Z 확장자가 있으면 compress 유틸리티로 압축한 것임을 알 수 있습니다. 
이러한 파일의 압축을 해제 하려면 uncompress <파일이름.Z> 을 사용합니다.

 

tar 와 gzip, bzip2 같이 사용하기

여러개의 파일들을 하나로 묶어 압축하는 데 상당히 귀찮음을 알게 되었을 것입니다. 
이러한 작업들을 tar의 확장옵션을 사용하여 더 간편하게 할 수 있습니다.

먼저, 필자가 경험한 한가지 좋은 습관을 알려드리겠습니다. 
여러개의 파일들을 묶어 압축을 하기 전에 디렉토리를 만들어 그 안에 파일들을 옮긴 후 압축하는 것이 좋습니다. 이렇게 하면 압축을 풀었을 경우, 다른 파일들은 섞이지 않게 되므로, 좀 더 파일들을 관리하기가 편하게 됩니다.

가령, junilove라는 사용자가 2001년 5월 23일에 다운로드한 pdf 파일들을 압축한다고 했을 경우, 그냥 묶어서 압축하는 경우보다 junilove_20010523_pdf 와 같이 짧고 쉽게 알아 볼 수 있도록 디렉토리를 만들어서 하는 것이 나중에 관리하는데 더 편리합니다.


이제 실제 tar의 확장옵션을 사용하여 압축을 하고 해제하는 방법을 알아 보겠습니다.


◆  tar로 묶어서 gzip으로 압축된 파일 풀어보기

가장 많이 사용되는 형식입니다. 이렇게 압축된 파일은 tar.gz 또는 tgz 과 같은 확장자 형식을 지니며 아래와 같이 간편하게 풀 수 있습니다.

    tar  xvfz  test.tar.gz

tar 로 묶고 bzip2로 압축된 파일은 tar.bz2 와 같은 확장자 형식을 가지며 다음과 같이하여 풀면 됩니다.

    tar  xvfj   test.tar.bz2

[gzip와 bzip2 압축 푸는 화면]

사용자 삽입 이미지

 

 tar로 묶고 gzip으로 압축해 보기


tar 의 확장옵션을 사용하여 편하게 압축을 해보겠습니다. 
tar 에서 압축하는 옵션이 c 옵션과 gzip 을 수행할 수 있는 z 옵션을 사용하면 됩니다.

tar  cvfz  example.tar.gz  example_dir

bzip2로 압축하고 싶다면, z 옵션 대신에 j 옵션(tar-1.13 이하는 I -대문자 i)을 사용하여 bzip2 가 수행되도록 하면 됩니다.

tar  cvfj  example.tar.bz2  example_dir

 

[gzip과 bzip2로 압축하는 화면]


 

zip, arj, rar 압축 파일들 풀어보기

Windows/Dos 에서 많이 사용되었던 압축 포멧인 zip, arj, rar 등의 파일들을 리눅스에서 사용할 수 있습니다. 다만, 압축을 할 수 없지만 해제할 수는 있습니다. 가장 많이 볼 수 있는 것은 zip 형식입니다. 이러한 해제 프로그램들은 rpmfind.net 에서 rpm 패키지를 다운로드 받을 수 있으며, 소스 또한 다운로드 할 수 있습니다. zip과 rar 의 경우에는 쉐어웨어 형태로 압축 프로그램까지 개발되고 있습니다.

unzip unzip 5.41
unarj unarj 2.43
unrar unrar 2.71

[unzip 실행화면]

사용자 삽입 이미지
 

요즘 국내에서 가장 많이 사용되고 있는 국산 압축 프로그램들의 멀티볼륨 압축은 리눅스에서 어떨까요? 
알집, 지펜놀등을 이용하여 멀티볼륨 압축을 한 ZIP, Z00, Z01... 이런 압축은 리눅스에서 압축을 해제할 수 없습니다. 개발사에서 리눅스용 해제 프로그램을 만들어주기 전까지 기달려야 합니다. : (

 

MC 에서의 압축파일

미드나잇 커맨더(MC)에서도 압축파일을 쉽게 관리할 수 있습니다. 
MC에서는 ZIP, tar.gz, tgz, tar.bz2 등을 지원하며 원하는 파일에서 Enter 키를 누르면 압축파일 내용이 보입니다. 여기서 원하는 파일을 선택하여 F5를 눌러 원하는 디렉토리를 입력하면 자동으로 대상 디렉토리에 압축이 풀리게 됩니다.

[MC 에서 압축 풀기]

사용자 삽입 이미지
 


참고자료

gzip 홈페이지

bzip2 홈페이지

러닝 리눅스 제 3판

Linux@Work 5월호 기사


글쓴이 : 이종준님  ( junilove@kebi.com )  "Open mind and don't mind!"


출처 :  http://www.wowlinux.com

'Programming > linux왕초보' 카테고리의 다른 글

crontab 사용  (0) 2008.09.11
네트워크 모니터링  (0) 2008.09.10
실행중인 리눅스 관리하기  (0) 2008.09.10
리눅스 gcc 설치 방법  (0) 2008.09.10
CRON  (0) 2008.09.10
리눅스에서 압축파일 다루기  (0) 2008.09.10
iptables  (0) 2008.09.10
vsftp 설정 옵션  (0) 2008.09.10
vsftpd 설치하기  (0) 2008.09.10
RPM으로 패키지 관리하기  (0) 2008.09.10
NFS 마운트 (NAS장비)  (0) 2008.09.10
posted by bluelimn
TAG Linux
Programming/linux왕초보 2008.09.10 14:09
# yum 


1. 업데이트 목록 확인. 

현재 업데이트 서버에 올라와 있는 패키지의 목록은 check-update 옵션으로 확인할 수 있다. 

# yum check-update 

단, check-update의 경우 현재 시스템에 설치된 패키지를 기준으로 업데이트 목록을 출력해주기 때문에 시스템에 설치되지 않은 패키지 목록은 볼 수 없다. 
이들 목록은 list 명령을 사용한다. 

# yum list 


추가적으로 현재 클라이언트 시스템에 설치된 모든 패키지 목록은 다음으로 확인한다. 

# yum list installed 


2. 업데이트 

Yum에는 update와 install 이라는 두가지 설치 모드를 가지고 있다. 

update는 말 그대로 업데이트 된 패키지를 설치하는 것으로, 기본적으로는 업데이트 된 모든 패키지를 설치하게 되는데, 일부만을 업데이트 하고자 한다면 직접 지정하여 설치하면 된다. 

# yum update [package1] [package2] [...] 

install은 현재 클라이언트 시스템에 설치되지 않은 패키지를 설치할 때 사용한다. 

# yum install package1 [package2] [...] 


3. 패키지 제거 

# yum remove package1 [package2] [...] 


4. 패키지 정보 보기 

# yum info packages1 

업데이트 서버에 있는 패키지 정보 보기 

# yum info updates


* Quick Reference 

1. 업데이트 목록 확인 
# yum check-update 

2. 패키지 설치 
# yum update [package1] 

3. 설치된 패키지 확인 
# yum list installed



* 기타 정보 

Yum 설정 파일은 /etc/yum.conf 에 있다. 
패키지는 설치되기 전에 /var/cache/yum에 다운로드 된다. 

rpm명령으로 현재 설치되어 있는 패키지인지 확인가능
#rpm -qa mysql

'Programming > linux왕초보' 카테고리의 다른 글

CRON  (0) 2008.09.10
리눅스에서 압축파일 다루기  (0) 2008.09.10
iptables  (0) 2008.09.10
vsftp 설정 옵션  (0) 2008.09.10
vsftpd 설치하기  (0) 2008.09.10
RPM으로 패키지 관리하기  (0) 2008.09.10
NFS 마운트 (NAS장비)  (0) 2008.09.10
리눅스 CD 부팅법  (0) 2008.09.10
[펌]유닉스 및 리눅스 명령어 팁  (1) 2008.09.10
리눅스 tail 사용법  (0) 2008.09.10
YUM 사용법  (0) 2008.09.10
posted by bluelimn
TAG Linux