ファイルが最後に開かれた時刻を確認し、その時間に基づいてディレクトリ内のすべてのファイルをソートできますか?
答え1
「オープン」が何を意味するかによって異なりますが、通常はそうです。通常、3つのタイムスタンプが記録されます。
mtime
- ファイルの内容が変更されると更新されます。ほとんどの場合、これは「デフォルト」ファイル時間です。ctime
- ファイルが更新されたときまたはメタデータ(所有者、権限)の変更atime
- ファイルを読むときに更新
したがって、一般的に見たいのはatime
ファイルの内容です。stat
またはで得ることができますls
。これにより、これを行うことができますls -lu
。私はこれを使用することを好みますがls -l --time=atime
(ほとんどの現代のLinuxディストリビューションはそれをサポートする必要があります)、頻繁に使用せずに使用するとよりよく覚えることができるからです。そしてタイプ時間が経つと、-t
lsにフラグを追加します。だからそれはすべてです。
しかし、大きな警告があります。ファイルを読むたびに atime を更新すると、しばしば不要な IO が発生し、速度が遅くなります。その結果、ほとんどのLinuxディストリビューションはデフォルトnoatime
でファイルシステムマウントオプションを使用してデフォルトでatimesまたはelseを終了します。relatime
制限を超えた後(通常は1日1回)、またはファイルが最後に読み込まれてから実際に変更された場合にのみ可能です。 。時間が更新されます。コマンドを実行して、これらのオプションが有効になっていることを確認できますmount
。
また、アクセス時間はファイル名ではなく inode ごとに計算されるため、ハードリンクがある場合、そのリンクから読み込むと同じファイルを参照するすべての名前が更新されます。
そして、参考にしてください氏「生成」ではありません。 Unix / Linuxファイルシステムは作成プロセスを追跡しません。これは奇妙に見えますが、実際にはファイルシステムが元のファイルであるかどうかを知る方法がないため、意味があります。ファイルが40年前に作成された可能性があります。ここにコピーしました。実際、多くのファイルエディタは元のファイルのコピーを作成して作業します。その情報が必要な場合git
。
10年後の小規模アップデート:btrfsなどの一部のファイルシステムには4番目のタイムスタンプが含まれています。
birth
、または時には一貫性はありませんが、btime
これは明示的に「ファイル生成タイムスタンプ」です。
...少なくともstatx(2)
システムコールのマニュアルページによると。全体的に文書化がほとんど行われていないようです。最初に除外されたのと同じ問題を抱えています。正確にどういう意味ですか?考慮する:
$ echo > foo; stat foo|grep Birth
Birth: 2022-04-30 02:38:19.084919920 -0400
$ cp foo foo.tmp; mv foo.tmp foo; stat foo|grep Birth
Birth: 2022-04-30 02:39:00.950269045 -0400
ここでは、ファイルを作成して一時ファイルにコピーしてから再度移動します。これにより、「生年」の時間が変わります。そうなんですか?おそらく!これが実際に動作するかどうかはわかりません。少なくとも人間にはそうではありません。しかし、とにかく、完全性のために最新のシステムで利用できるものは次のとおりです。
答え2
ls -ltu
アクセス時間ごとに表示され、ソートされたすべてのファイルを一覧表示します。
からman ls
:
-u with -lt: sort by, and show, access time with -l: show access
time and sort by name otherwise: sort by access time
答え3
このfind
コマンドは、この目的に最適です。-ctime
、-mtime
および-atime
オプションを参照してください。
答え4
次のコマンドは、アクセス時間(atimeなど)に基づいてファイルをソートします。
ls -lt --time atime