ファイル名を書き換えてもLinuxのタイムスタンプが変わらない


調べたのでメモ

ファイル名を書き換える

17:28 $ls -l
合計 4
-rw-rw-r--. 1 vagrant vagrant 4 12月  8 17:28 2017 hoge

17:29 $mv höge fuga

17:29 $ls -l
合計 4
-rw-rw-r--. 1 vagrant vagrant 4 12月  8 17:28 2017 fuga

17:28にファイルを作成、17:29にファイル名を変更しても
タイムスタンプは17:28のまま

理由は以下のとおり

Linuxのタイムスタンプ3種類

Linuxのタイムスタンプには以下の3つがある

  • atime ファイルを最後に読み込んだ時刻
  • mtime ファイルに最後に書き込みした時刻
  • ctime ファイルステータスを最後に変更した時刻

"ls -l"で表示されるのはmtimeである。
そしてファイル名変更は「ファイルへの書き込み」ではなく「ファイルステータスの変更」に当たるため、mtimeは更新されなかった

ctimeを表示すると

cオプションでタイムスタンプをctimeに

17:47 $ls -lc
合計 4
-rw-rw-r--. 1 vagrant vagrant 4 12月  8 17:47 2017 hoge

17:48 $mv hoge fuga

17:48 $ls -lc
合計 4
-rw-rw-r--. 1 vagrant vagrant 4 12月  8 17:48 2017 fuga

このように、ctimeはファイル名変更で更新されていることがわかる

参考