アクセス時間でファイルをソートできないのはなぜですか?


12

私はコマンドを使用しようとしました ls --time=atime

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

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

ここで何が間違っていますか?


どのOSを実行していますか?最近のLinuxディストリビューションの多くは、一時的に停止します。最近のLinuxカーネルではデフォルトでオフになっています。
ジル 'SO-悪であるのをやめる'

Ubuntu 10.04を実行しています。
xralf

走った後はどうしますvim file.txtか?:qまたはでvimを終了しますか:wq?記述vimしない場合、ファイルのアクセス時間は変更されません-これは仕様によるものです。
-rozcietrzewiacz

ディレクトリ内のファイルが少なくなり、アクセス時間はvimで変更され、ファイルを編集する必要はありませんが、.jpg拡張子を付けてファイルを開いても変更されません。イメージビューアーで開いても、変更されません。ファイルが何らかのアプリケーションによって読み取られるたびにアクセス時間を変更する必要があります。
xralf

回答:


14

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

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

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

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

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


これは助けた。ありがとうございました。システムはどのくらい遅くなりstrictatimeますか?
xralf

atimeの更新は非常にコストがかかります(ファイルの内容にアクセスするたびにiノードを更新するための1つのスケジュールされたディスクアクセス)。特に、多数の小さなファイルが関係している場合、atimeの更新によりディスクの負荷が2倍になる可能性があります。ほとんどの場合、アクセス時間に依存しているプログラムは、atime> mtimeかどうかのみをチェックします。そのため、新しいデフォルトオプションはrelatime、これらのプログラムの互換性を保持します。実際、これに依存しているプログラムはまだほとんどなく、を使用しても安全noatimeです。
ステファンギメネス

strictatime今日はこの機能を試してみて気に入っていますが、システムが遅くstrictatimeなる場合は、可能であれば特定のディレクトリにのみ設定したいと思います。
xralf

1
実際には、最大で1%または2%遅くなりますが、ディスク負荷が高いサーバーでは最大5%遅くなります。まあ、本当にパフォーマンスに関心がstrictatimeあるなら、このディレクトリをマウントポイントとして使用する専用のfsをマウントして、特定のディレクトリへのatime更新を制限することができます。
ステファンギメネス

2

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

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

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

ファイルを一覧表示してアクセス時間変更されないことに注意してください。ファイルにはiノードキャッシュlsのみがアクセスします。


ls -l --time=atime時間を入力せず(時間のある列がatimeであると想定)、並べ替え順序が変更されない場合、最後のatimeのファイルはリストの先頭または末尾にある必要があります(最後にアクセスした場合) )。
-xralf

@xralf との両方 を繰り返しましたか?答えを編集して、より明確にしました。touchls
rozcietrzewiacz

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

1

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.