답변1
아니요, 이름이 아닌 inode로 디렉터리나 파일을 여는 Unix 시스템 호출은 없습니다. 디렉토리 항목 목록 내에서 디렉토리 항목 위치에 대한 개념도 존재하지 않습니다.
이것을 원한다고 생각한다면 아마도 디자인 프로세스 초기에 잘못된 방향으로 가고 있을 것입니다.
라는 이름의 디렉터리가 두 개 있는 경우 a
어느 디렉터리를 참조합니까?a/file
디렉토리 항목은 이름에서 inode로의 순서 없는 매핑입니다., 이름을 키로 사용합니다. 중복 키는 지원되지 않으며 생성할 수 없습니다. 기존 이름을 사용하여 작업을 수행하려고 하면 기존 디렉터리 항목만 참조합니다.
디스크의 데이터 구조(또는 커널 버그 또는 하드웨어 버그)를 수동으로 편집하면 동일한 이름의 디렉터리가 두 번 생성될 수 있지만(다른 inode를 가리킬 수도 있음) fsck
확인해야 합니다!
당신이 실행한다고 가정 해 봅시다 cat /home/peter/foo.txt
. cat은 디렉토리를 전혀 읽지 않고 단지 ( 보기) 만 읽습니다 open("/home/peter/foo.txt", O_RDONLY) = -1 ENOENT (No such file or directory)
.strace cat foo.txt
어쩌면 당신은 사용할 수 있습니다퓨즈파일 이름의 특수 문자를 이상한 방식으로 해석하고 디렉터리 항목을 의미 있는 순서로 반환하는 "파일 시스템"을 제공합니다. 파일 이름에 나타날 수 있는 문자 제한에 동의하면 특정 문자에 특별한 의미를 부여할 수 있습니다. 따라서 /mnt/database-fuse-mount/some_dir/{2}
두 번째 디렉토리 항목을 참조할 수 있습니다. 아니면 .../name{2}
이라는 두 번째 항목을 참조할 수도 있습니다 name
. 데이터베이스 테이블을 각 레코드에 대한 파일과 함께 디렉터리로 마운트하는 FUSE 모듈이 없다면 누구도 이것을 구현하지 않을 것으로 예상됩니다. 파일 이름을 기본 키로 사용하시겠습니까? IDK, SQL 데이터베이스는 해당 필드로 쿼리할 수 있으므로 이는 실제로 의미가 없습니다.
답변2
디스크의 파일 시스템은 아니지만 모든 데이터베이스는 기본적으로 원하는 작업을 수행합니다. 이는 파일 관리자에 디렉터리 및 파일 집합으로 표시되지 않는 추상화 계층이지만, 실제로 필요한 경우 기본 파일 관리자를 직접 작성할 수 있습니다.
데이터베이스를 사용하면 키 값을 사용하여 "위치"를 구별할 수 있고, 이름 필드는 필요한 만큼 반복할 수 있으며, 테이블에서 일치하는 필드 조합을 찾는 쿼리를 통해 데이터에 액세스할 수 있습니다.