나는 최근에 Linux에 명령을 사용하여 표시할 수 없는 특별한 숨겨진 디렉터리가 있다는 것을 발견했습니다 ls -a
. 즉, 내가 만난 것은.reiserfs_priv디렉토리는 reiserfs 파일 시스템의 루트 디렉토리에 있습니다. 나는 ls -ld .reiserfs_priv
그것을 호출하고 cd
(루트로서) 디렉토리로 갈 수 있지만 ls -a
명령과 함께 표시되지 않습니다( find ./ -name *reiser*
찾지도 않습니다).
질문:
- 이런 종류의 디렉토리를 실제로 어떻게 감지합니까?
- 내가 직접 만들 수 있나요?
- 그들은 머물기 위해 어떤 메커니즘을 사용합니까?몰래 하기왜
ls -a
볼 수 없나요? - 파일로도 되나요?
- 이러한 유형의 디렉토리는 일반적으로 어디에 사용됩니까?
답변1
일반적으로 이러한 파일은 감지하거나 생성할 수 없습니다. 파일 시스템이 일관되지 않은 데이터를 보고하기 때문에 존재합니다.
파일 시스템을 수정하지 않고 파일 시스템의 파일에 대한 정보를 얻는 다양한 방법에는 중복성이 있습니다. 예를 들어 권한은 다음을 허용합니다.
- 파일 이름이 보고되면 해당 이름을
readdir
사용한 호출이lstat
성공합니다. - 파일이 심볼릭 링크로 보고되지 않은 경우 및
lstat
호출 도 성공합니다.stat
open
stat
성공하면 성공open
입니다`.open
성공 하면 다음을 수행stat
하고lstat
.stat
보고서 파일이 디렉터리이면 성공cd
하고 그 반대의 경우도 마찬가지입니다.
등. Reiserfs 파일 시스템이 .reiserfs_priv
디렉토리 목록에서 항목을 생략했지만 해당 항목에 직접 액세스하는 시스템 호출을 통해 이를 디렉토리로 보고하는 경우 파일 시스템은 일관성 없는 정보를 보고합니다.
정보가 잘못된 것이 아니라 일관성이 없을 뿐입니다. 이는 규칙 위반일 뿐이지 규칙 위반일 뿐입니다. cd
or 를 실행하기 전에 디렉토리를 생성하고 ls .reiserfs_priv
or 를 실행하기 전에 삭제하는 매우 빠른 고블린이 있는 경우에도 동일한 동작이 관찰될 수 있습니다 find
.
파일 시스템이 일관되지 않은 데이터를 보고하는 것은 일부 애플리케이션과 사용자를 혼란스럽게 할 수 있으므로 좋지 않은 형태이므로 합당한 이유가 있는 경우에만 수행해야 합니다. Reiserfs의 경우 그 이유는 특히 파일 검색 및 인덱스 탐색에서 일부 정보를 상당히 숨긴 상태로 유지하기 위한 것입니다. 이는 의 내용이 .reiserfs_priv
"실제" 파일이 아니고 저장하는 데 사용되기 때문에 유용합니다.확장된 파일 속성, 시스템 호출 계열을 호출하여 액세스하십시오 *xattr
. 사실, 나는 그것이 왜 노출되었는지 전혀 모릅니다. 어쩌면 단지 디버깅 목적일 수도 있습니다.
자신의 존재를 보고하지 않는 파일의 또 다른 예는 동일한 데이터가 다른 방식으로 반환되도록 허용하는 파일 시스템입니다. 예를 들어,CIOPFS파일 시스템의 대소문자를 구분하지 않는 보기를 제공합니다. then이라는 파일이 있는 경우 Foo
디렉토리 목록만 나열되지만 Foo
액세스 foo
등 FOO
은 성공합니다.