본문 바로가기
Programming/Linux

[Linux] 하드링크, 심볼릭링크의 차이와 inode의 관계

by 고양이해적 2022. 9. 21.
파일 구분 문자 파일 유형 설명 특징
- 일반파일(정규파일)  
b (block) 블록장치 - buffer cache를 사용하는 하드디스크, CD-ROM 등
- 랜덤하게 access 하여 처리
c (character) 문자장치 - 버퍼를 사용하지 않음
- 키보드,마우스 같은 주변장치 같은것
- 먼저 입력받은 작업을 처리
d (directory) 디렉토리  
l (link) 심볼릭링크  

리눅스의 파일유형 중 심볼릭링크는 "l" 로 구분된다.

📌 Hard Link

하드링크 특징

  • 하드링크로 파일을 생성해도 원본에 대한 동일한 inode를 사용한다.
  • 원본수정시 하드링크도 수정된다.
  • 원본을 이동,삭제해도 하드링크파일은 남아있다. inode를 가지고 있기 때문에 (링크 수가 0 이면 사라지는 개념이다.)
  • 동일한 파일시스템에만 적용된다.
  • 파일복사(cp)와의 차이점은 공간을 차지 하지 않는다는점이다.



하드링크는 왜 만들지?

touch로 test1 파일을 생성하니 386762 inode number가 만들어졌다.



리눅스는 파일생성 시 inode number 혹은 entry number 라는 것이 만들어지는데
이때 number는 파일을 식별하는 숫자이다.
근데 이 숫자를 사람이 모두 외울수가 없기 때문에 "파일명"이라는것으로 식별한다.
이 파일명에다가 링크를 걸어주는것이 하드링크이다.
이때 이 number는 물리적인 디스크를 알려주는 것이다.



하드링크 생성 방법

ln test1(원본파일) test2(링크 걸 대상의 파일)


하드링크 생성 후 다시 ls -li 로 inode number를 확인 해보면
test1 과 test2 는 같은 숫자인걸 확인 할 수 있다.


하드링크파일로 생성하더라도 inode를 새로 생성하지 않는다.
원본파일은 그대로 있고 inode만 가리키는 상태이다.
그래서 inode도 같고 링크수도 2개 이다.



하드링크의 단점

  • 디렉토리에 대해서는 링크를 걸수가 없다. (file only)
  • 동일한 시스템에서만 적용 된다는점
  • 파티션 내에서만 가능 (하나의 파일 시스템 내에서만)



그래서 나온것이 심볼릭 링크이다. 심볼릭은 모두 적용 할 수 있다.


📌 Symbolic(Soft) Link

심볼릭링크 특징

  • Windows 의 바로가기 아이콘과 비슷하다.
  • 주로 사용자가 많이 사용하는 링크
  • 하드링크와 달리 파일,디렉토리 모두 링크를 걸 수 있다.
  • 긴 디렉토리명으로 이동시 유용함
  • 원본을 다른곳으로 이동시키면 사용못함
  • 새로운 inode 생성
  • 원본자체를 가리키는 포인터 역할일 뿐이므로, 원본 수정 시 수정된 데이터가 보인다.
  • 원본의 삭제 시 링크가 끊김
  • 실질적으로는 inode에 의해서 돌아가는 것이다.
  • 경로를 기준으로 만들어진다.



심볼릭링크 생성 방법

ln -s /home/~~~/s1(원본 절대경로) /home/~~~/s2(심볼릭링크 절대경로)


심볼릭 링크 생성 후 링크걸린 곳으로 가보면
s2 가 원본링크를 화살표로 가리키고 있다.


생성 시 주의점

  • 링크는 절대경로로 입력해야 한다.
  • 하드링크든, 심볼릭링크든 링크 대상으로 지정하고 싶은 파일명과 이미 존재하는 파일명은 달라야 한다.


그러니까 예시를 들자면 s1 을 s2 로 심볼릭링크 생성 시점에서
s2가 존재하지 않으면 새로 만들면서 링크가 걸린다.
s2가 존재하고 있다면 심볼릭링크가 생성되지 않는다.





심볼릭링크를 생성하게 되면 새로운 inode가 생성되고 이 노드는 원본파일을 가르킨다.
stat 명령어를 통해 하드링크완 다르게 inode가 다름을 더 상세하게 확인 할 수 있다.

s1 파일 inode

 

s2 파일 inode

 

💡 마무리

심볼릭링크 inode(386763)는 원본 inode(17709787)를 가리키는 포인터 역할을 한다.

심볼릭링크로 생성된 s2파일은 386763을 거쳐 17709787의 노드를 확인 한 뒤
원본파일인 s1 을 읽기 때문에 속도가 느리다는 단점이 있다.

또한 심볼릭링크는 inode가 무조건 생성되기 때문에 4KB의 공간을 차지하기도 하여
성능면에서는 하드링크 보다 떨어지는 점이 있다.