디렉토리에서 파일의“디렉토리 순서”는 무엇입니까 (`ls -U`에 의해 사용됨)?


19

ls 매뉴얼 페이지에 따르면 다음을 ls -U의미합니다.

정렬하지 마십시오. 디렉토리 순서로 항목을 나열하십시오.

"디렉토리 순서"는 무엇을 의미하며 어떻게 결정됩니까?

다음 테스트 (ext3 파일 시스템에서 실행)는 파일이 작성된 순서가 아님을 보여줍니다.

root@sv1010vm0007:/tmp# mkdir test
root@sv1010vm0007:/tmp# touch test/2
root@sv1010vm0007:/tmp# touch test/1
root@sv1010vm0007:/tmp# touch test/3
root@sv1010vm0007:/tmp# ls -U test
2  3  1

답변:


14

파일 시스템에 따라 다릅니다. 일부 파일 시스템 (그들 중 ext3)의 경우, 디렉토리는 실제로는 잘 알려진 형식의 파일이며 권한 또는 모드에서 'd'비트가 설정됩니다. 이 경우 파일 이름을 만들고 삭제 한 길이에 대한 기록이 중요 할 수 있습니다. 커널은 디렉토리 파일에서 새 파일의 이름을 담을 공간이 충분한 첫 번째 항목을 채 웁니다. 자세한 내용 은 "물리적 설명"섹션 인 http://e2fsprogs.sourceforge.net/ext2intro.html 을 참조하십시오 .

다른 파일 시스템 중 Reiserfs의 경우 디렉토리는 실제로 파일 시스템에 표시되지 않는 B + 트리의 일부 항목 이므로 lsReiserfs 파일 시스템의 디렉토리 평문 은 어휘 순서입니다.


@Bruce : 그렇다면이 "디렉토리"파일의 내용은 정확히 무엇입니까?
Faheem Mitha

일반적으로 struct dirent와 매우 유사한 것으로 RHEL 상자와 Slackware 11.0 상자에서 /usr/include/bits/dirent.h에 정의되어 있습니다. 두 머신 모두 디렉토리를 직접 여는 것을 거부합니다. 디렉토리를 일반 파일로 변환하기 위해 "cat.> dot.as.file"과 같은 작업을 수행했다는 것을 알고 있습니다. 기본적으로 struct dirent에는 inode (숫자), 레코드 길이, 이름 길이 및 문자열이 포함되어 있습니다.
브루스 Ediger

@Bruce : 좋아. 그리고이 C 구조체는 파일과 하위 디렉토리에 대한 모든 정보를 해당 필드에 가져옵니다.
Faheem Mitha

ext2, BSD FFS 또는 원래 Unix 파일 시스템과 같은 파일 시스템의 디렉토리에는 inode 번호 및 해당 파일 이름 목록이 포함되어 있습니다. 인수없이 "ls"를 호출하면 파일 이름 목록을 얻게됩니다. "ls -l"을 수행 한 경우 "ls"자체는 파일 이름에 대해 stat (2) 시스템 호출을 수행하여 모든 파일 이름을 찾고 struct stat에서 권한, 크기, "파일 유형"등을 얻습니다. 따라서 디렉토리 파일에는 모든 정보가없고 이름 목록 만 있습니다.
브루스 Ediger

2
ext2.sourceforge.net/2005-ols/paper-html/node3.html 은 dir_index 기능이 파일 이름과 파일 시스템 특정 비밀을 해시 한다고 설명합니다. 기능이 사용 가능한 경우 dump2efs는 파일 시스템 기능 행에 dir_index를 포함합니다.
Martin Dorey

3

실제로, 구체적인 순서는 없습니다. 항목을 원하는 방식으로 주문하는 것은 OS 및 파일 시스템 구현에 달려 있습니다. 이 옵션의 한 가지 목표는 가능한 빠른 목록을 얻는 것인데, 이는 매우 큰 디렉토리에서 중요한 요소가 될 수 있습니다.


커널 및 파일 시스템 드라이버에는 데이터가 디스크에 정확히 기록 될 때 영향을주는 스케줄링 / 캐싱 알고리즘이 있습니다. 이것은 성능을 향상시키기 위해 수행됩니다. 이 최적화로 인해 쓰기가 언제 발생하는지 정확히 알 수 없습니다. 또한 파일 시스템의 이전 inode가 재사용되어 이전 파일이 있던 디렉토리 슬롯에 새 파일이 나타날 수 있습니다. 따라서 생성 순서는 "디렉토리 순서"가 필요하지 않습니다.
LawrenceC

@ultrasawblade : 왜 당신이 저절로 답장을하지 않고 내 자신의 답장에 주석으로 썼는지 잘 모르겠습니다.
jlliagre

@ultrasawblade : 엄밀히 말하면, "오래된 inode [재사용 중]"는 오래된 디렉토리 슬롯의 재사용과는 아무런 관련이 없습니다. 오래된 디렉토리 항목이 연결 해제 될 때마다 발생할 수 있습니다. 그것들이 모두 하드 링크라면, 이것은 inode가 할당 해제 될 필요가 없습니다.
G-Man, 'Reinstate

2

항목이 파일 시스템에 내부적으로 저장되는 순서입니다. 이것은 파일 시스템마다 다릅니다. 예를 들어, 전체는 Red-Black Tree 와 같은 일종의 균형 잡힌 나무에 저장 될 수 있습니다 . 항목 수가 적은 디렉토리에 대한 추가 최적화가 있거나 추가 및 제거를 효율적으로 처리 할 수 ​​있습니다.


-1

디렉토리는 다른 파일 일 뿐이며 실제 파일의 메타 데이터를 나열합니다. "ls -U"는 디렉토리 파일에서 전체를 동일한 순서로 나열합니다.

순서는 OS 및 파일 시스템 구현에 따라 결정됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.