Pourquoi le tri des fichiers par temps d'accès ne fonctionne-t-il pas?

12

J'ai essayé d'utiliser la commande ls --time=atime

il fonctionnait dans un répertoire mais ne fonctionnait pas dans un autre répertoire. J'ai ouvert certains fichiers dans vim, evince et d'autres applications mais après la commande, les temps d'accès au fichier n'ont pas été modifiés.

Lorsque je tape, touch file.txtle temps d'accès est modifié, mais lorsque je tape, vim file.txtle temps d'accès n'est pas modifié.

Qu'est-ce qui ne va pas ici?

xralf
la source
Quel système d'exploitation utilisez-vous? De nombreuses distributions Linux modernes se désactivent à temps; il est désactivé par défaut dans les noyaux Linux récents.
Gilles 'SO- arrête d'être méchant'
J'utilise Ubuntu 10.04.
xralf
Que faites-vous après avoir couru vim file.txt? Quittez-vous vim par :qou :wq? Si vous n'écrivez pas, vimne modifie pas le temps d'accès au fichier - c'est par conception.
rozcietrzewiacz
Maintenant, j'ai moins de fichiers dans le répertoire et les temps d'accès sont modifiés avec vim et je n'ai pas besoin de modifier le fichier, mais lorsque j'ouvre un fichier avec l' .jpgextension, il n'est pas modifié. Lorsque je l'ouvre dans la visionneuse d'images, cela n'a pas changé non plus. J'ai besoin que le temps d'accès soit modifié à chaque fois que le fichier a été lu par une application.
xralf

Réponses:

14

Avec les options de montage par défaut, les temps d'accès sont traités d'une manière spéciale sur Linux:

relatime- Un montage de système de fichiers avec cette option entraîne la mise à jour du temps d'accès s'ils sont (avant la mise à jour) antérieurs à l'heure de modification. Cela réduit considérablement les écritures causées par les mises à jour atime.

L' relatimeoption de montage est devenue l' option par défaut depuis le noyau linux 2.6.30. C'est la raison de ls --time=atimene pas lister ce que vous attendez.

Solution: Pour utiliser un comportement strict (hérité) pour atime, utilisez l'strictatimeoption de montage (par exemple dans/etc/fstab).

Remarque: Pour désactiver complètement les mises à jour atime, on peut utiliser noatime.

Stéphane Gimenez
la source
Cela a aidé. Je vous remercie. Dans quelle mesure le système sera-t-il plus lent strictatime?
xralf
Les mises à jour atime sont assez coûteuses (un accès disque planifié pour mettre à jour les inodes à chaque accès au contenu de leur fichier). En particulier, si de nombreux petits fichiers sont impliqués, les mises à jour atime peuvent doubler la charge du disque. La plupart du temps, les programmes qui dépendent des temps d'accès ne veulent que vérifier si atime> mtime ou non. Ainsi, la nouvelle option par défaut relatimepréserve la compatibilité de ces programmes. En fait, très peu de programmes en dépendent encore, et son utilisation est souvent sûre noatime.
Stéphane Gimenez
J'aime la strictatimefonctionnalité telle que je l'essaie aujourd'hui, mais si elle ralentit le système, je voudrais la définir strictatimeuniquement dans certains répertoires, si cela est possible.
xralf
1
Eh bien, en pratique, c'est au plus 1% ou 2% plus lent, peut-être jusqu'à 5% sur un serveur avec une charge de disque élevée. Eh bien, si vous vous souciez vraiment des performances, il est possible de restreindre les mises à jour atime à un répertoire spécifique en utilisant un fs dédié monté avec strictatimequi utiliserait ce répertoire comme point de montage.
Stéphane Gimenez le
2

Vous pouvez désactiver l'enregistrement du temps d'accès pour certains systèmes de fichiers (recherchez noatimedans /etc/fstab). Pour tester cela, vous pouvez essayer touch -a file; ls -l --time=atime file, puis répéter touch -a file; ls -l --time=atime filepour voir si cela change.

Le lscomportement est expliqué par man ls: ls -l --time=atimeaffiche l'heure d'accès dans la colonne date / heure. Pour trier par cette clé, vous devez également utiliser --sort=time.

Si vous par "l'heure n'est pas modifiée" signifie qu'il montre le même résultat, c'est parce que atime est désactivé pour le système de fichiers (voir /etc/fstab) ou parce que l'heure d'accès est vraiment la même que l'heure de modification (assez courante).

Notez que la liste des fichiers ne modifie pas leur temps d'accès - Les fichiers ne sont pas accessibles par ls, uniquement le cache d'inode .

l0b0
la source
Lorsque je tape ls -l --time=atimel'heure n'est pas modifiée (je suppose que la colonne avec l'heure est atime) et que l'ordre de tri n'est pas modifié, les fichiers avec la dernière heure doivent être au début ou à la fin de la liste (s'ils ont été accédés pour la dernière fois ).
xralf
@xralf Avez-vous répété les deux touch et ls? J'ai édité la réponse pour la rendre plus évidente.
rozcietrzewiacz
Lorsque je tape touch file.txt, l'heure d'accès est modifiée, mais lorsque je tape vim file.txt, l'heure d'accès n'est pas modifiée.
xralf
1

Il peut également être utile lors de tests comme celui-ci d'ajouter l' --full-timeindicateur à lsafin que vous puissiez voir les secondes et les sous-secondes afin de pouvoir voir l'effet sans être contraint par des limites de minutes.

ssb
la source