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);
それはすべてです。