하드 링크 정의
하드 링크는 파일 시스템에서 파일을 다른 위치에 연결하면서 별도의 복사본을 생성하지 않는 참조입니다. 여러 디렉토리 항목이 동일한 파일을 참조하도록 하여 다른 위치에서 동일한 데이터를 액세스할 수 있는 방법을 제공합니다.

하드 링크 작동 방식
하드 링크가 생성되면 파일의 inode를 직접 가리킵니다. inode는 Unix 스타일의 파일 시스템에서 파일이나 디렉토리에 대한 정보(위치, 크기, 권한 등을 포함)를 저장하는 데이터 구조입니다.
하드 링크의 중요한 특징 중 하나는 파일의 별도 복사본을 생성하지 않는다는 것입니다. 대신 동일한 기본 데이터를 가리키는 추가 참조를 생성합니다. 이는 하나의 하드 링크를 통해 파일에 변경을 가하면 동일한 inode를 가리키는 다른 모든 하드 링크에서도 해당 변경 사항이 반영된다는 것을 의미합니다. 예를 들어, 하나의 하드 링크를 통해 파일의 내용을 수정하면 다른 하드 링크를 통해 파일에 접근할 때도 해당 수정 사항이 보이게 됩니다.
하드 링크는 동일한 파일 시스템 내의 파일에만 제한된다는 점을 주목할 가치가 있습니다. 이는 파일 시스템이 특정 파일 시스템 내에서 inode를 추적하므로, 하드 링크는 해당 파일 시스템 내의 파일만 참조할 수 있기 때문입니다.
하드 링크의 장점
- 공간 효율성: 하드 링크는 동일한 inode를 가리키고 동일한 데이터를 공유하므로 추가 저장 공간을 소비하지 않습니다.
- 효율적인 파일 관리: 하드 링크는 여러 디렉토리 항목이 동일한 파일을 참조할 수 있도록 하여 다양한 위치에서 파일을 쉽게 정리하고 액세스할 수 있게 합니다.
- 빠른 액세스: 하드 링크는 파일의 inode를 직접 가리키기 때문에, 하드 링크를 통해 파일에 액세스하는 것은 원래 이름을 통해 액세스하는 것만큼 빠릅니다.
고려 사항 및 제한 사항
- 이름 변경: 하드 링크의 이름을 변경해도 해당 파일이나 동일한 파일에 대한 다른 하드 링크에는 영향을 미치지 않습니다. 각 하드 링크는 독립적으로 작동하며, 그 이름을 변경해도 다른 링크에 영향을 주지 않습니다.
- 삭제: 원본 파일을 삭제해도 하드 링크에는 영향을 미치지 않습니다. 하드 링크는 파일 이름이 아닌 데이터를 직접 가리키기 때문입니다. 그러나 파일에 대한 모든 하드 링크가 삭제되면, 원본 파일까지 삭제되어야 데이터가 영구적으로 제거됩니다.
- 권한: 하드 링크 또는 원본 파일의 권한을 수정하면 두 항목 모두에 영향을 미칩니다. 하드 링크는 동일한 데이터에 대한 참조일 뿐이므로 권한 또는 액세스 제어의 변경 사항은 모든 하드 링크에 반영됩니다.
- 다른 파일 시스템: 하드 링크는 동일한 파일 시스템 내에서만 존재할 수 있습니다. 서로 다른 파일 시스템 간에 하드 링크를 만들려고 하면 오류가 발생합니다.
실용적인 예시
예시 1:
Unix 기반 운영 체제에서 사용자는 중요한 파일이 포함된 "/home/user/documents"라는 디렉토리를 가질 수 있습니다. 특정 파일을 다른 디렉토리에서 자주 액세스해야 할 경우, "ln" 명령을 사용하여 하드 링크를 생성할 수 있습니다:
ln /home/user/documents/file.txt /usr/local/bin/file-link
이는 "/usr/local/bin" 디렉토리에 "file-link"라는 하드 링크를 생성하여 원본 파일과 동일한 inode를 가리키게 됩니다.
예시 2:
버전 관리 목적으로 소프트웨어 개발팀은 여러 개발자가 동시에 동일한 소스 코드 파일에서 작업하기를 원할 수 있습니다. 파일에 하드 링크를 생성하면 각 개발자가 독립적으로 파일에 접근하고 수정할 수 있으며, 모든 변경 사항이 실시간으로 반영됩니다.
관련 용어
- Symbolic Link: 심볼릭 링크, 즉 소프트 링크는 다른 파일이나 디렉토리에 대한 참조 또는 바로 가기 역할을 하는 파일입니다. 하드 링크와 달리 심볼릭 링크는 기본 데이터를 직접 가리키지 않고 파일 이름을 가리킵니다.
- Inode: inode는 Unix 스타일의 파일 시스템에서 파일이나 디렉토리에 대한 메타데이터를 저장하는 데이터 구조입니다. 파일의 위치, 크기, 권한, 타임스탬프 등의 정보를 포함합니다.
출처
- Wikipedia - Hard link
- Linuxize - Understanding Hard and Soft (Symbolic) Links in Linux
- nixCraft - Unix / Linux: Create Symbolic Links Only ( Without Actual File / Directory )