web-dev-qa-db-ja.com

アクセス時間によるファイルの並べ替えが機能しないのはなぜですか?

コマンドls --time=atimeを使おうとしました

あるディレクトリでは機能していましたが、別のディレクトリでは機能していませんでした。 vim、evince、その他のアプリケーションで特定のファイルを開きましたが、コマンドファイルのアクセス時間は変更されませんでした。

touch file.txtと入力するとアクセス時間が変更されますが、vim file.txtと入力するとアクセス時間が変更されません。

ここで何が問題になっていますか?

12
xralf

デフォルトのマウントオプションを使用すると、Linuxではアクセス時間が特別な方法で処理されます。

relatime–このオプションを使用したファイルシステムのマウントにより、アクセス時間が(更新が行われる前に)より早い場合に更新されます。変更時間。これにより、時間の更新によって発生する書き込みが大幅に削減されます。

relatimeマウントオプションがデフォルトオプションになりました 以降 Linuxカーネル2.6.30。それがls --time=atimeがあなたが期待するものをリストしていない理由です。

解決策:atimeに厳密な(レガシー)動作を使用するには、strictatimeマウントオプション(例:/etc/fstab)。

注:時間更新を完全に無効にするには、noatimeを使用できます。

14

一部のファイルシステムでは、アクセス時間の記録をオフにすることができます(/etc/fstabnoatimeを探します)。これをテストするには、touch -a file; ls -l --time=atime fileを試してから、touch -a file; ls -l --time=atime fileを繰り返して変更されるかどうかを確認します。

lsの動作はman lsによって説明されます。ls -l --time=atimeは、日付/時刻列にアクセス時間を示します。このキーで並べ替えるには、--sort=timeも使用する必要があります。

「時刻が変更されていない」とは、同じ結果が表示されることを意味します。これは、ファイルシステムでatimeが無効になっているため(/etc/fstabを参照)、またはアクセス時刻が実際には変更時刻と同じであるためです。 (非常に一般的)。

listingファイルはnotアクセス時間を変更しないことに注意してください-ファイルはlsからはアクセスされず、 inodeキャッシュ のみがアクセスされます。

2
l0b0

このようにテストする場合は、--full-timeフラグをlsに追加して秒とサブ秒を確認し、分単位の境界に制約されることなく効果を確認できるようにすることも役立ちます。

1
ssb