コマンドls --time=atime
を使おうとしました
あるディレクトリでは機能していましたが、別のディレクトリでは機能していませんでした。 vim、evince、その他のアプリケーションで特定のファイルを開きましたが、コマンドファイルのアクセス時間は変更されませんでした。
touch file.txt
と入力するとアクセス時間が変更されますが、vim file.txt
と入力するとアクセス時間が変更されません。
ここで何が問題になっていますか?
デフォルトのマウントオプションを使用すると、Linuxではアクセス時間が特別な方法で処理されます。
relatime
–このオプションを使用したファイルシステムのマウントにより、アクセス時間が(更新が行われる前に)より早い場合に更新されます。変更時間。これにより、時間の更新によって発生する書き込みが大幅に削減されます。
relatime
マウントオプションがデフォルトオプションになりました 以降 Linuxカーネル2.6.30。それがls --time=atime
があなたが期待するものをリストしていない理由です。
解決策:atimeに厳密な(レガシー)動作を使用するには、strictatime
マウントオプション(例:/etc/fstab
)。
注:時間更新を完全に無効にするには、noatime
を使用できます。
一部のファイルシステムでは、アクセス時間の記録をオフにすることができます(/etc/fstab
でnoatime
を探します)。これをテストするには、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キャッシュ のみがアクセスされます。
このようにテストする場合は、--full-time
フラグをls
に追加して秒とサブ秒を確認し、分単位の境界に制約されることなく効果を確認できるようにすることも役立ちます。