Ping은 네트워크로 연결된 두 호스트 사이에서 연결할 수 있는지 점검하는 진단도구이다. 우리가 Ping명령을 실행하면 ICMP Echo Request 패킷을 원격 IP 주소에 송신하고 ICMP 응답을 기다린다. 요즘 우리가 사용하는 ping 프로그램의 첫 버전을 만든 이는 Mike Muss이다. 그 후로 다른 많은 이들이 성능을 향상시키고, 고쳐 작성하고, 다양한 곳에 함부로 사용해왔다.

ping이라는 이름이 무엇을 뜻하는지에 대해서는 많은 의견들이 있다. 어떤 사람들은 Packet INternet Groper 라는 구문의 머릿글자를 따온 것이라 말한다. 그럴 듯 해 보이기는 하지만 맞는 말은 아니다. 사실 Ping은 소나(sonar: 수중 음파 탐지기) 추적 시스템의 소리를 흉내 내어 붙여진 이름이다.

심지어 어떤 시스템 관리자가 네트워크상의 호스트에 되풀이해서 핑을 날리고 성공할 때마다 “핑” 하는 소리가 나도록 설정한 스크립트를 만들었다는 이야기까지 있다. 그 시스템 관리자는 네트워크를 괴롭혀 온 불안정한 커넥터를 찾을 때까지 규칙적으로 그의 네트워크에 설치된 BNC 커넥터들을 점검한다 -- 소리가 멈추었을 때, 그 나쁜 놈이 걸렸다는 것을 알아냈다는 것이다.

Ping은 일반적으로 어떤 머신이 데이터를 수신하고 IP 패킷을 보낼 수 있는지 점검하는 매우 유용한 도구이다. 여러분이 호스트에 핑을 보낼 수 있다면 ftp나 http 연결도 할 수 있을 것이다. 하지만, 보안을 위해 패킷 필터링을(packet filtering) 적용하는 호스트들이 많아지면서 인터넷에서 ping은 신뢰성을 잃어간다.

많은 방화벽들이 아래에 소개한 두 가지 이유로 ICMP 패킷을 걸러내도록 규정한다.

1) 여러분의 내부 네트워크가 어떻게 생겼는지 다른 사람들이 알 필요는 없다.
2) 그리고, 모든 프로토콜이 시스템을 공격하는데 이용될 수 있다. ICMP라 해서 예외는
    아니다.

여러분의 방화벽에 ICMP를 허용하도록 결정했다면 고생길을 자청한 것이다. 이 경우 ICMP가 항상 좋은 의도로 사용된다고 가정해야 하지만, 어떻게 ICMP 기반 공격들이 없을 수 있겠는가. (예를 들어 “죽음의 핑”은 버퍼 크기를 초과하는 핑 패킷으로 공격대상의 IP 스택을 넘치게 한다 -- 때에 따라 매우 극적인 결과를 맞기도 한다). 여러분의 네트워크에서 ICMP를 허용한다면 그 틈을 타고 누군가 공격할 것은 뻔하다.

다른 목적으로 쓰기 위해 ping 명령에 특별한 기능을 추가한 도구들이 있다. 가장 일반적인 것 하나는 fping 명령이다. 이 명령은 일정한 주소 범위에 ping을 보내기 위한 명령인데 일반적으로 네트워크 스캐너로 쓰이고, 또 saint와 mon처럼 네트워크 모니터로도 쓰인다. 또 다른 변종은 외부 프로그램을 소환하지 않고 스크립트 안에서 쉽게 사용할 수 있도록 Ping 기능을 perl로 구현한 Net::Ping 모듈이다. 아래 예문에서처럼 스크립트를 사용할 수 있다:

Example 1. Using Net::Perl
 

#!/usr/bin/perl -w

use strict;
use Net::Ping;

my $host = $ARGV[0];

my $p = Net::Ping->new(“icmp”);

if ($p->ping($host)) {
     print “$host is alive.\n”;
} else {
     print “$host is not reachable.\n”;
}

 

ping at Work

Ping은 인수를 덧붙이지 않고 사용하는 것이 일반적인데 프로그램 실행을 마칠 때에는 Ctrl-c 키를 누른다. 아마 아래 예문처럼 보일 것이다:
 

[pate@cherry pate]$ ping mango
PING mango (192.168.1.1) from 192.168.1.10 : 56(84) bytes of data.
64 bytes from mango (192.168.1.1): icmp_seq=0 ttl=255 time=0.5 ms
64 bytes from mango (192.168.1.1): icmp_seq=1 ttl=255 time=0.3 ms
64 bytes from mango (192.168.1.1): icmp_seq=2 ttl=255 time=0.3 ms
64 bytes from mango (192.168.1.1): icmp_seq=3 ttl=255 time=0.3 ms
64 bytes from mango (192.168.1.1): icmp_seq=4 ttl=255 time=0.3 ms
64 bytes from mango (192.168.1.1): icmp_seq=5 ttl=255 time=0.3 ms
--- mango ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max = 0.3/0.3/0.5 ms
[pate@cherry pate]$

 

이 화면은 세 개의 섹션으로 나눌 수 있다. 첫 번째 섹션은, “PING”이라는 글자로 시작하는 한 줄인데 여러분의 명령에 대한 결과를 미리 보여준다. “64 bytes”라는 문자열로 시작하는 두 번 째 섹션은 응답시간을 계산해서 보여준다. 세 번 째, “--- mango ping statistics ---”이라는 줄로 시작하는 마지막 섹션에서는 결과를 요약해서 보여준다. 위 예문에서 결과가 꽤 좋은데 잃어버린 패킷도 없고 응답시간도 빠른 편이어서 결과가 좋은 모습이다.

여러분의 네트워크를 점검하는데 싱글 패킷에 의존할 필요는 없다. 싱글 패킷보다는 다섯이나 열로 짝지어진 패킷이 훨씬 좋다. 네트워크가 혼잡한 곳에서 특히 싱글 패킷보다 더 유용한 정보를 얻을 수 있다.

ping 명령에는 몇 가지 유용한 옵션들이 있다. 이 옵션들을 아래 표에 정리했다:

< 표 1. Ping 명령의 옵션들 >
 

스위치

기능

-c count

지정한 숫자만큼 패킷을 주고 받으면 프로그램을 멈춘다.

-d

소켓에 사용되는 SO_DEBUG 기능을 켠다.

-f

할 수 있는 한 가장 빠른 속도로 패킷을 보낸다. (flood)

-i wait

패킷 사이에서 대기시간에 간격을 둔다.

-I [device]

출력 인터페이스를 지정한다.

-l preload

미리 로드한 패킷을 가능한 빨리 전송한 다음 일반 모드로 돌아간다.

-n

호스트 이름을 찾지 않고 IP 주소만 보인다. (numeric)

-p pattern

pattern은 16진수이며 pad data를 지정한다.

-q

요약한 줄만 출력한다. (quiet)

-r

패킷을 보낼 때에 라우팅 테이블을 사용하지 않고, 로컬 인터페이스에만 보낸다.

-R

라우트를 기록하는 옵션을 설정한다.

-s packetsize

보낼 패킷의 데이터 바이트 크기를 설정한다.

-T tsonly

timestamp 옵션과 함께 ping을 보낸다.

-T tsandaddr

timestapm와 주소를 모은다.

-T tsprespec[host1 [host2 [host3 [host4]]]]
 열거한 홉들에서 timestamp와 주소를 모은다.

 

이런 옵션들은 몇 개를 조합해서 더 유용하게 쓸 수 있다. 이전 섹션에서 사용한 ping 명령이 실행하고 결과를 돌려주는데 몇 초 시간지연이 있다. -f 스위치를 사용하면 명령을 기다리느라 버리는 시간을 줄일 수 있다. -c 10 옵션과 -q 옵션을 조합하면 좀더 빠르고 더 읽기 쉽게 결과를 출력한다.
 

[root@cherry /root]# ping -c 10 -fq mango
PING mango (192.168.1.1) from 192.168.1.10 : 56(84) bytes of data.

--- mango ping statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max = 0.2/0.2/0.9 ms
[root@cherry /root]#

 

주의:  -f와 -l 스위치는 root만 사용할 수 있다. 이 스위치들을 잘못 사용하면 네트워크에
         심각한 혼란이 생길 수 있기 때문이다.

더 큰 패킷들을 사용할 경우 테스트하는 데 좀더 유리하다면, ping -c10 -s 1024 -qf 명령으로 더 큰 패킷들을 보낸다. 이 명령은 네트워크에서 발생한 문제가 패킷들이 잘게 쪼개지는 현상 때문에 발생한다고 생각할 때 특히 유용하다.

여러분의 패킷이 라우터를 통과하는지 알아보고 싶다면, ping -c10 -R 명령을 사용한다. 이 명령은 아래와 같은 메시지를 보여줄 것이다:
 

PING tbr.nailed.org (206.66.240.72) from 192.168.1.10 : 56(124) bytes of data.
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=0 ttl=239 time=217.2 ms
RR: 192.168.1.10
216.41.39.90
serial0.mmgw32.bos1.Level3.net (209.244.39.25)
208.218.130.22
166.90.184.2
so-6-0-0.mp2.NewYork1.level3.net (209.247.10.45)
137.39.52.10
180.ATM7-0.BR2.NYC9.ALTER.NET (152.63.22.229)
lo0.XR2.NYC9.ALTER.NET (137.39.4.175)

64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=1 ttl=239 time=1940.8 ms (same route)
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=2 ttl=239 time=250.6 ms (same route)
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=3 ttl=239 time=230.3 ms (same route)
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=4 ttl=239 time=289.8 ms (same route)
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=5 ttl=239 time=1261.4 ms (same route)
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=6 ttl=239 time=469.4 ms (same route)
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=7 ttl=239 time=1272.3 ms (same route)
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=8 ttl=239 time=353.1 ms (same route)
64 bytes from bigfun.whirlycott.com (206.66.240.72): icmp_seq=9 ttl=239 time=1281.1 ms (same route)

--- tbr.nailed.org ping statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max = 217.2/756.6/1940.8 ms

 

주의:  -R 스위치로 설정하는 라우트 기록 옵션은 모든 라우터와 호스트에서 환대받는 것은
         아니다. 패킷들이 네트워크를 다니는 경로를 확인하는 데 traceroute가 훨씬 좋은
         도구일 것이다.

ping 명령은 여러분 네트워크의 문제해결에 매우 유용한 도구이고, 대충 아무렇게나 사용해서는 안된다.

이 기사는 Pat Eyler와 New Riders Press가 저작권을 소유한다. 원문을 수정하거나 보태어서는 안되며, 열린 출판물 라이선스(Open Publication License)에 따라 배포된다. 이 글은 “A Practical Guide to TCP/IP”라는 이름으로 New Riders 출판에서 겨울에 출간할 리눅스 네트워킹 책에 포함될 섹션의 초고이다:

이 글은 스프링노트에서 작성되었습니다.

'It's IT > It's System(linux,win)' 카테고리의 다른 글

퍼미션, CHMODE  (0) 2007.12.14
VI명령어  (0) 2007.12.14
LINUX 자주쓰는 명령어  (0) 2007.12.14
linux tar  (0) 2007.12.14
리눅스 libc 패키지 (The Linux libc Package)  (0) 2007.12.13

 


공사중에 로그인 막기
시스템을 공사중일 때, root 이외의 다른 사용자를 로그인 못하게 해야 할 때가 있죠?
그럴 때는, /etc/nologin 이라는 파일을 만들어,
공사중 또는 Under Construction이라는 공지를 넣으면 됩니다.

크기가 가장 큰 파일, 디렉토리 찾기
가장 큰 디렉토리를 찾으려면,
du -S | sort -n

cf) 솔라리스의 경우
du -sk `ls -1 | grep '/$'`|sort +n

가장 큰 파일을 찾으려면,
ls -lR | sort +4n

디스크 Full발생시 쓸모없는 파일 제거
오브젝트파일만 제거하는 예제
find . -name '*.o' -print -exec rm -f {} \;

실행파일들 출력
find . -type f -perm +u+x -print

find의 일반적인 용례
name 파일명 지정한 파일명에 해당하는 파일을 검색
메타문자를 사용할 경우 파일명을 ''기호 내에 기입

-size  파일 크기 지정된 크기의 파일을 검색. 크기는 블록 단위, 1 블록 = 512 바이트
-mtime 숫자 지정된 날짜 이전에 수정된 파일을 검색
-ctime 숫자 가장 최근에 변경된 것이 지정된 날짜 전인 파일 검색
-user  사용자명 지정된 사용자 수용의 파일 검색
-print 검색 결과를 화면에 표시
-atime 숫자 지정된 날짜 이전에 접근 된 파일을 검색
-perm  접근권한 지정

-type 파일 유형 지정된 유형의 파일을 검색
b: 블록 특수 파일
c: 문자 특수 파일
d: 디렉토리
f: 일반파일
l: 링크파일
p: 파이프 파일

-exec 명령어 {} \;
실행 결과를 입력 파일로 받아들여 명령어 실행.
명령어의 끝은 \;
{} : 현재 경로명으로 대치

현재 디렉토리의 크기만을 파악할때
[root@dev2 local]# du -c -h --max-depth=0 *
6.4M    apache
35M     bin
43M     dns
1.7M    doc
42k     etc
1.0k    games
42k     geektalkd
1.1M    gnuws
1.1M    include
41k     info
19M     jakarta-tomcat-3.2.3
0       jre
15M     jre118_v3
25M     lib
62k     libexec
1011k   man
1.3M    mm.mysql.jdbc-1.2c
937k    sbin
3.8M    share
1.8M    shoutcast-1-8-3-linux-glibc6
5.2M    ssl
159M    total

시스템 정보 감추기
/etc/inetd.conf 파일을 열어서,
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h


어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기
ps -aux | sort +4n
또는
ps -aux | sort +5n

FTP로 들어온 사용자 확인하기
ftpwho
ftpcount


원하지 않는 사용자 죽이기
[root@dream /root]# skill -KILL sunny
위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다.
그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠?
그럴때는

[root@dream /root]# skill -KILL -v pts/14
이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다.

less 결과를 vi로 보기
less상태에서 v를 누르면 바로 vi로 감


vi에서 블럭 설정하기
alt+v 하면, 라인 단위로 블럭 설정을 할 수 있으며, 해제 하시려면 Esc를 누르면 됩니다.

또한 ctl+v를 하시면, 블럭 단위로 블럭을 설정하실 수 있습니다.

블럭을 설정 하신 뒤,

삭제를 하려면 x
복사를 하려면 y
붙여넣기는 p

man 페이지 프린트하기
vi에 대한 매뉴얼을 ps(postscript파일)로 저장
man -t vi > vi.ps

man 페이지를 일반파일로 갈무리하려면 man vi | col -b > aa.txt

ping 무시하기
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

동시에 여러개의 하위 디렉토리 만들기
mkdir -p music/koreanmusic/ost

리로 다시 살리기
boot : vmlinuz root=/dev/hda6

특정 사용자 ftp 접근 막기
/etc/ftpusers 파일에 로그인 네임을 추가하면 됩니다.

X 윈도우에서 TV보기
리눅스에서 TV보기 위해서는 드라이버 파일과 TV를 보는 프로그램이 필요합니다.
이 글에서는 미지 리눅스 OS에 탑재된 bttv 칩셋을 사용하는 TV 카드를 기준으로 설명합 니다.
만일 커널을 새로 컴파일 하실 분은 반드시 Character devices -> Video For Linux -> BT848 Video For Linux 항목을 모듈화 시키거나 커널에 포함하십시오.

TV 카드를 리눅스에 인식시키기 위해서 /etc/conf.modules 파일에 다음과 같은 내용을 삽입하고 컴퓨터를 다시 시작합니다.

alias char-major-81 bttv

# 필립스 튜너의 경우 pre-install bttv modprobe -k tuner

# 알프스 튜너의 경우 pre-install bttv modprobe -k tuner type=9

이제 kwintv나 xawtv 등의 TV 시청 프로그램으로 TV를 볼 수 있습니다.
만약 TV 장치를 찾지 못하는 오류가 있다면 bttv driver 디렉토리에 포함된 MAKEDEV 를 실행하십시오.

ls라는 파일이 포함된 rpm패키지 찾기
일단 ls의 절대경로를 알아야 한다. which ls
which로 알아낸 ls의 절대경로로 rpm질의를 한다.rpm -qf /bin/ls
[root@piruks /etc]# which ls
/bin/ls
[root@piruks /etc]# rpm -qf /bin/ls
fileutils-4.0i-2mz

현재 rpm패키지의 의존패키지
rpm -qR 패키지명

현재 디렉토리크기
du -h --max-depth=1 .

바로 이전 디렉토리로 가기
cd -

프로세스명으로 프로세스 죽이기
[리눅스]
killall 프로세스명
kill -9 `pidof 프로세스명`

하드웨어 시계맞추기
배포본을 설치하고 나면 시간이 맞지 않는 경우가 많다.
간단히 어느정도 정확한 시간을 설정하는 방법이다.
[root@dev /down]# rdate -s time.kriss.re.kr
[root@dev /down]# clock -w

원격에서 리모트서버의 X application실행시
X윈도 app를 실행할때 다음과 같은 에러가 나면 조치
[kang@dev /home/kang] xclock
Xlib: connection to "211.222.186.170:0.0" refused by server
Xlib: Client is not authorized to connect to Server
Error: Can't open display: 211.222.186.170:0.0

export DISPLAY=211.222.186.170:0
xhost +211.222.186.170

파일내 문자열 치환
mysql에 replace라는 프로그램이 딸려있다.

현재 디렉토리내 모든 파일에서 a를 b로 변경
replace a b -- *

현재 디렉토리내 모든 파일에서 a는 b로, b는 a로 변경
replace a b b a -- *

하위 디렉토리를 포함하여 위의 작업을 할때
replace a b -- `find . -type f -name '*' -print`
or
find . -type f -name '*' -exec replace a b -- {} \;

PERL로 한다면 다음과 같이 해도 된다.
find . -type f -name '*' -exec perl -pi -e 's/a/b/g' {} \;

ex)
find . -type f -name '*.html' -exec /usr/local/mysql/bin/replace myunggyu@orgio.net kang@dbakorea.pe.kr -- {} \;

ISO이미지 만들기
/down/Disk1 디렉토리의 내용을 Linux9i_1.iso라는 ISO이미지파일로 만든다.
mkisofs -r -o Linux9i_1.iso /down/Disk3

위에서 만들어진 Linux9i_1.iso파일을 레코더로 구울때
cdrecord -v -isosize speed=12 dev=0,0 Linux9i_1.iso

XMMS에서 한글출력
메뉴중 옵션-선택사항-폰트'에 다음과 같이 지정
옵션: 폰트셋 사용하기(멀티바이트 지원설정) 체크
연주목록에 다음과 같이 설정
-adobe-helvetica-bold-r-*-*-10-*, -baekmuk-gulimbdf-medium-r-normal-*-*-120-*-*-m-*-ksc5601.1987-0

기본창- X폰트사용 체크 하고 다음과 같이 설정
-adobe-helvetica-medium-r-*-*-8-*, -baekmuk-gulimbdf-medium-r-normal-*-*-120-*-*-m-*-ksc5601.1987-0

ISO파일 처리
CD이미지(ISO 9660) 만들기
dd if=/dev/cdrom of=ora817.iso
or
mkisofs -R -V Oracle817 -o ora817.iso /dev/cdrom
  
CD이미지(ISO 9660) 마운트
mount -r -t iso9660 -o loop ora817.iso /mnt/iso

CD이미지(ISO 9660) 굽기
cdrecord -scanbus로 가능한 dev파악
cdrecord -v -eject speed=12 dev=0,0,0 ora817.iso


file: 파일의 종류와 정보를 알려준다.

[kang@ns work]$ file signal_reset.c
signal_reset.c: C program text

[kang@ns work]$ file signal_reset
signal_reset: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), not stripped


stat: Unix system함수인 stat(fstat)가 가지는 정보를 보여주기 위해 명령어로 구현되어진 것

[kang@ns work]$ stat signal_reset.c
File: "signal_reset.c"
Size: 175 Filetype: Regular File
Mode: (0664/-rw-rw-r--) Uid: ( 512/ kang) Gid: ( 512/ kang)
Device: 3,7 Inode: 96199 Links: 1
Access: Wed Oct 18 21:12:01 2000(00000.00:01:33)
Modify: Wed Oct 18 21:11:43 2000(00000.00:01:51)
Change: Wed Oct 18 21:11:43 2000(00000.00:01:51)

[kang@ns work]$ stat signal_reset
File: "signal_reset"
Size: 11991 Filetype: Regular File
Mode: (0775/-rwxrwxr-x) Uid: ( 512/ kang) Gid: ( 512/ kang)
Device: 3,7 Inode: 96198 Links: 1
Access: Wed Oct 18 21:12:06 2000(00000.00:01:30)
Modify: Wed Oct 18 21:11:50 2000(00000.00:01:46)
Change: Wed Oct 18 21:11:50 2000(00000.00:01:46)


reset: 키보드설정 reset(? 매뉴얼에도 없다. 잘모르겠다.)

[kang@ns work]$ reset
Erase is delete.
Kill is control-U (^U).
Interrupt is control-C (^C).

whatis : whatis데이터베이스에서 완전한 단어를 검색한다.
ex) whatis ls whereis

apropos : whatis데이터베이스에서 문자열을 검색한다. man -k와 같다.
ex) apropos socket

whereis : 바이너리,소스,매뉴얼 파일의 위치 출력
ex) whereis cp

cal : 달력 출력
ex) cal 2004   : 2004년 달력 출력
     cal 5 2004 : 2004년 5월 달력 출력
    
tty : 자신이 사용하는 터미널명을 출력. kill명령으로 해당 터미널유저를 처리할때 쓰도록..




쉘에서...

?은 한문자를 의미
*은 모든 문자를 의미

ls dbakorea[0-9] : dbakorea0 ~ dbakorea9
ls dbakorea[09]  : dbakorea0, dbakorea9


SORT
[kang@dbakorea test]$ cat sort.dat
aaa,강명규,관리자
ccc,홍길동,도둑놈
bbb,강감찬,장군
ddd,임꺽정,도적놈
[kang@dbakorea test]$ sort sort.dat
aaa,강명규,관리자
bbb,강감찬,장군
ccc,홍길동,도둑놈
ddd,임꺽정,도적놈
[kang@dbakorea test]$ sort -t , +1 sort.dat 2번째 컬럼을 기준으로 정렬. -t는 필드구분자로 콤마 지정
bbb,강감찬,장군
aaa,강명규,관리자
ddd,임꺽정,도적놈
ccc,홍길동,도둑놈

대소문자 변환
[kang@dbakorea test]$ tr "[a-z]" "[A-Z]" < sort.dat
AAA,강명규,관리자
CCC,홍길동,도둑놈
BBB,강감찬,장군
DDD,임꺽정,도적놈

PASTE
[kang@dbakorea test]$ cat > paste.data1
홍길동
이순신
김유신
[kang@dbakorea test]$ cat > paste.data2
부산
서울
대구
[kang@dbakorea test]$ paste paste.data1 paste.data2
홍길동  부산
이순신  서울
김유신  대구
[kang@dbakorea test]$ paste -d"\n" paste.data1 paste.data2
홍길동
부산
이순신
서울
김유신
대구
[kang@dbakorea test]$ paste -s -d"::\n" paste.data1
홍길동:이순신:김유신
[kang@dbakorea test]$

JOIN : DBMS의 조인기능과 유사
[kang@dbakorea test]$ cat > join.data1
maddog:강명규
gildong:홍길동
superman:슈퍼맨
batman:배트맨
[kang@dbakorea test]$ cat > join.data2
maddog:DBA    
maddog:Programmer
superman:Hero
batman:American Hero
[kang@dbakorea test]$ join -j1 1 -j2 1 -t: join.data1 join.data2
maddog:강명규:DBA
maddog:강명규:Programmer
superman:슈퍼맨:Hero
[kang@dbakorea test]$


SPLIT
[kang@dbakorea test]$ split -100000 wf_cleaner_20040418.log wf_cleaner_            
[kang@dbakorea test]$ ls -l
총 322816
-rw-r--r--   1 sky      other    82509153  4월 21일  16:15 wf_cleaner_20040418.log
-rw-r--r--   1 sky      other    4817168  4월 21일  16:16 wf_cleaner_aa
-rw-r--r--   1 sky      other    4826953  4월 21일  16:16 wf_cleaner_ab
-rw-r--r--   1 sky      other    4819016  4월 21일  16:16 wf_cleaner_ac
-rw-r--r--   1 sky      other    4818664  4월 21일  16:16 wf_cleaner_ad
-rw-r--r--   1 sky      other    4815234  4월 21일  16:16 wf_cleaner_ae
-rw-r--r--   1 sky      other    4826339  4월 21일  16:16 wf_cleaner_af
-rw-r--r--   1 sky      other    4822263  4월 21일  16:16 wf_cleaner_ag
-rw-r--r--   1 sky      other    4814657  4월 21일  16:16 wf_cleaner_ah
-rw-r--r--   1 sky      other    4816299  4월 21일  16:16 wf_cleaner_ai
-rw-r--r--   1 sky      other    4817442  4월 21일  16:16 wf_cleaner_aj
-rw-r--r--   1 sky      other    4807225  4월 21일  16:16 wf_cleaner_ak
-rw-r--r--   1 sky      other    4816881  4월 21일  16:16 wf_cleaner_al
-rw-r--r--   1 sky      other    4805557  4월 21일  16:16 wf_cleaner_am
-rw-r--r--   1 sky      other    4824945  4월 21일  16:16 wf_cleaner_an
-rw-r--r--   1 sky      other    4800172  4월 21일  16:16 wf_cleaner_ao
-rw-r--r--   1 sky      other    4813110  4월 21일  16:16 wf_cleaner_ap
-rw-r--r--   1 sky      other    4795892  4월 21일  16:16 wf_cleaner_aq
-rw-r--r--   1 sky      other     651336  4월 21일  16:16 wf_cleaner_ar
[kang@dbakorea test]$ cat wf_cleaner_a[a-r] > wf_cleaner_orig
[kang@dbakorea test]$

CUT : 컬럼단위 필터링 cf) grep은 행단위 필터링
필드,문자단위로 컬럼 출력
[kang@dbakorea test]$ cat sort.data
aaa,강명규,관리자
ccc,홍길동,도둑놈
bbb,강감찬,장군
ddd,임꺽정,도적놈
[kang@dbakorea test]$ cut -f1,3 -d , sort.data 1,3번째 필드만 출력. 필드구분자는 콤마
aaa,관리자
ccc,도둑놈
bbb,장군
ddd,도적놈
[kang@dbakorea test]$ cut -c5-7 sort.data  5~7컬럼값 출력
강명규
홍길동
강감찬
임꺽정


EGREP
grep과 달리 Regular Expression을 지원한다.

b                        : 일치되는 행의 블록 번호 출력                  
c           : 문자열을 포함하는 행수 출력                    
h           : 파일 이름을 출력하지 않음                      
i           : 대소문자를 구별하지 않음                      
l           : 문자열을 포함하는 파일 이름만 출력            
n           : 일치되는 행번호를 함께 출력                    
s           : 오류가 발생할 경우에만 메시지 출력            
v           : 일치되지 않는 행만 출력                        
w           : 문자열이 하나의 단어인 경우만 검색(grep만 가능)
e 표현식    : 정규 표현식이 - 문자로 시작할 때 유용          
e 문자열    : fgrep에서만 사용, 문자열은 단순 문자열을 의미  
f 파일명    : 검색문자열을 파일명으로 부터 받아들임          

^  : 행의 시작
$  : 행의 끝
.  : 임의의 한문자
[] : []속에 표현되는 문자 중 임의의 한 문자
*  : * 앞의 정규표현식이 0회 이상 나타남
+  : + 앞의 정규표현식이 1회 이상 나타남(egrep에서만 가능)
?  : ? 앞의 정규표현식이 0 또는 1회 나타남(egrep에서만 가능)
\  : 메타문자의 의미 제거(예 : '\*'는 *문자를 의미)
|  : 문자열간의 OR연산자(egrep에서만 가능)
() : 정규 표현식을 둘러 쌈(egrep에서만 가능)

[kang@dbakorea test]$ cat sort.data
aaa,강명규,관리자
ccc,홍길동,도둑놈
bbb,강감찬,장군
ddd,임꺽정,도적놈
[kang@dbakorea test]$ egrep '강명규|강감찬' sort.data
aaa,강명규,관리자
bbb,강감찬,장군

This article comes from dbakorea.pe.kr (Leave this line as is)

이 글은 스프링노트에서 작성되었습니다.

'It's IT > It's System(linux,win)' 카테고리의 다른 글

VI명령어  (0) 2007.12.14
PING  (0) 2007.12.14
linux tar  (0) 2007.12.14
리눅스 libc 패키지 (The Linux libc Package)  (0) 2007.12.13
리눅스 디렉토리  (0) 2007.08.17

 

tar

여러개의 파일을 하나로 묶는 명령어이다.
압축명령어라고 잘못알고 계시는 분들이 있는데, tar는 분명 여러개의 파일을 하나로 묶어주는 일종의 유틸리티라고 할 수 있다.
하지만, 거의 대부분 tar는 gzip이나 compress등과 같은 압축유틸리티와 함께 사용을 하는 것이 일반적이다.

또한 tar옵션에는 z라는 옵션이 있기 때문에 tar명령어만으로 압축하고 풀 수 있기때문에 tar만으로도 효율적인 파일관리를 할 수있다.


사용형식

 파일묶기       : tar cvf 파일명.tar 파일(디렉토리)
 묶은컥瞿릴?  : tar cvf 파일명.tar
 파일풀기       : tar xvf 파일명.tar

 묶고압축하기     : tar cvfz 파일명.tar.gz 파일(디렉토리)
 묶고압축된 파일 보기 : tar tvfz 파일명.tar.gz 
 묶고압축된파일 풀기 : tar xvfz 파일명.tar.gz

이 글은 스프링노트에서 작성되었습니다.

'It's IT > It's System(linux,win)' 카테고리의 다른 글

VI명령어  (0) 2007.12.14
PING  (0) 2007.12.14
LINUX 자주쓰는 명령어  (0) 2007.12.14
리눅스 libc 패키지 (The Linux libc Package)  (0) 2007.12.13
리눅스 디렉토리  (0) 2007.08.17
[2007 IT히트상품] 인체공학 디자인 매력 한달만에 25만대 판매
휴대폰 팬택계열 '돌핀슬라이드'
 



팬택계열(부회장 박병엽)이 지난 10월 중순 출시한 스카이 `돌핀슬라이드'(IM-U220, IM-U220K)는 출시 한 달여 만에 약 25만대(11월말 기준)가 판매되며 3G 시장에서 `돌풍'을 일으키고 있다. 일 개통량이 3000∼4000대 육박하는 판매실적을 기록하며 하반기부터 본격화된 3G폰 전쟁에서 선봉장 역할을 톡톡히 하고 있다.

돌핀슬라이드는 평평한 슬라이드폰에 5.8도의 각도를 더해, 살아 숨쉬며 힘차게 뛰어오르는 돌고래의 모양을 구현한 3G폰이다. 애칭도 돌고래 디자인을 따라 `돌핀' 슬라이드로 붙여졌다. `3G' `영상통화' 등 자칫 차갑게 느껴질 수 있는 첨단 IT제품에 사랑스러운 디자인과 정이 가는 애칭을 더한 것이 성공 요인 중 하나다.

또 손에 쥐었을 때 착 감기는 뛰어난 `손맛'과 슬라이드가 올라가면 뺨에 밀착되는 인체공학적 디자인이 사용편의성을 높여 사랑을 받고 있다.


여기에 2대의 양철 로봇이 서로에게 다가가지만 직선으로 만들어져 안아 주지 못하는 안타까운 상황을 담은 돌핀슬라이드 `로봇편' 광고가 소비자들의 많은 사랑을 받으며 판매진작에 크게 기여하고 있다. `곡선'이라는 제품의 특징을 `따뜻하게 감싸 안아 주는 스킨십'으로 재해석한 것이다



출처 : http://www.dt.co.kr/contents.html?article_no=2007121402014531686002

'It's IT > It's mobile' 카테고리의 다른 글

Mobile Network Code  (0) 2007.12.07
구글 안드로이드 SDK  (0) 2007.11.14
WINC와 Callback URL SMS 개념잡기  (0) 2007.08.17
이동통신 주요 시스템 개념  (0) 2007.08.17
HLR(Home Location Register)  (0) 2007.08.17

왜 우주선을 타고 별들을 향해 여행하는 것이 불가능한지 12 가지 이유라는 내용의 글을 읽어 보았다.

원문의 출처 는 Encyclopedia 라고 하는데 링크가 깨져 있어서 찾을 수 없었다. 다만 번역 되어 있는 글을 볼 수 있었는데 번역 하신 분들은 "IT사역위원회" 라고 하신다.


이 글을 거꾸로 생각해 보면 12가지 문제를 해결하면 어느정도 우주여행의 실마리를 찾을 수 있다는 이야기가 된다. (자아 이제 하나씩 살펴보자) ^^


  1. 신체의 악화 (Deterioration)
    • 문제점: 중력이 없는 상태에서 오래동안 있으면 몸이 약화된다.
    • 실마리: 가속과 감속에 필요한 가속압력을 이용한다.
  2. 낡아짐과 고장 (Wear and Breakdown)
    • 문제점: 오래 동안의 우주선 가동으로 장비가 낡아져 고장이 생긴다. (15년간의 가동으로점도 다양한 문제점이  있었음)
    • 실마리:  계속 개선되어야 할 사항이고, 이에 따른 우주여행의 시간에 제약이 따름. (중간 기착지 필요)
  3. 방사능 위험 (Radiation Hazards)
    • 문제점: 우주공간에 존재하는 고에너지 입자(X-ray,Cosmic rays ... )들이 사람에게 문제가 됨.
    • 실마리: 자기장이나 차폐막과 같은 구조물 아래 중앙 부분에 거주공간이 존재하여야 할 필요가 있음.
  4. 유성들 (Meteoroids)
    • 문제점: 크거나 작은 물체에 충돌할 가능성이 매우 높다.
    • 실마리: 이 문제 때문에 보다 정밀한 관측 장치 및 "소규모 방해물 요격장치" 회피장치 등이 필요하다.
  5. 가능성 없어 보이는 수리작업 (Repairs Unlikely)
    • 문제점: 100년 이상 걸리는 여행에 심각한 고장이 일어난다면 수리는 불가하다.
    • 실마리: 2번 문제와 더불어 이러한 문제 때문에 우주선을 높은 속도 까지 가속하여 운항시간을 단축 하여야 하며, 중간 기착지가 필수 적이다. 가능하면 단거리 항행 쪽이 유리하다.
  6. 멀미 (Motion sickness)
    • 문제점: 원심력에 의한 중력 유지는 코리올리의 효과(Coriolis effect) 때문에 심각한 멀미를 유발 할 수 있다. (신체적인 혼란)
    • 실마리: 가속압력을 중력유지에 사용한다면 원심력에 의한 문제는 사라진다.
  7. 공기오염 (Air Pollution)
    • 문제점: 작은 공간에서 100년 이상 온전한 환경의 균형을 유지하는 것은 힘들다.
    • 실마리: 이 또한 항행 시간을 단축 하는 방법과 생명유지 장치의 개선 밖에 방법이 없다. 광속에 가까운 속도까지 가속 하게 되면 상대적으로 우주선 안의 시간이 느려지게 된다.
  8. 에너지 공급 (Energy Sources)
    • 문제점: 태양에너지를 쓴다고 하더라도, 에너지 문제는 해결되지 않는다.
    • 실마리: 태양에너지도 쓸수 있지만, 원자력 에너지와 같은 다른 에너지도 써야한다.
  9. 사람들 사이의 분쟁 (Interpersonal Conflicts)
    • 문제점: 갇혀진 공간에서의 삶은 심각한 문제를 초래한다.
    • 실마리: 7번의 문제가 생물학적 문제라면, 9번의 문제는 사회적 문제이다. 문제해결의 실마리는 동일 할 것이다.
  10. 너무도 광대한 거리 (Distances Too Vast)
    • 문제점: 가까이에 있는 10광년 거리의 별에 가더라도, 현재 기술로는 330년 에서 3만년 정도가 걸릴 것 이다.
    • 실마리: 광속에 가까운 속도 까지 가속하는 방법이 실용화 되기 전까지는 장거리 우주여행은 거의 불가능 한게 사실이다. 현재의 기술로는 이룰 수 없다.
  11. 무선 통신 (Radio contact)
    • 문제점: 너무나 먼 거리 때문에 무선통신도 역시 어렵다.
    • 실마리: 광속보다 빠른 통신 속도는 불가능 하다. 중간기착지도 도착하기 전 까지는 통신 없이 항해하는 수 밖에 없다.
  12. 가능성 없는 목적지 (Objective Unlikely)
    • 문제점: 한번의 여행으로 유용한 정착지를 발견하지 못한다면, 다른곳으로 갈 연료가 없다.
    • 실마리: 광속에 가까운 속도로 가속하는 방법이 있다면, 가장 가까운 별까지 왕복 하는 것이 가능해 진다면, 한발씩 전진하는 것은 가능하다.

여기까지 대충 살펴 보았는데, 장거리 우주여행의 가장 큰 문제는 그 광대한 거리에 따른 시간의 문제가 가장 심각하다. 장거리 우주여행을 위한 가장 기초적으로 해결되어야 할 일은, 약 5광년의 거리를 여분의 물자를 싫고 10년 안의 시간에 도착하여 물자를 내려놓고, 다시 10년안의 시간에 되돌아 올 수 있는 방법을 개발하는 것이다. 여기에는 적은 연료로 오랫동안 가속 할 수 있는 기술이나, 충분한 가속을 오래동안 유지할 수 있는 기술, 광속에 가까운 속도 까지 가속 할 수 있는 기술 등이 중요한 영역이 될 것이다.


우주선을 광속의 99% 까지 가속하는 방법이 가능하다면 12가지 중 절반 이상을 차지하고 있는 시간적인 문제(1,2,5,6,7,9,10)는 어느정도 해결이 가능하다. 약 5광년의 거리에 중간 기착지를 만들었다고 쳤을때 여기까지 도착하는 시간은 가속하는 압력에 따라 아래와 같이 계산 해 볼 수 있다.
압력 실제 5광년을 여행하는 시간
실제(상대) 가속시간
우주선 안의 상대적인 시간
1G 2194일, 6년
350일(278일) 766일 (가속감속 556일, 210일 무중력)
2G 2018일, 5.5년
175일(139일) 513일 (가속감속 278일, 235일 무중력)
3G 1960일, 5.3년
116일(93일) 429일 (가속감속 186일, 243일 무중력)
5G 1913일, 5.2년
70일(55일) 361일 (가속감속 110일, 251일 무중력)
10G 1878년, 5.1년
35일(28일) 310일 (가속감속 56일, 254일 무중력)
25G 1857일, 5.0년
14일(11일) 280일 (가속감속 22일, 258일 무중력)
급하게 계산해 보느라 틀렸을 수도 있지만 결과는 흥미로왔다. 급속한 가속을 할 경우 우주선 안에서 280일이 지나면  도착이 가능하다. 1G의 압력 이면 지구의 중력과 동일한 환경이 되는데, 약 2년의 항해시간 중에 6개월 정도는 무중력 하에서 보내게 된다. 이 정도의 환경이면 어느정도 우주여행을 할 수 있지 않을까? 문제는 광속의 99% 까지 안정적으로 가속 및 감속하는 기술이 될 것이다.

관련글:
2007/11/29 -- 외계인과 우주전쟁을 한다면 #10 - 우주전함 간의 전투

'It's WEB' 카테고리의 다른 글

HTML <!DOCTYPE> tag  (0) 2007.08.27
HTTP Status Messages  (0) 2007.08.27
HTML 4.01 Entities Reference  (0) 2007.08.27
OPML(Outline Processor Markup Language) 이란 무엇인가?  (0) 2007.08.17
Mashup: 신종 웹 애플리케이션  (0) 2007.08.17
출처 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/C/Documents/CprogramingForLinuxEnv/Ch11_Structure

#include <stdio.h>
#include <string.h>

struct userinfo
{
char name[20];
int age;
};

int main(int argc, char **argv)
{
int age;
int i;
char buf[40];
struct userinfo myfriend[5];

for (i = 0; i < 5; i++)
{
printf("Name : ");
fgets(buf, 19, stdin);
buf[strlen(buf)-1] = '\0'; // <--- 1
sprintf(myfriend[i].name, "%s", buf);

printf("Age : ");
fgets(buf, 19, stdin);
age = atoi(buf);
myfriend[i].age = age;
}

printf("=======================\n");
for (i = 0; i < 5; i++)
{
printf("%12s : %d\n", myfriend[i].name, myfriend[i].age);
}
}
fgets(3)은 키보드로 부터 문자열을 입력받기 위해서 사용하는 함수다. 1은 키보드로 입력된 개행문자를 제거하기 위해서 사용했다.

'It's my study ^^ 과연' 카테고리의 다른 글

open  (0) 2007.12.15
Library 만드는 법  (0) 2007.12.14
이중 포인터  (0) 2007.12.13
대입연산자  (0) 2007.12.12
Primitive Data Types  (0) 2007.12.10
출처:http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/C/Documents/CprogramingForLinuxEnv/Ch10_Pointer#s-10
포인터는 데이터가 저장된 주소를 가리키는 데이터 타입이다. 이는 어떠한 종류의 데이터타입이라도 가리키는 포인터의 생성이 가능함을 얘기한다. int 형 포인터, float 형 포인터가 좋은 예가 되겠다. 2차원 포인터는 포인터 데이터 타입을 를 가리키는 포인터이다. 이러한 특징 때문에 포인터의 포인터라고 부르기도 한다. 2차원 포인터의 가장 단적인 얘는 라인단위 편집기를 예로 들 수 있을 것이다. 아래와 같은 문장이 있다고 가정해 보자.

Hello World!!
My name is yundream.
What's your name.
Thank you.
 


이 문장을 각각의 라인단위로 저장을 하는 프로그램을 만든다고 가정해 보자. 그렇다면 4개의 char 형 포인터가 필요할 것이다. 이제 이 4개의 char 형 포인터 데이터를 저장하기 위한 포인터변수를 만들면 될것이다. 포인터를 저장하는 포인터변수인 셈이다. 포인터의 포인터변수는 별표를 하나 더 붙이는 것으로 간단히 선언할 수 있다. 위 예의 경우 char 포인터를 저장하기 위한 포인터는 아래와 같이 선언할 수 있다.

char **data;
 

차원이 늘어날 수록 그만큼의 별표를 붙여주면 된다. 사용할일이 거의 없겠지만, 3차원 포인터는 다음과 같다.

char ***data;
 


그럼 2차원 포인터를 이용해서 위의 문장을 출력하는 줄단위 출력 프로그램을 만들어 보자. 포인터형 변수의 이름은 char **data로 선언한다. 선언을 했다면, 메모리 할당을 해야 할것이다. 2차원 포인터 이므로 2번의 메모리 할당이 이루어져야 한다.

   1. 4개의 문자형 포인터를 저장하기 위한 공간 할당.
   2. 각 문자데이터를 저장하기 위한 공간할당.

우선 문자형 포인터를 저장하기 위한 공간은 다음과 같이 할당할 수 있다.

char **data;
data = malloc(sizeof(char *)*4);
 

데이터를 저장하기 위한 공간을 할당하려면, 데이터 타입의 크기를 알고 있어야 한다. 앞서 sizeof를 이용하면 데이터 타입의 크기를 얻어올 수 있음을 언급했다. 우리가 저장하기 위한 데이터 타입은 문자형 포인터이므로 sizof(char *)를 이용해서 크기를 얻어올수 있다. 이게 4개가 필요하므로 *4를 해주면 4개의 문자형 포인터 데이터를 저장하기 위한 공간을 할당받게 된다. 포인터 데이터 타입의 크기는 4 이므로 16byte 만큼의 공간을 할당받게 된다.

이제 4개의 문자형 포인터가 사용할 공간을 할당하고, 그 주소값(포인터)를 얻어와야 할 차례다. 원칙적으로 하자면, 각 문자열의 크기만큼 다르게 할당해야 겠으나, 그렇게 하면 귀찮으니, 모든 문자열을 넣기에 충분하다고 생각되는 25byte 를 동일하게 할당해보도록 하겠다. for 루프문을 이용하면 간단하게 할당할 수 있다.

char **data
data = malloc(sizeof(char *)*4);
for (i = 0; i < 4; i++)
{
    *data = malloc(sizeof(char) * 25);
    *data++;
}
 

'It's my study ^^ 과연' 카테고리의 다른 글

Library 만드는 법  (0) 2007.12.14
구조체(Struct)  (0) 2007.12.13
대입연산자  (0) 2007.12.12
Primitive Data Types  (0) 2007.12.10
C/C++ Language  (0) 2007.12.06


libc: ISO 8859.1, , YP 함수들, crypt 함수들, 기본적인 Shadow 루틴들 (기본적으로는 포함되지 않음), ... libcompat에 있는 호환성을 위한 기존의 루틴들 (기본적으로 수행되지 않음),영어,불어 또는 독어 에러 메세지들, libcourses에 있는 bsd 4.4 lite와 호환성 있는 화면 핸들링 루틴들, libbsd에 있는 bsd와 호환되는 루틴들, libtermcap에 있는 화면 핸들링 루틴들, libdbm에 있는 데이타베이스 관리 루틴들, libm에 있는 수학계산 루틴들, crt0.o???에 있는 프로그램 실행을 위한 항목, libieee???에 있는 바이트 sex 정보 (우스운 ???를 대신할 정보를 보내주세요.), libgmon에 있는 사용자 공간 프로파일링(Profiling). 리눅스 libc 개발자들 중 누군가가 이 장을 써 주기를 바랍니다. 지금 내가 말할 수 있는 것은 실행할 수 있는 형태인 a.out이 공유 라이브러리 만들기의 변화를 의미하는 elf(executable and linkable format)으로 바뀔 것이라는 것뿐이다. 현재는 두 형태(a.out과 elf)가 모두 지원된다.

'It's IT > It's System(linux,win)' 카테고리의 다른 글

VI명령어  (0) 2007.12.14
PING  (0) 2007.12.14
LINUX 자주쓰는 명령어  (0) 2007.12.14
linux tar  (0) 2007.12.14
리눅스 디렉토리  (0) 2007.08.17

+ Recent posts