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

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

10 голосов
/ 02 августа 2010

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

прочитано - меняется

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

Ответы [ 4 ]

22 голосов
/ 02 августа 2010

Структура 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 - это data время модификации, либо через 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 будет установлено на текущее время - потому что вы изменили метаданные для файла.

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

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

17 голосов
/ 02 августа 2010
  • последний доступ: время последнего доступа к данным файла.Изменено системными вызовами mknod (2), utimes (2) и read (2).

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

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

1 голос
/ 25 ноября 2014

Вопреки приведенному выше ответу, дата создания или фактического «рождения» сохраняется и может быть доступна, см. https://unix.stackexchange.com/a/50184/8250 (отладка должна выполняться в sudo)

0 голосов
/ 22 декабря 2013

среднее время между запросом информации, хранящейся в конкретном компоненте, таком как жесткий диск или оперативная память, и его доставкойС другой стороны, время между запросом на чтение и желаемым словом.Например, 235 288 единиц / 13,82 транзакций = 16,8 единиц за транзакцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...