История изменений файлов Linux

Обновлено: 21.11.2024

Есть ли способ «просмотреть» (или) «сохранить» историю файлов (аналогично истории браузера). Например, если у меня есть 10 файлов, и я открываю 2 из них, следующие 2 детали должны быть сохранены в файле:

Это должно происходить всякий раз, когда я открываю файл. Поэтому, когда я открываю этот конкретный файл истории, я вижу все файлы, которые я открывал (не обязательно отредактированные — только если я открывал).

Я знаю, что lsof предназначен для просмотра списка всех открытых в настоящее время файлов, но есть ли способ получить «историю». Если для этого нет встроенной команды, можно ли создать пользовательскую команду для той же цели?

Это за репост этого сюда (хотя я все еще думаю, что стек Unix и Linux был бы лучшей альтернативой). Пожалуйста, не забудьте удалить свой вопрос о переполнении стека, так как двойная публикация здесь обычно не одобряется. Я также скопирую свой комментарий оттуда сюда. Пожалуйста, отредактируйте свой вопрос, чтобы объяснить, что вы подразумеваете под «историей файла»? Приведите несколько примеров результатов, которые вы хотели бы увидеть. Вы имеете в виду «просмотреть все изменения в любом файле в Linux»? «Просмотреть историю изменений определенного файла»? Или что? Спасибо!

Не беспокойтесь - мы все новички в какой-то момент! :-). Я не видел «Unix & Linux», так как он не был помечен там windows-subsystem-for-linux (и это то, что я обычно ищу по умолчанию). Можете ли вы подтвердить, что используете WSL? Это также важная деталь вопроса.

2 ответа 2

Я немного не уверен в протоколе. Во-первых, у вас есть тот же вопрос (но отредактированный с дополнительной информацией) о стеке Unix и Linux. И я бы дал там ответ, но он был закрыт как дубликат кем-то, кто, по-видимому, думал, что вы запрашиваете поддержку «Отменить» в Linux, что явно не основано на отредактированном вопросе.

Поэтому я собирался подождать, чтобы увидеть, сможем ли мы снова открыть версию для Unix и Linux, но, поскольку harrymc уже предоставил ответ здесь, возможно, лучше оставить эту версию открытой. Вы также пометили это как windows-subsystem-for-linux, поэтому в этом случае применяются некоторые дополнительные предостережения, которые могут сделать его более подходящим здесь, а не стек Unix и Linux.

Так или иначе, я также упомяну inotifywait . Обычно его можно найти в пакете inotify-tools (например, в Ubuntu sudo apt install inotify-tools ).

Я предполагаю, что вы хотите отслеживать файлы в определенном каталоге, так как мониторинг всего будет несколько затруднительным. Linux постоянно читает и записывает файлы, так что вы быстро получите сотни записей. Даже мониторинг чего-то вроде /etc, вероятно, будет слишком сложным, так как очень многим процессам нужно читать оттуда информацию.

Допустим, вы хотите отслеживать все, например, в $HOME/projects . Это можно сделать с помощью чего-то вроде:

Это запустит inotifywait :

  • В фоновом режиме ( -d )
  • Вывод в ~/projects-access.log
  • В том формате, который вы просили в своем вопросе по Unix и Linux (" ")
  • Для всех файлов, к которым обращались (открывали) в ~/projects

Подробности см. в man inotifywait.

Предупреждение: в WSL это будет работать только для файлов в файловой системе ext4. Это не будет работать для файлов на ваших дисках NTFS (т. е. для всего, что находится в каталоге /mnt/c и т. д.). WSL2 в настоящее время не поддерживает inotify через протокол 9P, используемый для доступа к дискам Windows из WSL.

Я полагаю, что то же самое верно и для ответа harrymc на auditctl , но я не проверял это, чтобы быть уверенным.

Вы, вероятно, знаете об использовании клавиш со стрелками вверх и вниз для прокрутки истории Bash, но знаете ли вы, что история Bash — это гораздо больше, чем просто повторение команд? В этой истории гораздо больше. Или это должно быть чем-то большим, чем история? В любом случае, команда history является одной из тех малоизвестных команд, которые являются мощными и удобными для понимания хотя бы на базовом уровне. Эта статья раскроет тайну истории Bash и сделает его более удобным инструментом системного администратора.

Фон

В Bash история команд хранится в файле ( .bash_history ) в вашем домашнем каталоге. Ведущий (.) делает файл скрытым от обычного просмотра. Чтобы увидеть его, введите команду ls -a.

Вы можете работать с файлом .bash_history так же, как и с любым другим текстовым файлом ASCII.

Вы должны знать о трех связанных переменных среды: HISTFILE, HISTFILESIZE и HISTSIZE.

  • HISTFILE — /home/ /.bash_history
  • HISTFILESIZE — 1000
  • HISTSIZE — 1000

Переменная HISTFILE содержит имя и местоположение вашего файла истории Bash.HISTFILESIZE — это количество команд, которые можно хранить в файле .bash_history. HISTSIZE — количество кэшированных команд. Как только вы достигнете 1000 команд, самые старые команды будут удалены, а новые будут сохранены.

Каждому пользователю, включая root, по умолчанию назначаются эти переменные и размеры. Если вы хотите изменить эти переменные, отредактируйте файл .bashrc в своем домашнем каталоге. Например, если вы хотите изменить размер переменных на 500 команд, отредактируйте файл .bashrc и используйте следующие записи:

Чтобы использовать новые значения без выхода из системы и повторного входа в нее, вы можете запустить файл .bashrc.

Ваши значения теперь активны для вашей текущей оболочки и любых дочерних оболочек.

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

Проблема

Дополнительные ресурсы по Linux

Проблема с историей Bash заключается в том, что она не записывается в файл .bash_history, пока вы не выйдете из системы. Это делает невозможным использование команды history для сценариев. Например, вы преподаете урок Linux и хотите проверить, выполнили ли учащиеся определенную команду для копирования своих файлов на подключенный внешний диск. Если учащийся остается в системе, вы не сможете определить, было ли выполнено копирование, потому что ваш сценарий использует его файл истории (/home/student/.bash_history), чтобы проверить, была ли выполнена команда.

Решение

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

Это записывает всю текущую историю команд сеанса в HISTFILE. И теперь ваш скрипт проверки может легко определить, выполнялась ли команда. Вы также должны быть уверены, что учащийся выполнит команду history.

[Посмотрите урок истории Сета Кенлона: Сделайте историю Bash более полезной с помощью этих советов]

Еще одна проблема

Поскольку значения HISTSIZE и HISTFILESIZE относительно велики (1000 команд), возможно, учащийся уже запускал эту команду раньше. Вы можете добавить запись export HISTCONTROL=ignoredups в их .bashrc, но это не поможет, если учащийся выполнил аналогичную команду два дня назад, потому что в файле будет показана только одна команда.

Решение этой проблемы

Чтобы решить эту проблему, вы должны очистить историю учащегося при входе в систему. Снова отредактируйте файл .bashrc и добавьте в него следующую команду.

Эта команда очищает их историю при каждом входе в систему и устраняет проблему выбора ранее выполненной команды. Вам не нужно беспокоиться о получении команды из предыдущих сеансов, потому что система отключает бездействующих пользователей по истечении определенного периода времени, если вы установите ограничение времени простоя в /etc/profile. Отредактируйте файл /etc/profile и добавьте следующую запись.

Переменная TMOUT использует количество секунд простоя. В данном случае 300 секунд — это пять минут. Вы можете установить это значение на любое количество секунд. Это значение вступит в силу при следующем входе в систему для всех пользователей. Чтобы установить индивидуальные значения времени ожидания, используйте .bashrc, но помните, что пользователи могут изменять этот файл по своему усмотрению.

Подведение итогов

История Bash — это удобный инструмент, но он может разочаровать, если вы не знакомы с его параметрами и особенностями. В истории есть еще много вариантов. Проверьте справочные страницы для получения дополнительной информации. И помните, что каждая введенная вами команда — это история в процессе создания.

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

Команда GNU history хранит список всех других команд, которые были запущены в этом сеансе терминала, а затем позволяет вам воспроизвести или повторно использовать эти команды вместо их повторного ввода. Если вы опытный пользователь терминала, вы знаете о силе истории , но для нас, дилетантов или начинающих системных администраторов, история — это немедленный прирост производительности.

Во-первых, команда history на самом деле не является командой. Вы можете убедиться в этом сами, выполнив команду в своей системе:

Ваш компьютер не может найти команду history, поскольку это встроенное ключевое слово вашей оболочки. Поскольку он записывается в используемую вами оболочку, поведение истории может отличаться в зависимости от того, используете ли вы Bash, tcsh, Zsh, dash, fish, ksh и т. д. Эта статья основана на реализации истории в Bash, поэтому некоторые функции могут не работать в других оболочках. Однако большинство основных функций остались прежними.

История 101

Чтобы увидеть историю в действии, откройте терминальную программу в вашей системе Linux и введите:

Вот что я получил:

Команда history показывает список команд, введенных с момента начала сеанса. Радость истории в том, что теперь вы можете воспроизвести любую из них с помощью такой команды, как:

Команда !3 в приглашении указывает оболочке повторно запустить команду в строке 3 списка истории. Я также мог бы получить доступ к этой команде, введя:

Это заставит историю найти последнюю команду, которая соответствует предоставленному вами шаблону (в данном случае это шаблон dnf), и запустить ее.

История поиска

Вы также можете использовать историю для повторного запуска последней введенной команды, набрав !! . Соединив его с grep , вы можете искать команды, соответствующие текстовому шаблону, или, используя его с tail , вы можете найти несколько последних выполненных команд. Например:

Еще один способ получить доступ к этой функции поиска — нажать Ctrl-R, чтобы вызвать рекурсивный поиск в истории команд. После ввода приглашение изменится на:

Теперь вы можете начать вводить команду, и соответствующие команды будут отображаться для вас, чтобы выполнить их, нажав клавишу «Ввод» или «Ввод».

Изменение выполняемой команды

Вы также можете использовать историю для повторного запуска команды с другим синтаксисом. Вы можете пересмотреть историю с историей. Например, если я хочу изменить свою предыдущую историю команд | grep dnf в историю | grep ssh , я могу выполнить следующее в командной строке:

Команда запускается повторно, но с заменой dnf на ssh . Другими словами, запускается эта команда:

Удаление истории

Файл истории хранится в файле, который вы также можете изменить. Пользователи оболочки Bash находят его в своем домашнем каталоге как .bash_history .

Дальнейшие шаги

Есть ряд других вещей, которые вы можете делать с историей:

  • Установите размер буфера истории на определенное количество команд
  • Запишите дату и время для каждой строки в истории.
  • Запретить запись определенных команд в историю

Для получения дополнительной информации о команде history и других интересных вещах, которые вы можете с ней делать, ознакомьтесь со статьями Сета Кенлона о синтаксическом анализе истории, модификаторах поиска по истории и Руководстве по GNU Bash.

Эта статья была первоначально опубликована в июне 2018 г. и дополнена дополнительной информацией редактором.

Файл в Linux имеет три метки времени: atime (время доступа) — время последнего доступа к файлу/открытия какой-либо командой или приложением, таким как cat , vim или grep . mtime (время изменения) — время последнего изменения содержимого файла.

Как проверить владельца файла в Unix?

А. Вы можете использовать команду ls -l (отображать информацию о ФАЙЛАХ), чтобы найти имя владельца файла/каталога и имена групп. Параметр -l известен как длинный формат, который отображает типы файлов Unix/Linux/BSD, разрешения, количество жестких ссылок, владельца, группу, размер, дату и имя файла.

Как узнать, кто изменил файл в Linux?

Возможно, вы сможете сократить список.

  1. используйте команду stat (например: stat , см. это)
  2. Найдите время модификации.
  3. Используйте последнюю команду, чтобы просмотреть журнал в истории (см. это)
  4. Сравните время входа/выхода из системы с отметкой времени изменения файла.

Как выполнить поиск документа по дате изменения?

Проводник имеет удобный способ поиска недавно измененных файлов, встроенный прямо во вкладку «Поиск» на ленте. Перейдите на вкладку «Поиск», нажмите кнопку «Дата изменения», а затем выберите диапазон. Если вы не видите вкладку "Поиск", щелкните один раз в окне поиска, и она должна появиться.

Можно ли просмотреть историю изменений в Word?

Лучший способ просмотреть изменения — выбрать «Редактировать документ в Word». Это откроет документ в вашем локальном Word 2013. Затем вы можете щелкнуть вкладку «Обзор» и установить «Отслеживание» на «Все разметки». После этого вы увидите все отслеженные изменения в документе.

Можете ли вы просмотреть историю изменений в Word?

Можете ли вы просмотреть историю редактирования документа Word? Да, после настройки документа для отслеживания изменений, в режиме ПРОСМОТР. Вы даже можете выбрать, какие изменения вы хотите отслеживать. … вы можете увидеть историю в файле документа Word.

Как узнать, когда последний раз обращались к файлу?

  1. В области поиска меню "Пуск" введите * и нажмите Enter. Поиск знака * означает, что Windows Search должен открыть каждый файл на вашем компьютере. …
  2. Переключите представление "Окно" на "Подробности".
  3. Нажмите правой кнопкой мыши строку категорий и выберите "Еще".
  4. В следующем окне прокрутите вниз и установите флажок «Дата доступа», а затем нажмите «ОК».

Как найти историю файлов в Linux?

В Linux есть очень полезная команда, которая показывает вам все последние команды, которые недавно использовались. Команда называется просто history, но к ней также можно получить доступ, просмотрев ваш файл . bash_history в вашей домашней папке. По умолчанию команда истории покажет вам последние пятьсот введенных вами команд.

Как изменить время изменения файла в Unix?

  1. Создайте пустой файл с помощью касания. …
  2. Изменить время доступа к файлу с помощью -a. …
  3. Измените время модификации файла с помощью -m. …
  4. Явная установка времени доступа и модификации с помощью -t и -d.

Как отредактировать файл без изменения временной метки в Linux?

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

Как сменить владельца в Unix?

Сколько типов разрешений есть у файла в Unix?

Объяснение: В системе UNIX файл может иметь три типа разрешений: чтение, запись и выполнение. Разрешение на чтение означает, что файл доступен для чтения.

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