Как изменить свойство "последнего изменения состояния" (ctime) файла в Unix?
Я знаю, что есть способ изменить свойства времени "модификации" (mtime) и времени "последнего доступа" (atime) данного файла в Unix System с помощью команды "touch". Но мне интересно, существует ли способ изменить свойство "Последнее изменение статуса" (ctime)?
2 ответа
ctime - время последнего изменения индекса файла. mtime - последний раз, когда содержимое файла было изменено. Чтобы изменить ctime, вам нужно будет что-то сделать с inode, например, выполнить chmod или chown для файла.
Изменение содержимого файла также приведет к обновлению ctime, поскольку значения atime/mtime/ctime хранятся в inode. Изменение mtime означает, что ctime также обновляется.
Используйте системный вызов "utime". Если вы посмотрите на его man-страницу, там также будут времена, имеющие микросекундное разрешение и ссылку на utimensat, которая имеет наносекундное разрешение.
Любое изменение в inode, например, изменение времени, установит "ctime" на текущее время, поэтому установка ctime на что-то в прошлом немедленно перевернет его обратно в настоящее. Они поняли это давным-давно, поэтому нет интерфейса для установки ctime.
Это также помогает поддерживать целостность системы: вы можете возиться с atime и mtime, но ctime поддерживается системой. (Хакер может, например, изменить ваш / bin / login, чтобы разрешить ему доступ, даже если вы удалите его / etc / passwd запись. Вы заметите его из-за необычного mtime в файле. В следующий раз он вернет mtime обратно, когда система был установлен, но он не может скрыть ctime!).