Warum funktioniert das Sortieren von Dateien nach Zugriffszeit nicht?


12

Ich habe versucht, Befehl zu verwenden ls --time=atime

Es funktionierte in einem Verzeichnis, aber nicht in einem anderen Verzeichnis. Ich habe bestimmte Dateien in vim, evince und anderen Anwendungen geöffnet, aber nach dem Befehl wurden die Dateizugriffszeiten nicht geändert.

Wenn ich tippe, wird touch file.txtdie Zugriffszeit geändert, aber wenn ich tippe, wird vim file.txtdie Zugriffszeit nicht geändert.

Was ist hier falsch?


Welches Betriebssystem verwenden Sie? Viele moderne Linux-Distributionen werden sofort ausgeschaltet. In neueren Linux-Kerneln ist es standardmäßig deaktiviert.
Gilles 'SO- hör auf, böse zu sein'

Ich verwende Ubuntu 10.04.
Xralf

Was machst du nach dem Laufen vim file.txt? Kündigst du vim von :qoder :wq? Wenn Sie nicht schreiben, vimwird die Zugriffszeit der Datei nicht geändert - dies ist beabsichtigt.
Rozcietrzewiacz

Jetzt habe ich weniger Dateien im Verzeichnis und die Zugriffszeiten werden mit vim geändert, und ich muss die Datei nicht bearbeiten, aber wenn ich eine Datei mit der .jpgErweiterung öffne, wird sie nicht geändert. Wenn ich es im Bildbetrachter öffne, wird es auch nicht geändert. Ich muss die Zugriffszeit jedes Mal ändern, wenn die Datei von einer Anwendung gelesen wurde.
Xralf

Antworten:


14

Mit den Standard-Einhängeoptionen werden Zugriffszeiten unter Linux auf besondere Weise behandelt:

relatime- Ein Dateisystem-Mount mit dieser Option bewirkt, dass die Zugriffszeit aktualisiert wird, wenn sie (vor dem Update) vor der Änderungszeit liegen. Dadurch werden die Schreibvorgänge aufgrund von Zeitaktualisierungen erheblich reduziert.

Die relatimeMount-Option wurde seit Linux-Kernel 2.6.30 zur Standardoption gemacht . Das ist der Grund, warum Sie ls --time=atimenicht das auflisten, was Sie erwarten.

Lösung: Um ein striktes (altes) Verhalten für eine bestimmte Zeit zu verwenden, verwenden Sie diestrictatimeOption mount (z/etc/fstab.B. in).

Hinweis: Um atime-Updates vollständig zu deaktivieren, können Sie verwenden noatime.


Das hat geholfen. Vielen Dank. Wie viel langsamer wird das System sein strictatime?
Xralf

atime-Uptades sind recht kostspielig (ein geplanter Datenträgerzugriff zum Aktualisieren der Inodes bei jedem Zugriff auf den Dateiinhalt). Insbesondere wenn viele kleine Dateien betroffen sind, können zeitgesteuerte Aktualisierungen die Datenträgerlast verdoppeln. Meistens möchten Programme, die auf Zugriffszeiten angewiesen sind, nur prüfen, ob atime> mtime ist oder nicht. Die neue Standardoption erhält also relatimedie Kompatibilität für diese Programme. Tatsächlich verlassen sich nur noch sehr wenige Programme darauf, und die Verwendung ist häufig sicher noatime.
Stéphane Gimenez

Ich mag die strictatimeFunktion, wie ich sie heute versuche, aber wenn sie das System verlangsamt, möchte ich sie strictatimenur in bestimmten Verzeichnissen einstellen , wenn dies möglich ist.
Xralf

1
In der Praxis ist es höchstens 1% oder 2% langsamer, möglicherweise bis zu 5% auf einem Server mit hoher Festplattenlast. Nun, wenn Sie sich wirklich für die Leistung interessieren, ist es möglich, Zeitaktualisierungen auf ein bestimmtes Verzeichnis zu beschränken, indem Sie eine dedizierte fs verwenden, die mit strictatimediesem Verzeichnis als Einhängepunkt gemountet wird.
Stéphane Gimenez

2

Sie können die Zugriffszeiterfassung für einige Dateisysteme deaktivieren (suchen Sie nach noatimein /etc/fstab). Um dies zu testen, können Sie es versuchen touch -a file; ls -l --time=atime fileund dann wiederholen, touch -a file; ls -l --time=atime fileum festzustellen, ob es sich ändert.

Das lsVerhalten wird erklärt durch man ls: ls -l --time=atimeZeigt die Zugriffszeit in der Spalte Datum / Uhrzeit an. Um nach diesem Schlüssel zu sortieren, müssen Sie ebenfalls verwenden --sort=time.

Wenn Sie mit "Die Zeit wird nicht geändert" meinen, dass es das gleiche Ergebnis zeigt, liegt das entweder daran, dass atime für das Dateisystem deaktiviert ist (siehe /etc/fstab) oder dass die Zugriffszeit tatsächlich mit der Änderungszeit übereinstimmt (ziemlich häufig).

Beachten Sie, dass das Auflisten von Dateien ihre Zugriffszeit nicht ändert. Auf die Dateien lswird nur über den Inode-Cache zugegriffen .


Wenn ich ls -l --time=atimetippe, wird die Uhrzeit nicht geändert (ich gehe davon aus, dass die Spalte mit der Uhrzeit aktuell ist), und die Sortierreihenfolge wird nicht geändert. Die Dateien mit der letzten Uhrzeit sollten am Anfang oder am Ende der Liste stehen (sofern zuletzt auf sie zugegriffen wurde) ).
Xralf

@xralf Hast du beide touch und wiederholt ls? Ich habe die Antwort bearbeitet, um sie deutlicher zu machen.
rozcietrzewiacz

Wenn ich touch file.txt eingebe, wird die Zugriffszeit geändert, aber wenn ich vim file.txt eingebe, wird die Zugriffszeit nicht geändert.
Xralf

1

Bei solchen Tests kann es auch nützlich sein, das --full-timeFlag lsso hinzuzufügen , dass Sie Sekunden und Teilsekunden sehen, damit Sie den Effekt sehen können, ohne durch Minutengrenzen eingeschränkt zu sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.