링크 ".."는 상위 디렉토리 외부에서 다른 이상한 fs 동작을 수행합니다.

링크 ".."는 상위 디렉토리 외부에서 다른 이상한 fs 동작을 수행합니다.

".." 항목을 상위 디렉토리가 아닌 다른 곳에 연결할 수 있습니까? "tar"가 이상하게 동작하도록 하는 것이 가능합니까?

시나리오: tar.gz 파일로 배포된 내장형 시스템용 컴파일러가 있으며 Ubuntu 10.04에서 완벽하게 실행됩니다. VirtualBox VM에서 Ubuntu 12.04로의 업그레이드를 테스트할 때 일부 헤더 파일을 찾을 수 없습니다. 문제의 원인을 찾기 위해 파일을 탐색하는 동안 "/a/somewhat/convolved/../../path/../full/of/up/../references/" 뒤에 파일이 누락된 것을 발견했습니다. . 좀 더 자세히 살펴보니 몇 가지 이상한 동작을 발견했습니다.

  • "ls /that/strange/../../path"는 파일을 예상대로 표시합니다.

  • bash에 "ls /that/strange/../../path"를 입력하여 "/that/strange/../../path" 내의 파일 목록을 가져옵니다(즉, 파일 이름 완성을 트리거하는 "ls"를 실행하지 않음). 다른 파일 목록을 보여줍니다.

  • ".."를 해석하는 경로를 수동으로 수정하면 두 출력이 모두 동일합니다.

"ls"와 파일 이름 와일드카드는 파일을 다르게(opendir/readdir, glob 등) 찾고 파일 시스템 오류에서 이러한 단계 중 하나를 찾는 것 같습니다. 가상 머신에서 fsck를 실행할 때 예외가 발생하지 않았습니다. 새 가상 머신에 컴파일러를 다시 설치해도 결과는 동일합니다. "tar"는 오류를 반환하지 않습니다. 그런 문제가 발생한 사람이 있습니까?

답변1

경로의 "디렉토리" 중 하나가 실제로 다른 디렉토리에 대한 심볼릭 링크입니까? 그렇다면 ..심볼릭 링크가 포함된 디렉터리가 아닌 대상 디렉터리의 상위 디렉터리로 이동합니다.

..Bash는 이 문제를 심볼릭 링크가 포함된 디렉터리로 재해석하여 "수정"하려고 합니다. 이 짜증나는 동작을 해제할 수 있는 방법이 있다고 확신합니다. 하지만 개인적으로 이 문제를 마지막으로 처리해야 했던 때가 기억나지 않기 때문에 편리하게 사용할 수는 없습니다.

관련 정보