유닉스 스타일 시스템에서, 파일 시스템 객체 (즉, 파일 에 관한 데이터)를 나타내는 데이터 구조 는 소위 "inode"에 저장됩니다.
파일 이름은이 inode에 대한 링크 일 뿐이며 "하드 링크"라고합니다. 파일 이름과 후속 링크 사이에는 차이가 없습니다. 대답은 "예"입니다. 하드 링크는 일반 파일이며 실제로는 일반 파일은 하드 링크입니다.
이 ls
명령은 파일에 대한 하드 링크 수를 보여줍니다.
예를 들면 다음과 같습니다.
seumasmac@comp:~$ echo Hello > /tmp/hello.txt
seumasmac@comp:~$ ls -l /tmp/hello.txt
-rw-rw-r-- 1 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
여기에라는 파일을 만들었습니다 /tmp/hello.txt
. 1
의 출력은 ls -l
이 파일 (1 개) 하드 링크가 있음을 나타냅니다. 이 하드 링크는 파일 이름 자체 /tmp/hello.txt
입니다.
이 파일에 대한 다른 하드 링크를 만들면 :
seumasmac@comp:~$ ln /tmp/hello.txt /tmp/helloagain.txt
seumasmac@comp:~$ ls -l /tmp/hello*
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/helloagain.txt
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
이제 두 파일 이름 모두 파일에 대한 2 개의 하드 링크가 있음을 나타냅니다. 이들 중 어느 것도 "적절한"파일 이름이 아니며 둘 다 동일하게 유효합니다. 둘 다 동일한 inode (이 경우 5374043)를 가리키는 것을 볼 수 있습니다.
seumasmac@comp:~$ ls -i /tmp/hello*
5374043 /tmp/helloagain.txt 5374043 /tmp/hello.txt
이것이 디렉토리마다 다르다는 일반적인 오해가 있습니다. 나는 사람들에 의해 반환 된 링크 수 있다고 들었습니다 ls
디렉토리에 대한 포함 하위 디렉토리의 수입니다 .
및 ..
어떤 잘못된 . 또는 적어도 올바른 숫자를 제공하지만 잘못된 이유로 맞습니다!
디렉토리를 작성하고 수행하면 다음 ls -ld
을 얻습니다.
seumasmac@comp:~$ mkdir /tmp/testdir
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 2 seumasmac seumasmac 4096 Oct 4 13:20 /tmp/testdir
이 디렉토리에 2 개의 하드 링크가 있음을 나타냅니다. 이것들은:
/tmp/testdir
/tmp/testdir/.
참고 /tmp/testdir/..
입니다 하지 이 디렉토리에 대한 링크, 그것은에 대한 링크입니다 /tmp
. 그리고 이것은 "하위 디렉토리의 수"가 작동하는 이유를 알려줍니다. 새로운 하위 디렉토리를 만들 때 :
seumasmac@comp:~$ mkdir /tmp/testdir/dir2
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 3 seumasmac seumasmac 4096 Oct 4 13:24 /tmp/testdir
이제 /tmp/testdir
디렉토리에 대한 3 개의 하드 링크가 있습니다. 이것들은:
/tmp/testdir
/tmp/testdir/.
/tmp/testdir/dir2/..
따라서 모든 새 하위 디렉토리 ..
에는 포함 된 항목으로 인해 링크 수가 하나씩 증가합니다 .