Что такое время доступа к файлу, время модификации файла и время изменения файла в Linux
Метки времени (timestamps):
Доступ (Access — last access) — время, когда файл был прочитан последний раз. Это время меняется при доступе таких системных вызовов как mknod(2), utimes(2) и read(2). Если это текстовый файл, то дата последнего доступа обновляется при каждом его открытии. Если это исполнимый файл, то дата доступа обновится при его запуске.
Но прежде чем придумывать практическое использование времени последнего доступа к файлу (например, чтобы проверить, какие команды запускалась за последний час), нужно учитывать очень важные нюансы. Выше показано, что поддержка определённых меток времени зависит от файловой системы. Ещё поведение меток времени зависит от того, с какими опциями была смонтирована файловая система. Например, при запуске скрипта мы ожидаем, что время доступа к этому файлу изменится на текущее. Это так — для выполнения скрипта его нужно прочитать и atime должна поменяться на время выполнения. Обычно это так и происходит. Но если запускаемый/читаемый файл находится в файловой системе, которая смонтирована с опциями noatime или relatime (или другими возможными опциями, которые могут повлиять на изменение atime — к пример «только чтение»), то поведение будет другим.
noatime
Не обновлять на этой файловой системе время доступа к иноде (например, для ускорения производительности за счёт исключения ненужных операций)
relatime
Обновлять время доступа к иноде относительно времени модификации или изменения. Время доступа обновляется только если предыдущее время доступа было более старым, чем время модификации или изменения, либо если предыдущее время доступа старше 1 дня.
Итак — время последнего доступа к файлу может быть неточным! По сути, если при монтировании диска используется опция relatime, то получается, что оно показывает:
1) время последнего изменения или модификации файла
2) время сегодняшнего первого открытия файла
3) ИНОГДА оно действительно показывает время последнего доступа к файлу (если сегодня файл открывали только один раз), либо если этот доступ к файлу выполнен после его модификации или изменения статуса
Модифицирован (Modify — last modified) — время последнего изменения содержимого файла. То есть если это текстовый файл, то время модификации поменяется когда вы его откроете и удалите какое-то слово или что-то допишите. Меняется системными вызовами mknod(2), utimes(2) и write(2).
Изменён (Change — last changed) — Время последнего изменения метаданных файлов в файловой системе. То есть если в файле изображения вы измените EXIF метаданные — это будет модификация (поскольку по сути поменяется содержимое файла). Примером Изменения файла является смена разрешений доступа к нему (чтение, запись, выполнение), смена владельца, группы и т. д. Меняется с chmod(2), chown(2), link(2), mknod
Сравнение файлов Linux с помощью GUI
Существует несколько отличных инструментов для сравнения файлов в linux в графическом интерфейсе. Вы без труда разберетесь как их использовать. Давайте рассмотрим несколько из них:
1. Kompare
Kompare — это графическая утилита для работы с diff, которая позволяет находить отличия в файлах, а также объединять их. Написана на Qt и рассчитана в первую очередь на KDE. Кроме сравнения файлов утилита поддерживает сравнение каталогов и позволяет создавать и применять патчи к файлам.
2. Meld
Это легкий инструмент для сравнения и объединения файлов. Он позволяет сравнивать файлы, каталоги, а также выполнять функции системы контроля версий. Программа создана для разработчиков и позволяет сравнивать до трёх файлов. Можно сравнивать каталоги и автоматически объединять сравниваемые файлы. Кроме того поддерживаются такие системы контроля версий, как Git.
3. Diffuse
Diffuse — еще один популярный и достаточно простой инструмент для сравнения и слияния файлов. Он написан на Python 2. Поэтому в современных версиях Ubuntu программу будет сложно установить. Поддерживается две основные возможности — сравнение файлов и управление версиями. Вы можете редактировать файлы прямо во время просмотра.
4. KDiff3
KDiff3 — еще один отличный, свободный инструмент для сравнения файлов в окружении рабочего стола KDE. Он входит в набор программ KDevelop и работает на всех платформах, включая Windows и MacOS. Можно выполнить сравнение до трех файлов Linux или даже сравнить каталоги. Кроме того, есть поддержка слияния и ручного выравнивания.
5. TkDiff
Это очень простая утилита для сравнения файлов написанная на основе библиотеки tk. Она позволяет сравнивать только два файла, поддерживает поиск и редактирование сравниваемых файлов.
Linux поиск по содержимому файлов командой grep
Часто возникают ситуации, что нужно найти какой-нибудь текст, но вы не помните, в каком файле/файлах он содержится. Секрет популярности — её мощь, она отдает возможность пользователям сортировать и фильтровать текст на основе сложных правил.
В этом варианте для поиска по содержимому файлов в каталоге можно использовать утилиту grep:
где:
-n показывает строку, где был найден фрагмент;
-r осуществляет розыск рекурсивно, в файлах в самом каталоге /path и в его подкаталогах;
Также можно приплюсовать опцию -C 3, чтобы видеть +- 3 строки вокруг (выше и ниже от найденной).
Дабы найти файл по его содержимому во всех Linux — подобных ОС, достаточно использовать утилиту find.
Где в Linux диски C, D, E?
Если задаться вопросов, где диск C в Linux, то его можно обнаружить сразу в двух местах. Во-первых, поскольку в Linux все физические устройства являются файлами, то диск C будет представлен файлом, например, с именем /dev/sda. Первая часть в этом имени — /dev/ — это директория, в которой расположены файлы, обозначающие устройства (о всех директориях будет рассказано далее). А sda — это уже непосредственно имя диска. Если однотипных дисков несколько, то последующим присваиваются другие буквы: /dev/sdb, /dev/sdc и т. д. Имя диска указывает на вид носителя. Например, буквы sd означают Solid Drive, то есть твердотельный диск. Если имя /dev/hda, то буквы hd означают Hard Drive (жёсткий диск).
Допустим имя диска /dev/hdc, что можно сказать о нём? Можно утверждать, что это жёсткий диск и он третий в системе.
Диски могут иметь и другие имена, например, у меня системный диск называется /dev/nvme0n1 — я погуглил, оказывается это новый вид твердотельных дисков NVM Express (NVMe).
Итак, мы уже нашли диск C? Не совсем. Имя /dev/sda это всего лишь обозначение устройства, которое предполагает использование имени для управления самим устройством. Например, если мы хотим создать новый раздел на диске или изменить размеры существующих, то мы откроем соответствующую программу, и в качестве параметра передадим ей имя диска, с которым хотим работать. Мы не можем открывать файлы обращаясь к диску по имени вида /dev/*
Использование Total Commander
Один из распространенных файловых менеджеров Total Commander. Чтобы изменить дату создания, изменения файлов (папок) проделайте следующие рекомендации:
Перейдите в свойства объекта и убедитесь в смене значений. Минусом пакетного изменения значений в Total Commander является то, что временные параметры у всех элементов становятся одинаковыми, хотя может и для кого-то это и плюс.
Теперь Вы знаете, как изменить дату создания файла (папки) несколькими способами. Если нужно сменить значения одному объекту используйте Total Commander или штатные средства. Если Вы постоянно работаете с изменением дат, тогда используйте специальные программы, которые позволят выполнить пакетную смену значений по заданным параметрам.
Чтобы заставить файлы перемещаться во времени совсем не обязательно повторять путь героев фильма «Назад в будущее». Достаточно некоторых навыков в общении с программой Total commander.
— программа Total commander
Откройте программу и левым кликом мыши выберите необходимый файл или папку. Для этого можно пользоваться одним из двух основных окон программы, тех, в которых находятся списки файлов. Перемещение между томами жесткого диска осуществляется двумя способами. Первый: при помощи переключателя сверху от каждого из окон со списками файлов. Второй: при помощи выпадающего меню, чтобы вызвать его щелкните по иконке в виде треугольника, смотрящего вниз.
Нажмите пункт меню «Файлы», а затем «Атрибуты». Откроется окно «Изменение атрибутов». Вас должно интересовать поле, которое находится в середине окна. В поле «Дата» введите день месяц и год в формате dd.mm.yyyy. В поле «Время» введите часы, минуты и секунды в формате hh:mm:ss. Также можно воспользоваться специальным меню, которое открывается, если нажать на кнопку, находящуюся справа от поля «Время»: дата меняется при помощи календаря, а время – при помощи стрелочек «Вверх» и «Вниз». Кроме того, для ввода новых данных можно использовать клавиатуру: выберите параметр левым кликом мыши и наберите необходимую цифру. Чтобы изменения вступили в силу, нажмите «ОК».
Обратите внимание на кнопку «Текущие». Если нажать на нее, данные в полях «Дата» и «Время» изменятся, соответственно, на текущие. Введя необходимые параметры, щелкните «ОК», чтобы сохранить их. Прямо здесь же, в Total Commander, можно будет наблюдать, как выбранный файл или директория поменяли дату своего создания.
Имейте в виду, что если поменять дату создания папки, то у файлов и папок, которые находятся внутри нее останутся прежние даты сохранения.
Attribute Changer позволяет изменять не только атрибуты любых файлов и папок, но и их свойства. Т.к. вас интересует только способы изменения времени создания файла, остановимся на атрибутах. Интерфейс программы очень прост и после ее установки в контекстном меню проводника можно увидеть строчку Change Attributes под командой «Открыть». Для изменения атрибутов нескольких файлов достаточно выделить их при помощи зажатой клавиши Ctrl и нажать правой кнопкой мыши, выбрав выше написанную строчку.
В открывшемся окне будет 6 вкладок, вам нужно изучить содержимое только двух – Folder Attributes и File Attributes. В одной вкладке можно изменить атрибуты выделенных папок, а в другой, соответственно, атрибуты файлов.
На каждой вкладке есть параметры Set Date to (задать свою дату) и Set Time to (задать свое время). Для их активации достаточно поставить отметку напротив пункта и выставить значение, которое вас устраивает. После нажатия на кнопку Apply (Применить) посмотрите свойства измененных папок или файлов. Если все получилось, нажмите кнопку Close (Закрыть) в окне программы.
Attribute Changer – не единственная программа данного класса, среди прочих можно выделить небольшую утилиту Attribute Magic Pro. Она может изменять атрибуты файлов и папок, включая время создания файла, что вам и понадобится.
После установки и запуска программы, главное окно которой представляет собой панель файлового менеджера, необходимо найти и выделить файлы или папки (для изменения атрибутов).
Нажмите правой кнопкой мыши на выделенных элементах и выберите пункт Edit (Редактирование). В открывшемся списке выберите пункт Change Attributes (Изменить атрибуты).
Выберите пункт Change Dates и установите нужное время создания файла. Нажмите кнопку Modify, чтобы применить все изменения. В главном окне программы нажмите Apply Changes для окончательного сохранения вами внесенных данных.
Получить дату последнего изменения файлов в Linux с помощью команды ls
Второй метод, описанный в этом руководстве, объясняет, как получить дату последнего изменения файла с помощью команды ls.
Во-первых, давайте воспользуемся командой ls, за которой следует флаг -l , как показано на скриншоте ниже. Флаг -l указывает, что команда ls напечатать длинный список форматов файлов. Список длинных форматов включает дату последнего изменения файла.
ls -l
Как видите, первый столбец показывает разрешения, второй и третий столбцы показывают пользователей и группы файлов. Четвертый столбец – размер. Затем вы можете увидеть месяц, день и время, когда файл был изменен. В отличие от предыдущего метода с ls, вы получите список всех файлов в каталоге, включая даты их изменения.
Для упорядоченного вывода вы можете добавить флаг -t. Флаг -t распечатает вывод, упорядоченный по дате модификации, показывая сначала последние измененные файлы, как показано на следующем изображении.
ls -lt
Как вы теперь видите, последние измененные файлы теперь отображаются первыми.
Команда ls также позволяет вам проверять дату последнего изменения файла индивидуально; для этого просто укажите имя файла, как показано ниже.
ls -l andreyex
Как видите, этот вывод более удобен для пользователя, если вы хотите проверить только один файл.
Разрешения
Я кратко упоминал о разрешениях ранее, когда представлялкоманда.
Странная строка, которую вы видите в каждой строке файла, например, определяет права доступа к файлу или папке.
Давайте рассмотрим это.
Первая буква указывает на тип файла:
- означает, что это нормальный файл
- означает, что это каталог
- означает, что это ссылка
Тогда у вас есть 3 набора значений:
- Первый набор представляет разрешениявладелецфайла
- Второй набор представляет собой разрешения членовгруппафайл связан с
- Третий набор представляет разрешениявсе остальные
Эти наборы состоят из 3 значений.означает, что конкретныйперсонаимеет доступ на чтение, запись и выполнение. Все, что удаляется, заменяется на, который позволяет формировать различные комбинации значений и относительных разрешений:,,, и так далее.
Вы можете изменить разрешения, предоставленные файлу, используякоманда.
можно использовать 2 способами. Первый использует символьные аргументы, второй — числовые аргументы. Начнем сначала с символов, что более интуитивно понятно.
Вы печатаетеза которым следует пробел и буква:
- означаетвсе
- означаетПользователь
- означаетгруппа
- означаетдругие
Затем вы вводите либоили жечтобы добавить разрешение или удалить его. Затем вы вводите один или несколько символов разрешений (,,).
За всем следует имя файла или папки.
Вот некоторые примеры:
Вы можете применить одни и те же разрешения к нескольким персонажам, добавив несколько букв перед/:
Если вы редактируете папку, вы можете применить разрешения к каждому файлу, содержащемуся в этой папке, с помощью(рекурсивный) флаг.
Числовые аргументы работают быстрее, но мне трудно их запомнить, когда вы не используете их изо дня в день. Вы используете цифру, которая представляет разрешения персонажа. Это числовое значение может быть максимум 7, и оно рассчитывается следующим образом:
- если есть разрешение на исполнение
- если есть разрешение на запись
- если есть разрешение на чтение
Это дает нам 4 комбинации:
- нет разрешений
- может выполнить
- могу писать
- может писать, выполнять
- может читать
- может читать, выполнять
- может читать, писать
- может читать, писать и выполнять
Мы используем их парами по 3, чтобы установить разрешения для всех 3 групп вместе:
Использование fswatch в Linux
Общий синтаксис команды fswatch следующий:
$ fswatch
В Linux рекомендуется использовать стандартный монитор inotify, список доступных мониторов можно просмотреть с помощью опции -M или — list-monitors:
$ fswatch -M $ fswatch --list-monitors
Приведенная ниже команда позволяет вам видеть изменения в текущей директории (/home/tecmint), сообщения будут направляться на стандартный вывод каждые 4 секунды.
Опция -l или —latency позволяет задать латентность в секундах, по умолчанию она составляет 1 секунду.
$ fswatch -l 4 .
Следующая команда мониторит изменения в файле /var/log/auth.log каждые 5 секунд:
$ fswatch -l 5 /var/log/auth.log
С помощью опции -t или —timestamp можно выводить время изменения для каждого события, с помощью опции -u или —utf-time можно задать вывод времени в формате UTC. Также форматировать время вывода можно с помощью опции -f или —format-time.
$ fswatch --timestamp /var/log/auth.log
Далее, опция x или —event-flagsм позволяет выводить флаги событий сбоку от пути. Вы также можете использовать опцию –event-field-seperator для вывода событий с использованием заданного разделителя.
$ fswatch --events-flags ~ /var/log/auth.log
Для вывода численного значения события, указывающего на изменение в вашей домашней директории и в файле /var/log/auth.log, используется опция -n или —numeric, как показано ниже.
$ fswatch --numeric ~ /var/log/auth.log
Детальную информацию по опциям и использованию fswatch можно получить из man-страницы утилиты:
$ man fswatch
Также для этого можно посетить репозиторий fswatch на Github:
Целостность ваших файлов вы можете контролировать также с помощью расширенной среды обнаружения вторжений AIDE.
Команда lsof
lsof означает ‘LiSt Open Files’ (список открытых файлов). Эта программа используется чтобы узнать, какие файлы открыты и каким процессом.
Для чего нужно знать, какие файлы открыты? Эта информация поможет узнать о многом происходящем в системе, об устройстве и работе Linux, а также решить проблемы, например, когда вы не можете размонтировать диск из-за того, что устройство используется, но вы не можете найти, какой именно программой.
Многие процессы или устройства, о которых lsof может сообщать, принадлежат root или были запущены пользователем root, поэтому вам нужно будет использовать команду sudo с lsof.
И поскольку этот список будет очень длинным, то можно передать его команде less:
sudo lsof | less
До появления вывода lsof, пользователи могут увидеть предупреждающее сообщение в окне терминала.
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Output information may be incomplete.
lsof пытается обработать все смонтированные файловые системы. Это предупреждающее сообщение появляется из-за того, что lsof обнаружил виртуальную файловую систему GNOME (GVFS). Это особый случай файловой системы в пространстве пользователя (FUSE). Он действует как мост между GNOME, его API и ядром. Никто, даже root, не может получить доступ к одной из этих файловых систем, кроме владельца, который её смонтировал (в данном случае, текущий пользователь). Вы можете игнорировать это предупреждение. Если же вы хотите получить доступ к данной файловой системе, то запустите lsof без sudo.
Шапка вывода lsof: