2010년 7월 5일 월요일

Media independent interface

Ethernet
- 미국의 DEC,Intel, Xerox가 공동 개발한 LAN의 모델
  data station간의 거리가 약 2.5km 내에서 최대 1024개의 data station상호간에 10Mbps로 정보를
  교환할 수 있는 지역적 network.
  IEEE 802.3 표준을 구현한 model중의 하나임.
- CSMA/CD방식
- 10Mbps 속도 (후에 100Mbps속도가 등장하는데, 이를 Fast ethernet이라 부름)
Gigabit ethernet
- ethernet의 속도를 높인것 → 1Gbps 속도, 즉 ethernet frame을 초당 Gigabit의 속도로 전송하는 것.
- 기본적으로 광 cable상에서 전송됨.

n BASE m
n: 전송속도 (Mbps)
m: 전송거리
n BASE x
n: 전송속도
x: 전송매체

MII(Media Independent Interface)
- Fast ethernet의 MAC block과 PHY chip을 연결하는 standard interface.
  10BASE level에서는 하나의 chip에 MAC과 PHY가 구현되어 있었으나,
  fast ethernet부터 PHY와 MAC이 나뉘어짐.
  이때, MAC과 PHY의 interface를 위한 것이 바로 MII.
  Gigabit에서는 MII를 확장한 GMII(Gigabit MII)를 사용, 근본적으로는 MII와 동일.
- Wiki says
  Being media independent means that any of several different types of PHY devices
    for connecting to different media (ie. Ethernet, fiber optic, etc.) can be used without
    redesigning or replacing the MAC hardware.

RGMII(Reduced Gigabit Media Independent Interface)
- ..specifies a particular interface between an Ethernet MAC and PHY.
- RGMII uses half the number of data pins as used in the GMII.
    RGMII Pins: consist of 12pins.



Q-phase1 block diagram


Q-phase2 block diagram



2010년 6월 7일 월요일

Kernel Porting

Kernel Porting
- 새로운 HW에서 커널이 동작할 수 있도록 프로그램을 수정하는 동작

I. 준비
II. Build for target
-------------------------------------------------------------------------------------------
준비
1. Target processor 선정
2. Processor Core 선정
  - i386
PC와 동일한 구조로 개발 환경 구성이 용이하다
오랜 기간 동안 사용되어 안정성 확보
  - ARM
전력 소모가 작아서 휴대폰이나 PDA와 같은 휴대 단말기에 많이 사용됨.
네트워크 제품에도 사용된다.
  - MIPS
고속의 처리기능 보유
고속 네트워크 장비에 많이 사용된다.
멀티미디어용으로도 많이 사용됨.(STB등)
3. Target machine 등록
   - ARM processor를 사용하는 target machine에 임베디드 리눅스를 포팅하고자 할때,
     설계자는 "ARM Linux" site에서 새로운 machine을 등록하여야 한다.
http://www.arm.linux.org.uk/developer/machines
   - 등록하는 주 목적은 등록후 생성되는 machine ID를 얻기 위해서임
→ arch/arm/tools/mach-types file.
   - in the site
machine registry → submit a new machine type → enter mail addr
→ enter info about new machine
4. Linux kernel source
   - web: http://www.kernel.org/pub/linux/kernel/v2.6
   - Linux 2.4.x  vs 2.6.x


   - 필요에 따라 target platform용 patch를 얻는다. (processor, target soc, target application)
   - kernel porting
대부분 S5PC100과 같은 soc의 경우 커널을 반도체 회사에서 제공
시스템 개발자는 제공되는 커널을 이용하여 Target machine에 맞도록 porting하는 작업이 필요하다.
5. kernel source 설치
   - install kernel source
tar zvxf ~/Resource/kernel/linux-2.6.33.2.tar.gz
   - 설치후 linux-2.6.33.2 폴더가 생성된다.
6. cross compiler설치:

Build for target
procedure:
kernel configuration → kernel compile → kernel img 설치 → test

1. Modify Makefile on top of linux directory
   - 변수 ARCH
ARCH := arm
   - 변수 CROSS_COMPILE
CROSS_COMPILE = arm-linux-
2. Configuration
   - 커널 설정
커널 설정은 커널의 일부 기능을 커널 이미지에 포함 할 것인지 아닌지를 설정하는 과정임
개발 도중 필요한 커널 옵션을 3가지 중 하나로 선택하여 커널에 포함여부를 선택한다.
   - 커널 빌드에 참가 여부 선택 방법
'Y' : 커널 빌드에 참가하여 커널 이미지에 해당 기능이 삽입된다. 그만큼 커널의 크기가 커짐
'N' : 커널 빌드에 참가하지 않는다.
'M': 커널 빌드에는 참가하지 않아 커널 이미지에 포함되지 않으나
       실행중인 커널에서 insmod / rmmod라는 프로그램을 통하여 적재 또는 삭제가 가능.
   - default kernel 설정
최초 커널 빌드시 커널 설정을 기존에 사용된 설정 값으로 커널을 설정하는 방법
arch/arm/configs 폴더에 default설정 파일들이 있다.
default configuration 방법: #make s5pc100_defconfig
   - 커널 설정 방법 3가지
행단위 설정: make config // shell script기바나의 configuration
메뉴형태의 설정: make menuconfig // 메뉴형태의 color/text configuration
graphical 설정 make xconfig // x-window based graphical configuration
* Kconfig file:
커널 설정이 가능하도록 만들어주는 파일로써,
이 파일의 내용에 따라 menuconfig에 설정값들이 표시됨.
   - linux/.config file
커널설정후 생성되는 파일로 설정된 커널 옵션을 알 수 있다.
make mrproper에 의해 삭제된다.
3. kernel compile
   - uncompressed kernel image
#make Image → linux/arch/arm/boot/ 폴더에 'Image' file생성
   - compressed kernel image
#make zImage → linux/arch/arm/boot/ 폴더에 'zImage' file생성
   - to erase all object files
#make clean



2010년 6월 4일 금요일

Boot Loader

Boot Loader
  기본적인 내용은 지난번 포스팅했던 내용을 참조
  → http://wayne867.textcube.com/45

1. Boot Loader의 역할
  - Target system 초기화
.부트로더는 전원이 입력되면 타겟 시스템이 정상동작 할 수 있도록 HW및 SW동작환경을 설정
  .불필요한 HW의 동작 중지, 시스템 clk설정, 메모리 제어기 설정 및 필요에 따라 MMU설정
.프로그램 동작에 필요한 재배치(relocation),스택 영역 설정 및 C에서 사용되는 변수 영역 설정 후
 C로 작성된 함수 호출 / '재배치' means 초기 nand에 있던 program을 DRAM으로 옮기는 작업.
.부터로더에는 필요에 따라 IRQ와 같은 예외처리벡터 및 핸들러도 작성되어야 한다.
  - Target system 동작 환경
.부트 방법, 부트 디바이스를 비롯한 네트워크를 이용한 부트를 지원하기 위한 네트워크 설정
 IP주소설정등 부트로더 동작에 필요한 정보를 설정
.설정된 환경 변수 값은 플래시 메모리 또는 EEPROM에 저장하여 관리.
  - system OS Booting
.일반적으로 임베디드 시스템의 OS는 flash memory에 탑재되어 있고 부팅과정에서
 주 메모리(일반적으로 DRAM)에 탑재하여 실행.
.시리얼, 네트워크 또는 USB를 이용한 실행하는 방법 지원
 -네트워크는 TFTP를 사용
 -USB는 네트워크에 비하여 별도 설정 없이 누구나 쉽게 사용 가능
 -UART를 이용한 탑재 방법(속도가 느려 용량이 큰 OS를 탑재하기에는 부적합)
  - Flash memory 관리
.임베디드 시스템에서 가장 효율적인 보조 기억장치
  .부트로더 탑재, 시스템에 전원이 인가되면 플래시에 저장된 부트로더 실행
.부트로더 및 시스템 동작에 필요한 환경 변수 저장
.플래시 메모리에는 시스템 운영체제 이미지 탑재
 
2. 특징
  - 프로세서에 의존성이 높다
.특히 시스템 초기화 과정의 모든 코드는 어셈블러로 작성된다.
.프로그래머는 프로세서의 architecture와 programmer's model에 대해 이해를 하고 있어야 한다.
  - Target system의 하드웨어에 의존성이 높다
.프로그래머는 target system의 하드웨어를 이해하여야 한다.
.특히 메모리 인터페이스, 주변 장치 등에 대하여 잘 알고 있어야 한다.
  - 가능하면 적은 크기여야 한다.
  - 대부분은 사용자가 직접 작성하여 사용한다.

3. 종류
  - LILO: Linux Loader는 x86 컴퓨터 기반의 리눅스에서 오래 전부터 사용되고 있음
  - GRUB: Grand Unified Bootloader는 GNU 프로젝트의 부트로더
  - EtherBoot: 디스크 없는 시스템에서 이더넷을 통해 부팅할 수 있게 하는 부트로더
  - Blob: Blob는 ARM프로세서 기반의 LART 하드웨어를 위한 부트로더
  - PMON:PROM Monitor, MIPS보드를 지원하기 위해 제작된 것
  - RedBoot: Redhat에서 개발되어 배포된것
  - U-Boot: Popular, PPCBoot와 ARMBoot 프로젝트를 기반으로 개발, ARM기반 Target 보드 지원.

4. U-Boot
  - 특징
.Linux와 유사한 구조(일부 소스는 linux용을 사용, linux img를 부팅하기 쉽도록 되어 있다)
.확장이 용이함(새로운 command 추가가 쉽다, configuration에 의한 dynamic한 기능추가/확장제공)
  - getting Source.
.http://sourceforge.net/projects/u-boot
.유사한 target machine의 소스를 개발하고자 하는 target에 맞도록 복사하고 설정 환경을 만든다.
.U-Boot을 configuration하고 빌드하여 최종 이미지를 얻는다.
.target에 탑재하고 실행하면서 보드에 맞도록 포팅한다.
  - 초기화 과정
.start.S file이 U-boot의 시작.
  - Build
.build configuration
  $cd ~Work/u-boot-1.3.4
  $make dtkc100_config
.의존성(Dependency)검사
  $make dep
.build U-boot
  $make
.빌드후 생성되는 files
  u-boot.map (U-boot memory map file)
  u-boot (ELF binary format의 U-boot img. debug시에는 이 파일을 이용)
  u-boot.bin (plane binary format의 U-boot img. flash에 탑재되는 img. code와 data만 있음).
  - boot loader 탑재
.개발된 부트로더는 target의 flash에 탑재되어 부트로더 기능을 수행함.
.
  - 환경변수 설정
.printenv / 현재 설정된 환경 변수 출력 / printenv
.setenv / 환경 변수 설정 / setenv [변수명] [설정값]
.saveenv / 설정된 환경변수 저장(nand에) / saveenv

  - download (kernel및 ramdisk등)
.loadb / 시리얼로 다운로드 / loadb [주소] [속도] / load 20008000 115200
.tftp / 네트워크로 다운로드 / tftp [주소] [파일명] / tftp 20008000 zImage
.이때 주소는 target의 destination주소임.

  - booting
.bootm 명령 사용
.bootm 20008000 / 20008000번지의 내용을 사용하여 booting
.자동부트
  bootcmd
  #setenv bootcmd 'tftp 20800000 ramdisk.gz;tftp 20008000 zImage;bootm 20008000'
  #saveenv

2010년 6월 3일 목요일

Embedded Processors

ARM(Advanced RISC Machine)
시장 점유율

1. ARM, 32bit RISC processor IP
 - ARM사는 직접 반도체를 제조하여 판매하는 것이 아니라 설계한 프로세서를 반도체 회사에
   Hard Macrocell 또는 Synthesizable core로 제공(RTL level code라는 의미 같음)
 - 반도체 제조회사 또는 SoC 제조사에서는 ARM사로부터 제공받은 ARM core와 주변장치를 추가하여
   SoC를 만들어 사용자에게 판매하거나 자체 제품에서 사용함.

2. ARM Architecture
  * Programmer's Model
Programmer's Model은 ARM architecture의 분류 기준으로써,
programmer가 program을 작성하는데 필요한 각종 정보를 의미한다.
(program means assembly language, not C, C++)
즉, architecture가 동일하면 programmer's model이 동일하다.(프로그램의 호환이 가능하다)
프로그래머가 알아야할 정보들:
- 명령어(Instruction set)
- 메모리 구조
- 데이터 구조
- 프로세서의 동작 모드
- 프로세서 내부 레지스터의 구성 및 사용법
- exception 처리 방식등

  * ARM architecture / processor

  * ARM Application processor
고성능

  * ARM Embedded processor
저가, 저전력


3. 그외 CPU cores
  * MIPS
MIPS(Microprocessor without Interlocked Pipeline Stages)는 MIPS Technologies에서 개발한
RISC processor임. 초기 32-bit architecture를 사용하였으나, 이후 64-bit architecture로 확장하였다.
업계에서는 일반적으로, 저전력 기능이 우수한 ARM을 mobile용으로 사용하고,
상대적으로 속도가 우수한 MIPS는 동영상 재생및 멀티미디어 기능 지원을 위한 STB용 등으로
많이 쓰인다고 한다.

   * 참고: STi7105
STi7105 IC는 'Low cost advanced HD decoding IC for STB'로써
그 내부에는 ST40-300이라는 core를 사용하고 있다.

ST40 series는 ST와 Hitachi에서 공동 개발한 'SuperH' 라는 RISC core를 기반으로 하고 있다.

참고 자료:



2010년 6월 2일 수요일

Embedded Linux 개발환경

1. Cross 개발 환경의 이해
embedded system은 특수한 작업을 수행하도록 만들어진 system이기 때문에,
개발 환경에 있어서 흔히 우리가 접하는 PC base의 환경이 아닌 경우가 대부분이다.
예를 들어 전자레인지, 냉장고에 들어가는 시스템을 개발한다고 할 경우, 여기에는 모니터나 키보드
등이 없으므로, 여기에 들어가는 시스템을 개발할 때는 PC에서 개발을 완료한 후에 전자레인지를
구성하는 시스템에 다운로드 하여야 한다. 이때 개발하는 PC를 Host system, 전자레인지를 target
system이라 한다.
    1) Target system
개발하고자 하는 임베디드 시스템을 말한다.
예) ARM 기반의 smartphone등
    2) Host system
Target system을 개발하기 위한 개발환경을 제공하는 시스템
target을 위한 어셈블러, 컴파일러, 링커 등의 호스트 둘과 target을 개발하는데 필요한 디버거 제공함
예) ARM 프로세서용 툴과 디버거를 가지고 있는 pentium PC
    3) 개발툴
Cross Compiler: 개발된 소스 프로그램을 다른 machine의 기계어로 번역하는 프로그램
    4) Downloading
생성된 실행가능한 binary image를 target 보드의 메모리에 탑재하는 동작
kernel과 file system image를 target에 탑재, 대부분의 boot loader는 download기능을 지원한다.
Interface: TFTP for ethernet / ZMODEM with serial / USB with Active sync.
Download 방법:
ROM/Flash에 탑재하여 실행하는 방법:
 - ROM writer를 사용하는 방법
 - JTAG dongle을 이용하는 방법
DRAM에 탑재하여 실행
 - target에 모니터 프로그램, 또는 boot loader를 탑재하고
   serial, ethernet, USB등을 이용하여 다운로드 함
 - JTAG dongle을 이용하는 방법
 - 전용 ICE를 이용하는 방법.
전용 ICE를 사용하여 디버깅 정보와 함께 탑재하여 실행
 - 디버깅을 할때 매우 편리함.
    5) Debug
target system을 실행하면서 프로그램의 실행상태, 메모리, 변수 등을 프로그래머가 확인하거나
제어하면서 오류를 찾아 수정하는 동작.
실행가능한 이미지가 반드시 디버깅 정보와 함께 메모리에 탑재 되어 있어야 한다.
디버깅 전용 ICE장비와 디버거 소프트웨어를 사용한다.  
ICE장비: In-Circuit Emulator(ICE)는 호스트의 디버거 와 함께 target system의 레지스터나 메모리의
       내용을 읽거나 변경할 수 있고, break point나 watch point를 설정할 수도 있고, 프로그램을
       step-by-step으로 실행할 수 있게 해주는 장치이다.
2. Host system 구성
    1) ARM을 위한 Embedded Linux source code download from web site
Kernel: ARM Linux kernel 2.6.33.2 or later
  http://www.kernel.org/pub/linux/kernel/v2.6
    2) Boot loader source code 준비 from web
개발자는 목적에 맞는 최상의 bootloader를 선택하여 준비하고 target에 porting하여야 한다.
실습에서는 U-Boot사용
http://www.denx.de/wiki/U-Boot
    3) Console monitor tool for monitoring target system
minicom
    4) Networking
개발 환경 구성을 위해서는 TFTP, BOOTP, NFS와 같은 네트워킹 툴을 필요로 한다.
    5) Cross compiler 설치
- ARM cross compiler를 호스트 리눅스에 설치
- PATH 환경변수 설정
   /root/.bash_profile 수정
          새로운 환경 변수 적용.
- tool 사용 예시



Embedded Linux 이해

1. 운영체제(Operating System, OS)란?
컴퓨터 시스템의 전반적인 동작을 제어하고 조정하는 시스템 프로그램들의 집합.

2. OS의 역할
하드웨어와 응용 프로그램 간의 인터페이스 역할을 하면서
CPU, 주기억장치, 입출력장치등의 컴퓨터 자원을 관리.

3. Embedded Linux
공개된 리눅스 커널과 각종 응용 프로그램 소스를
임베디드 시스템에서 동작하도록 최적화 하여 사용하는 운영체제
   * 특징
- 적은 메모리 사용
- 느린 CPU에서 동작
- 특정한 목적의 응용 프로그램 탑재
   * 장점
- GPL(GNU General Public License)를 따르는 공개 소스 소프트웨어
- 두터운 개발자층, 검증된 운영체제
- 모듈 지원(불필요한 부분을 빼고 필요한 부분 추가가 가능하여 이식성 우수)
- 유닉스와 유사한 운영체제 시스템
- 다양한 플랫폼 지원
   * 단점
- 개발 환경 설정이 까다롭다
- Real-time 기능이 취약하다
- 메모리와 전력 소모량이 많다(RTOS와 비교시)
- 다양한 윈도우 시스템이 제공되고 있으나 덩치가 크거나 안저화 작업이 필요하다.

4. Linux Kernel
   * Kernel?
- 운영체제의 핵심부분
- 하드웨어와 운영체제의 다른부분 사이의 중재자 역할을 한다.
   * Micro Kernel
- 커널의 기능을 최소화하고 가장 핵심 기능만 가진다.
- QNX, 카네기 멜론의 마크 3.0(Mach 3.0)
   * Monolithic Kernel
- 커널이 운영체제가 관장하는 모든 서비스를 가진다.(프로그램 실행을 제어하며 데이터와 파일관리)
- 유닉스, 리눅스 시스템
   * 구조
- Process Scheduler
운영체제의 심장이라 할만함.
CPU를 여러 프로세스가 공평하게 사용할 수 있도록 한다.
한 순간에 오직 하나의 프로세스만이 CPU를 점유 가능,
이때 scheduler는 여러 프로세스가 CPU를 공유하여 사용 가능하도록 해준다.
(멀티태스킹이 가능한 것은 바로 이 스케줄러의 역할)
선점형(preemptive):
  프로세스별 사용시간을 지켜보면서 정기적으로 스케줄링, Real time system에 필수적임
  Real time system에서는 중요하고 긴급한 작업을 처리하기 위해 언제든지 다른 작업을 멈추고
    시스템의 자원을 선점할 수 있는 선점형 구조가 필수적임.
비선점형(nonpreemptive):
    프로세스가 자발적으로 CPU사용권을 반납했을 때만 스케줄링,
  모든 작업이 공평하게 진행되며, PC의 윈도우 OS, Linux 등이 대표적임.
  각 프로세스는 time-slice동안 처리하고, time-slice가 지나면 다른 프로세스가 실행된다.
Time-slice: 각 프로세스가 실행되는 최소한의 시간 단위
- Memory Management
여러 개의 프로세스 메인 메모리를 안전하게 공유할 수 있도록 한다.
  - Virtual File System
리눅스는 모두 파일로 관리가 된다.
하드웨어 장치도 파일로 관리 된다.
모든 파일시스템에 대한 공통 인터페이스 제공.
(서로 다른 저장매체라도 user가 access하는 방식은 동일하게 해줌)
VFS가 지원하는 파일시스템:
디스크 기반 FS: HD, FD, CD-ROM, (block device)
네트워크 FS: 다른 네트워크의 컴퓨터에 속한 파일 시스템에 접근(NFS, Coda, AFS)
특수 FS: /proc FS(사용자가 커널의 데이터에 접근할 수 있는 인터페이스제공)
            /dev FS(디바이스를 표준 파일시스템으로 관리할 수 있는 인터페이스 제공)
Root(/) directory를 기준으로 파일 트리 구성.
(모든 파일시스템을 root FS의 서브 디렉토리에 마운트 하여 사용)
File system 사용전에 실행해야 할 동작:
등록(Registration):FS에서 구현한 함수를 커널에서 사용할 수 있도록 하는 동작
                          시스템부팅 또는 FS을 구현하는 모듈을 탑재할 때 등록
Mount: 파일 시스템을 사용하기 위하여 리눅스에 연결하는 동작
Root FS과 일반 FS
root FS: 시스템 부팅하는 동안 파일 시스템 설정 이후에 마운트
일반 FS: root FS 마운트 이후에 root FS의 디렉토리 tree에 마운트
              FS을 마운트하기 위해 mount() 시스템콜을 사용한다.
- Network Interface
표준 네트워크 프로토콜과 드라이버를 제공한다.
- Inter Process Communication(IPC)
프로세스 간에 서로 정보를 교환 할 수 있는 방법을 제공한다.
프로세스들이 상호간의 활동을 조정하기 위하여 프로세스간, 커널과 통신을 하기 위한 메카니즘
종류:
Signal: 간단하고 효율적임
Pipe
Socket
Message Queue: 프로세스간 메시지 교환
Semaphore
Shared Memory: 다른 프로세스가 사용하는 메모리 영역에 대해 직접 접근하여 읽거나 씀
IPC방법중 가장 빠르다.




첨기연 교육과정 정리

지난 5월 10일부터 28일까지 첨기연 교육을 다녀왔다
"임베디드 리눅스 전문가" 과정

교육 내용을 다음의 outline으로 간단히 정리해 본다.

1. Embedded Linux 이해
2. Embedded Linux 개발 환경
3. Boot loader 이해
4. Kernel porting
5. File system
6. Linux Application
7. Linux Device Driver

2010년 5월 9일 일요일

우리의 사랑이 필요한거죠


그대 어깨위에 놓인 짐이
너무 힘에 겨워서
길을 걷다 멈춰진 그 길가에서
마냥 울고 싶어질때..

아주 작고 약한 힘이지만..
나의 손을 잡아요
따뜻함을 느끼게 할 수 있도록
어루만져 줄께요..


다 아는 노래라서
아무 생각없이 악보를 펼치고 부르는데,
문득 저 첫 부분의 가사가 마음속을 후벼 판다..

혹시 있을지 모르는..
그렇게 울고 싶은 내 곁의 사람들에게
따뜻함을 느끼라고, 내 손을 잡으라고 저렇게 노래 불러주고 싶다..

2010.05.08
방배동연습실

어린이날 셀프 선물

이제는 지겨워진 운동화 차림에

무엇보다..
지긋 지긋한 긴 겨울 지나고..
따뜻한 봄이 이제 내게 당도했으니

봄기분 내보라고..
기분전환 좀 해보라고..

내가 내게 주는
어린이날 셀프 선물..


새신발이라며 밟지는 말아달라..





2010년 4월 28일 수요일

WiFi Security Protocol

security에는 크게 암호화 기법과, 인증 기법이 있으며 이를 잘 파악해야 할듯..

WEP
(Wired Equivalent Privacy)
- WEP-40: 24bit 의 IV(Initialization Vector)와 40bit으로 구성된 key를 사용(so called WEP-40)
     40 bits are used for encryption
- WEP-104: 24 bit의 IV와 104 bit으로 구성된 key사용
- Authentication(2가지 인증 방식)
  .Open System Authentication
사실상 인증 작업을 필요로 하지 않는 association 기법
client가 right key를 가지고 있기만 하다면 association 가능
  .Shared Key Authentication
1) client가 AP에게 인증요청을 보내고
2) AP가 clear-text challenge를 send back to client.
3) client가 AP로부터 받은 challenge text를 configured WEP key를 이용하여 암호화하고
    이를 다시 인증요청에 포함하여 AP에 재전송
4) AP는 받은 것을 해독하여, 처음에 보낸 clear challenge text와 비교해보고
    그 결과에 따라 positive or negative response를 send back한다.
- Encryption: RC4 key stream XORed with plaintext.

WPA(WiFi Protected Access)
- WEP방식에서 발견된 여러가지 security weakness를 보완하기 위해 등장
- Authentication
  .PSK(Pre-Shared Key)
  .EAP(Extensible Authentication Protocol)
- Encryption
   암호화 기법으로 TKIP(Temporal Key Integrity Protocol)을 사용하며...
   The TKIP encryption algorithm is stronger than the one used by WEP

WPA2
- WPA를 보완
- WPA2-Personal과 WPA2-Enterprise의 두 종류가 있음
- Authenticatoin
  .WPA2-Personal에서는 PSK방식을 사용
   "Pre-shared key mode (PSK, also known as Personal mode) is designed for home and
      small office networks that don't require the complexity of an 802.1X authentication server."
    .WPA2-Enterprise에서는 EAP방식을 사용
- Encryption
   암호화 기법으로는 CCMP althorithm사용
   (AES based algorithm으로, 혹자는 AES를 WPA2의 encryption algorithm이라 하기도 함)
            AES: Advanced Encryption Standard



암호화 방식에 따라..(2010.08.04)
 - stream cipher
   1) WEP
   2) TKIP - enhanced than WEP
 - Block cipher
   AES - one of CCMP(?), 이건 위에 언급한 내용이랑 좀 다른데....?????

WiFi Protected Setup

this is from Wikipedia

 - PBC stands for 'Push Button Configuration'.


Wi-Fi Protected Setup (WPS) is a standard for easy and secure establishment of a wireless home network, created by the Wi-Fi Alliance and officially launched on January 8, 2007.

The standard achieves its goal by putting much emphasis into usability and security, and the concept is implemented through four usage models that enable a user to establish a home network. So, to add a new device to the Network the user can have up to the following four choices:

  1. PIN method, in which a PIN (Personal Identification Number) has to be read from either a sticker on the new wireless client device (STA) or a display, if there is one, and entered at the "representant" of the Network, either the wireless access point (AP) or a Registrar of the Network, cf below the Protocol Architecture.

    This is the mandatory baseline model, every Wi-Fi Protected Setup certified product must support it.

  2. PBC method, in which the user simply has to push a button, either an actual or virtual one, on both the AP (or a Registrar of the Network) and the new wireless client device (STA).

    Support of this model is mandatory for APs and optional for STAs.

  3. NFC method, in which the user simply has to bring the new STA close to the AP or Registrar of the Network to allow near field communicationbetween the devices. NFC Forum compliant RFID tags can also be used.

    Support of this model is optional.

  4. USB Method, in which the user uses a USB flash drive to transfer data between the new STA and the AP or Registrar of the Network.

    Support of this model is optional.

The last two models are usually referred as out-of-band methods as there is a transfer of information by another channel than the Wi-Fi channel itself.

Note that only the first three models (PIN/PBC/NFC) are currently covered by the Wi-Fi Protected Setup Certification and there is so far no intention to certify the USB method.

This page addresses the common scenario involving an Infrastructure Network. The support of ad hoc networks (IBSS) are not supported by WPS.


Protocol Architecture

The WPS protocol defines three types of devices in a network:

  • Registrar: A device with the authority to issue and revoke credentials to a network. A Registrar may be integrated into an AP, or it may be separate from the AP.
  • Enrollee: A device seeking to join a wireless LAN network.
  • Authenticator: An AP functioning as a proxy between a Registrar and an Enrollee.

The WPS standard defines three basic scenarios that involve these components:

  1. AP with internal registrar capabilities configures an Enrollee STA. In this case, the session will run on the wireless medium as a series ofEAP request/response messages, ending with the AP disassociating from the STA and waiting for the STA to reconnect with its new configuration (handed to it by the AP just before).
  2. Registrar STA configures the AP as an Enrollee. This case is subdivided in two aspects: first the session could occur on both a wired or wireless medium, and second the AP could already be configured by the time the Registrar found it. In the case of a wired connection between the devices, the protocol runs over UPnP, and both devices will have to support UPnP for that purpose. When running over UPnP, a shortened version of the protocol is run (only 2 messages) as no authentication is required other than that of the joined wired medium. In the case of a wireless medium, the session of the protocol is very similar to the internal registrar scenario, just with opposite roles. As to the configuration state of the AP, the registrar is expected to ask the user whether to reconfigure the AP or keep its current settings, and can decide to reconfigure it even if the AP describes itself as configured. Multiple registrars should have the ability to connect to the AP.
  3. Registrar STA configures Enrollee STA. In this case the AP stands in the middle and acts as an Authenticator, meaning it only proxies the relevant messages from side to side.

It should be noted that UPnP is regarded to only apply to a wired medium, while actually it applies to any interface that an IP connection can be set up on. Meaning that after manually setting up a wireless connection, the UPnP can be used over the wireless medium in the same manner as with the wired.


Protocol Structure

The WPS protocol itself consists as a series of EAP message exchanges that are triggered by a user action annge of descriptive information that should precede that user's action.

The descriptive information is transferred through a new IE that's added to the Beacon, Probe Response and optionally to the Probe Request and Association Request/Response messages. Other than purely informative TLVs, those IEs will also hold the possible, and the

After the identification of the device's capabilities on both ends, a human trigger is to initiate the actual session of the protocol. The session consists of 8 messages, that are followed in the case of a successful session by a message to indicate the protocol is done. The exact stream of messages may change when configuring different kinds of devices (AP or STA) or using different physical media (wired or wireless).

2010년 4월 20일 화요일

GCC

GCC
GNU Compiler Collection
원래 GNU C Compiler의 의미였으나, 이후 C++, Java, Fotran등을 모두 compile할 수 있을 정도로
  커져서 'Compiler Collection'의 의미로 바뀜.

Compile 과정
전처리기 → Compile → Assembler → Linker
(source code) →  (executive file)
-전처리기: C pre processor
       source file의 주석 제거 및 define을 치환하는 기능등을 함.
-C compiler: 전처리기를 거친 source file을 assembly file로 변환
-Assembler: assembly file을 object file로 변환
-Linker: Object file들을 묶어서 실행 file로 변환

Options
-o: 출력 file 명을 지정할 때 사용
-c: Linking 과정은 진행하지 않고, *.o file인 object file까지만 생성함.
-o1~o3: 최적화 수준을 지정함. 숫자가 클수록 높은 수준의 최적화가 이루어짐
-g: debugging 을 위한 정보를 compile하면서 생성하게 됨.

Ex)
만들고자 하는 program은 main.c, read.c, write.c로 구성되어 있고,
모두 io.h라는 header file을 사용한다고 가정하면...
아래의 순서로 진행하면 됨.

%gcc -c main.c
%gcc -c read.c
%gcc -c write.c
%gcc -o test main.o read.o write.o

이 과정은 compile하고자 하는 file이 세개뿐이라서 간단하나,
100개가 넘어가는 등, file수가 많아지면, compile에 어려움. → use "make" utility.!!

etc: 통합개발환경(IDE: Integrated Development Environment)
예를 들어 MS Visual Studio 같은 것을 말한다.
즉, program개발에 필요한 모든 기능(editor, compiler, linker, debugger, ...)을 통합적으로 합쳐서
만들어 놓은 것을 말함.

이 반대의 개념으로는 "개별 개발 환경"이 있고,
Linux system에서 vi editor, gcc compiler 등으로 구분되어져 있는 개발 환경이 그 예임.

2010년 4월 19일 월요일

일요일 오후

오전에는..
경운이와 나란히 교회를 다녀왔다..
언젠가 지나가는 말로 자기는 큰 교회를 다니고 싶은데 자기 동네에는 마땅한 교회가 없는 것 같다고 한다..
그럼 우리 교회로 오라..는 내 권유에 너도 교회를 다니냐며 화들짝 놀랜다..ㅡ,.ㅡ

500번의 인연에서 점심을 함께 하고
집에 돌아와 누워 아이폰을 만지작 거리다 꿀같은 낮잠도 자고..

깨어보니 5시 가량..

간만에 된장남 놀이를 해보기로 하고
이번에 읽기로 마음 먹은
'여행의 기술'을 꿰어차고 집을 나선다.

지층 카페에 들어서서
주문한 마끼아또를 들고 한쪽 구석에 자리를 잡았다..

나는 이런 것이 처음인지라
흘러나오는 음악이며..
옆에서 재잘거리는 학생들이며..
처음에는 책에 몰입이 잘 되지 않다가..

보통botton의 흡입력 때문인지,
이제 내가 분위기에 어느정도 적응을 한 탓인지, 다시 보통botton의 맛깔나고 재치넘치는 글을 어렵지 않게 섭취할 수 있었다.

첫 chapter는..
'기대에 대하여'라는 작은 제목이 붙어 있었는데, 본문의 내용을 인용하여 서문에 붙어 있는 짤막한 글귀가 내 눈을 사로 잡았다..

여행할 장소에 대한 조언은 어디에나 널려있지만, 우리가 가야 하는 이유와 가는 방법에 대한 이야기는 듣기 힘들다. 하지만 실제로 여행의 기술은 그렇게 간단하지도 않고 또 그렇게 사소하지도 않은 수많은 문제들과 자연스럽게 연결된다.

읽어 내려가기가 수월하지 않지만,
기대가 되는 책이고..
다 읽은 후에는 그 여운을 여기에 또 남겨봐야 하겠다..



정기연습-축복의 길



2010.04.17 방배동 연습실
다음주에 있을 홍석이네랑, 시원이네 커플 축가해준답시고
연습시간에 미리 축가 연습하는 시간을 잠깐 가졌었다.

내가 찍은거라
절묘한 화음대신 베이스인 내 목소리가 유독 크게 녹음되어 버려 안타깝지만..

어떤 이들은 이제 좀 지겹다고도 하지만..
난 아직도 저 화음이 꽤나 좋다..

그나저나 이번 달에 결혼식이 무려 8개..
ㅎㄷㄷ

2010년 4월 14일 수요일

Beacon, WiFi

What the hell is a Beacon?

명사

1.(안전 운행을 유도하는) 신호등[불빛] 참고 Belisha beacon

a navigation beaconplay

운행 신호등

He was a beacon of hope for the younger generation.play

그는 젊은 세대에게 희망의 불빛이었다.

2.(배・비행기의 위치 확인을 돕는) 무선 송신소
3.(과거 신호용으로 피워 올리던) 봉화


Network 규격에서 Tx와 Rx사이의 미리 약속된, 알고 있는 신호를 의미한다.
즉, Tx에서 보내는 data를 Rx에서 이미 알고 있으므로 동기화 및 channel estimation등의 용도로 사용된다.

Beacon은 AP에서 전송되는 신호이다.
AP의 존재와 지원능력(SSID, Signal strength, 사용가능한 datarate..)을
주변 무선기기에 주기적으로 알려준다.(broadcasting)
무선 client는 이 beacon을 받아서 AP와 시간을 동기화 시키고
Power save mode로 동작할 수 있도록 해준다.
Beacon Interval 은 AP가 beacon message를 전송하는 interval을 의미한다.

2010년 4월 8일 목요일

퀴즈쇼


김영하 장편소설이라고 한다.
지난 생일 영이가 "읽어봐, 재밌어"라며 건네 준 책.

미루고 미루다,
출퇴근길에.. 자기전에 틈틈히 읽으며
꼬박 한달이 걸린것 같다..

한 대학원생이, 아니 대학원 졸업생이 인터넷 채팅방의 일종인 퀴즈방에서 또래의 여자를 만나 사랑하게 되고, 그러는 와중에 편의점 아르바이트, 단칸방 고시원 생활을 거치며 88만원 세대의 비극도 겪어 보고, 자신의 장기를 살려 티비 퀴즈쇼에도 나가게 된다. 그를 계기로 그는 '회사'라 불리우는 전문 퀴즈풀이 집단에 몸담게 되고 어쩌고 저쩌고..
'따뜻하고 촉촉하고 달콤했다....우리는 그대로 오래 있었다'로 맺으며 happy ending의 뉘앙스로 마무리 된다.

책 후반부에는 '..김영하 식의 답변이자 뛰어난 성장소설..'이네 어쩌네 하며 평론이 이어지지만,
나는 퀴즈쇼가 비유하는바가 무엇인지, 이 시대를 살아가는 젊은이의 자화상이 어떻다며 블라블라하는 따위의 고찰은 하기 싫었다.

그냥 가볍게 읽으며..
그때마다 잠시 이 지치고 찌들고 재미 없는 일상을 탈출할 기회를 얻었으면..
내겐 그걸로 되었다..

멋진 장면이 하나 있긴 했다..

그녀는 휴대폰을 손에 들고 있었다.
"네 것도 꺼내봐"
나는 주머니에서 휴대폰을 꺼냈다.
아, 이제 번호를 주고 받을 차례로구나.
언젠가부터 인간과 인간이 만나면 명함을 주고 받는 것이 아니라
외계인과 교신하듯 휴대폰을 마주 겨누고 신호를 주고 받는 풍습이 생겼다.
"전원을 꺼"
그녀가 말했다.
"왜? 번호 따는거 아니었어?"
"함 꺼봐"
나는 그녀가 시키는 대로 전원을 껐다. 그녀의 휴대폰도 피릿, 소리를 내며 꺼졌다.
"자, 이제 우리는 존재하지 않는거야"

Boot Loader

Boot Loader
- Boot Code와 Startup Code를 합쳐서 Boot Loader라 칭하며
- "crt0.s" 라는 assembly file 이 Startup Code이며 Boot Code 또한 여기에 같이 담겨있다.

Booting Procedure
- Boot Code를 통한 Hardware setting
- Startup Code 실행
- main()함수로 분기하여 program 실행

Boot Code & Startup Code
PC에서 program의 시작점은 어디인가? main()??
main()도 함수인데 누군가에 의해 호출되야 작동이 되지 않겠는가라는 의문.
또한 C program에서 사용하는 stack이나 heap, static memory등은 누가 만들어 주는가?
이러한 과정 즉,
전원이 들어오고 HW 초기화,
C program이 작동되기 위한 준비과정을 해주는 코드가 바로 Boot Code와 Startup Code이다.

 1. Boot Code
1)Entry Point 지정:
  - entry point는 프로그램의 시작을 알리는 역할을 한다. 즉, 가장 먼저 시작되는 포인트를 정함.
2)Exception Vector 설정(예외처리벡터)
  - ARM의 경우, 예외 처리벡터는 보통 ROM의 시작주소인 0x0번지에 위치한다.
  - 예외 처리 벡터는 예외가 발생했을 때, 예외를 처리하는 코드들이 있는 테이블이다.
  - 각 예외에 할당한 메모리는 4byte이므로 명령어 하나로 예외처리를 해야함.
  - 그래서 벡터에는 실제 핸들러가 있는 위치로 분기하는 분기명령으로 이루어져 있음.
  3)System clock 설정: system에서 사용되는 clock을 설정한다.
4)Memory 초기화: system에서 사용되는 ROM이나 RAM등의 메모리에 필요한 설정을 해주는 과정
 2. Startup Code
1)Interrupt Disable
2)RW_DATA ROM에서 RAM으로 복사
3)ZI 영역 Clear
4)Mode별 Stack생성
5)Heap생성
6)Interrupt Enable
7)main()호출

2010년 4월 5일 월요일

Linux Kernel Compile

Linux System에서 가장 중요한 Kernel을 직접 컴파일하고 실행시켜 봄으로써 익숙해지도록 해보자..
Linux Kernel은 여러가지 버전이 있으며 가장 최신 것을 사용하되,
내가 접한 문서에서는 "2.4.16"을 바탕으로 설명하고 있음..

1. LXR (Linux Cross Reference).
-리눅스 소스코드의 모든 함수/변수/정의 등에 대한 cross ref를 온라인으로 제공(http://lxr.linux.no)
 예를 들면, visual studio에서 특정 변수를 click하면 그 변수가 정의된 소스코드를 보여주는 것과
   비슷한 것 같다.
 소스코드를 분석할때, 보통은 grep을 사용해 찾아본다고 함.
 하지만 너무 힘들고 일이 많아지는 단점이 있으므로 LXR을 사용하는 것이 유익하다.
2. 소스코드 얻기
-Linux Kernel Source Code는 http://www.kernel.org 에서 구할 수 있음.
 각 버전별로 구분되어 있으며, 이중 원하는 버전의 완전한 코드를 받는다.
 gz, bz2 의 두가지 타입으로 압축되어 제공되며, 둘중 어느것을 사용해도 무방.
3. 소스코드 풀기
-Kernel Compile을 위해서는 root권한을 가져야함. (root 혹은 su로 login)
-보통 kernel은 /usr/src 밑에 위치
-압축된 kernel의 소스코드는 모두 linux란 이름의 directory로 시작하므로
   usr/src에 linux란 link나 directory가 있을시 덮어쓰게 되므로 주의.
>>cd /usr/src
   rm -f linux
   tar xvjf somewhere/linux-2.4.16.tar.bz2 // 압축풀기
   mv linux linux-2.4.16.tar.bz2 // A를 B로 옮김(혹은 rename)
   ln -s linux-2.4.16 linux // symbolic link. 심볼만(파일의 경로) 가리킴
// windows의 단축아이콘과 같은 개념
// -s 옵션이 없으면 hard link
// link [링크할대상] [링크파일명]
4. Compile 준비 (tool version확인)
>>make mrproper //소스코드를 처음 깔았을 때와 같은 상태로 돌려주는..
    cd /usr/src/linux/Documentation
    vi Changes //이 document에는 현재 kernel을 compile하기 위해 필요한 tool들의
           //version정보가 들어있음.
//각 tool들의 버전을 확인하는 방법은 [명령어] --version이라 치면됨.
//ex) gcc --version
make --version
5. Kernel 설정
-다음과 같은 방법이 있음
  1)고전적인 방법
  2)text 기반의 menu를 이용하는 방법
  3)x-window상에서 GUI를 이용하는 방법
-menuconfig 방법
 >>make config
     make menuconfig
     make xconfig
-kernel 설정이 끝나면 /usr/src/linux/.config 이 만들어 진다.
6. Kernel Compile
-다음의 순서대로 진행
>>make dep  //source file과 header와의 의존성을 검사
    make modules //설정에서 module로 선택한 것들을 *.o 의 형태로 만들어 준다.
    make bzImage //kernel자체를 만들어준다.
    make modules_install //만들어진 module을 /lib/modules/2.4.16에 설치
            //설치와 함께 depmod를 실행해 module간의 의존성도 만들어주는 역할
7. Kernel test 및 설치
-Compile이 끝났으면 Kernel이 제대로 동작하는지 확인한 후 기본 커널로 설치해 사용.
-2가지 test방법:
  1) 플로피 디스크 사용
make zdisk를 사용해 만들어진 kernel을 floppy에 담는다.
복사가 끝난 후 floppy를 이용해 부팅해 보고 정상동작하는지 확인.
  2) LILO 사용(LInux LOader: Linux를 위한 boot loader)
/etc/lilo.conf 를 수정(문서 참조)
새로 부팅 후 LILO에 test라고 입력하여 새로 만든 커널을 실험한다.
-Kernel의 설치
  Kernel image와 map file을 복사하고 lilo.conf를 수정하면 된다.
  복사할 file: ~ means '/usr/src/linux'
  1) ~arch/i386/boot/bzImage
  2) ~/system.map


2010년 4월 2일 금요일

Linux basic commands

기본 명령어s

cd
디렉토리를 변경할 때 사용.
예 : [test@host2]$ cd 이동할 디렉토리 명.

ls
디렉토리의 화일들을 보여줌.
예 : [test@host2]$ ls <옵션>
<옵션>
-al : Hidden속성의 파일 표시(a옵션),파일의 종류, 사용권한등 자세한 정보표시(l옵션)
-aC : 도스의 dir /w명령과 같이 한 줄에 여러 개의 정보를 표시(C옵션)
-R : 도스의 dir/s 명령과 같이 서브디렉토리의 모든 명령어를 보여주는 옵션(R옵션)

passwd
자신의 계정의 암호를 변경할 때 사용.
예 : [test@host2]$ passwd 변경할 ID.
New Unix Password : 암호 입력
Retype new Unix Password : 암호 재입력

pwd
자신의 홈디렉토리를 확인할 때 사용.
예 : [test@host2]$ pwd
/www/home/test

cp
파일이나 디렉토리 복사시 사용.
예 : [test@host2]$ cp <복사할 파일명> <복사되어 생성될 파일명>

mv
move라는 도스명령어와 같은 것으로 파일을 다른곳으로 옮겨주는 명령어입니다.
cp명령어는 복사를 하기 때문에 원본파일은 그대로 존재하면서 또다른 파일을 생성해 주지만 mv는 원본파일이 다른곳으로 대체되어 버립니다.
따라서 mv라는 명령어의 용도는 파일이나 디렉토리의 이름을 바꾸는 용도로 많이 사용됩니다.

mv의 사용형식과 예를 들어보면 다음과 같습니다.
mv 옵션 원본파일(디렉토리) 목적파일(디렉토리)
<옵션>
-b : 삭제하기전에 백업본을 만들 수 있습니다.(backup)
-f : 목적디렉토리에 동일한 파일이 있더라도 overwrite합니다.(force)
     즉, overwrite여부를 확인하지 않고 바로 덮어쓰게 됩니다.
-i : 목적디렉토리에 동일한 파일이있을 경우에는 overwrite여부를 확인합니다.(interactive)

rm
파일이나 디렉토리를 삭제할 때 사용.
예 : [test@host2]$ rm <옵션> <삭제할 파일이나 디렉토리명>
<옵션>
-f: 삭제여부를 묻지않고 바로 삭제해 버립니다.(force)
-i: 삭제여부를 확인하게 됩니다.(interactive)
-r, -R: 서브디렉토리가 있을 경우에도 모두 삭제해 버립니다.(recursive)

mkdir
디렉토리를 생성할 때 사용.
예 : [test@host2]$ mkdir <생성할 디렉토리명>

rmdir
디렉토리를 삭제할 때 사용.
예 : [test@host2]$ rmdir <삭제할 디렉토리명>

du
자기 계정의 디스크 사용량을 볼 때 사용.
디렉토리를 삭제할 때 사용.
예 : [test@host2]$ du <옵션> <사용자아이디>
<옵션>
-s : 전체 사용량을 간략히 표시
-h : 용량단위로 표시하여 좀 더 알기 쉬움.

cat
concatenate의 약자로서 텍스트형식으로 된 파일의 내용을 볼 수 있는 명령어입니다.
예 : [test@host2]$ cat <옵션> <파일명>
<옵션>
-b : 행번호를 앞에 붙여서 출력. (빈행은 번호를 붙이지 않습니다.)
-n : 행번호를 앞에 붙여서 출력. (빈행도 번호를 붙입니다.)

tar
여러개의 파일을 묶거나 풀 때 사용.
예 : [test@host2]$ tar cvf 압축파일.tar 압축대상파일 및 디렉토리 : 압축할때
        [test@host2]$ tar xvf 압축파일.tar : 풀 때
<옵션>
-c : tar 파일을 생성할 때
-d : tar 파일과 해당 파일시스템간의 차이점을 확인하고자 할 때 사용.
-r : tar 파일에 다른 파일들을 추가하고자 할 때 사용.
-t : tar 파일의 내용을 확인하고자 할 때 사용.
-f : tar 파일을 사용할 때 반드시 사용.
-p : tar 파일을 생성할 때 당시의 퍼미션을 그대로 하여 풀어줄 때 사용.
-v : 묶을 때나 풀어줄 때 파일들의 내용을 자세하게 보려고 할 때 사용.
-Z : compress로 압축파일 사용할 때 압축이나 해제까지 한번에 할 때 사용.
-z : gzip과 관련하여 압축이나 해제를 한꺼번에 할 때 사용


head
이 명령어는 파일의 내용을 처음부터 몇행까지만 보고자 할 때에 사용합니다.
다음과 같은 형식으로 사용됩니다.

head 파일명 : 아무런 옵션없이 사용하시면 처음부터 10행까지만을 보여줍니다.
head -n 파일명 : 파일의 첫행부터 n행까지만을 보여줍니다.
이에 대한 예를 보이면 다음과 같습니다.

[yourid@nice ~/logs]$ head  access_log

168.126.62.78 - - [14/Sep/1999:17:34:07 +0900] "GET /server-status?refresh=1 HTTP/1.1" 200 1515
168.126.62.78 - - [14/Sep/1999:17:34:09 +0900] "GET /server-status?refresh=1 HTTP/1.1" 200 1525
168.126.62.78 - - [14/Sep/1999:17:34:10 +0900] "GET /server-status?refresh=1 HTTP/1.1" 200 1525
168.126.62.78 - - [14/Sep/1999:17:34:11 +0900] "GET /server-status?refresh=1 HTTP/1.1" 200 1525
168.126.62.78 - - [14/Sep/1999:17:34:12 +0900] "GET /server-status?refresh=1 HTTP/1.1" 200 1525
168.126.62.78 - - [14/Sep/1999:17:34:13 +0900] "GET /server-status?refresh=1 HTTP/1.1" 200 1525
168.126.62.78 - - [14/Sep/1999:17:34:14 +0900] "GET /server-status?refresh=1 HTTP/1.1" 200 1525
168.126.62.78 - - [14/Sep/1999:17:34:15 +0900] "GET /server-status?refresh=1 HTTP/1.1" 200 1525
168.126.62.78 - - [14/Sep/1999:17:34:16 +0900] "GET /server-status?refresh=1 HTTP/1.1" 200 1525
168.126.62.78 - - [14/Sep/1999:17:34:17 +0900] "GET /server-status?refresh=1 HTTP/1.1" 200 1526

[yourid@nice ~/logs]$ head  -5 access_log

168.126.62.78 - - [14/Sep/1999:17:34:07 +0900] "GET /server-status?refresh=1 HTTP/1.1" 200 1515
168.126.62.78 - - [14/Sep/1999:17:34:09 +0900] "GET /server-status?refresh=1 HTTP/1.1" 200 1525
168.126.62.78 - - [14/Sep/1999:17:34:10 +0900] "GET /server-status?refresh=1 HTTP/1.1" 200 1525
168.126.62.78 - - [14/Sep/1999:17:34:11 +0900] "GET /server-status?refresh=1 HTTP/1.1" 200 1525
168.126.62.78 - - [14/Sep/1999:17:34:12 +0900] "GET /server-status?refresh=1 HTTP/1.1" 200 1525


tail
이 명령어는 바로앞의 head라는 명령어와는 상반되는 것이며 파일의 내용을 맨 마지막부터 몇행까지 보고자 할 때에 사용합니다.

이런 tail이라는 명령어의 주용도는 계속 추가되는 파일의 내용을 모니터링하면서 내용을 확인하고자 할경우에 매우 유용하게 활용됩니다.

tail 파일명 : 아무런 옵션없이 사용하시면 마지막부터 10행까지만을 보여줍니다.
tail -n 파일명 : 파일의 마지막행부터 n행까지만을 보여줍니다.
[yourid@nice ~/logs]$ tail  access_log

210.219.170.93 - - [06/Dec/1999:19:02:41 +0900] "GET /cgi-bin/home.cgi HTTP/1.1" 404 - "http://www.m
210.219.170.93 - - [06/Dec/1999:19:02:48 +0900] "GET /logo.html HTTP/1.1" 404 - "http://www.manualan
210.117.112.49 - - [07/Dec/1999:02:04:34 +0900] "GET / HTTP/1.0" 200 513 "http://dir1.naver.com/sear
210.117.112.49 - - [07/Dec/1999:02:04:34 +0900] "GET /logo.html HTTP/1.0" 404 - "http://dir1.naver.c
210.117.112.49 - - [07/Dec/1999:02:04:34 +0900] "GET /cgi-bin/menu.cgi HTTP/1.0" 404 - "http://dir1.
210.117.112.49 - - [07/Dec/1999:02:04:37 +0900] "GET /cgi-bin/home.cgi HTTP/1.0" 404 - "http://dir1.
210.221.2.125 - - [07/Dec/1999:02:29:20 +0900] "GET / HTTP/1.0" 200 513 "http://search.simmani.com/c
210.221.2.125 - - [07/Dec/1999:02:29:20 +0900] "GET /cgi-bin/menu.cgi HTTP/1.0" 404 - "http://www.ma
210.221.2.125 - - [07/Dec/1999:02:29:20 +0900] "GET /logo.html HTTP/1.0" 404 - "http://www.manualand
210.221.2.125 - - [07/Dec/1999:02:29:20 +0900] "GET /cgi-bin/home.cgi HTTP/1.0" 404 - "http://www.ma

[yourid@nice ~/logs]$ tail -5  access_log

210.117.112.49 - - [07/Dec/1999:02:04:37 +0900] "GET /cgi-bin/home.cgi HTTP/1.0" 404 - "http://dir1.
210.221.2.125 - - [07/Dec/1999:02:29:20 +0900] "GET / HTTP/1.0" 200 513 "http://search.simmani.com/c
210.221.2.125 - - [07/Dec/1999:02:29:20 +0900] "GET /cgi-bin/menu.cgi HTTP/1.0" 404 - "http://www.ma
210.221.2.125 - - [07/Dec/1999:02:29:20 +0900] "GET /logo.html HTTP/1.0" 404 - "http://www.manualand
210.221.2.125 - - [07/Dec/1999:02:29:20 +0900] "GET /cgi-bin/home.cgi HTTP/1.0" 404 - "http://www.ma

tail 이라는 명령어는 위의 두 경우 보다도 다음과 같은 용도로 많이 사용됩니다.

[yourid@nice ~/logs]$ tail -f  error_log

[Tue Dec 7 02:04:34 1999] [error] [client 210.117.112.49] File does not exist: /home/yourid/public_
[Tue Dec 7 02:04:34 1999] [error] [client 210.117.112.49] File does not exist: /home/yourid/public_
[Tue Dec 7 02:04:37 1999] [error] [client 210.117.112.49] File does not exist: /home/yourid/public_
[Tue Dec 7 02:04:37 1999] [error] [client 210.117.112.49] File does not exist: /home/yourid/public_
[Tue Dec 7 02:29:20 1999] [error] [client 210.221.2.125] File does not exist: /home/yourid/public_h
[Tue Dec 7 02:29:20 1999] [error] [client 210.221.2.125] File does not exist: /home/yourid/public_h
[Tue Dec 7 02:29:20 1999] [error] [client 210.221.2.125] File does not exist: /home/yourid/public_h
[Tue Dec 7 02:29:20 1999] [error] [client 210.221.2.125] File does not exist: /home/yourid/public_h
[Tue Dec 7 02:29:20 1999] [error] [client 210.221.2.125] File does not exist: /home/yourid/public_h
[Tue Dec 7 02:29:20 1999] [error] [client 210.221.2.125] File does not exist: /home/yourid/public_h

f라는 옵션을 사용하면 계속적으로 추가되는 파일의 내용을 실시간으로 모니터링하면서 보실 수 있습니다.
따라서 어떤 파일의 내용, 특히 에러파일의 내용이나 로그파일의 내용을 확인하고자 할 때 가장 유용하게 사용됩니다.

grep
지정된 file내의 특정문자나 단어를 검색하는 명령어
예) %grep <option> <찾을문자> <대상file>
    %grep -i hello /etc/test   → test file에서 hello라는 문자를 대소문자 구분없이 검색하여 출력

<options>
-v: 지정한 패턴과 일치하지 않는 것들을 보여준다.
-n: 일치하는 라인의 결과와 그 파일에서의 결과 라인이 몇 번째 라인인지 출력
-i: 대 소문자의 구별을 하지 않음
-c: 일치하는 라인의 수를 보여준다.
-C num: 일치하는 문자가 포함된 라인과, 지정한 num 라인만큼의 위와 아래라인을 보여준다.
        default는 두줄. ex) grep -C 5 hello /etc/test
-A num: 일치하는 문자가 포함된 라인과, 지정한 num 라인만큼의 아래라인을 보여준다.