하드 링크와 원래 이름의 차이점을 구분할 방법이 없기 때문에 이것은 나쁜 생각입니다.
디렉토리에 대한 하드 링크를 허용하면 파일 시스템의 지시 된 비순환 그래프 구조가 깨져 디렉토리 루프가 생성되고 디렉토리 서브 트리가 매달려있을 수 fsck
있으며 다른 파일 트리 워커에서 오류가 발생하기 쉽습니다.
먼저 이것을 이해하기 위해 inode에 대해 이야기합시다. 파일 시스템의 데이터는 디스크의 블록에 보관되며 이러한 블록은 inode에 의해 함께 수집됩니다. inode를 THE 파일로 생각할 수 있습니다. 그러나 아이 노드는 파일 이름이 없다. 그것이 링크가 들어오는 곳입니다.
링크는 단지 inode에 대한 포인터입니다. 디렉토리는 링크를 보유하는 inode입니다. 디렉토리의 각 파일 이름은 inode에 대한 링크 일뿐입니다. 유닉스에서 파일을 열면 링크도 생성되지만 다른 유형의 링크입니다 (이름이 지정된 링크가 아님).
하드 링크는 해당 inode를 가리키는 추가 디렉토리 항목입니다. 의 ls -l
경우 권한 뒤의 숫자는 명명 된 링크 수입니다. 대부분의 일반 파일에는 하나의 링크가 있습니다. 파일에 새로운 하드 링크를 만들면 두 파일 이름이 모두 동일한 inode를 가리 킵니다. 노트 :
% ls -l test
ls: test: No such file or directory
% touch test
% ls -l test
-rw-r--r-- 1 danny staff 0 Oct 13 17:58 test
% ln test test2
% ls -l test*
-rw-r--r-- 2 danny staff 0 Oct 13 17:58 test
-rw-r--r-- 2 danny staff 0 Oct 13 17:58 test2
% touch test3
% ls -l test*
-rw-r--r-- 2 danny staff 0 Oct 13 17:58 test
-rw-r--r-- 2 danny staff 0 Oct 13 17:58 test2
-rw-r--r-- 1 danny staff 0 Oct 13 17:59 test3
^
^ this is the link count
이제는 하드 링크와 같은 것이 없다는 것을 분명히 알 수 있습니다. 하드 링크는 일반 이름과 같습니다. 위의 예에서 test
또는 test2
, 어떤 파일이 원본 파일이고 어떤 파일이 하드 링크입니까? 결국 두 이름이 동일한 내용, 동일한 inode를 가리 키기 때문에 실제로 (타임 스탬프조차도) 알 수 없습니다.
% ls -li test*
14445750 -rw-r--r-- 2 danny staff 0 Oct 13 17:58 test
14445750 -rw-r--r-- 2 danny staff 0 Oct 13 17:58 test2
14445892 -rw-r--r-- 1 danny staff 0 Oct 13 17:59 test3
행의 시작 부분에 inode 번호 -i
를 ls
표시 하는 플래그 입니다. 어떻게 주 test
와 test2
같은 inode 번호를 가지고 있지만, test3
다른 하나가 있습니다.
이제 디렉토리에 대해이 작업을 수행 할 수 있으면 파일 시스템의 다른 지점에있는 두 개의 다른 디렉토리가 동일한 것을 가리킬 수 있습니다. 실제로, 하위 디렉토리는 조부모를 다시 가리키면서 루프를 만들 수 있습니다.
이 루프가 왜 문제가 되나요? 트래버스를 할 때는 루핑을 감지 할 수있는 방법이 없기 때문에 트래버스 할 때 inode 번호를 추적하지 않아도됩니다. du
디스크 사용에 대해 알아 보려면 하위 디렉토리를 통해 반복해야하는 명령을 작성한다고 가정하십시오 . du
루프에 언제 도달하는지 어떻게 알 수 있습니까? du
이 간단한 작업을 시작 하기 위해서는 오류가 발생하기 쉽고 많은 부기 가 필요합니다.
심볼릭 링크는 많은 파일 파일 시스템 API가 자동으로 따르는 경향이있는 특수한 유형의 "파일"이라는 점에서 완전히 다릅니다. 심볼릭 링크는 존재하지 않는 대상을 가리킬 수 있습니다. 즉, inode를 직접 가리키는 것이 아니라 이름을 가리 킵니다. "하드 링크"라는 단순한 존재는 파일이 존재한다는 것을 의미하기 때문에이 개념은 하드 링크에서는 의미가 없습니다.
그렇다면 du
링크가 아닌 심볼릭 링크를 쉽게 처리 할 수있는 이유는 무엇입니까? 우리는 하드 링크가 일반 디렉토리 항목과 구별 할 수 없다는 것을 위에서 볼 수있었습니다. 그러나 심볼릭 링크는 특별하고 감지 가능하며 건너 뛸 수 있습니다!
du
심볼릭 링크가 심볼릭 링크임을 인식하고 완전히 건너 뜁니다!
% ls -l
total 4
drwxr-xr-x 3 danny staff 102 Oct 13 18:14 test1/
lrwxr-xr-x 1 danny staff 5 Oct 13 18:13 test2@ -> test1
% du -ah
242M ./test1/bigfile
242M ./test1
4.0K ./test2
242M .
..
가리켜 야 합니까? 특히이 디렉토리에 대한 하드 링크를 제거한 후..
? 어딘가에 가리켜 야합니다.