Поиск в истории команд Linux

Обновлено: 07.07.2024

Нам нужно вводить различные команды в оболочке для различных целей. Иногда нам нужно выполнять одни и те же команды несколько раз. Вводить одни и те же команды несколько раз очень трудоемко или скучно. К счастью, в bash есть хорошее решение этой проблемы. Используя механизм истории bash, ранее выполненные команды могут легко извлекаться и выполняться без повторного ввода команды. Linux хранит историю командной строки каждого пользователя в домашнем каталоге. По умолчанию команда bash history отображает список ранее введенных команд с номерами строк. Но вы также можете получить историю команд с указанием даты и времени. В этом руководстве показано, как изменить настройки команды history и использовать команду history для получения списка ранее введенных команд различными способами.

Многие переменные используются для управления записями истории команд. Bash хранит историю команд двумя способами. Он может храниться в файле и в памяти. Переменная HOSTFILE используется для установки местоположения и имени файла истории. По умолчанию информация об истории хранится в файле .bash_history. Сколько команд может храниться в файле, задается с помощью переменной HISTFILESIZE, а сколько команд текущего сеанса может храниться в памяти, задается переменной HISTSIZE. Откройте файл .bashrc в любом редакторе и узнайте значения этих параметров по умолчанию. Здесь текстовый редактор используется для редактирования этого файла.


В соответствии с содержимым этого файла значение HISTFILESIZE по умолчанию – 2000, а HISTSIZE – 1000. Вы можете изменить эти значения по своему выбору.


Включить/отключить параметр перезаписи истории:

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

Выполните следующую команду, чтобы проверить текущую настройку параметра перезаписи истории.

Выполните следующую команду, чтобы перезаписать файл истории.


Показать список ранее выполненных команд bash:

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


Вы можете получить конкретный номер истории, упомянув номер с помощью команды history. Следующая команда извлекает из истории 3 последние выполненные команды.


Список истории конкретной команды можно получить, используя команду с командой history. Например, следующая команда извлекает список истории всех команд «ls».


Выполнение команды из истории:

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


Вы можете использовать отрицательное значение позиции для выполнения команд из истории. В следующем примере выполняются три команды, и первая выполненная команда выполняется из истории с использованием отрицательного значения.

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


Отображение списка истории по дате и времени:

Переменная HISTTIMEFORMAT используется для получения информации об истории команд по дате и времени. «%F» используется для получения даты «%T» используется для получения времени. Выполните следующую команду, чтобы получить список истории по дате.


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

Список истории команд может содержать запись о многих повторяющихся командах, если пользователь запускает одну и ту же команду несколько раз. Если вы хотите исключить повторяющуюся команду из истории во время получения списка, вам необходимо использовать переменную HISTCONTROL со значением «ignoredrups».


Отфильтровать любую команду из истории:

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


Отменить команду экспорта:

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


Отключить историю команд:

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


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


Очистить историю команд:

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


Список истории прокрутки:

Вы можете легко перемещаться между ранее выполненными командами с помощью стрелок вверх и стрелок вниз. Без использования клавиши со стрелкой вы можете вернуться к списку истории, нажав Ctrl+P, и можете перейти к списку истории, нажав Ctrl+n. Включите команду истории, запустите несколько команд и проверьте эти параметры.

Команда поиска в истории:

Вы можете найти команду в истории, нажав Ctrl+R. При нажатии этих клавиш появится опция поиска. Команда будет искать в истории на основе нажатия пользователем клавиши.

Заключение

Пользователи Linux могут сэкономить свое время, эффективно используя команду history. В этом руководстве мы попытаемся объяснить наиболее часто используемые команды истории, чтобы помочь пользователям правильно использовать эту команду.

Об авторе

Фахмида Есмин

Я веду курсы веб-программирования. Мне нравится писать статьи или учебные пособия на различные темы в области ИТ. У меня есть канал на YouTube, на котором публикуются различные учебные пособия по Ubuntu, Windows, Word, Excel, WordPress, Magento, Laravel и т. д.: Справка Tutorials4u.

Кроме просмотра истории, есть ли способ отфильтровать мою историю?

Скажем, я хочу найти команду, начинающуюся с "ssh"?

11 ответов 11

Нажмите Ctrl + R и введите ssh . Ctrl + R начнет поиск от самой последней команды к старой (обратный поиск). Если у вас есть более одной команды, начинающейся с ssh , нажимайте Ctrl + R снова и снова, пока не найдете совпадение.

После того, как вы нашли совпадение, вы можете нажать Enter, чтобы выполнить команду, или курсор влево/вправо, чтобы просто выбрать текст команды.

По умолчанию для Ctrl + R нет опции реверса, чтобы инвертировать направление поиска, но здесь вы найдете несколько советов по этому поводу.


Если вы просто хотите найти свою историю, вы можете просто использовать history | grep ssh , заменив ssh на то, что вы хотите найти.

Я делаю небольшую вариацию вышеизложенного, у меня хорошо работает (если вы имеете в виду свою историю bash

В своей домашней папке я создаю файл с именем

Это внутри

Примечание: вышеописанное больше не работает в 14.04, так что это делает то же самое -

Затем, набирая любую часть предыдущей команды, которую я хочу, и используя кнопки page up/page dn, выполняется поиск в истории, всегда начиная со страницы вверх

@doug, хм... У меня Ubuntu 15.04. Это решение работает, но путает клавиши Ctrl+LeftArrow / Ctrl+RightArrow. Проблема выглядит как создание файла .inputrc, а не записей в нем.

Вот еще один метод с использованием классических команд (более вероятно, что он будет работать в разных дистрибутивах). История команд хранится в файле .bash_history в вашем домашнем каталоге, поэтому вы можете сделать это:

Не забудьте указать флаг -i, если вам нужен поиск без учета регистра.

Нажатие Ctrl + R запустит режим "обратного поиска", ввод "ssh" приведет к поиску в истории команд, содержащих "ssh".

Я нашел следующую функцию где-то в Интернете и использовал ее с большим успехом. Поместите это в свой ~/.bashrc :

Теперь перезагрузите вашу оболочку: exec bash . Теперь у вас есть новая команда, которую вы можете использовать следующим образом:

Он покажет вам список подходящих команд из вашей истории. Чтобы запустить команду, введите ! затем номер команды. Вот пример:

Мне нравится этот подход больше, чем Ctrl + R, потому что он обеспечивает гораздо более гибкий поиск, и я могу видеть несколько результатов одновременно.

Поместите это в свой ~/.bashrc :


Хотел написать это как комментарий к @ssmy, но не смог заставить форматирование комментария сотрудничать.

После поиска в истории с помощью history | grep ssh, затем вы можете выполнить нужную команду, введя ее номер с восклицательным знаком, например, !42 .

История хороша, но ограничена. Я предпочитаю настроить свою среду bash таким образом, чтобы регистрировать все команды, которые я когда-либо запускал, в дополнение к каталогу, в котором они выполнялись. Затем Я запускаю команду, чтобы перечислить все команды, которые я запускал в текущем каталоге, которые я могу передать в grep и т. д. — это называется «блюдо», см.:

Также есть очень полезная команда 'dishg' (или тарелка глобальная), которую вы получаете бесплатно, которая выводит каждую когда-либо запущенную команду, независимо от каталога. Очевидно, что это полезно только при использовании с grep и tail и т. д.

Я использую его уже много лет, и это буквально первое, что я устанавливаю каждый раз, когда устанавливаю новый бокс. Он записывает команды, которые вы запускаете, в текстовые файлы в скрытом каталоге (~/.dish). У меня никогда не было проблем с дисковым пространством.

Управление историей bash

Вы, вероятно, знаете об использовании клавиш со стрелками вверх и вниз для прокрутки истории 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 — это удобный инструмент, но он может разочаровать, если вы не знакомы с его параметрами и особенностями. В истории есть еще много вариантов. Проверьте справочные страницы для получения дополнительной информации. И помните, что каждая введенная вами команда — это история в процессе создания.

Команда history в Linux используется для просмотра ранее выполненных команд из терминала. Он покажет список команд с идентификатором рядом с каждой командой.

Просмотреть историю последних выполненных команд Linux

Исторически запущенные команды сохраняются в специальном файле оболочкой Linux.

Просмотреть историю выполнения команд в терминале

Просмотреть историю выполнения команд в Терминале

Установить дату и время истории для каждой команды

Команда history также сохраняет дату и время выполнения команды, однако по умолчанию не показывает время выполнения прошлых команд.

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

Установить временные метки истории для каждой команды Linux

Установка временных меток истории для каждой команды Linux

Просмотр истории команд Linux по дате

Теперь вы можете направить приведенный выше вывод команды history в grep, чтобы получить историю команд, выполненных в определенную дату.

 Просмотр истории команд по дате

Просмотр команд журнала по дате

Аналогичным образом можно фильтровать выходные данные по нескольким контрольным датам.

Просмотр команд истории по диапазону дат

Просмотр команд истории по диапазону дат

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

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

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

Постоянная установка даты и времени истории для каждой команды

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

Например, в случае «Bash» выполните следующее, чтобы экспортировать переменную навсегда.

Если файл .bash_profile существует, оператор '>>' добавит оператор экспорта в файл, в противном случае он создаст файл и запишет оператор.

Заключение

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

Спасибо за прочтение. Сообщите нам свои вопросы или мысли в комментариях ниже!

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