나는 당신이 무엇을 요구하는지 완전히 이해하지 못합니다. 내가 더 잘 모른다면 파일을 처리하는 동안 이것을 감지하는 방법이 있는지 묻고 있다고 생각합니다. 나는 이것이 가능하다고 생각하지 않습니다.
내가 생각할 수있는 유일한 방법은 디렉토리 트리에서 특정 분기를 통해 특히 찾기 시작하는 위치를 찾는 것입니다.
예
$ tree
.
`-- a
`-- b
|-- c
| `-- d
| `-- e -> ../../../../a/b
`-- e -> e
5 directories, 1 file
find
명령은이 루프를 감지하지만 정말 당신에게 그것에 대해 훨씬 말한다.
$ find -L . -mindepth 15
find: File system loop detected; `./a/b/c/d/e' is part of the same file system loop as `./a/b'.
find: `./a/b/e': Too many levels of symbolic links
에 의해 표시되는 출력을 차단하기 위해 임의로 15 레벨을 선택했습니다 find
. 그러나 -mindepth
표시되는 디렉토리 트리에 신경 쓰지 않으면 해당 스위치 ( )를 삭제할 수 있습니다 . find
명령은 여전히 루프와 중지를 감지 :
$ find -L .
.
./a
./a/b
./a/b/c
./a/b/c/d
find: File system loop detected; `./a/b/c/d/e' is part of the same file system loop as `./a/b'.
find: `./a/b/e': Too many levels of symbolic links
또한 MAXSYMLINKS
Linux에서 커널이 최신 인 3.x 버전의 40 인 기본값을 무시하려면 이 U & L Q & A 제목 : MAXSYMLINKS를 늘리는 방법을 참조하십시오 .
symlinks 명령 사용
FTP 사이트 관리자가 호출 할 수있는 도구가 있습니다.이 도구를 사용 symlinks
하면 기호 링크로 인해 도구가 길거나 매달려있는 나무에 문제가 노출 될 수 있습니다.
경우에 symlinks
따라이 도구를 사용하여 문제가되는 링크를 삭제할 수도 있습니다.
예
$ symlinks -srv a
lengthy: /home/saml/tst/99159/a/b/c/d/e -> ../../../../a/b
dangling: /home/saml/tst/99159/a/b/e -> e
glibc 라이브러리
glibc 라이브러리는 이것에 대한 일부 C 함수를 제공하는 것으로 보이지만 그 역할이나 실제로 어떻게 사용하는지 완전히 알지 못합니다. 그래서 나는 단지 그것들을 단지 당신에게 지적 할 수 있습니다.
매뉴얼 페이지 man symlink
에는이라는 함수의 함수 정의가 표시 symlink()
됩니다. 설명은 다음과 같습니다.
symlink ()는 문자열 oldpath를 포함하는 newpath라는 기호 링크를 작성합니다.
오류 중 하나는이 함수가 다음을 반환한다는 것입니다.
ELOOP newpath를 해결하는 데 너무 많은 기호 링크가 발생했습니다.
또한 man path_resolution
Unix가 디스크의 항목에 대한 경로를 결정하는 방법을 설명하는 매뉴얼 페이지 로 안내합니다. 특히이 단락.
If the component is found and is a symbolic link (symlink), we first
resolve this symbolic link (with the current lookup directory as starting
lookup directory). Upon error, that error is returned. If the result is
not a directory, an ENOTDIR error is returned. If the resolution of the
symlink is successful and returns a directory, we set the current lookup
directory to that directory, and go to the next component. Note that the
resolution process here involves recursion. In order to protect the
kernel against stack overflow, and also to protect against denial of
service, there are limits on the maximum recursion depth, and on the maximum
number of symbolic links followed. An ELOOP error is returned when the
maximum is exceeded ("Too many levels of symbolic links").
readlink ...
는 위 상황에 대해 무엇을 말합니까?