본문 바로가기
System/Linux

심볼릭 링크와 하드 링크

by 슬픈 야옹이 2023. 1. 6.

리눅스는 어떤 파일에 대해 링크를 만들 수 있다.

우리가 일반적으로 사용하는 링크와는 개념이 조금 다른데,

이를 이해하기 위해서는 리눅스에서 파일이 어떻게 저장되고 관리되는지 먼저 알아보아야 한다.

 

파일 = 파일 정보 + 데이터

리눅스 파일은 파일 이름 등의 속성 정보와 실제 들어있는 데이터로 구성된다.

 

또한, 일반적으로 리눅스에서 리눅스를 포함한 일반적인 OS에서 파일을 삭제하는 방식은 디스크에 저장된 원본 데이터를 삭제하는 것이 아니라, 데이터가 저장된 디스크 영역을 가리키던 파일 정보만 삭제하는 방식이다.

즉, 파일을 삭제한다고 해도 해당 원본 데이터는 디스크에 그대로 남아있으며,

디스크의 어디에 저장되어 있는지 안다면 얼마든지 복원도 가능하다.

 

사실 이러한 특징은 보안 측면에서 매우 위험한 요인이어서, 보안 기능이 별도로 탑재된 OS는 파일 삭제 시 해당 디스크 영역을 쓰레기 값으로 덮어씌우는 추가 작업을 수행한다.

 

그림을 통해 파일이 생성 및 삭제되는 과정과 링크 파일을 생성하는 과정을 살펴보자.

그림은 논리적인 구성만을 나타낸 것으로, 실제 데이터가 이런 모습으로 저장되지는 않는다.

 

만약 a.txt라는 파일을 생성했다면 a.txt 파일의 정보와 실제 들어있는 데이터가 각각 생성되고,

실제 데이터가 디스크의 어디에 저장되어 있는지 파일 정보에 기록된다.

디스크에 저장된 a.txt

리눅스에서는 a.txt와 같은 파일에 대해 링크 파일을 만들 수 있다.

링크는 쉽게 말하자면 대상 파일을 가리키는, 즉 링크하는 파일을 말한다.

a.txt에 대해 b.txt라는 링크를 만들면 b.txt 파일을 통해서도 a.txt 파일의 데이터에 접근할 수 있다.

 

링크 파일의 종류로는 하드 링크심볼릭 링크가 있다.

 

 

하드 링크

하드 링크는 대상 파일의 실제 데이터가 들어있는 디스크 위치를 가리킨다.

즉, 같은 데이터에 또 다른 이름을 붙여주는 셈이다.

a.txt에 대한 하드 링크 b.txt를 만든 상태를 그림으로 표현하자면 다음과 같다.

 

따라서 a.txt에 대해 하드 링크 b.txt를 생성하면 a.txt를 삭제하더라도 b.txt를 통해 원본 데이터에 접근할 수 있다.

a.txt가 삭제되어도 b.txt를 통해 데이터에 접근할 수 있다.

 

 

 

심볼릭 링크

반면, 심볼릭 링크는 실제 디스크 위치를 가리키지 않고 대상 파일의 정보만을 가리킨다.

심볼릭 링크를 생성한 상태를 그림으로 표현하면 다음과 같다.

심볼릭 링크 b.txt 생성

 

b.txt가 심볼릭 링크일 경우 a.txt가 삭제되면 b.txt도 아무 의미가 없는 파일이 된다.

b.txt에 링크되어 있던 a.txt의 파일 정보가 사라졌기 때문이다.

a.txt가 삭제되면 b.txt도 아무 의미 없는 파일이 된다.

결과적으로 a.txt의 데이터가 저장된 디스크 영역에 접근할 방법이 없으므로 해당 데이터는 영영 찾을 수 없다.

언젠가 다른 데이터가 이 영역을 필요로 한다면 덮어씌워질 것이다.

 

심볼릭 링크는 복잡한 경로를 편리하게 링크해서 쓸 수 있다는 점 때문에 자주 쓰인다.

우리가 windows에서 사용하는 바로가기와 똑같은 개념이다.

바로가기를 사용하면 쉽게 다른 곳에 있는 파일에 접근할 수 있고,

바로가기를 삭제한다 해도 원본 파일에는 영향이 없는 것처럼, 심볼릭 링크가 리눅스에서 정확히 같은 역할을 수행한다.