Computer >> 컴퓨터 >  >> 시스템 >> Linux

리눅스 소프트 링크와 하드 링크의 차이점 완벽 이해

리눅스 소프트 링크와 하드 링크의 차이점 완벽 이해

작업 중인 리눅스 시스템에 여러 겹의 디렉터리 깊숙이 중첩된 파일이 있다고 가정해 보겠습니다. 이 파일에 쉽게 접근하고 싶다면 바탕화면에 바로가기를 만들고 싶어질 것입니다. 이때 활용할 수 있는 것이 바로 심볼릭 링크(symlink), 즉 소프트 링크입니다. 그리고 이 외에도 하드 링크(hard link)라는 또 다른 형태의 링크가 존재합니다. 이 글에서는 소프트 링크와 하드 링크의 차이점을 설명하고, 어떤 상황에서 어느 쪽을 사용하는 것이 좋은지 살펴보겠습니다.

소프트 링크 vs 하드 링크

소프트 링크(soft link), 즉 심볼릭 링크는 대상 파일의 경로를 가리키는 포인터에 불과합니다. 소프트 링크는 해당 경로에 실제로 파일이나 폴더가 존재하는지 확인하지 않습니다. 만약 대상이 존재하지 않으면 그저 깨진(broken) 심볼릭 링크가 될 뿐입니다. 또한 심볼릭 링크를 수정하거나 삭제해도 원본 파일에는 아무런 영향을 미치지 않습니다.

반면 하드 링크는 대상 파일에 새로운 이름을 하나 더 붙여주는 효과가 있습니다. 한쪽 파일의 내용을 수정하면 다른 쪽 파일의 내용도 함께 변경됩니다. 요약하자면, 소프트 링크는 대상 파일 경로에 대한 참조일 뿐이지만, 하드 링크는 대상 파일의 데이터 자체에 직접 연결되는 링크라고 할 수 있습니다.

아래에서 소프트 링크와 하드 링크가 실제로 어떻게 작동하는지 하나씩 살펴보겠습니다.

소프트 링크 실습

네 줄의 텍스트가 담긴 "first_file.txt"라는 파일이 있다고 가정해 보겠습니다.

리눅스 소프트 링크와 하드 링크의 차이점 완벽 이해

홈 디렉터리에 소프트 링크를 생성해 보겠습니다.

ln -s first_file.txt ~/sl-firstfile.txt

GNOME 데스크톱 환경에서는 파일을 마우스 오른쪽 버튼으로 클릭한 후 "링크 만들기(Create Link)"를 선택하는 것만으로도 소프트 링크를 생성할 수 있습니다. 이 경우 "Link to <파일명>.txt"와 비슷한 이름의 소프트 링크가 만들어집니다.

리눅스 소프트 링크와 하드 링크의 차이점 완벽 이해

"sl-firstfile.txt"의 내용을 열어보면 "first_file.txt"와 동일한 것을 확인할 수 있습니다.

리눅스 소프트 링크와 하드 링크의 차이점 완벽 이해

파일 관리자에서 두 파일을 살펴보면, 소프트 링크는 원본 파일의 바로가기처럼 표시됩니다. 파일 아이콘에 표시된 검은색 화살표가 이를 나타냅니다.

리눅스 소프트 링크와 하드 링크의 차이점 완벽 이해

ls -l 명령어로 현재 디렉터리의 목록을 확인하면 소프트 링크가 어느 파일을 가리키고 있는지 알 수 있습니다. "sl-firstfile.txt" 권한 문자열의 첫 번째 문자가 "l"로 표시되는데, 이는 해당 항목이 링크임을 의미합니다.

리눅스 소프트 링크와 하드 링크의 차이점 완벽 이해

소프트 링크의 삭제 동작

대상 파일이 삭제되어도 소프트 링크 자체는 그대로 남아 있습니다.

리눅스 소프트 링크와 하드 링크의 차이점 완벽 이해

하지만 링크는 "매달린(dangling)" 상태, 즉 깨진 링크가 되어 더 이상 쓸모가 없습니다.

리눅스 소프트 링크와 하드 링크의 차이점 완벽 이해

흥미로운 점은, 이후에 같은 이름("first_file.txt")으로 새 파일을 다시 만들면 소프트 링크가 다시 정상적으로 작동한다는 것입니다.

참고: 소프트 링크를 접했을 때 링크가 가리키는 원본 파일의 절대 경로를 알고 싶다면, 아래와 같이 readlink 명령어를 사용하면 됩니다.

리눅스 소프트 링크와 하드 링크의 차이점 완벽 이해

이 명령어의 출력 결과는 원본 파일의 절대 경로입니다.

하드 링크 실습

이번에는 같은 파일에 대해 홈 디렉터리에 하드 링크를 생성해 보겠습니다. 다음 명령어로 실행할 수 있습니다.

ln first_file.txt hl-first-file.txt

참고: 소프트 링크와 하드 링크를 생성하는 방법은 모두 ln 명령어를 사용합니다. 유일한 차이점은 심볼릭 링크를 의미하는 -s 옵션의 유무입니다.

하드 링크를 생성하는 또 다른 방법으로 link 명령어를 사용할 수도 있습니다.

link hl-firstfile.txt hl2-firstfile.txt

두 파일의 내용을 확인해 보면 서로 동일한 것을 알 수 있습니다.

리눅스 소프트 링크와 하드 링크의 차이점 완벽 이해 리눅스 소프트 링크와 하드 링크의 차이점 완벽 이해

GUI에서는 두 파일이 서로 별개의 개체처럼 보이며, 하드 링크로 연결되어 있다는 표시는 나타나지 않습니다.

리눅스 소프트 링크와 하드 링크의 차이점 완벽 이해

이번에는 하드 링크 파일 "hl-firstfile.txt"에 새로운 줄을 추가해 보겠습니다.

echo "hello" >> hl-first-file.txt

변경된 데이터는 두 파일 모두에서 확인할 수 있습니다.

리눅스 소프트 링크와 하드 링크의 차이점 완벽 이해 리눅스 소프트 링크와 하드 링크의 차이점 완벽 이해

하드 링크가 생성되면 화면상으로는 서로 다른 두 개의 파일이 존재하는 것처럼 보이지만, 실제로는 데이터가 서로 연결되어 있습니다. 따라서 한쪽에서 발생한 변경 사항이 다른 쪽에도 그대로 반영됩니다.

: 소프트 링크나 하드 링크를 생성할 때는 원본 파일과 동일한 확장자를 사용하는 것이 좋습니다. 나중에 파일을 구분하기가 훨씬 쉬워집니다.

하드 링크의 삭제 동작

하드 링크의 경우 원본 파일을 삭제하든 하드 링크를 삭제하든 걱정할 필요가 없습니다. 파일에 처음 저장된 데이터는 남아 있는 하드 링크를 통해 계속 접근할 수 있기 때문입니다.

리눅스 소프트 링크와 하드 링크의 차이점 완벽 이해 리눅스 소프트 링크와 하드 링크의 차이점 완벽 이해

소프트 링크가 유용한 경우

앞서 살펴본 것처럼 소프트 링크는 파일의 바로가기처럼 동작합니다. 여러 겹의 디렉터리 깊숙이 들어가야 하는 파일을 자주 사용한다면, 쉽게 접근할 수 있는 위치에 소프트 링크를 만들어 두는 것이 좋은 방법입니다.

하드 링크가 유용한 경우

파일에 하드 링크를 생성하면 파일이든 하드 링크든 어느 쪽의 변경 사항이든 양쪽 모두에 반영된다는 것을 확인했습니다.

예를 들어 백업 서버에서 마지막 백업 이후 변경된 부분만 저장하는 증분 백업 방식을 사용한다고 가정해 보겠습니다. 이럴 때 하드 링크를 활용하면 변경되지 않은 파일들은 실제 데이터를 복제하지 않고 기존 데이터 블록을 공유하게 되므로, 백업에 필요한 디스크 공간을 크게 절약할 수 있습니다. 실제로 rsync 기반 스냅샷 백업 도구들이 이러한 하드 링크 방식을 널리 사용하고 있습니다.

결론

소프트 링크와 하드 링크는 각각 고유한 용도가 있으며, 상황에 따라 적절히 골라 사용해야 합니다. 두 링크의 차이점을 제대로 이해하고 있으면 링크를 생성할 때 더 나은 판단을 내릴 수 있습니다. 참고로 소프트 링크와 하드 링크는 디렉터리에 대해서도 생성할 수 있습니다. 단, 소프트 링크는 서로 다른 파일시스템 간에도 생성할 수 있지만, 하드 링크는 동일한 파일시스템 내에서만 생성할 수 있다는 점을 기억해 두세요.