본문 바로가기

Job Notes/Linux & Android

Hard Link와 Symbolic Link의 차이점


편  역: 안창선(csan@coresw.co.kr, http://genesis.yonsei.ac.kr/~kabin)
원출처: O'REILLY UNIX POWERTOOLS 1998

1. Hard Link
하드 링크는 두개의 파일 이름이 하나의 inode와 같은 데이터 블럭을 가르킨다.
모든 유닉스 버전은 하드 링크를 제공한다.
두가지의 한계가 있다. 첫째, 파일시스템간의 하드링크는 불가능 하다.
둘째, 디렉토리에 대한 하드링크는 불가능 하다. 또한 두가지의 잇점이 있다.
첫째는 그 링크와 실제 파일은 완전히 같고, 나머지 하나의 링크는 파일 시스템
공간을 전혀 차지 하지 않는다라는 것이다.

2. Symbolic Link( Or Soft Link)
심볼릭 링크에서 두 링크는 전혀 별개의 파일이다. 하나는 실제 데이터를
포함하고 있는 파일이고, 다른 하나는 첫번째 파일의 이름을 포함하는 포인터이다.
우리는 그 포인터를 링크라고 부른다. 시스템은 링크를 열게 되면 그 링크의
내용인 원래의 파일을 읽게 된다. BSD계열과 System V.4계열 시스템에서는
Symbolic Link를 지원한다. 또한 심지어 NFS나 RFS상에서도 심볼릭 링크는
작동된다. 또한 디렉토리에 대해서도 링크가 가능하다.
그리고 심볼릭링크는 자신에 대한 inode는 별도로 가지고 있고 그만큼의
파일시스템 공간을 차지한다.

하드링크와 심볼릭링크의 차이점

하드링크는 두 파일 자체가 완전히 동일하며, 다른 파일에 영향을 주지 않고
한 파일을 삭제할 수 있다. 시스템은 한 파일이름에 대한 디렉토리 엔트리를
삭제하고 데이터 블럭은 그대로 둔다. rm명령이 하는 일은 하드링크에 대한
링크 갯수만 하나 감소 시키는 것이다. 실제 데이터 블럭이 삭제되는 때는
그 링크의 갯수가 0이 되는 시점이다.(더이상 그 Inode에 대한 디렉토리
엔트리가 존재하지 않는다는 의미)
심볼릭 링크에서 두 파일이름은 다른 것이다. link를 지우면 원래의 파일은
아무런 영향을 받지 않는다. 그러나 원래의 파일을 지우게 되면 그 link는
아무것도 지시하지 못하게 되며 여러분이 원하지 않는일이 일어나게 된다.
기억해 둘 것은 링크 자체는 그자신에 관한 아무런 데이터를 가지고 있지
않다는 것이다. 그 링크는 원래의 파일이 존재할 때에만 의미가 있다.

시스템에서의 하드링크 예

일반적으로 . 는 현재의 디렉토리를 가르킨다. 그리고 ..는 모 디렉토리를
가르킨다. 이 .와 ..는 모두 디렉토리 엔트리에 대한 하드링크이다.
.는 모디렉토리에 존재하는 어느 디렉토리 이름에 대한 하드링크를 뜻하며
..는 모 디렉토리의 모디렉토리에 존재하는 디렉토리 엔트리이름에 대한
하드 링크이다. 따라서 .는 링크의 갯수가 2이며 ..는 링크의 갯수가 4이다.