E D R , A S I H C RSS

FrontPage hard_symbolic_link

1993.1.18

SUBJECT: Symbolic/Hard link의 비교

CONTENTS:
0. Introduction
1. Hard link
1) "link"의 개념:
2) hard link란 ?
3) hard link의 특성
2. Symbolic link

DESCRIPTION:
0. UNIX의 file type을 얘기할 때,
ordinary, directory, special, socket, FIFOs와 함께
symbolic link, hard link도 언급된다.
symbolic/hard link를 file type으로 이해하려면 우선 개념과 특징을 이해해야 할 것 같다.

1. Hard link
1) "link"의 개념:
- "link"라는 개념을 이해하는 한 방법은
filesystem의 directory가 어떻게 계층적으로 구조를 형성하고 있으며
어떻게 "cd" command로 여러 directory를 이동할 수 있는가를 이해하는 것이다.
- 각 directory는 기본적으로 최소한 두 개의 file을 가진다.
① directory 자신을 표현하는 dot(.)
② 자신의 parent directory를 표현하는 dot-dot(..)
- 이 두 file이 directory들을 연결하여 filesystem의 계층적 구조를 형성한다.
각 directory의 parent와 sub-directory를 dot(.)와 dot-dot(..) file로 연결 하는 것이다.
즉 ① 'current directory의 dot-dot(..) file'의 inode
= 'parent directory의 dot(.) file'의 inode
② 'current directory의 dot(.) file'의 inode
= 'sub directory의 dot-dot(..) file'의 inode
- sub directory가 여러 개인 directory의 경우
sub directory들의 dot-dot(..) file의 inode는
이들 parent directory의 dot(.) file의 inode와 같을 것이다.
달리 표현하면, sub directory들의 각 'drectory entry'는
current directory의 dot-dot(..) file 즉 parenet directory의 inode를 가리키는 것이다.
- 이처럼 '하나의 inode'에 '여러 개의 (direcory) file'이 '연결(link)'되어 있을 수 있고,
이 때 '연결(link)된 갯수'를 'link 갯수'라 한다.
"ls -l"을 사용하면 directory들이 최소한 2개 이상의 'link 갯수'를 가지고 있음을
확인할 수 있다.
2) hard link란 ?
- 위에서 directory를 들어 설명한 link의 개념서
여러개의 (directory) file들이
한 개의 inode number를 사용해 서로 연결될 수 있음을 보았다.
- hard link란 이러한 link와 같은 개념이다.
한 file의 inode에 여러 file들의 inode를 일치시킴으로써
서로를 연결(link)시키는 방식인 것이다.
- hard link는 'directory file'의 link 구조를 'ordinary file'로 확장시킨 것이다.
즉 "ln"이라는 command를 사용하여
실제 (hard) link된 file들을 생성함으로써 'link라는 내부적 표현'을
'hard link file (type)'으로 바꾸어 주는 것이다.
- hard link를 확인할 수 있는 방법은
symbolic link처럼 filename에서 확인할 수 있는 것이 아니고,
'link 갯수'가 2 이상인가를 확인하고
inode number가 같은 file을 찾아야 하는 것이다.
3) hard link의 특성
- hard link는 file이 존재할 때만 만들어 질 수 있다.
즉 inode가 미리 존재하고 있어야 '동일 inode'를 갖는 file을 만들 수 있는것.
- filesystem을 cross하여 hard link를 형성할 수는 없다.
A filesystem에서 B filesystem에 있는 file(inode number를 2577이라 한다면)로
hard link를 시도한다 함은 B filesystem의 file inode number 2577과 같은 inode number를
A filesystem의 hard link된 file이 가진다는 것.
그러나 실제 A filesystem의 inode number 2577은 B filesystem의 2577과는 무관한 것이다.
- super user만이 directory를 가리키는 새로운 (hard) link를 생성할 수 있다.
이는 filesystem이 looping을 돌게끔 link될 수 있는 가능성이 있기 때문이다.
- hard link된 file중 하나를 지웠다고 하여 실제 그 file을 지웠다고 할 수 있는 것은 아니다.
hard link되어 있는 다른 file이 동일 inode를 사용하기 때문이다.
file을 지웠다 함은 그 file이 사용하고 있는 indoe가 release됨을 의미한다.

2. Symbolic link
  • 한 file을 단순히 '다른 이름(pathname)'으로 지시하는 file type이다.
  • symbolic link는 file을 가리키는 'indirect pointer'이다.
    hard link는 file의 inode로의 'direct pointer'이다.
    hard link가 동일 inode에 대한 다수 file의 공유라면
    symbolic link는 file과 linkname이 각기 다른 inode를 가진다.
  • hard link의 제약 사항:
    ① 이미 존재하는 file만을 hard link할 수 있다.
    ② 동일한 filesystem에 있는 file만 hard link가 가능하다.
    ③ superuser만이 directory로 hard link할 수 있다. ( "-f" option을 사용해야 함)
  • 반면 symbolic link는 이상의 hard link 제약 사항에 무관토록 구현된 것.
    ① 현재 존재하지 않는 file이라도 (symbolic) link가 가능하다
    ② filesystem을 cross하여 symbolic link가 가능하다.
    ③ 일반 user도 directory로의 symbolic link가 가능하다.
  • symbolic link는 한 file/전체 directory hierarchy를
    system의 다른 곳으로 옮길 때 많이 사용된다.
  • symbolic link는 4.2 BSD에서 도입되었고 이어 SVR4에서 채택되었다.
    SVR4의 symbolic link는 '전통적인 System V filesystem'과
    'Unified File System(UFS)' 양자를 모두 지원한다.
  • 'symbolic link를 가지는 file(source 부분)'의 data block에는
    'symbolic link가 가리키는 file(destination 부분)'의 이름을 가지고 있다.
    예를 들어,
    lrwxrwxrwx 1 root 7 Aug 11:00 lib -> usr/lib
  • 'directory entry'의 filename에는 3 character string "lib"이 들어 있고
    file에는 7 byte의 data "usr/lib"가 있다.
    inode의 'file type'에 symbolic link라는 식별이 되어 있으므로
    kernel은 7 byte의 data "usr/lib"가 file "lib"에서 symbolic link되어 있음을 알게 된다.











Revision History
Created on Jan. 18 ,1993
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2005-07-11 11:06:08
Processing time 0.0299 sec