- Работа с историей команд bash
- Настройка размера истории
- Настройка способа сохранения
- Простой просмотр истории
- Выполнение команд из истории по номеру
- Передвижение по истории
- Поиск по истории
- Поиск по истории по началу команды
- Подстановки и изменения команд
- Операции с отдельными словами
- Манипуляции с путями и именами файлов
- Команда History в Linux (Bash History)
- History Command in Linux (Bash History)
- В этой статье мы поговорим о history команде, которая позволяет просматривать список ранее выполненных команд, осуществлять поиск по списку и манипулировать файлом истории.
- Использование history команд и расширений истории
- Сохранение списка истории
- Очистка истории
- Изменение истории поведения
- Вывод
- 📑 Команда history или работа с историей введенных команд
- Настройки истории команд
- Включить/отключить перезапись файла истории
- Показать список ранее выполненных команд bash
- Выполнение команды из истории bash
- История — Основы командной строки
- Самостоятельная работа
- Остались вопросы? Задайте их в разделе «Обсуждение»
Работа с историей команд bash
Настройка размера истории
Количество хранимых команд определяется двумя переменными: HISTSIZE и HISTFILESIZE . Первая определяет количество команд, хранимых в памяти, вторая — в файле. Их уместно устанавливать в
/.bachrc . Такие значения, мне представляются оптимальными:
Настройка способа сохранения
По умолчанию, каждый экземпляр bash переписывает историю. То есть, если вы запустите два терминала, что-то в них сделаете, а потом закроете, то история сохранится только от последнего закрытого. (Она затрёт историю первого закрытого.) Это очень неудобно и легко исправляется вот такой командой:
которую тоже уместно написать в
Простой просмотр истории
Пять последних команд:
В сочетании с grep :
Но это всё только присказка.
Выполнение команд из истории по номеру
Восклицательный знак выполняет команду с данным номером. Пример:
Как видно из последней команды, подстановка с восклицательным знаком может быть частью другой команды. Она может быть использована в пайпе или в другом контексте. Примеры:
Номер может быть относительным, с конца: !-2 . Специальное сокращение !! — последняя команда.
Передвижение по истории
Все знают о том, что по истории можно двигаться клавишами-стрелками. Но иногда бывают ситуации, когда эти клавиши недоступны, работают не правильно, или просто отсутствуют (у меня такое было, когда я подключался каким-то ssh-клиентом с iPad). На этот случай полезно знать, что промотка работает по Ctrl-p и Ctrl-n .
Поиск по истории
Режим поиск включается по Ctrl-r . Для поиска следующего совпадения надо повторно нажать Ctrl-r . Для передвижения по совпадениям в другую строну есть сочетание клавиш Ctrl-s .
Проблема в том, что Ctrl-s в большинстве терминалов приводит к засыпанию. Чтобы выйти из сна, нажмите Ctrl-q . Чтобы отключить засыпание, есть команда:
Поиск по истории по началу команды
Bash (а вернее readline) поддерживает очень удобный стиль поиска — по первым символам команды. К сожалению, по умолчанию, этот механизм недоступен. Чтобы его включить, надо написать в
/.inputrc что-то такое:
Теперь вы можете набрать начало команды и нажать Shift- . И для вас будет найдена последняя команда из истории с таким же началом. Стрелки с клавишей Shift теперь позволяют двигаться по совпадениям.
Естественно, можно настроить любые другие клавиши.
Подстановки и изменения команд
Вы уже видели три простейшие подстановки:
- !! — последняя команда
- !n — n-ная в истории команда (с номером n)
- !-n — n-ная с конца команда
После восклицательного знака можно указывать подстроку-начало команды.
!ls — последняя команда ls (со всеми аргументами).
Можно указывать подстроку для поиска:
!?encoder? последняя команда с подстрокой encoder .
Операции с отдельными словами
Все слова (параметры разделённые пробелами) доступны через модификатор : (двоеточие). Пример:
Здесь !! — ссылка на последнюю команду, а :1 ссылка на её первый аргумент. Поэтому, в нашем примере echo . 1 преобразуется в echo /home .
Для этого случая: когда мы оперируем именно с последней командой, можно опускать один восклицательный знак и двоеточие:
Есть и привычные сокращения: первый аргумент — ^ , последний — $ , все — * . Имеются ввиду именно параметры команды. Без учёта самой команды.
Манипуляции с путями и именами файлов
Следующий уровень модификаторов позволяет минимально управлять именами файлов.
Модификатор :t даёт доступ к имени файла. Эта удобно скажем в таком сценарии работы:
Вы обращаетесь к некому файлу, указывая полный путь:
Потом переходите в директорию с этим файлом
Выполняете ещё какие-то команды, а потом решаете отредактировать файл. Тогда вы можете написать так:
То есть, вы находите в историю последнюю команду cat ( !cat ), берёте её последний аргумент :$ , а от него оставляете только имя файла :t .
Модификатор :h работает противоположно, он отрезает имя файла, оставляя весь остальной путь. Это полезно, например, когда вы хотите перейти в директорию с последним просмотренным файлом:
Последняя команда перейдёт в директорию /etc .
Источник
Команда History в Linux (Bash History)
History Command in Linux (Bash History)
В этой статье мы поговорим о history команде, которая позволяет просматривать список ранее выполненных команд, осуществлять поиск по списку и манипулировать файлом истории.
Если вы проводите много времени в командной строке, просмотр истории команд, которые вы ранее выполняли, может быть полезной функцией, которая может упростить вашу повседневную работу и повысить производительность.
Использование history команд и расширений истории
history является встроенной оболочкой, и ее поведение может немного отличаться от оболочки к оболочке. Мы рассмотрим встроенную версию Bash history .
В простейшей форме, когда вызывается без каких-либо параметров или аргументов, history команда отображает весь список истории с номерами строк.
При наборе !n выполняется n-я команда из списка истории, а !-n команда n строк назад. В следующем примере мы выполняем команду на линии 467 :
Другой способ выполнить команду — использовать !word расширение. word относится к самой последней команде, начинающейся со слова.
Как правило, history отображает много строк вывода, которые не помещаются на экране. Чтобы просмотреть выходные данные по одной странице за раз, передайте их в пейджерную программу, например, more или less команду:
Чтобы отобразить последние n строки, передайте число в качестве аргумента команде. Например, чтобы просмотреть только последние пять строк из списка истории, введите:
Используйте клавиши со стрелками up и down для навигации по записям в списке. Когда появится команда, которую вы искали, нажмите, Enter чтобы выполнить ее.
Введите !! для выполнения предыдущей команды:
Это особенно полезно, когда вы забыли добавить команду sudo , и вместо повторного ввода команды вы можете набрать:
!-1 то же самое, что !! и выполняет последнюю команду из списка истории, от !-2 второй до последней и т. д.
^word1^word2^ Расширение позволяет повторно запустить последнюю команду, заменив «word1» на «word2». Если вы случайно набрали sduo command вместо sudo command вас, вы можете повторить команду, используя правильное слово с:
Используйте grep команду для фильтрации вывода. Например, чтобы просмотреть все команды, включая «nano», вы должны выполнить:
Теперь, если вы хотите перезапустить nano setup.py команду, просто наберите:
Другой способ поиска по истории команд — нажать Ctrl-R . Приглашение изменится на следующее, и вы сможете начать поиск ранее выполненной команды.
Оболочка отобразит соответствующую строку. Чтобы перейти к следующему согласованному предложению, нажмите еще Ctrl-R раз.
Обратитесь к руководству Bash для получения дополнительной информации о расширении истории , модификаторах и обозначениях.
Сохранение списка истории
По умолчанию при запуске нового сеанса Bash читает список истории из .bash_history файла. Список команд, которые выполняются в текущем сеансе, сохраняется в памяти и сохраняется в файл при закрытии сеанса.
Если вы открыли несколько сеансов оболочки, сохраняется только история сеанса, который был закрыт последним.
-a Опция позволяет сохранить текущий список истории сеанса в .bash_history файл:
-w Вариант записывает полный список истории в файл истории.
Очистка истории
Команда history позволяет очистить полный список истории или удалить определенные части.
Чтобы очистить список истории, используйте -c параметр:
Чтобы удалить определенную строку или строки между начальной и конечной позициями из списка истории, используйте -d параметр.
Например, чтобы удалить строки между 365 и 375 (включая эти строки), введите:
Если вы указываете только один номер -d опции, команда удаляет данную строку.
Когда используется отрицательное целое число, строки отсчитываются от конца списка истории.
Приведенные выше команды очищают список истории, который хранится в памяти, но не удаляет записи из .bash_history файла на диске. Чтобы очистить файл, вам нужно записать в файл список истории:
Изменение истории поведения
Поведение истории Bash может быть определено с использованием нескольких различных переменных среды . При изменении поведения истории установите переменные в
/.bashrc любом другом файле конфигурации, который загружается при входе пользователя в систему.
По умолчанию Bash хранит 500 строк в списке истории команд. HISTSIZE Переменная позволяет изменять это значение. Чтобы установить его на 10000, добавьте следующую строку в ваш .bashrc файл:
HISTCONTROL Переменная принимает разделенный двоеточиями список значений , которые определяют , каким образом команды сохраняются в списке истории:
- ignorespace — команды, начинающиеся с пробела, не сохраняются в списке истории.
- ignoredups — дубликаты команд не сохраняются.
- ignoreboth — это стенография, включающая в себя ignorespace и ignoredups .
Когда HISTTIMEFORMAT переменная установлена, Bash добавляет метку времени выполнения команды в каждой строке.
Например, если вы установите:
История будет отображаться в следующем формате:
Вывод
Команда history отображает список ранее выполненных команд. Например, вы можете использовать историю, чтобы просмотреть длинную команду, которую вы использовали до того, что вы не можете вспомнить.
Источник
📑 Команда history или работа с историей введенных команд
Иногда при работе в Linux Ubuntu/Mint в терминальном режиме нам нужно выполнять одни и те же команды несколько раз. Это занимает очень много времени и порождает ошибки при вводе, особенно если эти команды очень длинные.
К счастью, Bash имеет хорошее решение этой проблемы — историю bash. Используя механизм истории bash, ранее выполненные команды могут легко извлекаться и выполняться без повторного ввода команды. Linux хранит историю командной строки каждого пользователя в домашнем каталоге.
По умолчанию команда bash — history отображает список ранее набранных команд с номерами строк. Но вы также можете получить историю команд с указанием даты и времени и повторно запускать эти команды различными способами.
Настройки истории команд
В файле .bashrc вашей домашней директории существует несколько переменных, которые используются для управления записями истории команд. Bash хранит историю команд двумя способами — история может быть сохранена в файле и в оперативной памяти.
Переменная HOSTFILE используется для установки местоположения и имени файла истории. По умолчанию историческая информация хранится в файле .bash_history. Сколько команд может быть сохранено в файле, задается с помощью переменной HISTFILESIZE (в принцепе эта переменная задаёт размер файла истории), а количество команд текущего сеанса может храниться в памяти — с помощью переменной HISTSIZE.
Откройте файл .bashrc в любом редакторе и выясните настройки этих параметров по умолчанию. Здесь для редактирования этого файла используется текстовый редактор nano.
В соответствии с содержимым этого файла значение HISTFILESIZE по умолчанию равно 2000, а HISTSIZE — 1000. Вы можете изменить эти значения по своему выбору.
Если вы не хотите, чтобы исполняемые команды записывались в историю, вы можете переменную окружения HISTSIZE сделать равной 0, после чего команды перестанут записываться в историю:
Включить/отключить перезапись файла истории
Для каждого нового сеанса файл истории дописывается текущими командами истории в конце сеанса. Для этого существует запись в файле .bashrc:
Чтобы проверить текущую настройку перезаписи истории можно не открывать файл в редакторе, а выполнить команду:
Если вы хотите хотите добавлятьть новые записи истории в конец файла, выполните следующую команду:
Чтобы перезаписывать файл истории, нужно ввести команду:
Тогда на проверку настройки выдаст:
Показать список ранее выполненных команд bash
Чтобы получить список выполненых команд, выполните следующую основную команду
Вы можете получить определенное количество истории, указав номер с помощью команды истории. Следующая команда извлекает 3 последние выполненные команды из истории.
Список истории конкретной команды можно получить с помощью команды команда history. Например, следующая команда возвращает список истории всех команд «ls».
Выполнение команды из истории bash
Вы можете легко выполнить любую команду из истории, указав номер строки с символом «!». Следующая команда выполнит команду строки № 17 из файла истории
Если использовать два восклицательных знака, будет повторена предыдущая команда:
Для того, чтобы вывести историю команд с игнорированием дублей достаточно использовать значение erasedups переменной окружения HISTCONTROL:
Для очистки истории команд достаточно использовать параметр -c команды history:
Источник
История — Основы командной строки
Чем больше работаешь в командной строке, тем чаще возникает необходимость повторять введённые ранее команды. Самый простой способ просматривать историю команд — нажимать клавиши «вверх/вниз». При каждом нажатии стрелки «вверх» в поле ввода начнёт появляться предыдущая выполненная команда, если нажать «вниз» — то следующая.
История команд bash хранится в специальном файле .bash_history , который лежит в домашней директории пользователя. Каждый раз, когда пользователь вводит команду, она попадает именно в этот файл. Он ничем не отличается от остальных файлов: его можно открыть, посмотреть и даже отредактировать. За то, какое количество команд хранится в истории, отвечает переменная окружения HISTFILESIZE . Если она выставлена, то берётся указанное в ней число, иначе история не обрезается и файл .bash_history растёт «бесконечно».
Посмотреть историю можно и более простым способом, достаточно выполнить команду history .
Эта команда выведет содержимое файла .bash_history , добавив слева номер. Если набрать history 5 , то отобразятся только 5 последних введённых команд. Используя номер команды в выводе history , можно выполнить повторный запуск без необходимости набирать или копировать команду из истории.
При необходимости историю всегда можно погрепать:
Последнее, и самое интересное — реверсивный поиск. Если нажать комбинацию Ctrl + r , то запустится специальный поиск по истории. Он ожидает ввода символов и сразу отображает ближайшую команду, в которой эти символы встречаются. Если найденное соответствие вас не устроило, то повторное нажатие Ctrl + r выберет следующее соответствие из истории.
На скриншоте выше продвинутая версия этого поиска, работающая через утилиту fzf.
Самостоятельная работа
- Проанализируйте историю на локальном компьютере
- Поэкспериментируйте с реверсивным поиском
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты.
Источник