블로그 이미지
GUCCI

카테고리

전체보기 (111)
여행 (1)
기기 (2)
쇼핑 (0)
게임 (0)
etc. (6)
취업이야기 (0)
업무일지 (5)
리눅스 (38)
웹프로그래밍 (2)
네트워크 (4)
JAVA (17)
Android (0)
IOS (2)
LUA (8)
C/C++ (1)
Objective C (2)
SERVER (2)
그누보드4 (1)
MSSQL (2)
Programming (1)
자바스크립트 (4)
HTML/CSS (1)
LGNAS (0)
Total
Today
Yesterday
ln 명령은 파일을 링크할 때 사용하는 명령입니다.

리눅스 시스템 상에는 심볼릭링크와 하드링크 두가지의 링크가 있습니다.

 

심볼릭링크는 원본파일을 가리키도록 링크만 시켜둔 것으로 윈도우의 바로가기와 같다고 보시면 됩니다. 심볼릭링크는 원본파일이 삭제되면 링크파일은 작동하지 않게 됩니다.

 

하드링크는 원본파일과 이름은 다르지만 동일한 파일입니다. 하드링크에서는 원본파일이나 링크파일 둘중의 하나가 삭제되더라도 나머지 하나는 그대로 남아 정상 동작 합니다. 또한 하드링크는 원본파일의 내용이 변경될 경우에 링크파일의 내용도 자동으로 변경됩니다.

 

명령어 위비: /bin/ln

사용형식 : ln [옵션] 원본파일 대상파일

             ln [옵션] 원본파일 대상디렉토리

옵션

-b, --backup : 대상파일이 이미 존재할 경우 백업파일을 만든 후에 링크파일을 생성

-d, -F, --directory : 디렉토리에 대한 하드링크파일 생성을 가능하게함

-f : 대상파일이 존재할 경우 대상파일을 지우고 링크파일을 생성

-i : 대상파일이 존재할 경우 대상파일을 지울 것인가 확인하게함

-s : 심볼릭링크파일을 생성

-S : 만약에 대상이 이미 있어서 백업을 해야 할 경우에 그 백업파일에서 사용 할 파일이름의

      접미사(suffix)를 지정할 수 있음

-t, --target-directory=DIRECTORY : 링크파일을 생성할 디렉토리를 지정

 

예1) ln 명령어를 사용하여 하드링크 생성하기

우선 hard_source 파일을 hard_link 파일로 하드링크 시킨 후 두 파일의 내용을 확인해 보도록 하겠습니다.

 

#ln hard_source hard_link

#

#ls -l

합계 12
-rw-r--r-- 2 root root 15  7월 19 21:54 hard_link

-rw-r--r-- 2 root root 15  7월 19 21:54 hard_source

 

#cat hard_source

linux

network

windows

 

#cat hard_link

linux

network

windows

 

위에서 보시는 것과 같이 두파일의 내용이 동일하다는 것을 알 수 있습니다.

이번에는 원본파일 내용의 첫행을 지운뒤 링크파일과 비교해 보도록 하겠습니다.

 

#cat hard_source

network

windows

 

#cat hard_link

network

windows

 

위와 같이 원본파일만 수정했는데도 링크된 파일의 내용도 같이 수정됨을 확인 할 수 있습니다.

 

 

예2)심볼릭링크 사용하기

심볼릭링크를 사용하기 위해서는 -s 옵션을 사용해야 합니다.

sym_source 파일을 만든뒤 sym_link 파일로 심볼릭링크 시키도록 하겠습니다.

 

#ln -s sym_source sym_link

#ls -l

lrwxrwxrwx 1 root root 14  7월 19 22:09 sym_link -> sym_source

-rw-r--r-- 1 root root 22  7월 19 22:09 sym_source

 

여기서 확인하고 넘어가야 할 부분은 심볼릭링크된 파일의 퍼미션이 하드링크일때와는 다르게

lrwxrwxrwx 이라는 것과 -> 로 원본을 가리켜 심볼릭링크된 파일이라는 것을 확인 할 수있게 해줍니다.

[출처] ln 명령어|작성자 김동훈

'리눅스 > 리눅스명령어' 카테고리의 다른 글

sysctl 명령어  (2) 2012.02.15
insmod, rmmod, lsmod, modprobe  (3) 2012.02.14
test 명령어  (3) 2012.02.14
at 와 crond 명령어  (2) 2012.02.14
grep 명령어 와 활용  (7) 2012.02.13
Posted by GUCCI
, |

Linux Hotplug

리눅스 / 2012. 2. 10. 10:28

LinuxHotplug 를 사용하기 위한 준비 


  • 리눅스 커널 2.4 이상 

  • 커널 설정에서 General setup -> Support for hot-pluggable devices 옵션이 켜져있어야 한다.
  • hotplug 스크립트 

  • [http]Linux Hotplugging에서 받아서 설치한다.
  • hotplug가 가능한 하드웨어 

  • usb, ieee1394, pci, pcmcia(2.6.13이상) hotplug장치 등등. 

LinuxHotplug 동작방식 


  • hotplug를 지원하는 장치가 연결된다.
  • 연결되면 장치의 클래스 드라이버에서 /proc/sys/kernel/hotplug에 등록된 프로그램을 호출한다. (주로 /sbin/hotplug ) 

  • hotplug의 인자로 장치클래스의 이름이 붙는다. (ex: usb, ieee1394 ...)
  • /sbin/hotplug에서는 /etc/hotplug.d/장치클래스/*.hotplug 와 /etc/hotplug.d/default/*.hotplug 스크립트를 수행한다. 

  • 각각의 스크립트를 hotplug agent라고 부른다.
  • /etc/hotplug.d/default/default.hotplug는 linux-hotplug.sf.net에서 제공하는 것으로 해당 장치가 필요로 하는 커널 모듈을 적재하는 역할을 한다.
  • /etc/hotplug.d/default/udev.hotplug는 리눅스 2.6에서 동작하는 것으로 기존의 devfs를 교체하고 유연한 장치이름을 제공한다.
  • /etc/hotplug.d/default/hal.hotplug는 HAL Daemon에 해당장치가 연결되었다는 것을 dbus를 통해 알려준다.
  • 각 스크립트에서 환경변수를 참조해서 장치에 대한 작업을 수행한다.
  • 환경변수는 다음과 같다.

Linux 2.4 


  • USB
    ACTION=%s [add or remove] 
    DEVPATH=%s
    PRODUCT=%x/%x/%x 
    INTERFACE=%d/%d/%d [ for interface 0, if TYPE=0/*/* ] 
    TYPE=%d/%d/%d 
    


  • IEEE1394
    ACTION=%s [add or remove] 
    VENDOR_ID=%x [24 bit vendor id]
    GUID=%x [64 bit globally unique id]
    SPEFICIER_ID=%x [24 bit id of owner of specification]
    VERSION=%d.%d [version of specification]
    


  • PCI
    ACTION=%s [add or remove] 
    PCI_CLASS=%06X 
    PCI_ID=%04X:%04X 
    PCI_SLOT_NAME=%s 
    PCI_SUBSYS_ID=%04X:%04X
    


Linux 2.6 


  • 리눅스 커널 2.6 에서는 장치의 클래스드라이버가 아닌 kobject수준에서 hotplug스크립트를 호출한다.
  • 더불어 각 장치에 대해 대응되는 sysfs의 경로가 함께 환경변수로 넘어온다.
  • SCSI, SCSI_HOST, SCSI_DEVICE, BLOCK, INPUT, NET 

ACTION=%s [add or remove]
DEVPATH=/%s/%s...

[edit]

LinuxHotplug의 실제 활용예 


gphoto2 

  • gphoto2는 여러 Unix시스템에서 쓸 수 있는 디지털카메라 관리 프로그램이다.
  • gphoto2를 설치하면 /etc/hotplug/usb/usbcam 스크립트가 등록된다.
  • usbcam스크립트는 gphoto2에서 지원하는 카메라가 연결되었을 때 현재 console을 쓰는 사용자에게 디지털카메라에 접근할 수 있는 허가권을 준다.

'리눅스' 카테고리의 다른 글

start-stop-daemon  (1) 2012.02.15
portmap 데몬  (2) 2012.02.15
리눅스 부팅 과정  (2) 2012.02.10
/dev/null 2>&1 의 의미  (1) 2012.02.10
Vi/Vim 단축키 모음 키보드그림  (4) 2012.02.09
Posted by GUCCI
, |

리눅스 부팅 과정

리눅스 / 2012. 2. 10. 09:10

■ 시스템 부팅 과정

 

▶ 개 요

 - Bootstrapping 이란 '컴퓨터를 시동하기'를 뜻한다. 컴퓨터가 처음 시동될 때에는 아직 OS가 작동가능한 상태가 아니므로 컴퓨터는 스스로 OS를 메모리에 로드하고 여러 초기화 작업을 수행해야 한다. 이 과정을 bootstrapping, 줄여서 booting이라고 한다.
Booting 중에 있는 시스템은 취약하다. 설정의 오류, 장치의 부재, 잘못된 파일 시스템등에 의해 시스템은 잘 booting 되지 않을 수 있다. 시스템 관리자는 처음 시스템을 설치하게 되면, 시스템의 환경에 맡게 적절한 시스템 설정을 해주어야 한다.

시스템은 자동 또는 수동으로 booting 할 수 있다. 자동 모드에서는 외부로부터의 조작없이 시스템이 스스로 모든 booting 과정을 끝낸다. 수동 모드에서는 시스템이 싱글 유저 모드 단계까지만 booting 과정을 진행하고, 이 후는 관리자가 직접 부팅 과정을 수행한다.

⇒Boot PROM
각 W/S는 Kernel을 load하기 전에 시스템 운용을 제어하는 monitor program이내장된 PROM Chip을 가지고 있다. 또한 PROM은 시스템에 접속된 장치들을 확인하고 access할 수 있는 내장 device driver를 가지고 있다. 

⇒Boot Blocks
시스템의 첫 번째 boot 프로그램은 bootstrap 과정에서 사용되는데, 이것은 두번째 boot program을 load 하는데 사용된다.
두 번째 boot program은 "installboot" 명령어에 의해 root File system에 install된다. 

⇒Run Level
Run Level은 시스템 서비스들을 설정하는 System Software Configuration이다.

⇒Run Control Scripts
File system Check 및 mount와 여러 Daemon Process를 시작하고 중지시키는 rc script들을 제공한다.

⇒Kernel Modules
Small static core와 dynamically loadable module로 구성된다.

▶ 시스템 Booting 절차

   1) 부팅의 과정은 여섯단계로 나누어진다.

  • 커널의 로딩과 초기화
  • 장치 인식과 설정
  • 자발적인 시스템 프로세스의 생성
  • 관리자 제어(싱글 유저 모드에서만)
  • 시스템 startup scripts 실행
  • 다중 사용자 모드 진입

   2) 상세한 절차 표현

     ① Boot PROM(1. 시스템 설정 banner의 표시(Model 및 Keyboard type, HostID, 
         PROM revision Number, Ethernet Address) 
         →2. 자기지단 → 3. PROM에 설정된 Boot 장치에서 boot program을 찾는다. 
         →4. Boot Program의 load(/platform/sun4m/ufsboot)
     ② Boot Program(5. ufsboot 프로그램을 load한 후 boot PROM은 kernel을 load한다.)
     ③ Kernel 초기화 단계(6. Kernel 자기자신을 초기화한 후 ufsboot program을 이용하여          moduleemf을 load 한다.)
     ④ /sbin/init(7. Kernel은 사용자 process 한 개를 생성하고 /sbin/init program을실행

        시킨   다. 
         →8. /sbin/init program은 /etc/inittab 파일에 기록된 내용을 실행한다.)

 

OBP Basic Element's Relationship to NVRAM and CPU

 

 

▶ System Run Levels

Run Levels

기 능

0

PROM Monitor Level

1

시스템 관리상태(몇 개의 파일시스템이 mount되어지고 login 환경을 지원하지 않는 Single-user)

2

자원을 공유할 수 없는 Multiuser 상태

3

자원을 공유할 수 있는 Multiuser 상태

4

현재는 사용되지 않음

5

Halt와 대화형 Boot(boot -a)

6

Reboot to default run level 3

S,s

시스템 관리상태(몇 개의 파일시스템이 mount되어지고 login 환경을 지원하지 않는 Single-User 상태

※ Run level은 who -r로 확인

▶ Run Control Scripts

 - 모든 Run level들은 시스템 상태에 대하여 기능별로 start 또는 stop할 수 있는특정 shell script를 가지고 있다. 이러한 shell script들은 각 run level 관련 디렉토리 안에 있는 실행 가능한 형태의 명령어 파일을 수행시킨다.
이 명령어 파일들은 /etc/init.d 디렉토리에 link되어 사용된다

명령어

run control script

run level directory

/sbin/init0

/sbin/rc0

/etc/rc0.d

/sbin/initS

/sbin/rcS

/etc/rcS.d

/sbin/init1

/sbin/rc1

/etc/rc1.d

/sbin/init2

/sbin/rc2

/etc/rc2.d

/sbin/init3

/sbin/rc3

/etc/rc3.d

/sbin/init5

/sbin/rc5

 

/sbin/init6

/sbin/rc6

 

 

▶ Run Control Script의 요약

Script Name

주요 기능

/sbin/rcS

- diskless/dataless client 지원을 위한 network setup

- root와 user File system의 check 및 mount

- device 생성 및 Link

/sbin/rc0

- PROM level로 System Down

- 시스템의 서비스와 모든 프로세스의 중지

- 모든 File system의 mount

/sbin/rc1

- Run level 1(Single user Mode)로 system down

/sbin/rc2

- run level 2의 Multiuser 상태 
- 모든 File system의 mount 
- NFS File system Sharing을 제외한 모든 network service의 수행

/sbin/rc3

- 모든 자원의 공유가 이루어지는 run level 3의 Multiuser 상태
- syslogd daemon start
- NFS, RFS server Process Start

/sbin/rc5

- 시스템 Halt와 대화형 Booting의 실행
- 모든 시스템 프로세스와 서비스의 중지
- File System의 umount

/sbin/rc6

- 시스템의 Halt와 Reboot 
- /etc/rc0.d/K* stop 수행 
- 시스템 프로세스와 서비스의 중지
- File system의 umount 
- Booting하여 /etc/inittab파일의 initdefault 수행

 

 

▶ System Run Level의 변경

1) boot 명령어

-PROM monitor level의 boot 명령어는 다른 run level로 변경 실행 시킬 수 있다.

 

    ok boot [device_name] [option]

 

option

설 명

-a

 interactive boot

-r

 reconfiguration boot

-s

 Singel mode run level로 boot

-v

 상세한 boot 메시지를 print

-w

 File system을 쓰기 가능하게 boot

 

2) who 명령어

- 현재 시스템의 상태를 알 수 있다.

option

설 명

-a

 all

-b

 boot time

-d

 dead process

-l

 login process

-p

 process other than getty or user

-r

 run level

-T

 status of tty(++writable, -not writable, ?hung)

-u

 useful information

 

3) /sbin/init 명령어

- init 명령어는 system run level을 변경하기 위하여 shutdown 명령어 대신 사용할 수 있다.

그러나, init 명령어는 경고 메시지를 보내지는 않는다.

option

설 명

0

 PROM Monitor level

1

 Single-User level

2

 Multi-User level(no resource shared)

3

 Multi-User level(resource shared)

5

 Interactive Boot

6

 Halt and reboot Default run level3

S,s

 Single-User level

Q,q

 init 프로그램이 /etc/inittab 파일을 re-read

 

4) /sbin/init 프로세스

- 시스템이 booting할 때 /etc/inittab File의 "initdefault"에 의하여 첫 번째 run level이 설정된다.

/sbin/init 프로세스의 중요한 역활

① Scheduler 와 Page Daemon 등과 같은 모든 프로세스의 부모 프로세스 역할 
② 시스템을 default run level로 설정하기 위한 프로세스들을 생성
③ /etc/inittab 파일을 참조하여 run level 간의 변화를 조절
④ Service Access Control(SAF)를 구동시키며 Port Service를 관리한다.

 

5) /sbin/rc* Script

- 시스템 환경의 초기화를 수행

  • File system Check 및 Mounting
  • Network 환경 구축
  • Device Configuration 및 Link
  • Start Daemon Process

 

6) /etc/init.d Directory

- rc script는 /sbin 안에 존재하며 /etc 디렉토리 안의 file과 symbolic link 되어 있다. 
/etc/init.d 안에는 run control file들이 존재하는데 process를 start 시키거나, 또는 kill 시키는 script 들이 존재한다. 
실질적인 file은 이 디렉토리 안에 존재하지만 /etc/rc* 디렉토리와 hard link 되어있다.
만약, 어떤 script를 첨가하고 싶으면 /etc/init.d 디렉토리에 해당 script를 첨가하면 된다.

 

7) /etc/inittab File

- run level과 어떤 action을 취하는지의 정보를 기록하고 init process에 의해 생성된다.
init 프로세스는 run level이 변화할 때의 signal을 받으면 /etc/inittab file에 등록된 프로세스에 따라 시스템 환경을 처리한다.

 

8) Adding Run Control Files

- run control file을 추가하고자 할 경우의 procedure 이다.
① /etc/init.d/README file을 참고한다.
② 해당 file을 /etc/rc*.d의 어느 디렉토리에 link 할 것인지 결정한다. 
그리고 그 script가 start 인지 kill인지 결정한다.
③ /etc/init.d에 file을 만든 후 /etc/rc*.d에 링크 한다.
ex) # more /etc/init.d/sample 
echo 'Hello Soalris'
# cd /etc/rc3.d
# in /etc/in


'리눅스' 카테고리의 다른 글

portmap 데몬  (2) 2012.02.15
Linux Hotplug  (6) 2012.02.10
/dev/null 2>&1 의 의미  (1) 2012.02.10
Vi/Vim 단축키 모음 키보드그림  (4) 2012.02.09
RPM( Redhat Package Manager)  (1) 2012.02.09
Posted by GUCCI
, |

최근에 달린 댓글

글 보관함