파일 접근 시간을 변경하지 않고 파일 수정 시간을 변경할 수 있나요?
답변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
그 중 하나만 변경할 수 있습니다. ~에서매뉴얼 페이지:
이름
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
지정된 시간만 수정됩니다.