ファイルのタイムスタンプについての理解、続きです。
ファイルの新規作成は、Access/Modify/Changeすべて同じ時間になりましたね。まあ、新規作成なので、そうなりますね。
takk@deb9:~/tmp$ ls takk@deb9:~/tmp$ echo HELLO >a takk@deb9:~/tmp$ stat a File: a Size: 6 Blocks: 8 IO Block: 4096 通常ファイル Device: 801h/2049d Inode: 546991 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-14 20:43:16.936000000 +0900 Modify: 2018-06-14 20:43:16.936000000 +0900 Change: 2018-06-14 20:43:16.936000000 +0900 Birth: - takk@deb9:~/tmp$
さきほど作成したファイルを別のデータで上書きすると、
takk@deb9:~/tmp$ echo HELLO2 >a takk@deb9:~/tmp$ stat a File: a Size: 7 Blocks: 8 IO Block: 4096 通常ファイル Device: 801h/2049d Inode: 546991 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-14 20:43:16.936000000 +0900 Modify: 2018-06-14 20:44:02.688000000 +0900 Change: 2018-06-14 20:44:02.688000000 +0900 Birth: - takk@deb9:~/tmp$
Modify/Changeのみが更新されます。
ちょっと分かりづらいので、statコマンドの差分が分かるようにbash関数を組んでみます。
takk@deb9:~/tmp$ s(){ > stat $1 | diff - /tmp/stat.$1 > stat $1 >/tmp/stat.$1 > } takk@deb9:~/tmp$
sという関数を作成しました。
前回sを実行した時のstatの差分を表示します。
ですので、1番最初は、このようにエラーがでますが。
takk@deb9:~/tmp$ s a diff: /tmp/stat.a: そのようなファイルやディレクトリはありません takk@deb9:~/tmp$
1回目以降は、差分がでます。当然今は差分がないので何も表示されません。
takk@deb9:~/tmp$ s a
では、ファイルを別のデータで更新してみます。
takk@deb9:~/tmp$ echo HELLO >a
sで確認。
takk@deb9:~/tmp$ s a 2c2 < Size: 6 Blocks: 8 IO Block: 4096 通常ファイル --- > Size: 7 Blocks: 8 IO Block: 4096 通常ファイル 6,7c6,7 < Modify: 2018-06-14 20:46:44.552000000 +0900 < Change: 2018-06-14 20:46:44.552000000 +0900 --- > Modify: 2018-06-14 20:44:02.688000000 +0900 > Change: 2018-06-14 20:44:02.688000000 +0900 takk@deb9:~/tmp$
HELLO2がHELLOになったので、Sizeが更新されたのと、
ファイルの内容が更新されたので、Modify/Changeが更新されました。
次はファイルのリード。catでファイルの中身を閲覧した後に、sコマンド。
takk@deb9:~/tmp$ cat a HELLO takk@deb9:~/tmp$ s a 5c5 < Access: 2018-06-14 20:47:19.856000000 +0900 --- > Access: 2018-06-14 20:43:16.936000000 +0900 takk@deb9:~/tmp$
Accessのみ更新されました。
次は、ファイルの追記。元々あるデータを更新するのではなく、追記です。
どうなるでしょうか。
takk@deb9:~/tmp$ echo HELLO2 >>a takk@deb9:~/tmp$ s a 2c2 < Size: 13 Blocks: 8 IO Block: 4096 通常ファイル --- > Size: 6 Blocks: 8 IO Block: 4096 通常ファイル 6,7c6,7 < Modify: 2018-06-14 20:47:55.256000000 +0900 < Change: 2018-06-14 20:47:55.256000000 +0900 --- > Modify: 2018-06-14 20:46:44.552000000 +0900 > Change: 2018-06-14 20:46:44.552000000 +0900 takk@deb9:~/tmp$
Sizeと、Modify/Changeが更新されました。
ファイルのデータが更新されたら、とにかくModify/Changeされるんですね。
次はファイルコピー。
コピー元は、データが読み込みされるわけなので、Accessが更新されて、
コピー先は、新規ファイルなので、Access/Modify/Changeが新規時間ですよね。
takk@deb9:~/tmp$ cp a b takk@deb9:~/tmp$ s a 5c5 < Access: 2018-06-14 20:48:37.280000000 +0900 --- > Access: 2018-06-14 20:47:19.856000000 +0900 takk@deb9:~/tmp$
コピー元は、正解。Access日時だけ更新。
コピー先は、
takk@deb9:~/tmp$ s b diff: /tmp/stat.b: そのようなファイルやディレクトリはありません
oops。忘れてました。新規ファイルなので前回差分が取れません。
仕方ないので、statを実行します。
takk@deb9:~/tmp$ stat b File: b Size: 13 Blocks: 8 IO Block: 4096 通常ファイル Device: 801h/2049d Inode: 546994 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-14 20:48:37.280000000 +0900 Modify: 2018-06-14 20:48:37.280000000 +0900 Change: 2018-06-14 20:48:37.280000000 +0900 Birth: - takk@deb9:~/tmp$
正解。Access/Modify/Changeが新規日時、コピー元ファイルのAccessと同じ時間ですね。
次は、ファイル名の変更です。
takk@deb9:~/tmp$ mv b c takk@deb9:~/tmp$ stat c File: c Size: 13 Blocks: 8 IO Block: 4096 通常ファイル Device: 801h/2049d Inode: 546994 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ takk) Gid: ( 1000/ takk) Access: 2018-06-14 20:48:37.280000000 +0900 Modify: 2018-06-14 20:48:37.280000000 +0900 Change: 2018-06-14 20:51:03.168000000 +0900 Birth: - takk@deb9:~/tmp$
Changeだけの更新ですね。
コメント