[Linux] 심볼릭 링크와 하드 링크

Shadis·2023년 10월 1일

Linux

목록 보기
2/9

리눅스에는 심볼릭 링크(Symbolic link)와 하드 링크(Hard link)라는 개념이 존재한다. 솔직히 개인적으로 자주 사용하는 기능은 아니지만, 간혹 중요하게 사용해야 하는 경우가 생기기 때문에 잊어버리지 않기 위해 정리하고자 한다.

링크

리눅스의 링크는 쉽게 말해서 윈도우 운영체제의 "바로가기"이다. 즉, 링크는 어떤 파일이나 디렉토리를 연결시키는 특별한 종류의 파일인 것이다. HTML의 하이퍼링크(link)가 여러 웹사이트들을 연결(link) 해주는 것처럼 리눅스의 링크(link)는 시스템의 파일들을 연결시켜주는(link) 기능인것이다. 링크를 잘 활용하면 여기저기 퍼져있는 파일들을 특정한 하나의 디렉토리에서 편하게 관리할 수 있다.

간단히 말해, 심볼릭 링크는 윈도우의 바로가기와 완전히 같은 개념이다.

심볼릭 링크를 만드는 방법은 다음과 같다.

ln -s 원본_파일_또는_디렉터리_경로 심볼릭_링크_경로

예를 들어,

ln -s /test/test.txt link_to_test.txt

터미널에서 이 명령을 실행하면 /test/test.txt를 가리키는 link_to_test.txt 심볼릭 링크 파일이 생성될 것이다.

윈도우와 마찬가지로 심볼릭 링크는 단순히 원본 파일을 가리키는 바로가기 파일이기 때문에, 원본 파일이 삭제되면 원본 파일을 가리키던 심볼릭 링크는 제 기능을 잃은 아무 의미 없는 파일이 된다.

하드 링크는 윈도우의 바로가기와 비슷하지만 다른 기능이다. 하드 링크는 공유의 개념이다. 어떤 파일에 대한 하드 링크를 만들면 그 하드 링크 파일은 원본 파일과 같은 데이터 영역을 공유하게 된다.

하드 링크를 만드는 방법은 다음과 같다.

ln 원본_파일_또는_디렉터리_경로 심볼릭_링크_경로

심볼릭 링크를 만들 때 -s 속성을 이용했던 것과 달리 하드 링크를 만들 때에는 어떤 속성도 사용하지 않는다.

하드 링크는 심볼릭 링크와는 다르게 원본 파일을 삭제하더라도 아무 의미 없는 파일이 되지 않는다. 앞서 말했듯 하드 링크는 공유의 개념이다. 원본 파일이 삭제되더라도 아직 하드 링크 파일이 원본 파일이 사용하던 데이터 영역을 사용하고 있기 때문에 원본 파일이 사용하던 데이터는 남아있게 된다. 심볼릭 링크와는 다르게 원본 파일을 삭제하더라도 하드 링크는 제 기능을 하게 되는 것이다.

어떤 파일을 공유를 하려고 하면 복붙을 하면 되지 왜 굳이 하드 링크를 사용할까? 하드 링크는 복붙과 달리 원본 파일의 데이터 영역을 공유하기 때문이다. 예를 들어, 어떤 원본 파일을 100개 복사한 이후 데이터를 수정한다고 하자. 데이터를 수정하려면 원본 파일 포함 101개의 파일을 모두 각각 수정해야 한다. 하지만, 하드 링크를 이용하면 101개의 파일이 모두 하나의 데이터 영역을 공유하기 때문에 단 한번만 수정하면 된다.

심볼릭 링크와 하드 링크의 원리

심볼릭 링크는 사실 단순히 원본 파일의 주소를 저장하고 있다. 그래서 원본 파일이 삭제되면 원본 파일의 주소를 저장하는 심볼릭 링크는 무용지물이 되어버린다.

하지만 하드 링크의 경우 원본 파일을 삭제하더라도 하드 링크 파일이 남아있는 한 원본 파일의 데이터는 저장장치에 살아있는데 이는 inode 덕분이다.

Linux의 File System인 ext에서 모든 파일, 디렉토리는 저장장치의 실제 파일, 디렉토리의 데이터를 가리키는 inode를 하나씩 가지고 있다. 어떤 원본 파일을 하드 링크하면 하드 링크 파일은 원본 파일의 inode를 공유하게 되는데, 이때 inode의 참조 횟수가 늘어난다. 실제 데이터가 삭제되는 것은 inode의 참조 횟수가 0회일 때이다. 따라서 원본 파일을 삭제하여도 하드 링크 파일이 여전히 inode를 통해 원본 데이터를 참조하고 있기 때문에 참조 횟수가 0이 아니라 원본 데이터가 살아있는 것이다.

profile
HGU 20 김민석

0개의 댓글