취미생활

[리눅스] 디렉토리 하드 링크 안되는 이유 본문

컴퓨터/토막정보

[리눅스] 디렉토리 하드 링크 안되는 이유

달다달아 2021. 7. 15. 00:15

리눅스 시스템에서 디렉토리는 하드 링크를 할 수 없다.

그 이유를 알기 위해서 알아야 할 것이 먼저 3개가 있다.

1. 리눅스 파일 시스템은 트리 구조로 되어있어 순환 방식으로 만들 수 없다.
2. 하드 링크는 똑같은 파일을 호출할 위치가 하나 더 생기는 방식이다.
3. 트리 구조에서 하드 링크를 허용할 경우 트리가 순환 방식이 되기 때문에 문제가 생긴다.



일단 첫번째 이유 부터 설명을 하자면,

리눅스의 파일 시스템은 아래 그림과 같은 트리 구조로 되어있다.

트리 구조는 루트 노드부터 자식 노드까지 위에서 아래로 이어진 계층 구조이며

자식 노드가 부모 노드를 가리킬 수 없는 구조다.


두번째로 알아볼 내용은 링크와 관련된 내용이다.

리눅스 파일 시스템의 구조에 대해 간단히 알아봤으니 다음은 링크에 대해 알아보자. 일단 링크의 종류는 총 두 가지가 있는데, 심볼릭 링크와 하드 링크가 있다. 심볼릭 링크는 쉽게 말해서 윈도우의 바로가기 기능이다. 별개의 파일이지만, 원본 파일을 참조할 수 있도록 해준다.

하드 링크는 쉽게 말해서 원본을 하나 더 만드는 방식이다. 리눅스 파일 시스템은 inode 라는 고유 번호를 통해 파일을 구분하는데, 이 inode 라는 녀석이 같으면 같은 파일이다. 참고로 디렉토리도 파일과 마찬가지로 inode를 가지고 있다.


이제 끝이 보인다.
일단 첫번째로 우린 트리 구조가 순환 구조를 이룰 수 없다는 것을 알았다. 그리고 두번째로 하드 링크는 리눅스 시스템 상에서 파일을 구분하는 고유 번호인 inode가 같은 파일을 하나 더 만드는 것이란 걸 알았다. 만약 계층 구조에서 상위 계층의 디렉토리를 하위 디렉토리로 가지게 된다면 무슨 일이 일어날까?


계층 구조인 트리 구조에서 상위 디렉토리를 하위 디렉토리로 가지는 순간 계층은 무너진다. 더이상 리눅스 파일 시스템이 트리 구조가 아닌 그래프 구조가 된다. 이는 시스템적으로 치명적일 수 있다. grep으로 디렉토리 전체 search를 진행 시켜놧더니 순환 구조 때문에 영원히 끝나지 않는다던가하는 재앙이 초래할 수도 있다. 이제까지 만들어졌던 명령어는 트리 구조에 기반하여 만들어졌기 때문에 그래프 구조의 순환 탐색 알고리즘을 탑재해야 한다.


이러한 이유로 리눅스 시스템에서는 디렉토리를 하드 링크 하는 것은 금지되었다. 아무래도 이건 미래에도 깨지지 않을 듯 싶다. 아니 심볼릭 링크는 멀쩡히 되는데 하드 링크는 왜 안되는거야? 라고 할 수도 있는데, 심볼릭 링크는 해당 디렉토리, 파일의 위치를 가리키는 것이고 inode 값이 다른 별개의 파일로 구분한다.

여튼,

한 줄로 요약하자면


트리 구조에서 순환 구조가 생길 수 있기 때문에 안된다.

Comments