Search
Duplicate
🔗

하드링크 / 심볼릭링크

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Shell
Linux
Scrap
태그
9 more properties

일단 i-node가 뭔지부터 알고 가보자❗️

i-node란?
파일이 생성될 때 마다 고유의 번호가 주어지고, 그 번호를 i-node라고 한다.
inode에는 파일의 권한, 형태, 고유 번호, 소유자 및 그룹, 원복 데이터의 주소 등 파일에 대한 모든 것들이 기록되어 있는데, 유닉스 계열의 운영체제에서는 모든 파일을 inode로 관리를 하게 된다.
이러한 inode는 ls -i 명령어로 확인이 가능하다

그렇다면 하드 링크는 뭘까?

하드링크는 한 파일을 복사를 한다고 생각하면 된다. 하지만, cp명령어와 같은 것은 아니기 때문에 주의해야한다.
inode는 우리가 흔히 알고 있는 파일의 데이터를 가리키게 되고 하드링크inode를 가리키게 된다. 즉, 일반적으로 우리가 확인할 수 있는 파일들은 모두 하드링크라고 보면 편하다.
따라서, 기본적으로 모든 파일들은 적어도 하나 이상의 하드 링크를 가지게 되고, 하드 링크 수가 하나도 없게 되면 이것이 곧 파일의 삭제를 의미한다.
위와 같이 ln 명령어를 통하여 a라는 파일에 대한 하드링크를 만들게 되면, inode가 동일한 것을 확인할 수 있다. cp 명령어의 경우는 각자 다른 inode를 가리키게 되기 때문에 이 점이 cp명령어하드링크의 차이라고 할 수 있다. 아래 그림을 통해 차이점을 비교할 수 있을 것이다.
또한, 동일한 inode를 가지고 있기 때문에 hardlink_a파일내용을 수정해도 a파일의 내용도 함께 수정되는 것을 확인할 수 있다.

심볼릭 링크(소프트 링크)도 마저 알아볼까?

심볼릭 링크는 바로가기 아이콘을 생각하면 이해하기 쉽다.
ln -s명령어를 통해 a파일에 대한 softlink를 해보았다. 위의 사진처럼 a파일과 내용이 동일하지만 inode의 값이 다른 것을 확인할 수 있다. 이는 아래의 구조처럼 되어 있기 때문이다.
하드링크와 동일하게 파일이 추가적으로 생성되는 반면, 고유의 새로운 inode를 가리키게 된다. 그 inode는 원본 inode를 가리키는 주소를 가지게 된다. 심볼릭 링크는 별도의 inode를 갖고 있고 디스크 상에 별도의 데이터를 유지하고 있기 때문에 하드링크와 달리 별도의 크기를 갖는다. 심볼릭 링크는 하나의 하드링크이기도 한 것이다.

이왕이렇게 된거 삭제도 해볼까?

하드링크심볼릭링크삭제를 하게 되면 어떤 차이가 있을까?
동일한 inode를 참조하고 있는 하드링크들 중에 하나의 하드링크가 끊긴다고 원본이 사라지지 않는다. 위에서 잠깐 언급했지만 삭제는 참조된 링크 수가 0이 되면 그때서야 삭제가 이루어진다.
그러나, 심볼릭링크의 경우 원본이 사라지게 되면 심볼릭 링크inode가 가리키는 주소가 사라지는 것이기 때문에 심볼릭 링크된 파일이 무용지물이 된다. 이 또한 바로가기를 생각해보면 쉽게 이해가 될 수 있을 것이다.
이처럼 하드링크심볼릭링크삭제하였을때, 사용자 입장에서는 파일을 삭제하는 것처럼 보이지만 파일을 완전히 삭제하기 위해선 inode를 참조하는 모든 하드링크를 끊어야 한다.

참고