Когда я набираю следующее:
$ IFS=$'\n'; arr=( $(stat "/bin/bash") ); for i in ${arr[@]} ; do echo $i ; done
File: '/bin/bash'
Size: 1037528 Blocks: 2032 IO Block: 4096 regular file
Device: 823h/2083d Inode: 656086 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-05-23 16:38:03.848124217 -0600
Modify: 2017-05-16 06:49:55.000000000 -0600
Change: 2017-05-18 07:43:22.946694155 -0600
Birth: -
Я вижу, что дата рождения для /bin/bash равна null / empty. Когда это поле когда-либо используется и какая цель может быть у него в Linux, когда оно работает?
Я понимаю, что существует более короткий способ использования stat, но это возникло во время цикла разработки, и я копирую и вставляю.
Время рождения - это время, когда файл был создан в файловой системе, также известный как время создания файла (crtime на EXTFS). Обратите внимание, что это не определено POSIX; только время последнего доступа (atime), время последней модификации (mtime) и время изменения inode (ctime) заданы POSIX.
IIRC, Linux пока не предоставляет никакого интерфейса для чтобы получить время рождения, есть предложение для xstat() и fxstat(), но оно должно быть реализовано.
Как отметил @muru, в последнее время новый подход xstat() и fxstat() . Таким образом, любой (модифицированный) пользовательский инструмент может использовать это (структура statx сейчас, см. Ниже) для любого такого последнего ядра.
struct statx {
__u32 stx_mask;
__u32 stx_blksize;
__u64 stx_attributes;
__u32 stx_nlink;
__u32 stx_uid;
__u32 stx_gid;
__u16 stx_mode;
__u16 __spare0[1];
__u64 stx_ino;
__u64 stx_size;
__u64 stx_blocks;
__u64 __spare1[1];
struct statx_timestamp stx_atime;
struct statx_timestamp stx_btime;
struct statx_timestamp stx_ctime;
struct statx_timestamp stx_mtime;
__u32 stx_rdev_major;
__u32 stx_rdev_minor;
__u32 stx_dev_major;
__u32 stx_dev_minor;
__u64 __spare2[14];
};
Здесь stx_btime - время создания файла.
Тем временем stat показывает отсутствие полей (или пустых значений) st_birthtime / st_birthtimesec, возвращенных вызовом stat(), в структуре stat:
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 filesystem 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 */
};
Есть некоторые трюки с запросом отладки на уровне файловой системы, чтобы получить информацию о создании из метаданных FS, например для EXTFS:
debugfs -R 'stat /path/to/file' /dev/sda1
, предполагая, что FS файла, о котором идет речь, находится в разделе /dev/sda1. Вы можете извлечь значение crtime, чтобы получить время создания файла.
Время рождения - это время, когда файл был создан в файловой системе, также известный как время создания файла (crtime на EXTFS). Обратите внимание, что это не определено POSIX; только время последнего доступа (atime), время последней модификации (mtime) и время изменения inode (ctime) заданы POSIX.
IIRC, Linux пока не предоставляет никакого интерфейса для чтобы получить время рождения, есть предложение для xstat() и fxstat(), но оно должно быть реализовано.
Как отметил @muru, в последнее время новый подход xstat() и fxstat() . Таким образом, любой (модифицированный) пользовательский инструмент может использовать это (структура statx сейчас, см. Ниже) для любого такого последнего ядра.
struct statx {
__u32 stx_mask;
__u32 stx_blksize;
__u64 stx_attributes;
__u32 stx_nlink;
__u32 stx_uid;
__u32 stx_gid;
__u16 stx_mode;
__u16 __spare0[1];
__u64 stx_ino;
__u64 stx_size;
__u64 stx_blocks;
__u64 __spare1[1];
struct statx_timestamp stx_atime;
struct statx_timestamp stx_btime;
struct statx_timestamp stx_ctime;
struct statx_timestamp stx_mtime;
__u32 stx_rdev_major;
__u32 stx_rdev_minor;
__u32 stx_dev_major;
__u32 stx_dev_minor;
__u64 __spare2[14];
};
Здесь stx_btime - время создания файла.
Тем временем stat показывает отсутствие полей (или пустых значений) st_birthtime / st_birthtimesec, возвращенных вызовом stat(), в структуре stat:
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 filesystem 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 */
};
Есть некоторые трюки с запросом отладки на уровне файловой системы, чтобы получить информацию о создании из метаданных FS, например для EXTFS:
debugfs -R 'stat /path/to/file' /dev/sda1
, предполагая, что FS файла, о котором идет речь, находится в разделе /dev/sda1. Вы можете извлечь значение crtime, чтобы получить время создания файла.
Время рождения - это время, когда файл был создан в файловой системе, также известный как время создания файла (crtime на EXTFS). Обратите внимание, что это не определено POSIX; только время последнего доступа (atime), время последней модификации (mtime) и время изменения inode (ctime) заданы POSIX.
IIRC, Linux пока не предоставляет никакого интерфейса для чтобы получить время рождения, есть предложение для xstat() и fxstat(), но оно должно быть реализовано.
Как отметил @muru, в последнее время новый подход xstat() и fxstat() . Таким образом, любой (модифицированный) пользовательский инструмент может использовать это (структура statx сейчас, см. Ниже) для любого такого последнего ядра.
struct statx {
__u32 stx_mask;
__u32 stx_blksize;
__u64 stx_attributes;
__u32 stx_nlink;
__u32 stx_uid;
__u32 stx_gid;
__u16 stx_mode;
__u16 __spare0[1];
__u64 stx_ino;
__u64 stx_size;
__u64 stx_blocks;
__u64 __spare1[1];
struct statx_timestamp stx_atime;
struct statx_timestamp stx_btime;
struct statx_timestamp stx_ctime;
struct statx_timestamp stx_mtime;
__u32 stx_rdev_major;
__u32 stx_rdev_minor;
__u32 stx_dev_major;
__u32 stx_dev_minor;
__u64 __spare2[14];
};
Здесь stx_btime - время создания файла.
Тем временем stat показывает отсутствие полей (или пустых значений) st_birthtime / st_birthtimesec, возвращенных вызовом stat(), в структуре stat:
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 filesystem 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 */
};
Есть некоторые трюки с запросом отладки на уровне файловой системы, чтобы получить информацию о создании из метаданных FS, например для EXTFS:
debugfs -R 'stat /path/to/file' /dev/sda1
, предполагая, что FS файла, о котором идет речь, находится в разделе /dev/sda1. Вы можете извлечь значение crtime, чтобы получить время создания файла.
Это должно быть время создания файла, но есть проблема, но команда gnu coreutils ожидает поддержки xstat() в ядре.
TODO: stat (1) и ls (1) поддержка времени рождения
Это должно быть время создания файла, но есть проблема, но команда gnu coreutils ожидает поддержки xstat() в ядре.
TODO: stat (1) и ls (1) поддержка времени рождения
Это должно быть время создания файла, но есть проблема, но команда gnu coreutils ожидает поддержки xstat() в ядре.
TODO: stat (1) и ls (1) поддержка времени рождения