Anzahl der offenen Dateien für jeden Benutzer zählen?

1218
sorin

Ich suche einen Befehl, der mir die Anzahl der offenen Dateien für jeden Benutzer auflistet, absteigend sortiert.

Zum Beispiel lsof -u postgres | wc -würde sie nur für den Postgres-Benutzer aufgelistet, aber ich möchte sehen, bei welchem ​​Benutzer ich Handler verlieren darf.

Hinweis: Einige Fragen beziehen sich möglicherweise auf PIDs anstelle von Benutzernamen, aber ich suche immer noch nach einem Einzeiler.

1

2 Antworten auf die Frage

1
Warren Lavallee

Wenn Sie offen für Pipe sind, wie wäre es damit:

lsof | perl -pe 's / \ s \ s + / / g' | cut -d '' -f3 | grep -v ^ USER | sortieren | uniq -c | sort -rn

Ich habe dies auf MacOS 10.10.2 (Yosemite), OEL 6.6 und Ubuntu 10.04.01 getestet.

1
AFH

Ich lief Warren Lavallees Skript und fand es schwer zu interpretieren.

Stattdessen habe ich das ursprüngliche Skript so erweitert, dass es alle Benutzer schrittweise durchläuft und Folgendes gibt: -

for f in $(sed</etc/passwd 's/:.*$//g'); do ( echo -n $f ' '; lsof -u $f 2>/dev/null | wc -l ); done | grep -v ' 0$' 

Dies funktioniert gut auf Ubuntu 14.04. Das Finale grepentfernt die Null-Einträge, da viele Benutzer keine aktiven Prozesse haben. Sie können auch | sort -rnk 2am Ende des Befehls hinzufügen, um in absteigende Dateizählreihenfolge zu sortieren.

Sie müssen sich in einer Root-Shell befinden, um sicherzustellen, dass Sie die Dateien aller Benutzer sehen können.