파일이 언제 수정되고 액세스되었습니까?

파일이 언제 수정되고 액세스되었습니까?

파일 접근 시간을 변경하지 않고 파일 수정 시간을 변경할 수 있나요?

답변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지정된 시간만 수정됩니다.

관련 정보