2023-06-16 20:19:10

리눅스에서 링크 파일을 생성하는 명령어는 ln 입니다.

 

링크의 종류는 크게 심볼릭 링크(Symbolic Link)와 하드 링크(Hard Link)로 분류 가능합니다.

 

심볼릭 링크

심볼릭 링크(소프트 링크라고도 불림)는 원본파일을 가리키기만 하는 링크 파일입니다. 다음과 같이 -s 옵션과 함께 ln 명령을 사용하면 심볼릭 링크가 생성됩니다. 

 

ln -s [원본파일] [링크파일]

 

test.txt라는 원본파일의 링크파일을 생성하려면 다음과 같이 명령을 주면 됩니다. 

 

ln -s test.txt test_ln.txt

 

생성한 후에 ls -al 로 디렉터리 내 파일 및 디렉터리 목록을 확인하면 다음과 같이 test_ln.txt는 test.txt를 가리키고 있는 링크 파일이라는 것을 확인할 수 있습니다. 완전히 동일한 파일이 아니라 가리키고만 있는 것입니다. 그래서 파일의 사이즈가 다릅니다. test.txt는 16바이트인 반면, 그것의 심볼릭 링크 파일인 test_ln.txt는 8바이트입니다. 

 

 

실제로 많이 사용하는 예 중에 서버 시간을 서울 시간으로 변경하고 싶을 때 심볼릭 링크를 사용하곤 합니다. 

 

ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

 

여기서 -f 옵션은 동일한 링크 파일이 있을 때 기존 파일을 지우라는 의미입니다.  

 

하드 링크

하드 링크는 실제로 원본 파일과 같은 파일을 만든 후 링크를 겁니다. 

 

ln [원본파일] [링크파일]

 

ln test.txt test_hard_ln.txt

 

심볼릭 링크 파일과 다르게 하드 링크 파일은 원본 파일과 사이즈가 같은 것을 확인할 수 있습니다.

 

 

복사랑 뭐가 다르냐 라고 생각할 수 있는데 원본 파일을 수정하면 링크 파일도 동일하게 수정됩니다. 두 파일은 서로 링크되어 있는 것이죠. 

 

심볼릭 링크의 경우 쉽게 확인이 가능한데 하드 링크 파일은 뭔가 쉽게 분간이 안 되는 것처럼 느껴지실 수 있습니다. 이런 경우에는 하드 링크 파일과 원본 파일의 inode 번호를 확인해보면 됩니다. ls -il 명령을 실행하면, 다음과 같이 원본 파일과 하드 링크 파일은 inode 번호가 같은 것을 확인할 수 있습니다.

 

 

inode와 데이터 블록에 대한 이해가 살짝 필요합니다. 리눅스(유닉스) OS는 디스크를 일정한 크기의 블록(block)으로 나누어 데이터를 저장합니다. 이때 실제로 데이터가 저장되는 곳이 데이터 블록입니다. 그리고 inode(index node)는 파일이나 디렉터리와 관련된 메타데이터를 저장하는 자료 구조입니다. inode는 파일의 소유자, 권한, 파일 크기, 생성 시간, 데이터 블록의 주소 등의 정보를 저장합니다. 

 

참고자료

[1] https://webdir.tistory.com/148    

[2] https://sikaleo.tistory.com/90  

[3] https://en.wikipedia.org/wiki/Inode   

[4] https://cpm0722.github.io/operating-system/file-system