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