Каково время доступа в Unix

Я хочу знать, каково время доступа. Я искал в сети, но получил то же определение:

читайте - изменяется

Я знаю с touch мы можем изменить его. Кто-либо мог объяснить меня больше об этом с примером, как это изменяется? И есть ли способ получить дату/время создания в Unix?

10
задан inetphantom 22 September 2018 в 05:11
поделиться

2 ответа

Структура stat (2) отслеживает дату / время всех файлов:

       struct stat {
           dev_t     st_dev;     /* ID of device containing file */
           ino_t     st_ino;     /* inode number */
           mode_t    st_mode;    /* protection */
           nlink_t   st_nlink;   /* number of hard links */
           uid_t     st_uid;     /* user ID of owner */
           gid_t     st_gid;     /* group ID of owner */
           dev_t     st_rdev;    /* device ID (if special file) */
           off_t     st_size;    /* total size, in bytes */
           blksize_t st_blksize; /* blocksize for file system I/O */
           blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
           time_t    st_atime;   /* time of last access */
           time_t    st_mtime;   /* time of last modification */
           time_t    st_ctime;   /* time of last status change */
       };

st_atime - время доступа , обновляется при вызовах read (2) (и, вероятно, также, когда open (2) открывает файл для чтения) - он НЕ обновляется, когда файлы читаются через mmap ( 2) . (Вот почему я предполагаю, что open (2) будет отмечать время доступа.)

st_mtime - это время изменения данных либо через write (2 ) или truncate (2) или open (2) для записи. (Опять же, он НЕ обновляется, когда файлы записываются через mmap (2) .)

st_ctime - время модификации метаданных : когда любые другие данные в структура struct stat изменяется.

Вы можете изменить временные метки файлов с помощью utime (2) :

       struct utimbuf {
           time_t actime;       /* access time */
           time_t modtime;      /* modification time */
       };

Обратите внимание, что вы можете изменять только время доступа и время модификации (данных).Вы можете установить любое из них на произвольное время, но для ctime будет установлено текущее время, потому что вы изменили метаданные для файла.

В этой структуре нет времени на создание, поэтому невозможно узнать, когда файл был создан непосредственно из системы.

Если вам действительно нужно знать время создания, вы можете сузить его до диапазона, просмотрев свои резервные копии - при условии, что файл, который вас интересует, был зарезервирован вместе с его метаданными.

22
ответ дан 3 December 2019 в 14:10
поделиться
  • последний доступ: Время последнего обращения к данным файла. Изменяется системными вызовами mknod(2), utimes(2) и read(2).

  • last modified: Время последнего изменения данных файла. Изменяется системными вызовами mknod(2), utimes(2) и write(2).

  • last changed: Время последнего изменения статуса файла (модификация данных inode). Изменяется системными вызовами chmod(2), chown(2), link(2), mknod(2), rename(2), unlink(2), utimes(2) и write(2).

18
ответ дан 3 December 2019 в 14:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: