ファイルアクセス時間を変更せずにファイル変更時間を変更できますか?
答え1
私は方法を見つけた。私はstat (GNU coreutils) 8.19
ファイルの「アクセス」、「修正」、および「変更」タイムスタンプを表示するためにGNU stat()を使用します。
chmod u+x
ファイル内の「変更された」時間を更新できます。 「変更済み」および「アクセス済み」タイムスタンプは変更されていません。
cat
「Access」ファイルを実行して更新できます。 「変更された」および「変更された」タイムスタンプは変更されていません。
open(filename, O_WRONLY);
私はファイルディスクリプタにシングルバイトを書き、次にclose(filedes);
結果ファイルディスクリプタに書き込む小さなCプログラムを書いています。stat
テーマファイルの「アクセス」タイムスタンプは変更されていませんが、「変更」および「変更」タイムスタンプは更新されたことを示しています。
これはすべて、Ext4ファイルシステムの最近更新されたArch LinuxノートブックLinux 3.5.4で発生します。
小さなCプログラム:
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int
main(int ac, char **av)
{
int fd = open(av[1], O_WRONLY);
if (fd >= 0)
{
char buf[12];
write(fd, buf, 1);
if (close(fd) < 0)
fprintf(stderr, "Problem closing file: %s\n",
strerror(errno));
} else {
fprintf(stderr, "Problem opening \"%s\": %s\n",
av[1], strerror(errno));
}
return 0;
}
答え2
これutime
/utimes
システムコール必要に応じてアクセス時間と変更時間を設定できます。したがって、stat
そのファイルを使用してutime
そのうちの1つだけを変更できます。 ~からマニュアルページ:
名前
utime, utimes - ファイルの最後のアクセスと変更時刻の変更
要約
#include <sys/types.h> #include <utime.h> int utime(const char *filename, const struct utimbuf *times); #include <sys/time.h> int utimes(const char *filename, const struct timeval times[2]);
説明する
utime() システムコールは、filename で指定された inode のアクセス時間と変更時間をそれぞれその時間の actime フィールドと modtime フィールドに変更します。
時間が NULL の場合、ファイルのアクセスおよび変更時間は現在時刻に設定されます。
プロセスに適切な権限がある場合、有効なユーザーIDがファイルのユーザーIDと等しい、またはtimesがNULLで、プロセスにファイルへの書き込み権限がある場合は、タイムスタンプの変更が許可されます。
[… ]
答え3
プロパティを使用してFSを再マウントし、noatime
ファイルを変更してから再マウントします。
答え4
-m
パラメータが含まれていますtouch
。デフォルトでは、このtouch
コマンドはアクセス時間と変更時間の両方を変更します。を渡したり-a
渡したりすると、指定された-m
時間だけが変更されます。