ファイルとその親ディレクトリのatime、mtime、またはctimeを変更しますか?

ファイルとその親ディレクトリのatime、mtime、またはctimeを変更しますか?

ファイルのatime、mtime、またはctimeを変更すると、どのような影響がありますか?

  • 親ディレクトリのatime、mtime、またはctime、
  • 親ディレクトリのatime、mtime、またはctime?

答え1

を使用すると、この情報を簡単に取得できますstat。親ディレクトリの場合、以下を見るとファイルが変更されたかどうかを簡単に確認でき、「階層の上」には影響しません/

root@pooh:/home/anthon-mint# stat /
  File: ‘/’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 804h/2052d  Inode: 2           Links: 30
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-02-22 09:57:14.028146463 +0100
Modify: 2015-01-01 10:34:05.528461374 +0100
Change: 2015-01-01 10:34:05.528461374 +0100
 Birth: -

システムは常にファイルを変更するため、この値は現在時刻に近づく必要があります。

新しいディレクトリを作成してからファイルを作成すると、ディレクトリのアクセス時間と変更時間が変わります。

$ mkdir tmp
$ stat tmp
  File: ‘tmp’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 700h/1792d  Inode: 144141      Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1001/  anthon)   Gid: (  100/   users)
Access: 2015-02-27 16:19:02.523585508 +0100
Modify: 2015-02-27 16:19:02.523585508 +0100
Change: 2015-02-27 16:19:02.523585508 +0100
 Birth: -
$ touch tmp/bla
$ stat tmp
  File: ‘tmp’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 700h/1792d  Inode: 144141      Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1001/  anthon)   Gid: (  100/   users)
Access: 2015-02-27 16:19:02.523585508 +0100
Modify: 2015-02-27 16:19:18.639585445 +0100
Change: 2015-02-27 16:19:18.639585445 +0100
 Birth: -

アクセス時間は変更されませんが、新しいファイルを作成すると変更および変更時間が変更されます。

次に、ファイルをもう一度タッチします。

$ touch tmp/bla
$ stat tmp
  File: ‘tmp’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 700h/1792d  Inode: 144141      Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1001/  anthon)   Gid: (  100/   users)
Access: 2015-02-27 16:19:02.523585508 +0100
Modify: 2015-02-27 16:19:18.639585445 +0100
Change: 2015-02-27 16:19:18.639585445 +0100
 Birth: -
$ 

ディレクトリは変更されませんが、新しいファイルは生成されないため、ディレクトリ情報は変更されません。

オブジェクトの mtime、atime、または ctime の変更既存ファイル含まれているディレクトリやそのディレクトリの親ディレクトリには影響しません。

答え2

ファイルの inode がまだキャッシュにない場合は、最大ディレクトリの atime(アクセス時間)フィールドが更新されます。ただし、最新のLinuxカーネルのデフォルト設定は、relatimeこのフラグを使用してファイルシステムをマウントすることです。つまり、変更時間(mtime)以降にファイルまたはディレクトリにアクセスし、現在のatimeがmtimeより前の場合にのみatimeが更新されるという意味です。

mtime(変更時間)は、ファイル(またはディレクトリまたは他のエントリ)が削除された、名前が変更された、追加された、またはディレクトリ名が変更(移動)されるなど、ディレクトリが実際に変更されたときにのみ更新されます。

ディレクトリinodeの内容が変更されるたびに、権限、所有者、mtimeを含むctime(inode変更時間)が変更されます。

関連情報