GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum unterbricht der Ls-Befehl das NFS-Verzeichnis mit vielen Dateien nur langsam?

Ich habe in Verzeichnissen mit vielen Dateien auf NFS bemerkt, wenn ich es tue

ls *

dann drücken Sie Strg-C, es kann eine Weile dauern (z. B. 20 Sekunden), bis ls zurückkommt.

Wieso den? Kann der Befehl ls korrigiert werden, um reaktionsschneller zu sein?

Akzeptierte Antwort:

Wenn Sie ls * ausführen , ist das erste, was passiert, dass die Shell eine Auflistung des aktuellen Verzeichnisses erhält. Wenn das Verzeichnis sehr groß und der Server langsam ist, kann dies eine Weile dauern.

Sobald die Shell die Liste der Dateinamen im aktuellen Verzeichnis erhalten hat, sortiert sie diese Liste (was im Vergleich zu jeder Netzwerkinteraktion sehr schnell geht) und ruft dann ls auf . Die ls Der Befehl sucht nacheinander jede Datei und ruft ihre Metadaten ab (stat call), um zu prüfen, ob es sich um ein Verzeichnis handelt; wenn eine Datei ein Verzeichnis ist, ls listet seinen Inhalt statt des Verzeichnisses selbst auf.

Wenn Sie Strg drücken +C , wird der aktuelle NFS-Vorgang dadurch nicht unterbrochen. Sie können eine Dateisystemoperation nicht irgendwo unterbrechen, da dies das System in einen inkonsistenten Zustand versetzen könnte. Selbst das Lesen einer Datei kann ihre Zugriffszeit aktualisieren. Meistens erfolgt ein elementarer Lese- oder Schreibvorgang für eine Datei nach menschlichen Maßstäben sofort, aber NFS ist eine Ausnahme, insbesondere bei großen Datenmengen über ein langsames Netzwerk.

Drücken Sie also Strg +C wird nur wirksam:

  • wenn die Shell gerade die Liste der Dateinamen generiert, wenn diese Liste vollständig abgerufen wurde;
  • wenn ls wurde gestartet und erhält gerade Metadaten über eine Datei, wenn der Server die Metadaten liefert;
  • wenn ls gestartet wurde und gerade ein Verzeichnis auflistet, wenn die Liste vollständig abgerufen ist, oder zumindest nach einem Teil davon.

Es ist nicht die Schuld des ls Befehl (der möglicherweise noch nicht einmal gestartet wurde). Es ist nicht einmal die Schuld der Shell:Es ist die Schuld von NFS. NFS ist ziemlich langsam.


Linux
  1. Warum kann Rm schreibgeschützte Dateien entfernen?

  2. Cat-Dateien mit Verzeichnis?

  3. Verwendung von –exclude mit dem Du-Befehl?

  4. So ändern Sie den Besitz von Dateien und Verzeichnissen mit dem Befehl chown

  5. Dateien können nicht aus dem Verzeichnis entfernt werden mit Fehler „Argumentliste zu lang“

Wie man Dateien in Linux rekursiv auflistet

So zählen Sie Dateien im Verzeichnis unter Linux

Erste Schritte mit dem Tar-Befehl

Grundlagen der Linux-Befehlszeile – Arbeiten mit Dateien und Verzeichnissen

lsof-Befehl unter Linux mit Beispielen

Linux-Comm-Befehl mit Beispielen