Wie finde ich die Anzahl der Dateien in einem Dateisystem?

26

Ich möchte wissen, wie viele Dateien sich auf meinem Dateisystem befinden. Ich weiß, dass ich so etwas machen kann:

find / -type f | wc -l

Dies scheint sehr ineffizient zu sein. Am liebsten würde ich die Gesamtzahl der eindeutigen Inodes ermitteln, die als "Datei" betrachtet werden.

Gibt es einen besseren Weg?

Hinweis:

Ich möchte dies tun, weil ich ein Dateisynchronisationsprogramm entwickle und statistische Analysen durchführen möchte (wie viele Dateien der durchschnittliche Benutzer insgesamt hat, verglichen mit der Anzahl der Dateien auf dem System). Ich muss jedoch nichts über diese Dateien wissen, nur dass sie existieren (Pfade spielen überhaupt keine Rolle). Ich würde diese Informationen besonders gerne für jedes gemountete Dateisystem (und den dazugehörigen Mount-Punkt) erfahren.

Beatgammit
quelle

Antworten:

34

Die Option --inodes gibt an df, wie viele Inodes für die Verwendung reserviert sind. Beispielsweise:

$ 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

Beachten Sie, dass die Anzahl der zurückgegebenen Einträge findgrößer als IUsedfür das Root-Dateisystem (/) ist, für / home jedoch geringer. Beide liegen jedoch innerhalb von 0,0005%. Der Grund für die Unstimmigkeiten sind harte Verbindungen und ähnliche Situationen.

Denken Sie daran, dass Verzeichnisse, Symlinks, UNIX-Domain-Sockets und Named Pipes Dateien sind, die sich auf das Dateisystem beziehen. find -type fAus statistischer Sicht ist die Verwendung von flag also äußerst ungenau.

Arcege
quelle
Ich denke, das ist was ich suche. Gibt es eine Möglichkeit, die Anzahl der Dateitypen zu ermitteln? Dies wird von meiner Anwendung nicht direkt benötigt, kann aber hilfreich sein.
Beatgammit
1
Nicht ohne die Inodes jeder Datei im Dateisystem zu überprüfen, was in etwa dem Suchen gleicht.
Arcege,
Versteht df die meisten Dateisysteme (ext2-4, ntfs, fat, reiserfs, etc)?
Beatgammit
Es würde jeden Dateisystemtyp verstehen, der gemountet werden könnte. Einige Dateisystemtypen haben keine Inodes (z. B. Fat). dfwürde die Gesamtzahl der Inodes auf diesen Dateisystemen als 0 anzeigen. Andere Typen sollten die Inode-Statistiken des zugrunde liegenden Dateisystems anzeigen.
Arcege,
Müssten Sie Fehler umleiten, um zu /dev/nullsehen, wie Sie Linien erhalten, die Sie warnen, dass Dateien in /proc"virtuell" sind?
Nr.
2

Verwenden statvfs()und berechnen f_files - f_ffree.

Chris Down
quelle