часова мітка, час модифікації та час створення файлу


105

Я просто це знаю ls -tі ls -fдаю різні сортування файлів і підкаталогів під каталогом.

  • Які відмінності між часовою маркою, часом модифікації та створеним часом файлу?
  • Як отримати та змінити подібну інформацію за допомогою команд?
  • Що стосується того, яку інформацію люди кажуть, що файл "новіший", ніж інший?
  • Які зміни інформації не дозволять файлу відрізнятися?

Наприклад, я бачив, як хтось написав:

За замовчуванням програма rsync лише дивиться, щоб побачити, чи файли відрізняються за розміром та часовою міткою. Не байдуже, який файл новіший, якщо він інший, він перезаписується. Ви можете передати прапор '--update' rsync, що призведе до того, що він може пропустити файли в пункті призначення, якщо вони новіші, ніж файл у вихідному коді, але лише до тих пір, поки вони будуть файлами одного типу. Це означає, що якщо, наприклад, вихідний файл є звичайним файлом, а призначення - символьним посиланням, файл призначення буде перезаписаний незалежно від часової позначки.

Зі сторони, чи означає тут тип файлу лише звичайний файл та simlink, а не тип pdf, jpg, htm, txt тощо?


Дивіться також askubuntu.com/questions/62492/…
rogerdpack

Відповіді:


138

Існує 3 різновиди часових позначок:

  • Доступ - останній раз, коли файл було прочитано
  • Змінити - останній раз, коли файл було змінено (вміст змінено)
  • Змінити - востаннє метадані файлу були змінені (наприклад, дозволи)

Щоб відобразити цю інформацію, ви можете використовувати statчастину основних елементів.

stat покаже вам також додаткову інформацію, як-от пристрій, вставки, посилання тощо.

Пам'ятайте, що така інформація дуже сильно залежить від файлової системи та параметрів монтування. Наприклад, якщо ви змонтуєте розділ з noatimeопцією, інформація про доступ не записується.

Утиліта для зміни часових позначок була б touch. Є кілька аргументів, щоб вирішити, яку часову позначку потрібно змінити (наприклад, -a для часу доступу, -m - час модифікації) та вплинути на розбір нової заданої часової позначки. Докладніше man touchдив.

touchможе стати в нагоді в поєднанні з cp -u( "копіювати лише тоді, коли файл SOURCE новіший, ніж цільовий файл або коли відсутній файл призначення" ) або для створення порожніх файлів з маркерами.


1
Дякую! Для команди rsync в "не байдуже, який файл є новішим", з точки зору того, який тип часової позначки означає це "новіший". Крім того, у бічній примітці, чи означає тип файлу, який турбує rsync, лише звичайний файл та simlink, а не тип, наприклад pdf, jpg, htm, txt тощо?
Тім

2
Зазвичай посиланням на час файлу є "модифікована" мітка часу. Наприклад, те, що ви бачите ls -l. А тип файлу відноситься до файлу відносно посилання (або інших типів файлів, таких як каталоги або пристрої). Не те, який тип даних у файлі (текст проти jpeg тощо).
Сет Л

2
@Tim У цьому контексті це змінена часова марка; rsync говорить про те, що коли він вирішує, чи слід створювати резервну копію файлу, він не перевіряє, чи був змінений вихідний файл нещодавно, ніж існуючий режим резервного копіювання (що є загальним для резервних програм); він просто перевіряє, чи мають файли різний розмір чи різний час модифікації та створює резервні копії, якщо так
Michael Mrozek

1
І як я дізнаюся, коли файл був створений першим? Чи зберігається ця інформація десь взагалі чи втрачається в оновленнях? так би мовити, як довго файл існував ..?
xyz

1
Сторінка man (stat) (2) описує більш докладно, коли ці часові позначки змінюються.
Крістіан Цюпіту

35

Відповідь echox є дійсною, але я хочу додати інформацію про час створення файлу.

Підтримка файлової системи

Деякі файлові системи підтримують додатковий запис у inode щодо часу створення (або часу народження). Я знаю, що ext4 підтримує цю функцію, а також JFS та BTRFS .

Однак більшість інструментів та API ще не оновлено для читання цієї додаткової інформації. Так що, хоча це може бути там, воно недоступне.

Наприклад, для Ubuntu 12.04 LTS я отримую наступне для файлу, який я створив сьогодні:

$ echo Just another test > /tmp/mytest
$ sleep 3
$ touch /tmp/mytest
$ sleep 2
$ cat /tmp/mytest > /dev/null
$ stat /tmp/mytest 
[...]
Access: 2012-06-05 13:33:44.279774711 +0200
Modify: 2012-06-05 13:33:34.611893317 +0200
Change: 2012-06-05 13:33:34.611893317 +0200
 Birth: -
$ sudo debugfs -R 'stat /tmp/mytest' /dev/sda1
[...]
 ctime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
 atime: 0x4fcdee98:42b417dc -- Tue Jun  5 13:33:44 2012
 mtime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
crtime: 0x4fcdee46:01258f1c -- Tue Jun  5 13:32:22 2012
[...]

Ви можете бачити, що новіша функція stat має поле народження, хоча вихід здається неправильним. І через налагодження ми можемо отримати інформацію (час роботи, коли я перебуваю у файловій системі ext4).

підтримка statx

Зараз, оскільки Kernel 4.11 - новий системний виклик statx, крім кращої підтримки Y2038 або мережевих файлових систем, він також пропонує кілька додаткових функцій, таких як доступ btimeабо час народження (час створення). Підтримка ext4 повинна знаходитись у тому ж випуску ядра 4.11.

Існували виправлення, щоб додати підтримку цього нового syscall у наступних випусках ядра: наприклад, BTRFS та F2FS у ядрі 4.13, SMB3 у 4.14, GFS2 у 4.15, NFS у 4.16 тощо.

Майбутній glibc надає функціональний виклик для запиту цього інтерфейсу (див. Новини Phoronix про підтримку statx glibc ). Тож ми можемо очікувати, що підтримка цієї функції в просторі користувачів буде зовсім скоро.


Чи знаєте ви, чи btime залишається недоторканим, коли файли з Windows (час створення) переміщуються на ext4 і навпаки, як mtime?
парадороїд

@paradroid Вибачте, я не знаю відповіді. Якщо ви маєте на увазі під Linux під час копіювання файлу з NTFS в ext4, потрібно буде шукати драйвер NTFS, якщо він підтримує час створення. Якщо ви маєте на увазі під Windows, вам потрібно буде шукати драйвер ext4 для Windows.
Гюйгенс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.