Blog | Tag | Local | Media | Guest | Login  RSS
삽질에 해당되는 글 87건
2008.12.19 :: IPv4 Address
2008.12.03 :: batch 파일 활용
2008.12.03 :: batch 파일 정복
2008.11.26 :: 텍스트 에디터


리눅스 공부용 중고 놋북을 구입하여 CentOS를 설치 했다.

2일간에 사투끝에 총 3번에 설치만에 끝났다.

우선 처음 설치는 GUI 환경에서 설치하였고 설치 후 X-Window가 뜨질 않는 증상이였다.

혹시나 해서 Text 기반으로 설치하여도 동일하여 인터넷 뒤지면서 이것저것 삽질좀 했다.

대충 감을 잡고 마지막 GUI로 다시 설치!

CentOS 설치 (GUI/CLI)

X-Window로 부팅 되나 화면이 나오지 않음

KLDP 검색 및 설정

1. CLI로 부팅 설정

grub 설정 파일(/boot/grub/grub.conf 또는 /boot/grub/menu.lst) 파일을 열어 다음과 같이 kernel 항목 끝에 사용할 runlevel을 써주면 됩니다.


...
    kernel /boot/vmlinuz-2.6.19-10hs ro root=LABEL=/ vga=0x314 splash=silent 3
...

grub 메뉴에서 X 모드랑 텍스트 모드를 고르고 싶으면


title Asianux OpenEdition 3-up X mode  (2.6.19-10hs)
    root (hd0,2)
    kernel /boot/vmlinuz-2.6.19-10hs ro root=LABEL=/ vga=0x314 splash=silent
    initrd /boot/initrd-2.6.19-10hs.img

title Asianux OpenEdition 3-up Text mode  (2.6.19-10hs)
    root (hd0,2)
    kernel /boot/vmlinuz-2.6.19-10hs ro root=LABEL=/ vga=0x314 splash=silent 3
    initrd /boot/initrd-2.6.19-10hs.img

2. Graphic Device 설정

vi /etc/X11/xorg.conf

Driver "i810" -> Driver "vesa"

startx

설치 완료



키 정리

CTRL + A : 맨앞으로 이동, CTRL +  E: 맨 끝으로 이동

CTRL +  F : 앞으로 하나씩, CTRL + B: 뒤로 하나씩 이동

Route Command

 

명령

설명

interface fastethernet 0/0.1

서브인터페이스를 만듬

interface serial 5

인터페이스 시리얼 5를 위한 환경설정모드로 전환시킴. show 명령과 함께 사용되기도함.

ip address

인터페이스상에 IP 어드레스를 설정

line

사용자모드 패스워드를 설정하거나 혹은 바꾸기 위한 환경설정모드로 전환시켜줌

line aux

보조인터페이스 환경설정 모드로 전환시켜줌

line console 0

콘솔 환경설정모드로 전환시켜줌

line vty

VTY(Telnet)인터페이스 환경설정모드로 이동시킴

logging synchronous

커맨드 라인 입력에 덮어쓰기를 막기 위해 콘솔메시지를 중지시킴

logout

콘솔세션을 로그아웃함

media-type

인터페이스상의 하드웨어 미디어 형식을 정함

no shutdown

인터페이스를 작동시킴

ping

IP Connectivity를 테스트함

router rip

라우터 rip 환경설정모드로 전환시켜줌

service password-encrypton

사용자모드와 enable password를 암호화함

show controllers s0

인터페이스의 DTE혹은 DCE상태를 보여줌

show history

디폴트로 지난 10번의 입력된 명령을 보여줌

show interface s0

인터페이스 시리얼 0의 통계를 보여줌

show run

show running config의 단축명령. 현재 라우터상에 구동중인 환경설정을 보여줌

show start

show startup-config의 단축명령. NVRAM내에 저장된 백업환경설정을 보여줌

show terminal

환경설정된 history size를 보여줌

show version

라우터의 통계를 보여줌

shutdown

인터페이스를 administratively-down 모드로 전환시켜줌

tab

여러분을 위한 명령어 입력을 끝냄

telnet

IP connectivity를 테스트하고 라우터를 환경 설정하는 명령

terminal history size

디폴트10인 history size를 256으로 바꿔줌

trace

IP 연결성을 테스트함


★1. The IOS and Its User Interface (P26)


CLI (Command Line Interface)

IOS로 작동되는 Cisco Routers와 Switches는 CLI를

통해 기본적인 환경설정을 한다. 한마디로~메뉴 방식이나 아이콘 방식이 아닌 껌정 화면에

명령어 입력 방식이라는 뜻이다.


★2. Router Component (P26)


☞RAM (Random-Acces Memory)

전원이 켜진 상태의 컴퓨터에 정보를 저장하는데 사용한다.

Cisco 라우터는 라우팅 테이블 그리고 NVRAM에 있는 하드웨어 어드레스 캐쉬에 있는 IOS를 저장

하기 위해 RAM을 사용한다. 한마디로 공연을 하기 위한 무대라고 생각하라...^^

O 임시적으로 Configuration file을 저장한다.(휘발성 메모리)

O Show running-config (같은 명령어=write term)- RAM의 Config를 확인하는 명령어

기타 RAM에서 작동되는 명령어

o show version

o show process cpu

o show mem

o show buffers           ====> 이런 것이 있다고 알고~ 꼭!!! 해봐라~^^


☞ROM (Read Only Memory)

이 칩은 장치의 부팅(순서)에 도움을 주기위해 컴퓨터에서 사용된다.

Cisco 라우터는 디폴트로 파워온 셀프 테스트를 실행하고, 플레쉬 메로리에서 IOS를 찾고 로드하기

위한 부트스트립 사용한다.


- Power On했을 경우 Boot strap Program, Os Software를 진단한다.


@ROM 기능 4가지

1> Boot Strap

2> POST (Power On Self Test)

3> Mini IOS : Flash의 IOS가 이상이 있을 때 작동된다. (기본적인 기능만 있다.)

4> Rom Monitor : Mini IOS가 이상이 있을 때 작동된다.


☞Flash : EEPROM-Electronically Erasable Programmable Read-Only Memory


- 전기적으로 지울 수 있는 프로그래머 읽기 전용 메모리....^^;

  한마디로 보통 롬은 지울 수 없지만 FLASH메모리는 자기가 원하는 작업 환경을 위해

  여러 가지를 사용한다는 뜻이다. 이건 쉽지...ㅋZ

- IOS Software image를 저장한다.

- IOS Software upgrade 또는 교체할 수 있다.

- show flash로 확인.


☞NVRAM (Nonvolatile RAM) – 비 휘발성 RAM


- Router Configuration File을 저장한다.

O show startup-config

O Router#erase startup-config ß--------NVRAM 파일 삭제


☞Interfaces = Network 연결


예) Cisco Router 2500기종의 Interfaces는 Ethernet Interface 1개, Serial Inerface 2개

-LAN interface : Ethernet, Fast-Ethernet, Token-Ring, FDDI

Serial interface : V.35 Cable, RS232C Cable등을 이용하여 DCE 장비로 접속된 후 전용선 혹은

공중선 인터넷과 통신할 수 있는 정보를 제공한다.

-DCE는 라우터와 라우터 간의 clock rate를 조절하여 패킷을 전송한다.

Show interface serial 0 의 명령어에서 보여줄 수 있는 예

1) Serial 0 is up , line protocol is up

- 정상적인 작동

2) Serial 0 is up , line protocol is down

- Clocking 혹은 Framing에 문제

- Clock rate 설정 안했을 경우 문제

- Option 설정의 문제

3) Serial 0 is down , line protocol is up

- Cable 이나 Interface 문제

4) Serial 0 is administratively down , line protocol is down

- Interface가 active 되지 않은 상태 – 어떻게 하냐구요.

- Router#config t ß-------- config terminal              ♦ ß= enter

- Router(config)#interface s0 ß-------- interface 환경설정 mode

- Router(config-if)#no shutdown ß-------- interface active 활성화~

- Router(config-if)#^Z ß- interface mode에서 privileged mode로 이동

- Router#copy running-config startup-config


★3. Command-Line Interface(CLI)


EXEC mode – Router의 Console(직접), AUX(모뎀), Telnet을 통해 Cisco IOS를 Access(접속)할 수 있다.

IOS 명령라인으로의 access를 EXEC 세션이라 부른다. EXEC 다른 프로그램의 수행을 제어하는 운영체제.


☞Telnet Password 설정방법


Router# conf t ß-------- 환경설정 mode로 이동

Router(config)# line vty 0 4 ß-------- Telnet 접속 터미널 정의

Router(config-line)# login ß-------- login 설정

Router(config-line)# password aaa ß-------- Password 설정

Router(config-line)# ^Z ß-------- ^Z or end

Router#copy running-config startup-config ß-------- RAM에서 NVRAM으로 이동


Router(config-line)#no login à Password를 입력하지 않고 라우터로 Telnet접속가능

Router(config-line)#exec-timeout 0 0 -> Telnet에 대한timeout을 0으로 세팅하거나

timeout이 발생하지 않도록 한다. 중요하진 않지만.. 알아두자~!!

O show user - 현제 활성화된 모든 콘솔포트와 VTY 포트를 보여준다.

O show session – 라우터와 원격 장치와의 연결을 확인하기 위한 명령어.

                   여러 라우터를 거친 목록을 확인할 수 있다.

O clear line 0 - 0번 터미널 접속자를 강제로 접속해지 시킨다.

O show session으로 나온 목록은 disconnect 명령어를 입력함으로써 목록을

               지울 수 있다.


☞Telnet으로 Router에 처음 접속했을 때 각 Mode


Password : aaa ß------ Telnet Pass를 물어온다.

Router> en ß----- User mode , enable을 입력한다.

Password : bbb ß----- enable Password or Secret Password를 입력한다.

Router#        ------- enable mode or privileged mode,

Router#config t ß----- config terminal

Router(config)# ----- global mode or configuration mode

Router(config)#int s 0 ß----- interface serial 0

Router(config-if)# ----- interface mode : interface의 환경설정 mode

Router(config-if)#^Z

Router#exit or logout ß-------- Telnet 접속 종료


☞각 mode에 대해 잠시 봅시다


Router> ? ß----- User mode 에서 ?를 치면 각 parameter를 볼수 있다.

ping

show

enable

기타등등 기본적인 show 기능과 Ping 기능을 지원합니다.


Router# -------enable mode or Privileged mode라고 한다.

User mode로 돌아가려면 disable을 입력하고 enter

기본적인 설정모드로 들어갈수 있는 mode라고 생각하면 된다.


☞암호화와 호스트 네임 변경.


Router#config t

Router(config)# ----- global mode or configuration mode라고 한다.

Router(config)#enable Password aaa ß----- enable password 입력

Router(config)#enable secret bbb ß----- secret password 입력

Secret는 암호화 password라고 하고 enable 보다 더 우선권이 있다.

Router(config)#hostname NRC ß------ hostname 변경


☞인터페이스 모드에서 설정 할것


NRC(config)#interface serial 0 ß------ interface mode로 들어가기

NRC(config-if)#no shutdown ß------ interface 활성화

NRC(config-if)#ip address 200.200.200.1 255.255.255.252 ß----ip address 입력

NRC(config-if)#bandwidth 1984 ß------ E1속도 지정

NRC(config-if)#encapsulation HDLC ß------ Cisco Router의 기본 설정

NRC(config-if)#description [test E1 서울-부산] ß-- interface에 대한 설명

이외에도 많은 interface 설정값들이 있답니다. 특정 interface의 고유한 값을

입력하는 곳이 interface mode입니다.


☞다양한 Config mode를 한번 볼까요


Router(config-if)# ß------ interface mode : Ethernet, Serial

Router(config-router)# ß------ Router mode : Routing Protocol에서 사용

Router(config-line)# ß----- Line mode : Console, Aux, Telnet

Router(Config-router-map)# ß------ Route Map mode

Router(config-subif)# ß------ Subinterface mode : 아주아주 중요

Router(config-controller)# ß------ Controller mode

위의 모드에서는 몇가지는 알지만 모르는 것도 있다. 암튼 이러한 것들이 있다는 건

알아야 할 것이다. 사실 나도 밑에 3가지는 사용 하지 않아서 잘~~^^;;


★4. Navigating The IOS CLI (쉽게 사용할 수 있는 기능)


☞이 파트에서는 ?, Tab, 단축키의 기능이 중요합니다.

하지만 시험 볼땐 단축키가 먹히지 않을 경우가 있으니 명령어 하나하나 다 치고 외우는 것이 좋다.

Router#show c? ß------- C로 시작되는 모든 단어를 보여준다.

Clear clock configure connect copy

Router#show cl ? ß------- cl ?를 하면 위에서 보듯이 cl로 시작되는 단어를 보여줌

Router#show cl을 실행 할 경우 두게 이상의 명령어가 존재하므로 아래와 같은 오류를 보여줌

%Ambiguous command 가 둘이기 때문에 애매한 명령어라는 오류발생...

Router#show clo + Tab ß------- clo로 시작되는 단어는 오직하나이기 때문에

Router#show clock ß------- 명령어 Full name을 보여준다.

Router#sh history ß------- 지금 까지 명령어를 수행했던 것을 default로 10개를 보여줌

En

Sh history

Show terminal

Sh int s 0

Sh flash

이런 식으로 보여준다.

Router#terminal history size ? ß-------- history buffer size를 조절가능

<0-256> size of history buffer

Router#terminal history size 20 ß-------- default 10에서 20으로 바꾸는 명령어


☞몇가지 알아두면 좋은 설정


-Clock rate 란 명령어 DCE Serial interface에 clocking을 제공하도록 설정

Router#config t

Router(config)#int s 0 ß--- DCE interface serial 0 환경설정으로 들어간다.

Router(config-if)#clock rate 64000 ß--- 64000으로 지정..


Router#sh controllers serial 0 ß-- 물리적 인터페이스 자체에 관한 정보를 표시한다.


★6. Configuration Pacesses and the Configuration file(P34)


Router(config-if)#Ctrl+Z or end ß-- interface mode에서 바로 privileged mode로 이동

Router#

Router(config-if)#exit ß-- interface mode에서 global mode로 이동

Router(config)#exit ß--- global mode에서 다시 privileged mode로 이동

Router#


★8. Managing Configuration file


Router#sh run ß--- show running-config(=write term) : RAM에 config확인

Router#sh start ß--- show startup-config(=show config) : NVRAM 확인

Router#erase startup-config ß--(=write erase) : NVRAM 설정 삭제

다양한 Copy 명령어 이해필요, 2가지 예

Router#copy tftp flash ß--- IOS upgrad때 사용

Router#copy start tftp ß--- NVRAM에 있는 file을 backup


☞중요한 개념 3개


Config terminal : 운영자를 global configuration mode로 보내고 running-config mode의

설정을 바꿈

Config memory : startup-config를 running-config로 복사 (=copy shartup run)

Config network : TFTP호스트에 저장된 설정을 running-config로 복사


Setup mode를 종료하고 싶을 때 : Ctrl+C


★9. Cisco Discovery Protocol – Layer2(Data link)계층의 작용


Cisco의 독자적인 프로토콜로서 인접한 Cisco장비에서 하드웨어 타입과 소프트웨어 버전, 그리고

Cisco 장비가 현재 사용하고 있는 활성화된 인터페이스에 대한 정보를 알려주는데 사용된다.

장비 간에는 SNAP(Subnetwork Access Protocol)프레임을 사용하며 라우팅은 할 수 없다.

(라우팅이란 패킷을 발신지부터 목적지까지 어떻게 보낼 것인가를 결정하는 기본적인 과정.)

Router#show cdp ß---- cdp 의 update 와 holdtime 시간을 알수 있다.

Global cdp information : (= show cdp interface)도 마찬가지

Sending CDP packets every 60 seconds ß-- default update 60초

        (기본 60초마다 아웃 라우터 확인)

Sending a holdtime value of 180 seconds ß-- default holdtime 180초

        (기본 180동안 연락 없음 삭제)

Router(config)#cdp timer 90 ß---- update 시간 조정

Router(config)#cdp holdtime 240 ß---- holdtime 시간조정

CDP는 모든 Cisco Router에 default로 enabled 되어있다.

Router(config)#cdp run ß---- global cdp enable 활성화!!

Router(config)#no cdp run ß---- global cdp disable 비활성화!!

위의 명령어는 라우터 전체의 CDP를 활성화 시키거나 비활성화 시키는 명령어.

Router(config-if)#cdp enable ß---- interface mode cdp enable

Router(config-if)#no cdp enable ß---- interface mode cdp disble

위의 명령어는 일정 인터페이스의 CDP만을 활성화 시키거나 비활성화 시키는 명령어.

Router#show cdp neighbor ß---- 직접적으로 연결된 장치의 정보를 보여준다.

Divice ID : 장치의 호스트명

Local interface : CDP 패킷을 받는 포트 or 인터페이스

Holdtime : CDP 패킷이 더 이상 들어오지 않을 때 , 라우터가 기존의 정보를

버리지 않고 유지할 수 있는 시간 시간이 다 지나면 삭제!!

Capability : 인접장치(라우터, 스위티, 리피터)의 Capability

Platform : Cisco 장치의 종류 Cisco 2500등

Port ID : CDP 패킷이 브로드캐스트 되는 인접장치의 포트나 인터페이스

Router#show cdp neighbor detail ß---- show cdp neighbor의 정보 + ip address

+ version (동일한 명령어 Router#show cdp entry )

암튼 show cdp neighbor보다 더 자세한 내용을 출력하는 명령어...^^

Router#show cdp traffic ß---- 인터페이스 트래픽 정보 – in, out CDP 패킷

및 에러값을 보여준다.(흐름을 보여준다. 예를 들어 56패킷을 보냈고 38패킷을 받았다.)

출처 : [기타] 인터넷 : http://www.roseme.net


IPv4 Address

   Address Block             Present Use                       Reference
   ---------------------------------------------------------------------
   0.0.0.0/8            "This" Network                            [RFC1700, page 4]

   10.0.0.0/8           Private-Use Networks                  [RFC1918]

   14.0.0.0/8           Public-Data Networks                  [RFC1700, page 181]

   24.0.0.0/8           Cable Television Networks            --

   39.0.0.0/8           Reserved but subject
                           to allocation                                [RFC1797]

   127.0.0.0/8          Loopback                                  [RFC1700, page 5]

   128.0.0.0/16         Reserved but subject
                           to allocation                                --

   169.254.0.0/16       Link Local                                --

   172.16.0.0/12        Private-Use Networks               [RFC1918]

   191.255.0.0/16       Reserved but subject
                           to allocation                               --

   192.0.0.0/24         Reserved but subject
                           to allocation                               --

   192.0.2.0/24         Test-Net

   192.88.99.0/24       6to4 Relay Anycast                  [RFC3068]

   192.168.0.0/16       Private-Use Networks              [RFC1918]

   198.18.0.0/15        Network Interconnect
                           Device Benchmark Testing         [RFC2544]

   223.255.255.0/24     Reserved but subject
                           to allocation                               --

   224.0.0.0/4          Multicast                                 [RFC3171]

   240.0.0.0/4          Reserved for Future Use            [RFC1700, page 4]


현장에 나가면 제일 많이 쓰는 장비(?)가 윈도xp깔린 컴퓨터이고 명령프롬프트인데, 그에 관해 정리된 부분이 없는거 같아서

함 정리해봤습니다. 틀린 점이나 수정/추가할 부분 있으시면 리플 달아주세요.

 

1.ping
2.ipconfig
3.nslookup
4.route
5.tracert
6.pathping
7.arp
8.netstat
9.nbtstat
10.hostname
11.ftp
12.telnet
13.tftp
14.getmac
15.ipxroute
16.netsh
17.proxycfg

 

 

 


1. ping
Packet Internet Groper의 약자로서, ip기반 유틸리티이고 icmp프로토콜을 이용합니다. ping에서 보내는 icmp패킷의 data영역은 소문자 abcdefghijklmnopqrstuvw를 반복해서 보냅니다. 핑의 경우, 상대 호스트에 icmp_reply가 열려 있어야 응답이 옵니다. 요즘은 보안상의 이유로 icmp_reply를 막아 놓은 경우가 많습니다.

 

예1) 아래의 경우, icmp_reply가 막혀 있어서 응답이 없습니다.
c:\>ping naver.com

 

예2) 아래의 경우엔 열려있어서 응답이 옵니다.
c:\>ping kr.yahoo.com

 

옵션을 예제로 보여드리겠습니다. 옵션 설명문은 ping /?로 알 수 있습니다.

 

예3)사용자가 ctrl-c로 멈추기 전 까지 무한정 핑을 날립니다.
c:\>ping -t kr.yahoo.com

 

예4)ip주소를 호스트이름으로 바꿔서 핑 날립니다. reverse dns가 설정되어 있는 ip만 가능합니다.

c:\>ping -a 211.115.101.150 (home.vip.krs.yahoo.com의 ip)

 

예5)핑을 10개만 날립니다.

c:\>ping -n 10 kr.yahoo.com

 

예6)보내는 버퍼 사이즈를 정합니다. 최대값은 65500입니다.
c:\>ping -l 2800 kr.yahoo.com
c:\>ping -l 65500 127.0.0.1

최대값은 주로 1hop 거리인 gateway나 루프백 테스트에서만 되는거 같습니다. 호스트마다 받아들이는 최대값이 다르게 되어있어서 그런 것이라 생각하고 있습니다.

 

-l옵션은 외부로 나가는 망이 로드밸런싱 구성이 되어 있을 때, mtu보다 큰 사이즈 (예:2800)를 보내서 정상적으로 되나 테스트 하는 용도로 많이 쓰입니다.

 

예7)보내는 패킷을 분할하지 않습니다. -l옵션과 함께 많이 쓰이는데, 보통 mtu는 1500이므로 icmp헤더 8바이트, ip헤더 20바이트를 뺀 1472이 최대값이 됩니다.
c:\>ping -l 1472 -f 127.0.0.1

 

예8)보내는 패킷의 ttl값을 변경합니다. 예제에서는 hop이 10개 이하인 경로에 대해서만 응답이 올 겁니다.
c:\>ping -i 10 ping.test.com

 

예9)TOS값을 정합니다. ip헤더에서 tos는 4비트만 할당되어 있는데, ping 에러메세지에서는 0~255의 값을 넣으라고 하네요. +_+ 0000,1000,0100,0001등 많이 쓰이는 값을 넣고 이더리얼로 돌려봐도 특별한 변화가 없습니다. 아직 뭔지 모르겠다는 뜻입니다. ^^
c:\>ping -v 1 ping.test.com

 

예10)traceroute처럼 경로를 보여줍니다. 1부터 9까지.
c:\>ping -r 9 ping.test.com

 

예11)경로별 응답온 시간을 보여줍니다. 1부터 4까지.
c:\>ping -s 4 ping.test.com

 

예12)응답이 없을 경우, 다음 시간(밀리초)까지만 기다리고 재시도합니다.
c:\>ping -w 100 null.test.com

 

예13)각 옵션은 짬봉해서 쓸 수 있습니다. 사실 -t옵션과 -l옵션이 제일 많이 쓰이죠. ^^
c:\>ping -t -l 2500 -s 4 test.com

 

 

 

 

 

2.ipconfig
unix계열의 ifconfig와는 달리 그냥 보여주는 기능밖에 못 합니다. dns와 dhcp에 관련된 조작만 조금 할 수 있구요. ㅎㅎ

 

예1)nic별로 nic이름, ip, netmask, gateway정보를 보여줍니다.
c:\>ipconfig

 

예2)wins서버, dns서버, mac주소등 몇 가지 정보를 더 보여줍니다.
c:\>ipconfig /all

 

예3)dhcp 설정일 때, dhcp서버에게 ip 임대 기간을 갱신요청 합니다. 어댑터 미지

정시, 모든 어댑터가 대상합니다.
c:\>ipconfig /release

 

예4)dhcp 설정일 때, dhcp서버에게 ip반납 후 새롭게 요청합니다. 어댑터 미지정시, 모든 어댑터가 대상합니다.
c:\>ipconfig /renew

 

예5)dns캐시 목록을 보여줍니다.
c:\>ipconfig/displaydns

 

예6)dns캐시 목록을 지웁니다. 주로 dns관련 문제로 dns서버를 바꿨을 때, 이 명령 후 테스트합니다.
c:\>ipconfig /flushdns

 

예7)ip주소를 갱신하고 ddns에 레코드를 등록합니다.
c:\>ipconfig /registerdns

dhcp갱신은 ipconfig말고도 시작->제어판->네트워크연결->nic우클릭->사용 안 함->사용. 이런 식으로 갱신해도 됩니다.

 

 

 

 

3.nslookup
name server lookup의 약자이고, dns질의를 해 보는 udp53포트 기반 유틸리티입니다. 네트워크 문제의 상당수가 dns관련 문제이니까 dns서버 동작원리에 대해서 알아두면 많은 도움이 됩니다.

 

예1)도메인에 대한 ip를 질의합니다.
c:\>nslookup www.test.com

 

예2)ip에 대한 reverse도메인 질의를 합니다.
c:\>nslookup 192.168.0.1

 

예3)옵션을 줘서 질의합니다.
c:\>nslookup
>www.test.com
server: 168.126.63.1
address:168.126.63.1

name:www.test.com
address:192.168.0.1

>192.168.0.1
server: 168.126.63.1
address:168.126.63.1

name:www.test.com
address:192.168.0.1

>server 10.0.0.1 (기본 질의 서버를 바꿉니다)
Default Server: ns.test.com
address: 10.0.0.1

>set all
(현재 설정되어 있는 기본 질의 옵션들을 보여줍니다)
>set type=any(기본 질의 타잎을 A(호스트)에서 ANY(도메인에 해당하는 모든 정보)

로 바꿉니다)
>test.com
test.com   internet address=192.168.0.1 (루트도메인 정보입니다)
test.com   MX preference = 10, mail exchanger = mail.test.com (메일서버가 이

중화되어 있을 경우, 여러 개의 값이 나옵니다.
test.com   nameserver = ns1.test.com (1차 네임서버)
test.com   nameserver = ns2.test.com (2차 네임서버)
test.com
      primary name server = ns1.test.com
      responsible mail addr = root.test.com
      serial = 2007010101 (임의의 숫자.보통 도메인 존 수정한 날짜로 합니다. yyyymmddhh)
      refresh = 28800 (초단위.갱신주기)
      retry = 14400 (초단위.갱신 실패시 재시도 주기)
      expire = 360000 (초단위.갱신 실패시 만료일)
      default TTL = 0

test.com   text =
      "v=spf1 ip4:192.168.0.10 -all" (화이트 도메인 관련 정보입니다. 메일서버 정책에 따르겠다는 설정)


test.com   nameserver = ns1.test.com
test.com   nameserver = ns2.test.com
mail.test.com internet address=192.168.0.10
ns1.test.com internet address=192.168.0.1
ns2.test.com internet address=192.168.0.2

>set type=mx (메일서버 질의)
>test.com
test.com   MX preference = 10, mail exchanger = mail.test.com
test.com   nameserver = ns1.test.com
test.com   nameserver = ns2.test.com
mail.test.com internet address=192.168.0.10
ns1.test.com internet address=192.168.0.1
ns2.test.com internet address=192.168.0.2

>set type=A (기본값. 호스트 질의)
>test.com
server: ns1.test.com
address:192.168.0.1

name:www.test.com
address:192.168.0.1

>?
가능한 옵션들이 다 나옵니다.

 

 

 

 

4.route
현재 호스트의 라우팅 보여주기 및 경로 재설정하는 유틸입니다. 라우팅이라고 하면 의아해 하시겠지만 ip프로토콜이 탑재된 호스트는 기본적으로 라우팅 기능을 할 수 있습니다.

 

예1)현재 라우팅 목록을 보여줍니다.
c:\>route print

 

예2)192로 시작하는 목록, 100이 포함되어 있는 목록을 보여줍니다.
c:\>route print 192*
c:\>route print *100*

 

예3)10.0.0.0/16을 목록에 추가합니다.
c:\>route add 10.0.0.0 mask 255.255.0.0 192.168.0.1 metric 10

 

예4)10.0.0.0/16의 메트릭을 변경합니다.
c:\>route change 10.0.0.0 mask 255.255.0.0 192.168.0.1 metric 20
(메트릭 변경은 윈도 네트워크정보의 tcp/ip설정 고급란에서도 가능합니다)

 

예5)기본 경로를 목록에 추가합니다.
c:\>route add 0.0.0.0 mask 0.0.0.0 192.168.0.1
(메트릭을 지정하지 않으면 기본메트릭20이 적용됩니다)
(기본 경로가 2개일 경우 기본 게이트웨이 산정은 메트릭에 의존하고, 메트릭이 동

일할 경우 랜덤하게 결정됩니다^^)

 

예6)추가된 목록 10.0.0.0/16을 지웁니다.
c:\>route delete 10.0.0.0 mask 255.255.0.0 192.168.0.1 metric 20

 

예7)추가된 라우팅 정보와 기본경로를 지웁니다. 라우터가 아니라 호스트일 경우,

이 명령어 후에는 반드시 기본 경로를 지정해줘야 합니다.
c:\>route -f

 

예8)추가 라우팅 목록이 재부팅 후에도 남아있도록 합니다.
c:\>route -p add 10.0.0.0 mask 255.255.0.0 192.168.0.1 metric 10

 

 

 

5.tracert
상대방 호스트까지 가는 경로를 보여줍니다. icmp를 쓰므로, 역시 ip기반 유틸리티입니다.
원리는 ttl(time to live)값을 1에서부터 1씩 늘려가면서 목적지에게 icmp type 8 echo request를 보내서 라우터마다 ttl값이 만료됐다는 메시지를 받음으로써, 각 hop마다의 라우터를 확인할 수 있습니다. 가끔 라우터-라우터 구간의 사설ip로도 응답이 오는 것도 이 때문입니다.

 

이것도 역시 보안상의 이유로 icmp type 0 echo reply나 icmp type 11 ttl exceeded를 비활성화 해 놓은 구간에서는 응답이 없어서 그 구간은 * 혹은 request time out으로 표시됩니다.

 

예1)www.test.com까지의 경로 확인
c:\>tracert www.test.com

 

예2)주소를 호스트이름으로 바꾸지 않는 옵션입니다. 처리속도가 엄청나게 늘어나므로 꼭 사용해주세요. ^^
c:\>tracert -d 192.168.0.1

 

예3)최대 홉 수를 10으로, 각 구간의 응답대기 시간을 500ms로 설정합니다.
c:\>tracert -h 10 -w 500 192.168.0.1

 


 

6.pathping
traceroute와 ping의 짬봉+통계치입니다. ^^ icmp를 쓰므로, 역시 ip기반 유틸리티입니다.

 

예1)이름변환 없이 진행합니다. (tracert의 -d옵션과 같음)
c:\>pathping -n 192.168.0.1

 

예2)최대 홉 수를 10으로, 각 구간의 응답대기 시간을 500ms로 설정합니다.
c:\>pathping -h 10 -w 500 192.168.0.1

 

예3)각 ping사이의 대기시간을 100ms로, 보내는 패킷의 source ip를 192.168.0.10으로 합니다
c:\>pathping -p 100 -i 192.168.0.10 192.168.0.1

 

예4)각 구간 사이의 layer-2 priority tag를 검사합니다. (802.1p QoS on the mac level)
c:\>pathping -t 192.168.0.1

 

 

 


7.arp
arp 캐시 테이블을 보여주고, 조정하는 유틸입니다.

 

예1)현재의 arp 캐시 테이블을 보여줍니다. 기본 저장기간은 5분이니까, 보여지는 목록은 5분동안의 통신된 내역입니다.
c:\>arp -a

 

예2)특정 호스트의 arp 테이블을 지우거나 전부 지웁니다.
c:\>arp -d 192.168.0.100
c:\>arp -d 192.168.*
c:\>arp -d 192.168.0.1*
c:\>arp -d *

 

예3)수동으로 arp 테이블에 호스트를 올립니다.
c:\>arp -s 192.168.0.200 aa-bb-cc-dd-ee-ff

 


 

 

8.netstat
소켓 인터페이스를 통해 연결되어진 내용을 보여줍니다. 아주 중요한 명령어 중에 하나죠.

 

예1) 주소 및 포트번호를 이름변환 없이 숫자로 보여주면서 모든 연결 및 대기 포트를 표시합니다. 제일 많이 쓰이죠. ^^
c:\>netstat -na

 

예2) 이더넷 통계를 보여줍니다. 물리계층 에러도 확인할 수 있어서 좋습니다
c:\>netstat -e

 

예3) 사용되는 프로토콜별로 통계를 보여줍니다. 보통 tcp,ip,udp,icmp를 보여줍니다.
c:\>netstat -s

 

예4) 연결을 만드는데 주관한 프로세스의 실행 프로그램을 모두 보여줍니다.
c:\>netstat -ba


예5) 모든 연결 중에 특정 프로토콜만 보여줍니다.
c:\>netstat -a -p TCP
c:\>netstat -a -p UDP

 

예6) route print와 같은 결과물을 보여줍니다.
c:\>netstat -r

 

 

 

9.nbtstat
NetBIOS인터페이스와 관련된 정보를 보여줍니다.

 

예1)Netbios 이름으로 ip와 mac정보등을 보여줍니다.
c:\>nbtstat -a 테스트서버

 

예2)ip주소로 NetBIOS이름, mac정보등을 보여줍니다.
c:\>nbtstat -A 192.168.0.1

 

예3)현재 시스템의 NetBIOS 이름 캐시와 해당IP를 보여줍니다.
c:\>nbtstat -c

 

예4)현재 시스템의 NetBIOS 이름들을 보여줍니다.
c:\>nbtstat -n

 

예5)arp -d *처럼 모든 넷바이오스 이름 캐시를 지웁니다.
c:\>nbtstat -R

 

예6)네트워크를 통한 이름처리 통계를 보여줍니다. 여기서 나오는 Name Server는 WINS서버를 뜻합니다.
c:\>nbtstat -r

 

 

 

 

10.hostname
현재 시스템의 호스트 이름을 보여줍니다. 리눅스에서는 호스트 이름도 바꾸는 기능이 있지만, 윈도에선 걍 보여주기만 합니다. ^^

예)주로 키보드 만지다가 마우스 잡기 귀찮을 때 쓰는 명령어입니다. ㅋㅋ
c:\>hostname

 

 


11.ftp
어떠한 이유에 의해서 윈도우 유틸리티를 사용 못 할 때가 있습니다. 그런 때를 대비해서 텍스트 모드의 사용법도 알아두면 요긴하게 사용됩니다. tcp20,21 포트 기반 유틸리티입니다.

 

c:\>ftp
ftp>open 192.168.0.1 (해당 호스트로 접속합니다. 불행히도 21번 포트를 제외한 다른 포트 지정은 안됩니다)
user: anonymous (익명연결의 경우)
password: 패스워드 혹은 익명일 경우 아무 문자나.
ftp>ls 혹은 dir (원격지 디렉토리 목록을 보여줍니다)
ftp>cd temp (원격지의 하위 디렉토리로 이동합니다)
ftp>get test.exe (파일을 다운로드합니다)
ftp>lcd \data (로컬 시스템의 경로를 바꿉니다)
ftp>put upload.exe (파일을 업로드합니다)
ftp>mget test1.exe test2.exe test3.exe (파일을 여러 개 다운합니다)
ftp>mput upload1.exe upload2.exe (파일을 여러 개 업로드합니다)
ftp>ascii (파일 전송 기본 모드를 ascii로 바꿉니다)
ftp>binary (파일 전송 기본 모드를 binary로 바꿉니다)
~윈도는 기본이 binary이고, 리눅스는 기본이 ascii입니다. 참고하세요~
ftp>bye (접속종료)

 

 

 


12.telnet
핑과 더불어 네트워크 엔지니어들이 제일 많이 쓰는 유틸리티라 잘 아시겠죠. ^^ 보통은 tcp25포트 기반입니다.

예1)해당 호스트에 포트 50으로 접속
c:\>telnet 192.168.0.1 50

 

 


13.tftp
시시한(?) ftp입니다. ^^ udp 67 기반입니다.

 

예1)해당 호스트의 test.exe파일을 binary형식으로 다운로드
c:\>tftp -i 192.168.0.1 GET test.exe

 

예2)현재 시스템의 test.exe파일을 binary형식으로 원격지에 test10.exe으로 업로드.
c:\>tftp -i 192.168.0.1 PUT test.exe test10.exe

 

 


14.getmac
rpc프로토콜을 이용하여 원격지에 있는 호스트의 mac주소를 얻어내는 명령어입니다. 해당 호스트의 계정정보가 필요합니다.

출력 결과는 mac주소와 nic의 디바이스 정보가 나오고, tcp135와 tcp2041으로 통신합니다.

 

예) 원격지 호스트가 test.com(ip나 netbios이름으로 해도 됨) 이고, id:test pw:testpw이라면,
c:\>getmac /S test.com /U test /P testpw
c:\>getmac /S 192.168.10.1 /U test /P testpw

 

 

15.ipxroute
제 pc에 ipx프로토콜도 없구, ipx쪽은 잘 모르는데 이런 명령어가 있길래 그냥 적어만 봤습니다. ^^

 

 


16.netsh
네트워크 관련 설정 등을 해 주는 유틸리티입니다. 윈2003의 RRAS와 연계된 많은 기능들이 있지만, 일반적으로는 노트북 사용자처럼 ip주소를 여러 번 변경하는 상황에 응용해서 많이 쓰입니다.

 

예1) 아래와 같이 만들고 static1.bat만 실행해주면 ip가 바뀝니다.
c:\>copy con static1.bat
netsh interface ip set address "로컬 영역 연결" static 192.168.0.10 255.255.255.0 192.168.0.1
netsh interface ip set dns name="로컬 영역 연결" source=static 168.126.63.1 register=PRIMARY
^Z


예2) 아래와 같이 만들고 dhcp.bat만 실행해주면 dhcp로 바뀝니다.
c:\>copy con dhcp.bat
netsh interface ip set address "로컬 영역 연결" source=dhcp
netsh interface ip set dns name="로컬 영역 연결" source=dhcp
^Z

 

예3)도움말 윈도 창이 뜨면서 gui환경으로 기본적인 네트워크 자가진단을 하고 결과를 알려줍니다.
c:\>netsh diag gui

 

 


17.proxycfg
웹 브라우저의 프록시 설정을 바꿔줍니다. 웹 브라우저에서 프록시 서버가 사용 가능으로 체크되어 있어야 동작합니다.

 

예1) 프록시 서버가 proxy.test.com. ip는 192.168.100.1이라면,
c:\>proxycfg -p proxy.test.com
c:\>proxycfg -p 192.168.100.1

 

예2) 웹 브라우저의 프록시 설정값대로 바꿔줍니다.
c:\>proxycfg -u




출처는 네전따카페의 곰돌이행(w1089) 님의 글입니다.


batch 파일 활용

1. IP변경 작업
   다양한 프로그램들도 많지만 간단히 배치파일을 만들어 적용할 수 있다.
   dhcp 설정 파일과 static 설정 파일 두가지 샘플을 작성하였다. 모두 같은 디렉토리에 위치하여야 함!

   dhcp.txt 파일
   ----------------------------------------------------------------
   pushd interface
   reset all
   popd
   pushd interface ip
   set address name="로컬 영역 연결" source=dhcp
   set dns name="로컬 영역 연결" source=dhcp
   popd
   ----------------------------------------------------------------
   dhcp.bat 파일
   ----------------------------------------------------------------
   netsh -f dhcp.txt
   ----------------------------------------------------------------

   static.txt 파일
   ----------------------------------------------------------------
   pushd interface
   reset all
   popd
   pushd interface ip
   set address name="로컬 영역 연결" source=static addr=192.168.0.5 mask=255.255.255.0 gateway=192.168.0.1 gwmetric=1
   set dns name="로컬 영역 연결" source=static addr=168.126.63.1
   popd
   ----------------------------------------------------------------
   static.bat 파일
   ----------------------------------------------------------------
   netsh -f static.txt
   ----------------------------------------------------------------

2. ftp 업로드 작업
   ftp를 이용하여 여러 사이트(같은 계정) 업로드 할 경우 사용
   ftp.bat 파일을 이용해 작업 1.1.1.1 ~ 1.1.1.3 사이트에 파일 올리기! 모두 같은 디렉토리에 위치하여야 함!

   ftp.txt
   ----------------------------------------------------------------
   id
   password
   bin
   hash
   put sourcefile filename
   quit
   ----------------------------------------------------------------
   ftp.bat
   ----------------------------------------------------------------
   ftp -s:ftp.txt 1.1.1.1
   ftp -s:ftp.txt 1.1.1.2
   ftp -s:ftp.txt 1.1.1.3
   ----------------------------------------------------------------
   ※Tip. 수십개 사이트에 작업할 경우 command창에서
      "ftp.bat > ftp.txt" 명령어를 입력하면 결과가 ftp.txt로 저장 된다.
      오류는 command 창에 표시가 되므로 결과만 확인하고 txt파일을 참고하면 된다.

batch 파일 정복

1.  "@echo off"를 일반적으로 사용하기
====================================
화면에 명령어들이 표시되지 않게 echo off 하고, 그 라인도  화면에 표시 되지 않게 하기 위해서 다음과 같이 하면 된다.
 @echo off
이 것은 MsDos 3.30 이후 버전에서만 작동한다.  이것을  일반적으로 사용하게 하기 위해서 3.30이상의 MsDos를 사용한다면  autoexec.bat 안에 다음과 같이 적어 놓는다.
 set _echo=@
그리고 배치파일에서 다음과 같이 사용한다면 어느 버전의 MsDos버전에서도 작동한다.
 %_echo%echo off

2.  모든 파일을 지우기
=====================
가장 흔하게 질문되는 것(FAQ)중의 하나는 del *.*  을  사용껦 때,"Are you sure (Y/N)?" 라는 확인을 어떻게 하면 나타나지 않게 하는것이다. 다음과 같이 사용한다.
 echo y| del *.*
화면에 나타나는 메세지도 보이지 않게 하려면 다음과 같이 한다.
 echo y| del *.* > nul
이러한 확인 절차를 표시하지 않게 하는 것은 토론의 여지가 많지만,위와 같이 사용할 수 있다.

(주: 사실 del /Q *.* 와 같이 /Q(Quiet) 옵션으로도 가능하지만 이쪽은 필터를 사용하여 입력을 자동화 하는것에 촛점을 맞춘듯 싶다. 3.30 버전에선 안될 수도 있었겠죠)

3.  다중 반복
============
배치파일에서 다중 루프(반복)를 사용하는 것이 가능하다. 다음의 두배치파일을 생각해 보자. 그리고 test.bat을 불러 실행시켜 보자.
  echo off
  rem TEST.BAT
  for %%f in (a b c d e f) do %comspec% /c test2 %%f

  echo off
  rem TEST2.BAT
  for %%g in (1 2 3) do echo %1%%g
아니면 한줄로 다음과 같이 써서 사용할 수도 있다.
  for %%f in(a b c d e f) do %comspec% /c for %%g in (1 2 3)  do echo %%f%%g
 이 두번째 방법의 단점은 echo가  화면에 표시된다는 것이다.

4.  디렉토리가 존재하는지 확인하는 방법
======================================
디렉토리가 있는지 확인하는 것은 가끔 매우 쓸모있는 일이다.  %1의 디렉토리가 없다면 다음 확인은 참이 될것이다.
 if not exist %1\nul if not exiat %1nul echo Directory  %1  does not exist

5.  프로그램을 현디렉토리나 경로에서 사용할 수 있는지 확인하기
=============================================================
배치 프로그램에서 프로그램을 불러서 사용할때, 그 파일에 대한  경로를 써주지 않았을 경우, 그 프로그램이 현재의 디렉토리나  경로에서 사용가능한지 확인할 때 도움이 될 것이다.
  set _found=
  if exist %1 set _found=yes
  for %%d in (%path%) do if exist %%d\%1 set _found=yes
  for %%d in (%path%) do if exist %%d%1 set _found=yes
  if "%_found%"=="yes" goto _continue
  echo %1 is not at path or the current directory
  goto _out
  :_continue
  echo %1 found at path or in the current directory
  :_out

6.  배치파일에서 서브루틴이나 재귀적방법을 사용하기
==================================================
배치파일 안에서 서브루틴을 사용하는 것은 가능하다. 방법은 서브루틴이 실행된  뒤에  돌아가야할  곳을  가르키는  환경변수(예를들면_return)를 설정하는 것이다. 이런 예는 UNPACK.BAT 이나 BOOT.BAT의:_common 과 :_subru 부분에서 찾아 볼 수 있다.
마찬가지로 재귀적인 사용이 가능하다. ("재귀적인  방법"의  의미는 한  배치파일이  자기  자신을  불러  사용하는  것이다.)  이  예는 SAFEDEL.BAT에서 아래의 행을 따라 찾아 보면 된다.
 for %%f in (%1) do call safedel %%f recurse
배치파일의 0번째 인수(%0)는 배치파일 자신을 나타내므로,  safedel은 %0으로 대치 되어 사용할 수도 있다.

7.  매개 인수(parameter)를 대문자로 바꾸기.
=========================================
다음은 배치파일에 사용한 인수 %1 를 대문자로 바꾸어 주는  예제이다. 이는 MsDos는 path를 대문자로 바꾼다는 점을 이용한 것이다. 결과는 upcase_에 저장될 것이고, 원래의 경로가 다시 저장될 것이다.
  set tmp_=%path%
  path=%1
  set upcase_=%path%
  path=%tmp_%

8.  새로운 디렉토리를 경로에 붙이기
==================================
자주 필요한 이 기술은 매우 간단하다. 예를 들어 %1를 경로에  덧붙이려면
 path=%path%;%1
이라고 하면된다.
이 기술은 배치파일 안에서만 사용할 수 있다. 배치파일 안에서만 환경변수(%path%)를 사용할 수 있기 때문이다. 존재하지 않는 디렉토리를 덧붙이려한다거나 중복해서 경로를 덧붙이는 것을 방지하는 ADDPATH.BAT이라는 배치파일이 있다.

9.  두 파일을 비교하기
=====================
배치파일에서 두 파일이 같은지 아닌지 확인해 볼 수 있다. 이  기술은 MsDos의 외부 명령어인 fc.exe와 find.exe를 사용한다. (외부  명령어라는 뜻은 MsDos와 같이 있는 프로그램들이다. 대부분의 외부 명
령어용 프로그램들은 c:\dos 에 위치한다.)
  fc %1 %2 > tmp$$$
  type tmp$$$ | find  /i  "fc:  no  differences  encountered"  >diffe$$$
  if exist notsame$ del notsame$$$
  copy diffe$$$ notsame$ > nul
  if not exist notsame$ echo Files %1 and %2 are different
  if exist notsame$ echo Files %1 and %2 are identical
  if exist tmp$$$ del tmp$$$
  if exist notsame$ del notsame$
  if exist diffe$$$ del diffe$$$
좀더 생각하면 이 기술은 다른 목적에도 사용할 수 있다. 이는  파일안에 주어진 문자열이 있는지 확인 하는데 바탕을 두고 있기  때문이다.

10.  빈줄을 쓰기
===============
이는 간단하지만 종종 필요하고 유용한 기술이다. echo 바로  다음에점(.)을 찍으면 빈줄을 표시할 수 있다.
  echo.

11.  pause를 이용해 메세지를 표시하기
====================================
메세지를 손쉽게 나타나게 할 수 있다. 메세지를 echo한 다음  pause 를 사용하는데, pause의 메세지를 nul로 보내면 된다.
 echo Break to quit, any other key to remove the tmp directory
 pause > nul

12. for를 이용한 다양한 rename 기술
===================================
이 기술이 기본적이고 사소하지만, 이를 생각해 내기란 쉽지 않을 것이다. for 문은 파일의 이름을 바꾸는데 특별히 유용하다.  예를  들면, 내가 다음의 파일들을 가지고 있을 때, (터보  파스칼  TP  4.0,
5.0, 5.5, 6.0) 내가 버전 29를 30으로 바꾸기 원한다고 할때,
  tspa2940.zip
  tspa2950.zip
  tspa2955.zip
  tspa2960.zip
다음은 손쉽게 그런 일을 해준다.
 for %f in (40 50 55 60) do re tspa29%f.zip tspa30%f.zip
물론 파일이름 바꾸는 일 말고도 이 기술로 다양한 일을 할 수 있다.
하나의 예는 다음과 같다.
  for %d in (a b) do format %d:

13.  와일드카드를 확인하기
=========================
이 예제는 인수 %1이 와일드 카드를 사용하고 있는지 아닌지  확인한다.
  @echo off
  for %%f in (%1) do if "%%f"=="%1" goto _nowilds
  echo Parameter %1 contains wildcards (or is missing)
  :_nowilds

14.  배치 작업을 중간에 그만두지 못하게 하기
===========================================
ctty 명령어를 사용해서 입력장치나 출력장치를 새로 설정하여  배치파일을 중단시키는 것을 방지할 수 있다. 여기의 예제는  패스워드로 e를 넣어야 하는 간단한 배치파일이다. 
ctty가  nul로  돌려진  동안<,>의 리디렉션이 필요한 것을 눈여겨 보라. ask라는 배치파일을  돕
기 위한 프로그램은 같이 포함되어 있다. ( MsDos의 choice와 비슷하다. 단, 에러 레벨을 입력한 문자의 아스키 값으로 돌리는 것만 틀리다.)
  @echo off
  ctty nul
  echo Now you cannot break the batch with ^C or ^Break > con
  :_ask
  echo Use e to break > con
  ask /b /d < con
  if errorlevel==101 if not errorlevel==102 goto _out
  goto _ask
  :_out
  ctty con
  echo Back to normal. Now you can break the batch  with  ^C  or
^Break.
이 배치파일이 작동되고 있는 동안에는 alt-crtl-del로  다시 부팅할수도 없다. 이 같은 일을 하는 noboot.exe라는 램상주 프로그램도 있다.

15.  autoexec.bat를 중지하고 건너뛰는 것을 방지하기
==================================================
브레이크를 눌러 autoexec.bat를 건너 뛰어 지나치지 않게 하기 위해서 다음과 같이 config.sys에 쓰면 된다.
  shell=c:\command.com /p nul
이렇게 하기 전에 만일의 경우를 대비해서 플로피 디스켓으로 부팅할준비를  해둔다. autoexec.bat 맨 뒷줄에 'ctty con'이라고 덧  붙여야 된다. 그렇게 하지 않으면 키보드가 말을 듣지 않을 것이고, 준비한 플로피 디스켓으로 부팅해야 할 것이다 :-).

16.  확장자를 인식하기
=====================
단지 확장자를 확인하려던가, 주어진 파일의 이름에서 확장자를 환경변수로 저장하려고 할때, 이 것은 매우 유용하다. 어떻게 하는지  여기에 있다. 이 배치파일은 PC-Magazine July 1992, Vol 11, No.  13,
page 528에 나온  정보를 이용한 것이다. for 루프에서  슬레시(/)로 시작하는 인수는 두 부분으로 나누어지는데, 처음 부분은 인수의  첫문자이고 다른 부분은 나머지 문자열이다.
이 해결방법에서 하나의 문제점은 .* 이라던가 .???  이란  확장자를 인식하지 못하는 것이다. 그러나 "와일드카드를 확인하기"를  이용해서 확인하면 될 것이다. 이러한 기술을 이용한 것중에  UNPACK.BAT라
는 배치파일이 있다.
     @echo off
     set exten_=%1
     :_next
     set prev_=%exten_%
     for %%f in (/%exten_%) do set exten_=%%f
     if ".%exten_%"=="%prev_%" goto _extfound
     if not "%exten_%"=="%prev_%" goto _next
     goto _noext
     :_extfound
     echo The filename %1 has an extension %exten_%
     goto _out
     :_noext
     echo The filename %1 has no extension
     :_out
     set exten_=
     set prev_=

17.  % 문자 인용부호
===================

%1은 배치파일에 주어진 첫번째 인수를 가르킨다. 이처럼 'echo  %1'이라고 하면 첫번째 인수를 표시해 준다. 대신에 %1라는 문자를 표시하고 싶은 경우 어떻게 해야하는가?  % 문자는 인용부호처럼  행동한다. 그래서 %%1이라고 쓴 경우 실제로는 "%1"이라고  화면에  표시된다. 아래의 간단한 연습을 실행해보라.
  @echo off
  if "%1"=="" goto _out
  echo %1
  echo %%1
  :_out
이 기능을 이용한 것은 "배치의 보조 배치파일을 없애기"를  보아라.
좋은 예로는 DELPATH.BAT가 있다.

18.  배치의 보조 배치파일을 없애기
=================================
많은 배치 프로그램이 call을 사용해서 보조 배치파일을  불러다  쓴다. 많은 경우 이런 일을 재귀적인 사용을 통해 자기 자신을  불러다씀으로써  보조 파일을 사용하는 것을 줄일 수 있다. 보조코드는  배치파일 자기자신에 넣어 놓는다. 이러한 기술은 와일드 카드를  받아들이는 TYPE 같은 SHOW.BAT 에서 가장 잘 나타나 있다. 일반적으로는 개개의 파일을 type하기 위해서  보조파일이  필요하다.  다른  예는
SAFEDEL.BAT에서 찾아볼수있다.
이와 같은 일을 하기 위한 다른 기술이 있다. 원래의 배치파일이  보조 배치파일을 만든 다음 그것을 불러 사용하는 것이다. 이런 것으로는 DELPATH.BAT의 예를 들 수 있다. 여기에는  사용되는  드라이브를
보여주는 간단한 예가 있다. (c 부터 t 까지 가능하다. 여기선 더 쓰면 줄이 넘어가니까!)
 @echo off
 echo @echo off> tmp$$$.bat
 echo if exist %%1:\nul echo Drive %%1: is present>> tmp$$$.bat
 for %%d in (c d e f g h i j k l m n o p q r s t) do call tmp$$$
%%d
 del tmp$$$.bat
디스크의 볼륨  레이블을  찾아내는  창의적인  기교가  PC-Magazine August 1992, Vol. 11, No. 14, p. 527에 실렸다. 여기는 같은  기술을 사용하는  예가 있다. 환경변수 getdir_에 현재의 디렉토리를  저장한다. 이 기술은 PUSHDIRE.BAT에 사용되고 있다.
  @echo off
  echo @echo off> director.bat
  echo set getdir_=%%2>> director.bat
  echo echo %%getdir_%%>> director.bat
  dir | find "Directory"> go.bat
  call go
  if exist director.bat del director.bat
  if exist go.bat del go.bat

19.  subst 명령어를 경로에 사용하기
==================================
어떤 디렉토리를 읽기 쉽게 하기 위해서 간단한  배치파일을  사용한다. 만약 subst 가 이미 설정되어서 생길 수 있는 에러를  방지한다. 그리고 마지막으로 현재 대치된 디렉토리의 현황을 보여준다.
  @echo off
  if exist m:\nul echo The substitution has already been made
  if not exist m:\nul subst m: c:\math
  if not exist s:\nul subst s: c:\support
  subst

20.  일주일에 한번 실행하기. (요일을 확인하기)
=============================================
요일을  환경변수에  넣는  것은  어려운  기술이다.  완전한   예는 WEEKLY.BAT에서 찾아볼수 있다. 이 기술의 핵심은 아래에 나와  있는데, 요일을 weekday_라는 환경변수에 저장하는 것이다. 일반 도스 프로그램 외에 아무런 보조 프로그램이 필요없다.
  @echo off
  echo.| date | find "Current" > tmp$$$.bat
  echo set weekday_=%%3> current.bat
  call tmp$$$
  echo %weekday_%
  if "%weekday_%"=="Fri" echo Thank God it's Friday
  if exist tmp$$$.bat del tmp$$$.bat
  if exist current.bat del current.bat
  set weekday_=
사실, 위에서 %%3 대신에 %%4를 사용하면 오늘의 날짜를  확인할  수 있다.

21.  파일이름에 경로가 포함되었는지 확인하기
===========================================
우선 먼저 "확장자를 인식하기"를 보면 같은 아이디어인 것을 알  수 있다. 파일이름이 단순히 go.exe 로 이루어 졌는지,  아니면  경로를 포함해서 r:\progs\go.exe와  같이  이루어  졌는지  확인하는  것은 r:\progs\*.exe와 같이 확장자를 사용했다면 매우 복잡한 일이다. 여기서 어떻게 되는지 설명하였다. 이를 완전히 이해했다면 확실히  배치 파일들에 대해서 이해하기 시작했다고 말할 수 있을 것이다.
  @echo off
  echo @echo off> tmp$$$.bat
  echo set rest_=%%1>> tmp$$$.bat
  echo :_next>> tmp$$$.bat
  echo set prev_=%%rest_%%>> tmp$$$.bat
  echo for %%%%g in (/%%rest_%%) do set rest_=%%%%g>> tmp$$$.bat
  echo if ":%%rest_%%"=="%%prev_%%" goto _found>> tmp$$$.bat
  echo if "\%%rest_%%"=="%%prev_%%" goto _found>> tmp$$$.bat
  echo if not "%%rest_%%"=="%%prev_%%" goto _next>> tmp$$$.bat
  echo goto _nopath>> tmp$$$.bat
  echo :_found>> tmp$$              at
  echo set haspath_=yes>> tmp$$$.bat
  echo goto _out>> tmp$$$.bat
  echo :_nopath>> tmp$$$.bat
  echo set haspath_=no>> tmp$$$.bat
  echo :_out>> tmp$$$.bat
  echo set rest_=>> tmp$$$.bat
  echo set prev_=>> tmp$$$.bat
  for %%f in (%1) do call tmp$$$ %%f
  if "%haspath_%"=="yes" echo Filename %1 includes a path
  if "%haspath_%"=="no" echo Filename %1 does not include a path
  rem if exist tmp$$$.bat del tmp$$$.bat
  set haspath_=

22.  엔터키를 누르지 않고 시간을 보기
====================================
현재의 시간을 보는 간단한 기술은 다음과 같다.
  echo.| time | find /v "new"
시간을 환경변수로 저장하는 방법은 LASTBOOT.BAT을 보아라.

23. 에러레벨 값을 확인하는 다른 방법
====================================
많은 프로그램과 몇개의 도스명령어들( diskcomp, format,  xcopy)은끝날 때 에러 레벨을 발생시킨다. 에러레벨의 누적적인 성질  때문에 에러 레벨을 확인하는 것은 다소 복잡해진다. 그래서 만약  에러레벨이 정확히 2인지 확인하기 위해서는 다음과 같이 한다.
 if errorlevel==2 if not errorlevel==3 echo Errorlevel 2
for 명령어를 사용하는 다른 방법으로 다음을 들수 있다.
 for %%e in (0 1 2  3  4  5  6  7)  do  if  errorlevel==%%e  set
_errlev=%%e
 if "%_errlev%"=="2" echo Errorlevel 2
좀 더 일반적으로 다음과 같이 할 수 있다.
 for %%e in (0 1 2  3  4  5  6  7)  do  if  errorlevel==%%e  set
_errlev=%%e
 if "%_errlev%"=="2" echo Errorlevel %_errlev%
복잡한 배치파일에서 편리한 방법은 goto를 사용하는 것이다.
  for %%e in (0 1 2) do if errorlevel==%%e goto _label%%e
  goto _out
  :_label0
  echo Errorlevel 0
  :_label1
  echo Errorlevel 1
  :_label2
  echo Errorlevel 2
  :_out
이 기술을 실제로 사용하는 예는 BOOT.BAT에서 찾아볼수 있다.

24.  배치파일의 출력을 리디렉션(redirection)하기
===============================================
배치파일 안에서의 출력은 손 쉽게 재 방향전환(redirecion)할 수 있다. 다음과 같은 example.bat 이라는 배치파일을 생각해보자.
  @echo This is a redirection test> test
"example"를 실행시키면 아래의 문장을 담은 "test"라는 파일을 생성 할 것이다.
  This is a redirection test
이 줄은 eoln(end of line: ascii 13 + 10)을 줄 끝에  포함하고  있다. 리디렉션 기호 '>' 앞에 아무런 공백도 주지 않는  것이  현명할때가 있다.
배치파일이 만드는 출력을 다시 재 방향전환(redirection)하는  것은 다소 복잡하다. 다음과 같은 내용을 지닌 example2.bat을 생각해  보자.
  @echo This is another redirection test
실행하면,
  example2 > test
출력은 화면에 나오고, 빈 test라는 파일이 생성될  것이다.  출력을 재 방향 전환 시키기 위해서는 다음과 같이 command.com 명령어 해석기를 통해서 배치파일을 실행해야 한다.( command.com은  현디렉토리나 경로에 있어야 한다.)
  command /c example2 > test
이와 같이 하면 내용이 "test"라는 파일에 담길 것이다.

25.  환경저장 공간이 충분한지 확인하기
=====================================
만약 배치파일이 환경저장 변수를 사용하면, 환경저장 공간이 부족할경우가 있다. 만약 "Out of environment space"라는 메세지를 받는다
면 잘 알려진 방법을 통해서 다음과 같이 config.sys 의 shell을  설정해서 환경저장 공간을 늘릴 수 있다.
  shell=c:\bin\command.com c:\bin /e:1024 /p
이 보다 덜 알려진 기술로는 환경저장 공간이 모자라기 전에 미리 확인해 볼수 있다. 아래의 예는 32바이트의 환경이 남아 있는지 확인한다.
 @echo off
 set test_=12345678901234567890123456789012
 if "%test_%"=="12345678901234567890123456789012" goto _yes
 echo Insufficient environment space
 goto _out
 :_yes
 echo Sufficient environment space
 set test_=
 rem Whatever you wish to do
 :_out

26.  드라이브를 사용 못하게 하는 간단한 방법
===========================================
임시로 드라이브를 사용하지 못하게 하려면, subst명령어를 사용하면 된다. 예는 아래와 같다.
  @echo off
  md c:\none
  subst d: c:\none
다시 사용하게 하려면,
  @echo off
  subst d: /d
  rd c:\none

27. 프린터에 escape 명령어를 보내기
===================================
여기 정말  사소한  기술이  있다.  명령행에서  곧바로  프린터에게 escape sequence를 보낼 수 없다. 그러나 다음과 같은 배치파일을 이용하면 간단하다.
  @echo ESC%1> prn
ESC는 진짜 escape문자로 에디터로 쓰여져야 된다. 이 방법의 한가지 결점은 라인피드를 보내는 것이다.

28.  무작위 문자열을 만든는 방법
===============================
UseNet news에서 무작위 문자열을 만드는 방법을 물어보는 사람이 있었다.  대답은 다음과 같다. 이를 확장해서 공부해보기 바란다.
  @echo off
  echo 10 randomize(val(mid$(time$,7,2))) > tmp.bas
  echo 20 open "tmp2.bat" for output as #1 >> tmp.bas
  echo 30 x$ = mid$(str$(int(rnd*10000)),2) >> tmp.bas
  echo 40 print #1,"@set ramdom_=";x$ >> tmp.bas
  echo 50 close #2 >> tmp.bas
  echo 60 system >> tmp.bas
  gwbasic tmp.bas
  call tmp2
  del tmp.bas
  del tmp2.bat
  set

29.  문자열의 길이를 알아내기
============================
문자열의 길이를 찾아내는 일은 PC Magazine January 26, 1993 issue 에 실렸다. 여기서 제안하는 방법은 PC 메거진의 방법과  근본적으로 같지만, 더 일반적이다.
  @echo off
  set test_=Testing the lenght of a string
  echo %test_% > len$&$&$
  dir len$&$&$ | find "LEN$&$&$" > go$$$.bat
  echo @echo off> len$&$&$.bat
  echo set length_=%%                 len$&$&$.bat
  call go$$$
  echo The lenght is %length_% bytes
  del len$&$&$
  del len$&$&$.bat
  del go$$$.bat

30.  MsDos의 버전을 환경변수로 저장하기
======================================
ADJCURS.BAT을 보면 알겠지만, 배치파일로만 버전을 알아낼  수있다.
여기에 다른 방법이 있다.
  @echo off
  ver > go$$$.bat
  echo @echo off> ms-dos.bat
  echo set version_=%%2>> ms-dos.bat
  call go$$$
  echo Your MsDos version is %version_%
  del go$$$.bat
  del ms-dos.bat
 

[출처] Batch파일 정복|작성자 킥업룹


텍스트 에디터