Ich vermute, dass Sie Linux verwenden.
Wenn Ihr
ls
Befehl so gestaltet ist, dass Dateien und Ordner in Farbe angezeigt werden, muss er die Berechtigungen jedes Elements (einen stat () - Aufruf) ermitteln und feststellen, ob er über "Dateifunktionen" (einen getxattr () - Aufruf) verfügt die richtige Farbe wählen. Je nach Dateisystem können diese Aufrufe ziemlich langsam sein, wenn die erforderlichen Metadaten noch nicht im RAM zwischengespeichert wurden. [Erweiterte Attribute leben häufig im Datenbereich, sodass bei jedem getxattr-Ergebnis HDD-Suchvorgänge ausgeführt werden.]Auf der anderen Seite,
ls |
wenn sie auf ein Rohr umgeleitet automatisch deaktiviert Färbung, so dass es nicht mehr irgendwelche zusätzliche Kontrollen tun muss - nur eine einfache readdir () Schleife, die die Dateinamen und Typen zurückgibt, und die Kernel wahrscheinlich sogar Geräte lesen grünes Licht für Das.Normalerweise werden
ls
die Ausgaben in Spalten zusammengefasst. Das bedeutet, dass das gesamte Verzeichnis gelesen werden muss, bevor es überhaupt etwas ausgeben kann. Beim Durchlaufen einer Pipe wird der Spaltenmodus automatisch deaktiviert, und diese Pufferung ist nicht mehr erforderlich. (Die Gesamtlaufzeit ist nicht notwendigerweise schneller, aber die Ausgabe beginnt früher und fühlt sich dadurch schneller an.)
Verwenden Sie strace
oder perf trace
, um zu überprüfen, welche Systemaufrufe, wenn überhaupt, lange dauern.