[리눅스 inode] ln 명령어 하드링크 vs 심볼릭링크

2025. 5. 29. 10:44·linux
728x90
반응형

리눅스를 처음 접하면 ln 명령어로 링크 파일을 만들라고 할 때 막막하다.
"하드링크? 심볼릭링크? 뭐가 다르지?" "파일을 가리키는 방식이 왜 두 종류나 필요하지?"

이번 글에서는 리눅스의 inode 구조를 바탕으로
하드링크와 심볼릭링크의 차이를 직관적으로 이해하고,
직접 실습해보며 정리해본다.

inode란 무엇인가?

리눅스에서 파일은 데이터 자체와 그에 대한 메타정보가 나뉘어 저장된다.
이 때, 메타정보를 담고 있는 것이 바로 inode (index node) 이다.

inode에는 다음 정보가 담겨 있다:

  • ✔️ 파일의 실제 위치 (데이터 블록 주소)
  • ✔️ 파일 크기
  • ✔️ 생성/수정/접근 시간
  • ✔️ 퍼미션, 소유자, 그룹
  • ✔️ (❌ 파일명은 포함되어 있지 않다!

즉, 파일명은 디렉토리 엔트리에만 있고, 진짜 본체는 inode다!


하드링크 vs 심볼릭링크 한눈에 비교

구분 하드링크 (Hard Link) 심볼릭링크 (Symbolic Link)
구조 동일 inode를 참조 별도 파일, 원본 경로를 문자열로 저장
삭제 영향 원본 삭제해도 하드링크는 유지됨 원본 삭제 시 broken link 됨
파일 크기 동일 링크 파일은 몇 바이트의 문자열
위치 제한 같은 파일시스템만 가능 파일시스템 상관 없음
명령어 ln ln -s

링크 파일 만들어보기

원본 파일 만들기

echo "Hello Inode" > original.txt
ls -li original.txt

결과 예시:

1234567 -rw-r--r-- 1 user user 13 May 29 11:00 original.txt

1234567 → 바로 이게 inode 번호!

하드링크 만들기

ln original.txt hardlink.txt
ls -li
1234567 -rw-r--r-- 2 user user 13 May 29 11:00 hardlink.txt
1234567 -rw-r--r-- 2 user user 13 May 29 11:00 original.txt
  • ✔️ 두 파일이 같은 inode 번호를 가진다.
  • ✔️ 내용이 완전히 동일하고, 어느 쪽을 수정해도 서로 반영된다.

심볼릭링크 만들기

ln -s original.txt symlink.txt
ls -li
7654321 lrwxrwxrwx 1 user user 13 May 29 11:05 symlink.txt -> original.txt
  • ✔️ inode 번호가 다르다
  • ✔️ 단지 원본 파일명을 가리키는 포인터일 뿐이다

원본을 지우면?

rm original.txt
cat hardlink.txt    # 여전히 정상 출력됨
cat symlink.txt     # 오류: No such file or directory

하드링크는 진짜 복사,
심볼릭링크는 주소만 기억하는 지름길 같은 개념이다.


정리

항목 하드링크 심볼릭링크
같은 inode 번호 ✅ ❌
원본 삭제 시 유지됨 ✅ ❌
파일시스템 제약 O (같은 디바이스) X (경로만 저장)
실제 데이터 복사 아님 ✅ ✅
디렉토리 링크 가능 ❌ (일반적으론 제한됨) ✅

마무리

리눅스는 파일명이 곧 파일이 아니다.
inode와 디렉토리 구조를 분리해놓은 덕분에 하드링크 같은 기법이 가능하게 된다.

단순히 ln, ln -s를 외우기보다는,
파일이 어떻게 저장되고 연결되는지를 inode 관점에서 이해하면 더 오래 기억된다.

728x90
반응형

'linux' 카테고리의 다른 글

[리눅스 SSH 접속] RSA 키페어로 인증하는 방법 (feat. Mac → Ubuntu)  (3) 2025.06.02
[리눅스 패키지 관리] apt? apt-get?  (0) 2025.05.29
[리눅스 디스크 관리] linux disk 파티션, mount  (1) 2025.05.28
[리눅스 프로세스 관리] ps와 kill 명령어 + 시그널까지 한 번에 정리하기  (0) 2025.05.28
[리눅스 명령어] linux tar 명령어 – 압축 및 해제  (0) 2025.05.28
'linux' 카테고리의 다른 글
  • [리눅스 SSH 접속] RSA 키페어로 인증하는 방법 (feat. Mac → Ubuntu)
  • [리눅스 패키지 관리] apt? apt-get?
  • [리눅스 디스크 관리] linux disk 파티션, mount
  • [리눅스 프로세스 관리] ps와 kill 명령어 + 시그널까지 한 번에 정리하기
highgarden
highgarden
커밋 하나하나가 쌓여 커다란 정원이 되는 중입니다. 하루하루 정성껏 심어가는 중 https://github.com/highgarden7
  • highgarden
    커밋심는 정원
    highgarden
  • 전체
    오늘
    어제
    • 분류 전체보기 (37)
      • ai (1)
      • devops (2)
      • Nest.js (14)
      • linux (14)
      • 네트워크 (6)
      • git (0)
      • aws (0)
      • docker (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    E2E
    springboot
    githib action
    Chat GPT
    Java
    Linux
    IP
    vercel
    네트워크
    nestjs
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
highgarden
[리눅스 inode] ln 명령어 하드링크 vs 심볼릭링크
상단으로

티스토리툴바