내 파일 시스템에 몇 개의 파일이 있는지 알고 싶습니다. 나는 다음과 같은 일을 할 수 있다는 것을 알고 있습니다.
find / -type f | wc -l
이는 매우 비효율적인 것 같습니다. 내가 정말로 원하는 것은 "파일"로 간주되는 고유 inode의 총 개수를 찾는 것입니다.
더 좋은 방법이 있나요?
노트:
저는 파일 동기화 프로그램을 개발 중이고 통계 분석(예: 평균 사용자가 가지고 있는 전체 파일 수와 시스템에 있는 파일 수 등)을 수행하고 싶기 때문에 이 작업을 수행하고 싶습니다. 그러나 이러한 파일에 대해 아무것도 알 필요는 없으며 파일이 존재한다는 사실만 알면 됩니다(경로는 전혀 중요하지 않습니다). 특히 마운트된 각 파일 시스템(및 관련 마운트 지점)에 대한 정보를 알고 싶습니다.
답변1
--inodes 옵션은 df
사용하기 위해 예약된 inode 수를 알려줍니다. 예를 들어:
$ df --inodes / /home
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 3981312 641704 3339608 17% /
/dev/sda8 30588928 332207 30256721 2% /home
$ sudo find / -xdev -print | wc -l
642070
$ sudo find /home -print | wc -l
332158
$ sudo find /home -type f -print | wc -l
284204
반환된 항목 수는 루트(/) 파일 시스템 find
보다 크고 /home보다 적습니다. IUsed
하지만 둘 다 0.0005% 이내입니다. 차이점이 있는 이유는 하드 링크 및 유사한 상황 때문입니다.
디렉토리, 기호 링크, UNIX 도메인 소켓 및 명명된 파이프는 모두 파일 시스템과 관련된 "파일"이라는 점을 기억하십시오. 따라서 find -type f
통계적 관점에서 플래그를 사용하는 것은 매우 부정확합니다.
답변2
사용statvfs()
, 그리고 계산합니다 f_files - f_ffree
.