← 아티클 목록

심볼릭 링크 하드 링크 차이 — inode로 한 번에 이해하기

2028-04-10#linux#파일시스템#inode

ln -sln, 둘 다 "링크를 만든다"고 하는데 동작이 다릅니다. 이 차이가 헷갈리는 건 inode라는 한 단계를 건너뛰기 때문입니다. inode만 잡으면 나머지는 저절로 풀립니다.

inode부터: 파일 이름과 실체는 다르다

리눅스에서 파일의 실체(데이터·권한·크기)는 inode라는 번호표가 가리키고, 우리가 보는 파일 "이름"은 그 inode를 가리키는 라벨일 뿐입니다.

  • 하드 링크는 같은 inode를 가리키는 또 다른 이름입니다. 원본과 완전히 동등한 출입구라, 둘 중 무엇을 지워도 데이터는 다른 이름이 남아 있는 한 살아 있습니다.
  • 심볼릭 링크는 "저 경로로 가보라"는 경로 문자열을 담은 별도 파일입니다. 원본을 지우면 가리킬 곳이 없어져 깨진 링크(dangling)가 됩니다.
구분하드 링크심볼릭 링크
가리키는 것같은 inode경로(이름)
원본 삭제 시데이터 유지깨짐
다른 파일시스템불가 (같은 inode 영역)가능
디렉터리 대상보통 불가가능
생성 명령ln 원본 링크ln -s 원본 링크

직접 확인하기

ls -li의 맨 앞 숫자가 inode 번호입니다.

로컬 터미널
echo data > original.txt
ln original.txt hard.txt        # 하드 링크
ln -s original.txt soft.txt     # 심볼릭 링크
ls -li
OUTPUT
131072 -rw-r--r-- 2 user user  5 original.txt
131072 -rw-r--r-- 2 user user  5 hard.txt
131099 lrwxrwxrwx 1 user user 12 soft.txt -> original.txt

original.txthard.txt는 inode가 131072로 같고 링크 수가 2입니다(같은 실체를 가리키는 이름 2개). soft.txt는 inode가 다르고 타입이 l, 화살표로 원본 경로를 보여줍니다. 이제 원본을 지워보면:

로컬 터미널
rm original.txt
cat hard.txt   # 정상 출력 (data)
cat soft.txt   # No such file or directory (깨짐)

언제 무엇을 쓰나

  • 심볼릭 링크: 일상 대부분의 선택. 다른 디스크·디렉터리를 가리키거나, 버전 디렉터리를 current -> 로 바꿔치기하는 배포 패턴에 적합.
  • 하드 링크: 같은 파일시스템 안에서 데이터 복제 없이 같은 실체를 여러 이름으로 두고 싶을 때(백업 스냅샷, 중복 제거).

요점 정리

  • 핵심은 하드=같은 inode, 심볼릭=경로를 담은 파일.
  • 원본 삭제 시: 하드는 살아남고, 심볼릭은 깨진다.
  • 파일시스템을 넘거나 디렉터리를 가리켜야 하면 심볼릭만 가능.
  • ls -li의 inode 번호와 링크 수로 둘을 즉시 구분하세요.

inode·링크·파일시스템 구조를 직접 만들어보며 익히는 실습은 리눅스 트랙에서 회원가입 없이 무료로 할 수 있습니다.