설정
내 문제에 대해 다음 명령 순서가 설정되었습니다.
root@cd330f76096d:/# cd
root@cd330f76096d:~# ls
root@cd330f76096d:~# mkdir -p my_dir/my_subdir
root@cd330f76096d:~# ls -hAil
total 12K
6175969 -rw-r--r-- 1 root root 3.1K Oct 15 2021 .bashrc
6175970 -rw-r--r-- 1 root root 161 Jul 9 2019 .profile
7382820 drwxr-xr-x 3 root root 4.0K Sep 6 19:34 my_dir
문맥
my_dir
출력에 따르면 세 개의 하드 링크가 있습니다. 아마도 그들은 다음과 같습니다:
./my_dir
my_dir/.
my_dir/my_subdir/..
하지만. . .
root@cd330f76096d:~# find . -xdev -inum 7382820
./my_dir
그게 다야. 줄이 하나뿐입니다.
질문
내가 놓치고 있는 것이 무엇이며/또는 ls -l
이것이 어떻게 작동합니까?
나는 더 많은 파일을 찾을 수 없는 이유가 해당 find
파일이 참조되었기 때문일 것이라고 반쯤 예상했습니다 .
. ..
이 경우 도대체 어떻게 ls -l
처리해야 하는지 물었습니다.소스 코드.
프리셋
위의 예는 도커 컨테이너에서 생성되었으며 편의를 위해 아래에 공유합니다.
$ docker pull ubuntu:jammy
jammy: Pulling from library/ubuntu
Digest: sha256:aabed3296a3d45cede1dc866a24476c4d7e093aa806263c27ddaadbdce3c1054
Status: Downloaded newer image for ubuntu:jammy
docker.io/library/ubuntu:jammy
$ docker run -it ubuntu:jammy bash
답변1
발견된 경로 이름 find
(즉, 명령줄에 제공된 검색 경로 이외의 경로)에는 .
또는 ..
구성 요소가 포함될 수 없으므로 명령에서 이러한 경로가 표시되지 않습니다.
왜? 왜냐하면POSIX 표준은 다음과 같이 말합니다.(내 강조점):
각 경로 피연산자는 모든 후행 문자를 포함하여 제공될 때 있는 그대로 평가됩니다
<slash>
.<slash>
계층 구조에서 발견되는 다른 파일에 대한 모든 경로 이름은 현재 경로 피연산자 a(현재 경로 피연산자가 1로 끝나지 않는 경우)와 경로 피연산자를 기준으로 한 파일 이름의 연결로 구성됩니다. 관련 섹션에는 점 또는 점-점 구성 요소가 포함되어서는 안 됩니다., 후행 문자가 없고 경로 이름 구성 요소 사이에<slash>
단일 문자만 있습니다 .<slash>
(위에서 언급한 "현재 경로 피연산자"는 명령줄의 검색 경로 중 하나입니다.)
이 ls
명령은 디렉토리의 링크 수를 계산할 수 있습니다.stat()
호출되어 다음을 반환합니다.stat
하드 링크 수를 포함하는 구조입니다. 엄밀히 말하면 모르겠다어디그러나 다른 하드 링크가 발견되었습니다.