하드 링크와 심볼릭 링크는 쉽게 생각하면, 바로가기를 생성하는 것이다.
하지만 두가지는 차이점이 있음..
먼저 하드 링크는 i-node를 공유해서 사용한다.
그 말은, 그냥 바로가기로써의 기능뿐 아니라 하드링크 파일이 수정되면
원본파일도 변경된다. 항상 같은 상태를 유지하는 것.
하드 링크는 같은 파일시스템에서만 생성가능하다.
그리고 디렉토리에 대한 하드링크는 관리자만이 생성할 수 있음.
또한 원본파일이 삭제되어도 하드링크에는 문제가 없다.
원본 파일의 i-node를 공유하기 때문이다.
동일한 i-node를 가르키고 하드링크를 생성하면 i-node의 link count 필드의
값이 하나 증가한다.
파일을 삭제할 때 실제 데이터 블럭에서 파일을 삭제하고자 하면
link count가 0이 되어야만 한다. ( unlink()로 링크 카운트를 줄일 수 있음.. )
rm명령을 이용하면 링크 카운트를 하나 감소시키는 것이다.
결과적으로 말하면 "이름이 다른" 똑같은 파일을 만드는 것이다.
그렇다면 심볼릭링크는 어떻게 다른가.
엄밀히 말하면 이게 진짜 바로가기와 같은 것이다.
별도의 i-node를 가지는 파일을 생성하고, 그것이 원본 파일을 가르키는 포인터를 가진다.
아무나 만들 수 있으며, 다른 파일 시스템에서도 생성이 가능하다.
이건 원본파일이 삭제되면 무의미한 파일이다.
바로가기라고 했음..
그리고 디렉토리에 대한 얘기를 좀 해야하는데,
디렉토리에 대한 링크 횟수 필드가 가지는 의미에 대해 알아보자.
. 디렉토리와 ..디렉토리가 있는거 알것이다. (모든 디렉토리가)
보통 디렉토리를 생성하면 링크 카운트가 2이다.
왜? .(도트)와 ..(도트-도트) 디렉토리가 하드링크로 모든 디렉토리에 생성되어 있음.
그래서 2다. 서브 디렉토리가 생긴다면 갯수만큼 링크 카운트가 올라가겠지.
'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글
리눅스 환경의 프로세스(Process) (0) | 2021.04.18 |
---|---|
리눅스 파일 시간값 (0) | 2021.04.18 |
리눅스 프로세스의 파일 공유 (0) | 2021.04.18 |
아이노드 ( i-node ) (0) | 2021.04.18 |
strace, ltrace (0) | 2021.04.18 |