Soweit ich weiß, ls
ruft der Befehl auf getdents
, der bis zu x Verzeichniseinträge zurückgibt. Sind andere Systemaufrufe beteiligt? Wenn ich laufe ls -l
, gibt es weitere Systemaufrufe? Ich versuche festzustellen, ob ls -l
es teurer und damit langsamer als ist ls
.
ls
system-calls
user100503
quelle
quelle
strace ls
undstrace ls -l
anzeigen.ls
es nicht für die Automatisierung vorgesehen ist, gibt es immer effizientere und sicherere Möglichkeiten, das Dateisystem für Programmierzwecke zu beleuchten.Antworten:
/bin/ls
sortiert normalerweise die Ausgabe. Ich bin mir nicht sicher, ob Ihre "effiziente" Frage nur über Systemaufrufe oder die gesamte geleistete Arbeit gestellt wird,/bin/ls -f
würde aber wahrscheinlich die geringste Arbeit leisten. Es werden nur die Dateinamen in Verzeichnisreihenfolge zurückgegeben. Keine Sortierung, keine zusätzlichen Inode-Lookups, um Metadaten zu erhalten (wiels -l
es der Fall wäre).Wenn Ihre Standardeinstellung "
ls
Kolorieren" ist, entspricht dies möglicherweisels -l
ohnehin dem Äquivalent, damit festgestellt werden kann, wie die Ausgabe gefärbt wird.quelle
ls -l
führtstat
für jede einzelne Datei eine aus. Für jede Datei sind Inodes erforderlich, um Informationen wie Größe, Berechtigung oder Anzahl der festen Links zu erhalten.ls -l
ist definitiv teurer, da das Dateisystem nach Metadaten wie Eigentümer, Gruppe, Berechtigungen, Zugriffszeit usw. abgefragt werden muss. Vanilla muss/bin/ls
nur die Namen der Einträge in dem aufgelisteten Verzeichnis nachschlagen .Beachten Sie, dass
ls
auf Ihrem System möglicherweise ein Alias für etwas weniger Vanille als vorhanden ist/bin/ls
. Laufen Sie, umtype ls
zu sehen, ob dies der Fall ist.quelle
find
verbringt die Manpage einige Zeit damit, über effiziente oder ineffiziente Suchvorgänge zu sprechen. Suchen, die nur Dateinamen betrachten, sind weitaus effizienter.