Как изменить ctime linux

Обновлено: 07.07.2024

Я хочу изменить метаданные метки времени на файлах в Java, используя java.nio.Files класса.

Я хотел бы изменить все 3 временные метки Linux/ext4 (последние изменения, доступ и изменения).

Я могу изменить первые два поля метки времени следующим образом:

однако я не могу изменить последний изменения: время в файле. Кроме того, это касается того, что нет метки времени изменения, упомянутой в документация. Ближайший доступный атрибут creationTime , которые я пробовал без успеха.

любые идеи о том, как изменить Change: метаданные для файла в соответствии с пользовательской метки в Java?

я смог изменить ctime с помощью двух разных методов:

  1. изменение ядра, так что ctime соответствует mtime
  2. написание простого (но вымышленная) скрипт.

1-й метод: изменение ядра.

Я настроил всего несколько строк в KERNEL_SRC/fs/attr.c эта модификация обновляет ctime, чтобы соответствовать mtime всякий раз, когда mtime "явно определен."

есть много способов чтобы "явно определить" mtime, например:

в Java (используя Java 6 или 7 и, предположительно, другие):

вот изменение на KERNEL_SRC/fs/attr.c на :

(1) эта строка, незафиксированная, обновит ctime до текущего времени часов при изменении файла. Мы не хотим этого, так как мы хотим установить ctime сами. Таким образом, мы комментируем эту строку. (Это не обязательно)

(2) это действительно суть решения. The notify_change функция выполняется после изменения файла, в котором необходимо обновить метаданные времени. Если mtime не был указан, то mtime устанавливается в текущее время. В противном случае, если mtime было установлено определенное значение, мы также устанавливаем ctime и atime на это значение.

2-й метод: простой (но хакерский) сценарий оболочки.

краткое объяснение: 1) изменить систему времени на нужное время 2) Выполните chmod на файле, файл ctime теперь отражает целевое время 3) верните системное время назад.

changectime.sh

выполните это следующим образом: ./файл myfile changectime.sh

ctime файла теперь будет отражать время в файле.

конечно, вы, вероятно, не хотите, чтобы файл с правами 777. Перед использованием убедитесь, что этот сценарий изменен в соответствии с вашими потребностями.

адаптация ответ в вашем случае:

Я сомневаюсь, что мы увидим удобный метод в стандартном Java API для этого, так как ни Linux (man touch) и Windows (GetFileTime функция на MSDN) дайте легкий доступ к этому полю. Собственные системные вызовы предоставляют только доступ к меткам времени создания/доступа/изменения, так же как и Java.

Favorite

Добавить в избранное

Главное меню » Операционная система Linux » Временные метки файлов в Linux: atime, mtime, ctime. Разъяснения

Временные метки файлов в Linux: atime, mtime, ctime. Разъяснения

Д авайте посмотрим, каковы различные типы временных меток файлов в Linux, как просмотреть временные метки для файла и как изменить метки времени.

В Linux каждый файл имеет некоторые временные метки, которые предоставляют некоторые важные аналитики о том, когда файл или его атрибуты были модифицированы или изменены. Давайте посмотрим на эти временные метки в деталях.

Что такое метки времени Linux?

Любой файл в Linux обычно имеет три временных метки:

atime

atime означает время доступа. Эта временная метка сообщает вам, когда был последний раз обращались к файлу. При доступе это означает, что если вы использовали cat, vim, less или какой-либо другой инструмент для чтения или отображения содержимого файла.

mtime

mtime означает время модификации. Эта временная метка сообщает вам, когда был последний раз модифицирован файл. Это означает, что содержимое файла было изменено путем редактирования файла.

ctime

ctime означает время изменения статуса. Эта временная метка сообщает вам, когда был последний раз были изменены свойства и метаданные файла. Метаданные включают права доступа, права собственности, имя и местоположение файла.

Как просмотреть временные метки файла?

Вы можете использовать команду stat для просмотра всех временных меток файла. Использование команды stat очень просто. Вам просто нужно указать имя файла.

Результат будет таким:

Вы можете увидеть все три временных метки (доступ, модифицирование и изменение) в приведенном выше выводе. Все три временных метки здесь одинаковы, потому что мы просто создали этот пустой файл с командой touch.

Теперь давайте изменим эти временные метки.

Если мы используем команду less для чтения файла, это изменит только время доступа, потому что содержимое и метаданные файла остаются неизменными.

Теперь давайте изменим время модификации. Мы будем использовать команду cat для добавления нового текста в этот файл. Это предотвратит изменение времени доступа.

Вы заметили что-то странное? Вы изменили файл и ожидали изменения mtime, но также изменили время ctime.

Запомните, ctime всегда изменяет mtime, это потому, что пока время изменения находится под контролем пользователя, ctime контролируется системой. Он представляет собой, когда в последний раз были изменены блоки данных или метаданные файла. Если вы изменяете файл, блоки данных изменяются и, следовательно, ctime изменяется.

Вы можете изменить ctime только путем изменения прав доступа к файлам, используя CHMOD или же командой chgrp, но вы не можете модифицировать mtime без изменения ctime.

Вы также не можете изменять ctime в прошлом обычными способами. Это своего рода функция безопасности, потому что она сообщает вам в последний раз, когда файл был изменен. Даже если кто-то изменяет mtime и устанавливает его в прошлом для злонамеренных целей, ctime укажет фактическое время, когда mtime было изменено.

Помните: ctime всегда будет изменен путем изменения mtime.

Каково использование временных меток файлов?

Это помогает при анализе. Там может быть несколько ситуаций, когда вам нужно ссылаться на отметки времени файла. Например, вы можете увидеть, был ли файл изменен в последнее время или нет, когда он должен был быть изменен.

Одним из наших любимых способов было найти файлы журналов приложения с помощью mtime. Запустите приложение и просто зайдите в родительский каталог приложения и выполните поиск файлов, которые были изменены за последние несколько минут.

Мы уже показали вам выше, что он также может помочь в анализе того, кто обратился к файлам или модифицировал их злонамеренно. Временные метки играют важную роль в таких ситуациях.

Как узнать, когда был изначально создан файл?

Вы заметили последнюю строку вывода команды stat? В нем указывается «Birth». Вы можете догадаться, что это представляет собой timestmap, когда файл был «рожден» (или был создан, чтобы быть более точным).

Читать Использование необязательного аргумента и значения по умолчанию в функции bash

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Favorite

Добавить в избранное

Главное меню » Linux » Как установить или изменить часовой пояс в Linux

Как установить часовой пояс на CentOS 7

Использование правильного часового пояса необходимо для многих задач и процессов, связанных с системами. Например, демон cron использует часовой пояс системы для выполнения заданий cron. Часовой пояс также используется для временных меток журналов.

В этой статьи рассматриваются шаги, необходимые для установки или изменения часового пояса в Linux.

Проверка текущего часового пояса

Чтобы просмотреть текущий часовой пояс, вызовите команду timedatectl без каких-либо параметров или аргументов:

Вывод выше показывает, что часовой пояс системы установлен на UTC.

Часовой пояс системы настраивается путем символической ссылки файла /etc/localtime на двоичный идентификатор часового пояса в каталоге /usr/share/zoneinfo.

Изменение часового пояса в Linux

Перед сменой часового пояса вам необходимо узнать полное название часового пояса, которое вы хотите использовать. Соглашение об именовании часовых поясов обычно использует формат «Регион/Город».

Чтобы просмотреть все доступные часовые пояса, используйте команду timedatectl или перечислите файлы в каталоге /usr/share/zoneinfo:

Как только вы определите, какой часовой пояс соответствует вашему местоположению, выполните следующую команду от имени пользователя root или sudo :

Например, чтобы изменить часовой пояс системы, введите Africa/Algiers:

Чтобы проверить изменение, снова вызовите команду timedatectl:

Миссия выполнена! Вы успешно изменили часовой пояс вашей системы.

Изменение часового пояса путем создания символической ссылки

Если вы используете более старый дистрибутив Linux, а утилита timedatectl отсутствует в вашей системе, вы можете изменить часовой пояс, вставив ссылку /etc/localtime на часовой пояс в каталоге /usr/share/zoneinfo.

Удалить текущую символическую ссылку или файл:

Определите часовой пояс, который вы хотите настроить, и создайте символическую ссылку :

Проверьте это, перечислив файл /etc/localtime или вызвав команду date:

Выходные данные включают часовой пояс, в этом примере это «EST».

Вывод

Чтобы изменить часовой пояс в системах Linux, используйте команду sudo timedatectl set-timezone, за которой следует длинное имя часового пояса, которое вы хотите установить.

Не стесняйтесь оставлять комментарии, если у вас есть какие-либо вопросы.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Files in Linux have 3 types of timestamps: atime (access), mtime (modify) and ctime (change).

Someday you may have a situation when you would like to fake a timestamps of some file.

atime and mtime timestamps can be easily changed using touch command, but there is no a standard way to set a different ctime timestamp.

As a possible workaround you can set the system time to the ctime you want to impose, then touch the file and then restore the system time.

Timestamp When it gets updated?
atime Access time gets updated when you open a file or when a file is used for other operations like grep, cat, head and so on.
mtime Modify time gets updated when you whenever update content of a file or save a file.
ctime Change time gets updated when the file attributes are changed, like changing the owner, changing the permission or moving it to another filesystem, but will also be updated when you modify a file.
As i have already said there is no a standard solution to fake a ctime (change time) timestamp.

Nevertheless, if you are ready to risk, it is possible;)

Firstly you can set the system time to the ctime you want to impose.

Then touch the file and immediately rollback the system time.

Unexpected impact: Modification of a system time may cause an unexpected impact! Use the below commands on your own risk!

Set the fake date and time (requires root):

Touch the file to fake the all timestamps:

Rollback the date and time (requires root):

Cool Tip: Clear the BASH history effectively! Read more →

To speedup modification and reduce the possible impact, execute the above commands as follows:

Stay Stealthy

Unset the variable NOW :

Remove the information about changed time from /var/log/messages (requires root):

atime and mtime timestamps can be easily changed using touch command, but there is no a standard way to set a different ctime timestamp.

Cool Tip: Want to stay anonymous? Learn how to use PROXY on the Linux command line. Read more →

Читайте также: