mvコマンドを使用してファイル名を変更すると、inodeの「変更された」日付と時刻が変更されるのはなぜですか?

mvコマンドを使用してファイル名を変更すると、inodeの「変更された」日付と時刻が変更されるのはなぜですか?

hello.c ファイルの名前は hi.c に変更されます。 statコマンドの出力に示すように、[change]タイムスタンプが変更されました。通常、ファイルのinodeが変更されると、対応するiノードも変更されます。 mvコマンドで名前を変更すると、inodeの内容が変更され、実際に変更されるプロパティは何ですか?

xyz@linuxPC:~/Documents$ stat hello.c
 File: ‘hello.c’
 Size: 568          Blocks: 8          IO Block: 4096   regular file
Device: 809h/2057d  Inode: 261889      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/ xyz)   Gid: ( 1000/ xyz)
Access: 2015-04-22 19:54:34.889330399 +0530
Modify: 2015-04-22 19:54:34.241330427 +0530
Change: 2015-06-21 15:46:45.365465523 +0530
Birth: -
xyz@linuxPC:~/Documents$ mv hello.c hi.c
xyz@linuxPC:~/Documents$ stat hi.c 
 File: ‘hi.c’
 Size: 568          Blocks: 8          IO Block: 4096   regular file
Device: 809h/2057d  Inode: 261889      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/ xyz)   Gid: ( 1000/ xyz)
Access: 2015-04-22 19:54:34.889330399 +0530
Modify: 2015-04-22 19:54:34.241330427 +0530
Change: 2015-06-21 15:48:23.361469822 +0530
Birth: -

ベストアンサー1

私も興味があり、ちょっと探してみました。最初は、ノードが2つのリンクを取得した後、元のリンクが削除され、ctimeが意図的な作業ではなく、事故に近い一種の副作用であることがわかりました。

誰かがわからない場合、ファイルは次のものを含むinodeとして表示されます。何もない名前についてです。 inode はハードリンクカウンタによって得られた名前の数を「知っています」が、その名前が何であるか、その名前がどのディレクトリにあるかについての手がかりはありません。

それからPOSIX(http://pubs.opengroup.org/onlinepubs/009695399/functions/rename.html):

いくつかの実装では、名前が変更されたファイルを更新するためにst_ctimeフィールドを表示し、一部はそうではありません。 st_ctimeフィールドを使用するアプリケーションは、両方の動作を許可するように設計されていない場合は、名前が変更されたファイルとは異なる動作をする可能性があります。

および実装例(http://lxr.free-electrons.com/source/fs/xfs/xfs_inode.c#L2985):

/*
 * We always want to hit the ctime on the source inode.
 *
 * This isn't strictly required by the standards since the source
 * inode isn't really being changed, but old unix file systems did
 * it and some incremental backup programs won't work without it.
 */
xfs_trans_ichgtime(tp, src_ip, XFS_ICHGTIME_CHG);

それはすべてです。

おすすめ記事