한 파일을 여러 이름으로 가리키는 두 방식
Unix는 같은 데이터에 접근하는 경로를 둘 이상 만들 수 있어. 하드 링크와 심볼릭 링크는 겉으로 비슷하지만 가리키는 대상과 실패 방식이 달라.
- 하드 링크: 같은 inode를 가리키는 또 하나의 디렉터리 항목이야. 어느 이름도 원본이나 사본으로 우선하지 않고, 링크가 하나라도 남아 있으면 데이터가 유지돼. 보통 다른 파일 시스템을 넘을 수 없고 디렉터리에는 제한돼.
- 심볼릭 링크: 대상 경로 문자열을 저장한 별도 파일이야. 대상이 이동하거나 삭제되면 끊어진 링크가 될 수 있고, 다른 파일 시스템이나 디렉터리도 가리킬 수 있어.
링크 만들기
ln source hard-link: 하드 링크를 만들어.ln -s target soft-link: 심볼릭 링크를 만들어.
-s를 빠뜨리면 하드 링크가 만들어질 수 있으므로 생성 뒤 ls -li와 readlink로 종류와 대상을 확인해. 상대 경로 심볼릭 링크는 링크가 놓인 디렉터리를 기준으로 해석된다는 점도 기억해.
링크의 종류와 대상을 확인해
ls -l은 심볼릭 링크를 link -> target처럼 보여 주고, readlink link는 저장된 대상 문자열을 출력해. 하드 링크는 일반 파일처럼 보이지만 ls -i에서 inode 번호가 같아. stat으로 링크 수와 파일 정보를 비교하면 이름 두 개가 같은 데이터를 가리키는지 더 분명히 확인할 수 있어.
작업 목적에 맞춰 선택해
설정 파일이나 도구 경로를 다른 위치에 투영하고 싶다면 심볼릭 링크가 일반적인 선택이야. 파일 시스템을 넘어갈 수 있고 링크의 의도가 경로로 드러나기 때문이야. 하드 링크는 같은 파일 시스템 안에서 동일한 데이터를 여러 이름으로 유지해야 할 때 쓸 수 있어. 그러나 어느 쪽도 독립된 백업 사본은 아니며, 대상 내용을 바꾸거나 잃었을 때 과거 상태를 복원해 주지 않아.
링크 자체와 링크가 가리키는 대상을 구분해
삭제, 권한 변경, 복사 명령이 심볼릭 링크를 따라갈지 링크 파일 자체를 다룰지는 명령과 옵션마다 달라. 자동화에서는 링크를 해석한 실제 경로가 허용한 루트 밖으로 나가지 않는지 확인해야 해. 끝의 슬래시 하나가 디렉터리 대상을 따라가게 만들 수도 있으므로 변경 전에 대상과 경계를 출력해 검토해.
하드 링크는 복사본이 아니야
하드 링크 두 개는 같은 inode와 같은 데이터 블록을 가리켜. 어느 이름으로 내용을 수정해도 다른 이름에서 같은 변경이 보여. 이름 하나를 지우면 링크 수만 줄고, 마지막 링크가 사라져야 데이터가 회수 대상이 돼. 이 성질은 저장 공간을 공유하는 데 유용하지만 버전 관리나 백업처럼 서로 독립된 시점의 데이터를 남기지는 않아.