Мне нужно найти время создания файла, когда я прочитал некоторые статьи об этой проблеме, все упомянули, что нет решения (например, Site1, Site2).
Когда я попробовал stat, он указывает Birth: -.
Итак, как я могу найти время создания файла?
Существует способ узнать дату создания каталога, просто выполните следующие действия:
Знайте индексный дескриптор каталога командой ls -i (скажем, например, его X). Знайте, на каком перейдите в раздел df -T /path). Теперь используйте эту команду: sudo debugfs -R 'stat <X>' /dev/sda1Вы увидите на выходе:
crtime: 0x4e81cacc:966104fc -- mon Sep 27 14:38:28 2013
] crtime - дата создания вашего файла.
crtime :
Знать inode каталога с помощью команды ls -i (скажем, например, его X) Доступ к нему. Знайте, на каком разделе ваш каталог будет сохранен командой df -T /path (скажем, на /dev/sda1)Знайте, на каком разделе ваш каталог будет сохранен командой df -T /path (скажем, его /dev/sda1)
Теперь используйте эту команду: sudo debugfs -R 'stat <X>' /dev/sda1Существует способ узнать дату создания каталога, просто выполните следующие действия:
Знайте индексный дескриптор каталога командой ls -i (скажем, например, его X). Знайте, на каком перейдите в раздел df -T /path). Теперь используйте эту команду: sudo debugfs -R 'stat <X>' /dev/sda1Вы увидите на выходе:
crtime: 0x4e81cacc:966104fc -- mon Sep 27 14:38:28 2013
] crtime - дата создания вашего файла.
crtime :
Знать inode каталога с помощью команды ls -i (скажем, например, его X) Доступ к нему. Знайте, на каком разделе ваш каталог будет сохранен командой df -T /path (скажем, на /dev/sda1)Знайте, на каком разделе ваш каталог будет сохранен командой df -T /path (скажем, его /dev/sda1)
Теперь используйте эту команду: sudo debugfs -R 'stat <X>' /dev/sda1Неспособность stat показать время создания обусловлена ограничением системного вызова stat(2), чья обратная структура не включала поле для времени создания. Однако, начиная с Linux 4.11 (т. Е. 17.10 и новее *), доступен новый системный вызов statx(2), который включает время создания в его возвратной структуре.
* И, возможно, на более старых версиях LTS используя ядра стека оборудования (HWE). Проверьте uname -r, чтобы убедиться, что вы используете ядро как минимум на 4.11 для подтверждения.
@Nux нашел отличное решение для этого, которое вы все должны перенести. Я решил написать небольшую функцию, которая может использоваться для запуска всего непосредственно. Просто добавьте это в свой ~/.bashrc.
get_crtime() {
for target in "${@}"; do
inode=$(stat -c '%i' "${target}")
fs=$(df --output=source "${target}" | tail -1)
crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' "${fs}" 2>/dev/null |
grep -oP 'crtime.*--\s*\K.*')
printf "%s\t%s\n" "${target}" "${crtime}"
done
}
Теперь вы можете запустить get_crtime, чтобы напечатать даты создания как можно большего количества файлов или каталогов:
$ get_crtime foo foo/file
foo Wed May 21 17:11:08 2014
foo/file Wed May 21 17:11:27 2014
TL; DR: Просто запустите: sudo debugfs -R 'stat /path/to/your/file' /dev/<your fs>
(Чтобы выяснить ваши fs, запустите df -T /path/to/your/file, скорее всего, это будет /dev/sda1).
TL; DR:
Мы собираемся запустить две команды:
Найдите имя названия раздела для вашего файла.df -T /path/to/your/file
Результат будет выглядеть так (имя раздела будет первым): Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/<your fs> ext4 7251432 3481272 3509836 50% /
Найдите время создания для этого файла. sudo debugfs -R 'stat /path/to/your/file' /dev/<your fs>
На выходе найдите ctime. Неспособность stat показать время создания обусловлена ограничением системного вызова stat(2), чья обратная структура не включала поле для времени создания. Однако, начиная с Linux 4.11 (т. Е. 17.10 и новее *), доступен новый системный вызов statx(2), который включает время создания в его возвратной структуре.
* И, возможно, на более старых версиях LTS используя ядра стека оборудования (HWE). Проверьте uname -r, чтобы убедиться, что вы используете ядро как минимум на 4.11 для подтверждения.
@Nux нашел отличное решение для этого, которое вы все должны перенести. Я решил написать небольшую функцию, которая может использоваться для запуска всего непосредственно. Просто добавьте это в свой ~/.bashrc.
get_crtime() {
for target in "${@}"; do
inode=$(stat -c '%i' "${target}")
fs=$(df --output=source "${target}" | tail -1)
crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' "${fs}" 2>/dev/null |
grep -oP 'crtime.*--\s*\K.*')
printf "%s\t%s\n" "${target}" "${crtime}"
done
}
Теперь вы можете запустить get_crtime, чтобы напечатать даты создания как можно большего количества файлов или каталогов:
$ get_crtime foo foo/file
foo Wed May 21 17:11:08 2014
foo/file Wed May 21 17:11:27 2014
TL; DR: Просто запустите: sudo debugfs -R 'stat /path/to/your/file' /dev/<your fs>
(Чтобы выяснить ваши fs, запустите df -T /path/to/your/file, скорее всего, это будет /dev/sda1).
TL; DR:
Мы собираемся запустить две команды:
Найдите имя названия раздела для вашего файла.df -T /path/to/your/file
Результат будет выглядеть так (имя раздела будет первым): Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/<your fs> ext4 7251432 3481272 3509836 50% /
Найдите время создания для этого файла. sudo debugfs -R 'stat /path/to/your/file' /dev/<your fs>
На выходе найдите ctime.