метка времени, время модификации и время создания файла

<p>я просто знаю, что <code>ls -t</code> а также <code>ls -f</code> дают различную сортировку файлов и подкаталогов в каталоге.</p><ul> <li>в чем разница между меткой времени, временем модификации и временем создания файла?</li> <li>как получить и изменить эти виды информации с помощью команд?</li> <li>с точки зрения какой информации люди говорят, что файл "новее", чем другой?</li> <li>какие виды изменения информации не сделают файл другим?</li> </ul><p>например, я видел, кто-то написал:</p><blockquote> <p>по умолчанию программа rsync только проверяет, отличаются ли файлы по размеру и времени. не важно, какой файл более новый, если он другой, он перезаписывается. вы можете передать флаг --update в rsync, что заставит его пропускать файлы в месте назначения, если они новее, чем файл в источнике, но только в том случае, если они относятся к одному и тому же типу файла. это означает, что, например, если исходный файл является обычным файлом, а пункт назначения является символической ссылкой, файл назначения будет перезаписан независимо от метки времени.</p> </blockquote><p>напомним, что тип файла здесь означает только обычный файл и симлинк, а не такой тип, как pdf, jpg, htm, txt и т.д.?</p>

<p>существует 3 вида "временных меток":</p><ul> <li>доступ - последний раз, когда файл был прочитан</li> <li>изменить - последний раз, когда файл был изменен (содержимое было изменено)</li> <li>изменить - в последний раз метаданные файла были изменены (например, разрешения)</li> </ul><p>чтобы вывести эту информацию, вы можете использовать <a href="http://www.gnu.org/software/coreutils/manual/html\_node/stat-invocation.html"><code>stat</code></a> , которая является частью coreutils.</p><p><code>stat</code> покажет вам еще некоторую информацию, такую как устройство, inode, ссылки и т. д.</p><p>помните, что такого рода информация сильно зависит от файловой системы и параметров монтирования. например, если вы смонтируете раздел с параметром <code>noatime</code>, информация о доступе не будет записана.</p><p>утилита для изменения временных меток будет <code>touch</code>. существуют некоторые аргументы, чтобы решить, какую временную метку изменить (например, -a для времени доступа, -m для времени модификации) и повлиять на синтаксический анализ новой данной временной метки. видеть <a href="http://unixhelp.ed.ac.uk/cgi/man-cgi?touch"><code>man touch</code></a> для более подробной информации.</p><p><code>touch</code> может пригодиться в сочетании с <code>cp -u</code> (<em> "копировать только в том случае, если файл source новее, чем файл назначения, или когда файл назначения отсутствует" </em>) или для создания пустого маркера файлы.</p>

<p>ответ echox действителен, но я хочу добавить информацию о времени создания файла.</p><h1>поддержка файловой системы</h1><p>некоторые файловые системы поддерживают дополнительную запись в inode относительно времени создания (или времени рождения). я знаю, что <a href="https://www.redhat.com/archives/ext3-users/2006-october/msg00015.html">ext4 поддерживает эту функцию</a> , а также <a href="https://lwn.net/articles/397442/">jfs и btrfs</a> .</p><p>однако большинство инструментов и api еще не были обновлены, чтобы прочитать эту дополнительную информацию. так что, хотя оно может быть там, оно недоступно.</p><p>например, в ubuntu 12.04 lts для файла, который я создал сегодня, я получаю следующее:</p><pre><code>$ 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 [...] </code></pre><p>вы можете видеть, что более новая функция stat имеет поле рождения, хотя вывод кажется неправильным. и через debugfs мы можем получить информацию (crtime, как я на файловой системе ext4).</p><h1>поддержка statx</h1><p>теперь есть <a href="https://kernelnewbies.org/linux\_4.11#statx.282.29.2c\_a\_modern\_stat.282.29\_alternative">поскольку kernel 4.11 - новый системный вызов statx</a> , в дополнение к лучшей поддержке y2038 или сетевых файловых систем, он также предоставляет несколько дополнительных функций, таких как <code>btime</code> или время рождения ( время создания) доступ. поддержка ext4 должна быть в том же выпуске ядра 4.11.</p><p>были исправления для добавления поддержки этого нового системного вызова в более поздних выпусках ядра: например, btrfs и f2fs в ядре 4.13, smb3 в 4.14, gfs2 в 4.15, nfs в 4.16 и т.д.</p><p>предстоящий glibc предоставит вызов функции для запроса этого интерфейса (см. <a href="https://www.phoronix.com/scan.php?page=news\_item&px=glibc-statx-support">новости phoronix о поддержке statx glibc</a> ). таким образом, мы можем ожидать поддержку этой функции в пользовательском пространстве довольно скоро.</p>