ls -f의 요점은 무엇입니까 (또는 왜 이것이 매달려 있습니까?)


9

약 10 만 개의 파일이있는 디렉토리가 있습니다. ls -f가 1 분 이상 정지합니다. 나는 strace를 실행하고 즉시 getdents를보기 시작 했으므로 ls는 디렉토리를 명확하게 읽습니다. 또한 brk에 대한 많은 호출을 보았으므로 ls는 메모리에있는 것들을 분명히 버퍼링합니다. readdir을 호출하고 파일 이름을 출력하는 간단한 프로그램을 작성했으며 즉시 응답합니다. 그러나 ls -f는 출력을 제공하지 않습니다. 무엇을 제공합니까? -f의 요점은 ls가 readdir 이상을 수행하지 않는다고 생각했습니다. 디렉토리의 내용을 나열하는 이식 가능하고 안정적인 방법이 있습니까? (이것은 Linux에서 gnu의 coreutils에서 ls입니다.)

-편집하다-

별명이 있었지만 "/ bin / ls -1f> / dev / null"에는 8 ~ 15 초가 걸리고 "/ bin / ls -1fx> / dev / null"에는 4 ~ 11 초가 걸리지 만 간단한 프로그램 readdir은 .011 초가 걸립니다. 귀신을 빨지 않게하려면 어떻게해야합니까?

답변:


7

요점은 -f모든 파일 항목을 통계 할 필요가없고, 표시되기 전에 모든 파일 항목을 읽을 필요가 없도록하는 것입니다. 다른 옵션 만 비활성화하는 "메타"옵션입니다.

예, 그것은 당신이 기대하는 것을해야합니다. 왜 그렇지 않은지 대답 할 수는 없지만 쉘 별명이나 명령에 추가 옵션을 삽입하는 다른 것이있을 수 있습니다. 이 기능은 -f비활성화 하는 것보다 기능을 다시 활성화 할 수 있으며 "보다 구체적인"것으로 간주되므로 우선합니다.


2
아가 ls () {/ bin / ls -FB $ @; } 바보 같은 시작 스크립트.
윌리엄 퍼셀

1
흠. 함수를 설정 해제했지만 / bin / ls를 실행해도 여전히 동일한 동작이 나타납니다.
윌리엄 퍼셀

/ bin / ls -f -1을 수행하십시오 (마이너스 -ell이 아닌 -1). RHEL 상자의 / bin / ls는 어떤 이유로 열의 형식 파일 이름을 사용하고 있습니다.
Bruce Ediger

0

coreutils 7.0에 최적화가 추가되었습니다 (커밋 8d974b00fbbc2025de63e1e6d54827648fefa1c4).

2008-08-01  Kamil Dudka  <kdudka@redhat.com>
    ls -U1 now uses constant memory
    When printing one name per line and not sorting, ls now uses
    constant memory per directory, no matter how many files are in
    the directory.
    * ls.c (print_dir): Print each file name immediately, when possible.
    * NEWS: Mention the improvement.

염두에 두어야 할 첫 번째 설명은 이전 버전의 coreutils를 실행하고 있다는 것입니다. 업그레이드해야합니다.

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