메뉴

문서정보

링크

유명한 퀘니히스베르크의 다리건너기 문제를 알고 있을 것이다. 독일의 철학자 칸트가 말년을 보내기도 했던 퀘니히스베르크는 아래처럼 강이 가로지르고 있었고, 마을과 마을은 7개의 다리로 연결이 되어 있었다. 문제는 각 다리를 한번에 한번씩만 건너면서 모든 마을을 방분하는 방법을 찾아내는 거였다.

이 문제를 수학적으로 연구한 사람이 오일러였다. 이 문제를 풀면서 위치와 형상을 탐구목표로 하는 위상기하학이라는 새로운 학문을 개척하였다. 위상기하학이 학문으로 자리를 잡으면서 노드노드를 연결하는 링크라는 개념이 명확해지게 된다.

파일 링크

유닉스파일 시스템에서 각각의 파일은 inode 라고 불리우는, 장치에서 유일한 일련의 번호를 가지고 있다. 파일은 장치와 inode의 쌍을 이용해서 유일한 파일을 정의할 수 있다. 이 inode와 장치를 알고 있다면, 우리는 파일의 내용을 복사하지 않더라도 파일을 참조할 수 있을 것이다. 이렇게 파일의 내용을 복사하는대신에 inode와 장치정보를 이용해서 참조하는 것을 링크라고 한다.

링크는 파일을 복사하지 않고, 파일의 정보를 연결하는 것으로 하드링크symbolic 링크 두 종류가 있다.

하드링크는 inode에 파일을 연결하고, inode의 카운트를 증가시키는 방식이다. symbolic 링크는 원본파일을 그대로 가리키는 별도의 파일이다. meta 정보를 가진 파일이라고 생각할 수 있다. 파일을 삭제하면 inode 카운트가 감소하고, 카운트가 0이되면 파일이 완전히 삭제된다.

http://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Hard_Link_Illustration.svg/500px-Hard_Link_Illustration.svg.png

위 그림은 하드링크의 개념을 보여주고 있다. A.TXT와 B.TXT가 하드링크로 연결되어 있다. A.TXT와 B.TXT가 하드링크하고 있는 inode의 count값 2가 된다. 하드링크에서 사용되는 inode 는 장치에서만 유일함이 보장되기 때문에, 다른 장치로의 하드링크는 불가능 하다.

심볼릭 링크는 소프트 링크라고 부르기도 하는데, 파일의 위치를 가리키는 정보를 가지고 있는 파일이다. 따라서, 가리키고 있는 원본파일이 삭제되면 심볼릭 링크는 더 이상 이용할 수 없게 된다.

리눅스 운영체제에서는 proc 파일시스템을 통해서 시스템의 inode 정보를 얻어올 수 있다. 파일 관련된 대부분의 정보는 /proc/sys/fs/inode-stat에서 얻을 수 있다.
$ cat inode-state
96292   6612    0       0       0       0       0
  1. 첫번째 필드 : nr-inodes 현재 할당된 inode의 갯수. 파일을 지우거나 생성하면 줄어들거나 늘어나는걸 확인할 수 있을 것이다.
  2. 두번째 필드 : nr-free-inodes free 상태가 된 inode의 갯수

쉘에서의 링크 사용

ln(1) 명령을 이용하면 파일에 대한 심볼릭 링크하드링크를 만들 수 있다. -s 옵션을 이용하면 심볼릭링크를 만든다. 기본적으로는 하드링크를 생성한다.

# link test.c test2.c
이제 test.c에 대한 하드링크인 test2.c가 만들어졌다. test2.c의 파일을 수정하면, test.c 역시 동일하게 적용되는 것을 확인할 수 있을 것이다. 파일의 복사가 아니고 링크이기 때문이다.

프로그래밍시 주의해야 할점

리눅스 운영체제는 링크를 위해서 link(2) 시스템콜을 제공한다. 이 시스템콜은 하드링크를 만드는데, 때때로 파일을 복사하기 위해서 link(2)를 사용하는 실수를 범할 수 있다. link를 사용하게 되면, 다른 장치로의 파일 복사를 할 수 없다.

또한 복사의 개념으로 파일을 사용하면 안된다. 하나의 파일이지, 새로운 파일로 복사되는 것이 아니기 때문이다. 파일 복사를 원할경우에는 open(2), read(2), write(2) 를 이용해야 한다.

관련글