Команда History в Linux (История Bash)
Если вы проводите много времени в командной строке, просмотр истории команд, которые вы ранее запускали, может быть полезной функцией, которая может упростить вашу повседневную работу и повысить вашу производительность.
В этой статье мы поговорим о команде 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 переменная HISTTIMEFORMAT , Bash HISTTIMEFORMAT времени выполнения команды в каждой строке.
Например, если вы установите:
История будет отображаться в следующем формате:
Выводы
Команда history отображает список ранее выполненных команд. Например, вы можете использовать историю, чтобы просмотреть длинную команду, которую вы использовали раньше, но не можете вспомнить.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Как использовать историю команд в Bash на Linux VPS
В серверной среде работа с командной строкой занимает много времени. Часто используется оболочка bash – командная оболочка по умолчанию большинства дистрибутивов.
Вероятно, во время терминальной сессии общие команды будут повторяться часто, а вариации данных команд – еще чаще. Конечно, сначала набирать каждую команду вручную очень полезно, так как это – лишняя возможность попрактиковаться, но в какой-то момент это начинает надоедать и раздражать.
К счастью, bash-оболочка имеет некоторые довольно хорошо разработанные функции истории. Умение продуктивно использовать и управлять историей в bash позволяет тратить меньше времени на ввод команд, и тем самым увеличивает объем выполненной работы. Как известно, среди разработчиков популярен так называемый принцип DRY (Don’t Repeat Yourself). Продуктивное использование истории в bash помогает работать с информацией согласно данному принципу.
Это руководство демонстрирует все функции на VPS с Ubuntu 12.04, но почти все современные дистрибутивы Linux будут работать подобным образом.
Настройки истории в bash
Прежде чем использовать историю, нужно отредактировать некоторые настройки bash, чтобы сделать ее более применимой.
Bash позволяет редактировать количество предыдущих команд, которые нужно сохранить в истории. Для этого в bash есть две отдельные опции: параметр «HISTFILESIZE» задает количество команд, хранящихся в файле истории, а «HISTSIZE» указывает количество команд, которое сохраняется в памяти для текущей сессии.
Это означает, что в памяти можно установить разумные пределы размера истории для текущего сеанса, а также хранить более объемную историю на диске для дальнейшего использования.
По умолчанию bash устанавливает очень умеренные значения этих параметров, поэтому их необходимо расширить, чтобы иметь возможность использовать более полную историю. Некоторые дистрибутивы уже увеличили значения параметров истории по умолчанию.
Чтобы изменить данные опции, откройте файл «
/.bashrc» с помощью редактора:
Найдите опции «HISTSIZE» и «HISTFILESIZE». Если значения для них установлены, измените их. Если таких параметров в данном файле нет, внесите их. Данное руководство может обойтись 10000 строк для диска и 5000 строк, сохраненных в памяти. Это достаточно скромные значения для большинства систем, но даже их придется понизить, если они влияют на производительность:
По умолчанию bash пишет историю в конце каждой сессии, переписывая и обновляя уже существующий файл. Это значит, что при работе в нескольких bash-сессиях будет сохранена только история последней завершенной сессии.
Это можно обойти, установив параметр «histappend», который будет добавлять историю, а не перезаписывать её. Возможно, он уже установлен; в противном случае его можно активировать, добавив следующую строку:
shopt -s histappend
Чтобы bash вносил команды в историю сразу, не дожидаясь завершения сессии (чтобы команды одного терминала сразу же были доступны в другом), можно установить или добавить команду «history –a» для опции «PROMPT_COMMAND», которая содержит команды, которые выполняются перед каждой новой командной строкой.
Но для правильной работы такой команды нужна уловка. В файл истории нужно сразу добавить «history –a», затем очистить текущую историю данной сессии с помощью «history –c», после этого прочесть отредактированный файл истории и вернуться в историю данной сессии с помощью «history –r».
Это выглядит примерно так:
export PROMPT_COMMAND=»history -a; history -c; history -r; $PROMPT_COMMAND»
Завершив эту операцию, сохраните изменения и закройте файл.
Чтобы активировать изменения, выйдите из системы и войдите снова, либо используйте команду source на данный файл, набрав:
Просмотр предыдущей истории в Bash
Для просмотра истории в Bash используется команда «history». Она выводит предыдущие команды, по команде на строку. В большинстве случаев она должна вывести количество строк, установленное значением «HISTSIZE». На данный момент команд не так много:
history
. . .
43 man bash
44 man fc
45 man bash
46 fc -l -10
47 history
48 ls -a
49 vim .bash_history
50 history
51 man history
52 history 10
53 history
Также она выводит порядковый номер команды. Каждая команда связана с номером для удобства использования.
Вывод можно сократить, указав количество команд после «history». Например, если нужно вывести только последние 5 введенных команд, можем набрать:
history 5
50 history
51 man history
52 history 10
53 history
54 history 5
Чтобы найти в истории все команды, которые содержат определенную строку, можно просто использовать grep после символа вертикальной черты. Например, чтобы найти строки, содержащие «cd», наберите:
history | grep cd
33 cd Pictures/
37 cd ..
39 cd Desktop/
61 cd /usr/bin/
68 cd
83 cd /etc/
86 cd resolvconf/
90 cd resolv.conf.d/
Запуск команд из истории в Bash
Научиться выводить команды, конечно, полезно, но, кроме использования порядкового номера команд, это почти ничего не дает. Для вызова любой предыдущей команды нужно использовать специальный синтаксис.
Вызвать любую из предыдущих команд можно, введя ее номер и поставив перед ним восклицательный знак «!». Опираясь на приведенный выше пример истории, можно быстро вывести оперативную страницу руководства, просто введя:
Это немедленно вызовет и выполнит команду в истории под номером 51.
Можно также выполнять команды относительно текущей позиции. Это делается с помощью синтаксиса «!-n», где «n» нужно заменять номером команды, которую нужно выполнить.
К примеру, если нужно вывести и выполнить предпоследнюю набранную команду, то можно набрать «!-2». Итак, если было выведено содержимое длинного пути к каталогу, а затем введена команда echo, и теперь нужно снова вывести путь, то сессия может выглядеть следующим образом:
ls /usr/share/doc/manpages
echo hello
!-2 # lists the contents again
Чтобы повторно выполнить последнюю команду, вместо использования «!-1» в bash можно использовать «горячую» команду «!!», что выполняет:
Многие используют это в случае, если они набрали команду, требующую привилегий sudo. При наборе «sudo !!» команда будет перевыполнена с привилегиями sudo. Такая сессия выглядит примерно так:
touch /etc/hello
touch: cannot touch `/etc/hello’: Permission denied
sudo !!
sudo touch /etc/hello
[sudo] password for demouser:
Данный пример демонстрирует еще одно свойство этого полезного синтаксиса. По сути, это простая замена, потому при необходимости его можно включать в другие команды.
Прокрутка истории в Bash
Прокрутить историю в Bash, выводя каждую последующую команду в командной строке для редактирования, можно несколькими способами.
Наиболее распространенным способом является нажатие клавиши со стрелкой вверх в командной строке.
Каждое дополнительное нажатие этой клавиши будет возвращать на шаг назад в истории командной строки. Чтобы изменить направление, используйте клавишу со стрелкой вниз, которая прокручивает историю вплоть до последней командной строки.
Вместо клавиш со стрелками можно использовать сочетания клавиш: «CTRL-p» для прокрутки истории назад, и «CTRL-n» для прокрутки вперед.
Чтобы вернуться к текущей командной строке, можно использовать «Meta->». В большинстве случаев «meta» и символ «>» заменяют комбинацию «ALT-Shift-.». Это очень полезно в случае, если текущая командная строка находится достаточно далеко.
Чтобы переместиться к первой строке истории, используйте обратный манёвр, «Meta-<». Обычно это сочетание замещает «ALT-Shift-,».
В качестве подведения итогов ниже приведен список наиболее важных клавиш перемещения по истории:
- Клавиша со стрелкой вверх: прокрутка истории назад;
- CTRL–p: прокрутка истории назад;
- Клавиша со стрелкой вниз: прокрутка истории вперед;
- CTRL–n: прокрутка истории вперед;
- ALT–Shift-.: перемещение в конец истории (к последней введенной команде);
- ALT–Shift-,: перемещение в начало истории (к первой введенной команде).
Поиск по истории в Bash
Хотя использование комбинации «history | grep» – самый простой способ выполнения некоторых процедур, его работа во многих ситуациях далеко не идеальна.
Bash имеет функции поиска по истории. К примеру, часто используется поиск по истории в обратном направлении (сначала выводятся самые «свежие» результаты) с помощью сочетания клавиш «Ctrl-r».
Например, можно ввести «Ctrl-r» и набрать часть предыдущей команды. Необходимо набрать только часть команды. Если же введенное значение совпало с ненужной командой, можно снова нажать «Ctrl-r», чтобы вывести следующий результат.
Если нужная команда была случайно пропущена, можно изменить направление поиска при помощи комбинации «CTRL-s». Это также полезно при перемещении по истории, описанном в предыдущей главе, для поиска вперед.
Примечание: во многих терминалах, комбинация «CTRL-s» блокирует сессию терминала. То есть, при попытке использовать ее для поиска она будет «замораживать» терминал. Чтобы разблокировать сессию, просто наберите «Ctrl-q».
Эти функции приостановки и возобновления сессии в большинстве современных терминалов не нужны, потому их можно отключить, набрав:
Теперь нужно внести это в файл «
/.bashrc», чтобы обеспечить постоянное выполнение команды.
Теперь эта комбинация поиска будет работать верно.
Поиск по введенной части команды
Распространенный способ поиска – ввести часть команды, выяснить, была ли она выполнена ранее, и затем найти ее в истории.
Как правильно выполнить поиск, используя уже внесенные в командную строку данные? Переместите курсор в начало строки при помощи «CTRL-a», затем вызовите обратный просмотр истории «CTRL-r», вставьте текущую строку в поиск с помощью «CTRL-y», и снова используйте «CTRL-r» для обратного поиска.
К примеру, необходимо обновить кэш пакета в Ubuntu. Эта команда уже была выполнена, но чтобы проверить, так ли это, можно набрать sudo:
На данном этапе видно, что эта команда точно уже выполнялась недавно. Теперь нажмите:
Это переведет курсор в начало строки.
Это вызовет обратный последовательный поиск по истории. Это действие имеет побочный эффект – оно копирует все содержимое командной строки, что находится после текущего положения курсора, и вставляет его в буфер обмена.
Это вставляет только что скопированные из командной строки части команды в поиск.
Теперь нужно снова запустить обратный поиск по истории, чтобы найти команды, содержащие указанную часть.
Сначала эта процедура кажется довольно запутанной, но к ней просто нужно привыкнуть. Она чрезвычайно полезна в те моменты, когда половина сложных команд была введена, и теперь для завершения работы нужна история.
Кроме того, все эти действия можно объединить в одно:
Продвинутое использование истории в bash
Рассмотрев основные техники использования истории, существующие в bash. Среди них:
- !!: вывести последнюю команду;
- !n: перейти к команде с порядковым номером «n»;
- !-n: перейти к команде, которая была под номером «n» перед выполнением последней команды.
Определители события
Три вышеперечисленных комбинации называются определителями события. По сути, это способ вызова предыдущих команд из истории при помощи определенных критериев.
К примеру, чтобы выполнить последнюю команду «ssh», можно использовать:
Это действие ищет строки, которые начинаются с «ssh». Чтобы найти последовательность, которая находится не в начале команды, можно ввести символ «?» перед и после последовательности. К примеру, чтобы повторить последнюю команду «apt-cache search», нужно набрать:
Также можно использовать вариации вывода последней команды («!!»). Выполнить быстрый поиск и замену, набрав:
Это вызовет последнюю команду (как «!!»), ищет совпадение со значением «original», и заменяет его значением «replacement». Затем команда будет выполнена.
Это очень удобно применять при необходимости исправить орфографические ошибки. К примеру:
cat /etc/hosst
cat: /etc/hosst: No such file or directory
^hosst^hosts^
Определители слов
После определителей события можно добавить символ двоеточия (:), а затем внести определитель слова, чтобы выбрать часть совпавшей команды.
Это работает путем деления команды на «слова» – участки, разделенные пробелами. Это открывает новые возможности взаимодействия с параметрами команд.
Сама команда нумеруется нулем, первый аргумент – 1, и так далее.
К примеру, можно вывести содержимое каталога, а затем изменить его таким образом:
ls /usr/share/doc/manpages
cd . 1
Если данная операция выполняется с последней запущенной командой, то эту комбинацию можно сжать, убрав второй «!» и двоеточие:
Это будет работать тем же образом.
На первый аргумент можно сослаться при помощи символа «^», а на последний аргумент – «$». Эти символы намного полезнее при работе с диапазонами, а не порядковыми номерами. К примеру, извлечь все аргументы из предыдущей команды в новую можно тремя способами:
Символ звездочки «*» применяется для обозначения вывода любых данных, кроме исходной команды. Аналогично, можно использовать номер слова, указав после него *, чтобы обозначить, что все после указанного слова должно быть также включено.
Модификаторы
Последнее, чем можно дополнить поведение вызванной строки истории – это изменение поведения вызова для управления самим текстом. Модификаторы вносятся после дополнительного символа «:» в конце строки.
К примеру, сократить путь к файлу можно при помощи модификатора «h» (что значит «head»), который удаляет путь до последнего символа слеша (/). Запомните: это не будет работать должным образом при необходимости сократить путь к каталогу, который заканчивается символом слеша.
Это часто используется при изменении файла и необходимости перейти в его каталог, чтобы выполнить операции на связанные с ним файлы.
К примеру, можно прочитать информацию об авторских правах пакета:
После этого нужно перейти в каталог. Это можно сделать при помощи команды «cd» на строку параметров, «отрезая» имя файла в конце.
cd . $:h
pwd
/usr/share/doc/manpages
Теперь нужно снова открыть этот файл об авторских правах.
Можно также выполнить обратную процедуру, сокращая путь и используя только имя файла, при помощи модификатора «t» (что значит «tail»). Для примера можно поискать последнюю команду «cat», используя флаг «t», чтобы оставить только имя файла.
Можно также просто оставить полный путь, и команда будет работать должным образом. Но иногда это не так. К примеру, если при работе с файлом, вложенным в несколько подкаталогов текущего каталога, использовать относительный путь, и изменить подкаталог с помощью модификатора «h», то использовать относительный путь к данному файлу больше не получится.
Еще один очень полезный модификатор – «r», удаляющий хвостовой суффикс вида “.xxx”. Это полезно при использовании команды «tar» для распаковки файла и необходимости после этого перейти в каталог. Предполагая, что имя каталога совпадает с именем файла, можно выполнить что-то вроде:
tar xzvf long-project-name.tgz
cd . $:r
Если tarball использует расширение tar.gz вместо tgz, просто введите модификатор дважды:
tar xzvf long-project-name.tar.gz
cd . $:r:r
Похожий модификатор, «е», удаляет все, кроме хвостового расширения.
Если вызываемую команду нужно просто найти, а не выполнить, можно использовать модификатор “p”, чтобы bash снова отобразил команду.
Это полезно, если нужно убедиться в правильности выбранного отрывка истории. Кроме того, этот модификатор поместит выбранную команду в историю на случай если она нуждается в дальнейшем редактировании.
К примеру, команда “find” была ранее запущена на домашний каталог, а теперь ее нужно запустить из этого каталога (/). Проверить, правильно ли выполнена подстановка, можно следующим образом (при условии, что данная команда имеет №119):
-name «file1» # original command
!119:0:p / !119:2*:p
find / -name «file1»
Если же команда была выведена верно, ее можно запустить при помощи:
Есть и более простой способ выполнения подстановки в командах: для этого можно использовать синтаксис s/original/new/
К примеру, описанное выше действие можно выполнить так:
Это заменит первый экземпляр поискового шаблона. Чтобы выполнить подстановку на каждое совпадение, используйте модификаторы “g” и “s”. К примеру, чтобы создать файлы по имени ” file1″, “file2” и “file3” и каталоги “dir1”, “dir2”, “dir3”, нужно использовать:
touch file1 file2 file3
mkdir . *:gs/file/dir/
Итоги
Данное руководство помогает овладеть основными понятиями использования истории. Конечно, некоторые из описанных функций будут полезны в редких случаях, но знать о них и уметь их использовать также необходимо.
В целом, все описанные возможности использования истории могут существенно ускорить работу.
Как использовать команду history в Linux

Оболочка Linux сохраняет историю команд, которые вы запускали, и вы можете искать ее, чтобы повторить команды, которые вы запускали в прошлом. Как только вы поймете команду истории Linux и как ее использовать, она может значительно повысить вашу производительность.
Управление историей
В виде Джордж Сантаяна классно сказал, «Те, кто не может вспомнить прошлое, обречены его повторять». К сожалению, в Linux, если вы не можете вспомнить прошлое, вы не можете повторить его, даже если захотите.
Вот тогда и пригодится команда Linux history. Это позволяет вам просмотреть и повторить ваши предыдущие команды. Это не только для поощрения лени или экономии времени — здесь также играет роль фактор эффективности (и точности). Чем длиннее и сложнее команда, тем сложнее ее запомнить и ввести без ошибок. Есть два типа ошибок: один, который мешает команде работать, и второй, который позволяет команде работать, но заставляет ее делать что-то неожиданное.
Команда history устраняет эти проблемы. Как и большинство команд Linux, это больше, чем вы думаете. Однако, если вы научитесь использовать команду history, вы сможете улучшить использование командной строки Linux каждый день. Это хорошее вложение вашего времени. Есть гораздо лучшие способы использовать команду history, чем просто многократно нажимать стрелку вверх.
Команда истории
В простейшей форме вы можете использовать команду history, просто набрав ее имя:
Список ранее использованных команд записывается в окно терминала.

Команды пронумерованы, а самые последние использованные (с наибольшими номерами) находятся в конце списка.
Чтобы увидеть определенное количество команд, вы можете передать номер в историю в командной строке. Например, чтобы увидеть последние 10 команд, которые вы использовали, введите следующее:

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

Повторение команд
Если вы хотите повторно использовать команду из списка истории, введите восклицательный знак (!) И номер команды без пробелов между ними.
Например, чтобы повторить команду номер 37, вы должны ввести эту команду:

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

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

Таким образом, вы можете ввести соответствующий номер из списка, чтобы повторить команду, или использовать двойные восклицательные знаки, чтобы повторить последнюю команду, которую вы использовали. Однако что, если вы захотите повторить пятую или восьмую команду?
Вы можете использовать один восклицательный знак, дефис (-) и номер любой предыдущей команды (опять же, без пробелов), чтобы повторить ее.
Чтобы повторить 13-ю предыдущую команду, вы должны ввести следующее:

Поиск команд по строке
Чтобы повторить последнюю команду, которая начинается с определенной строки, вы можете ввести восклицательный знак, а затем строку без пробелов и нажать Enter.
Например, чтобы повторить последнюю команду, запущенную с помощью sudo, вы должны ввести эту команду:

Однако в этом есть элемент опасности. Если последняя команда, запущенная с sudo, не та, которую вы думаете, вы запустите неверную команду.
Однако, чтобы обеспечить подстраховку, вы можете использовать модификатор: p (print), как показано ниже:

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

Он найдет любую команду, содержащую строку «aliases», независимо от того, где она находится в строке.
Интерактивный поиск
Интерактивный поиск позволяет пролистывать список подходящих команд и повторять нужную.
Просто нажмите Ctrl + r, чтобы начать поиск.

Когда вы введете подсказку для поиска, появится первая соответствующая команда. Вводимые буквы появляются между обратным апострофом (`) и апострофом (‘). Соответствующие команды обновляются по мере ввода каждой буквы.

Каждый раз, когда вы нажимаете Ctrl + r, вы ищите в обратном направлении следующую соответствующую команду, которая появляется в окне терминала.

Когда вы нажмете Enter, отобразится команда.

Чтобы отредактировать команду перед ее выполнением, нажмите клавишу со стрелкой влево или вправо.

Команда появляется в командной строке, и вы можете ее редактировать.

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

Изменение последней команды
Если вам нужно исправить опечатку, а затем повторить команду, вы можете использовать курсор (^), чтобы изменить ее. Это отличный трюк, который пригодится вам всякий раз, когда вы неправильно пишете команду или хотите ее повторно запустить с другим параметром или параметром командной строки.
Чтобы использовать его, введите (без пробелов) курсор, текст, который вы хотите заменить, другой курсор, текст, которым вы хотите его заменить, другой курсор, а затем нажмите Enter.
Например, предположим, что вы набираете следующую команду, случайно набрав «shhd» вместо «sshd»:
Вы можете легко исправить это, набрав следующее:

Команда выполняется с изменением «shhd» на «sshd».
Удаление команд из списка истории
Вы также можете удалять команды из списка истории с помощью опции -d (удалить). Нет причин оставлять команду с ошибкой в списке истории.
Вы можете использовать grep, чтобы найти его, передать его номер в историю с опцией -d, чтобы удалить его, а затем снова выполнить поиск, чтобы убедиться, что он исчез:

Вы также можете передать ряд команд параметру -d. Чтобы удалить все записи списка с 22 по 32 (включительно), введите эту команду:
Чтобы удалить только последние пять команд, вы можете ввести отрицательное число, например:
Обновление файла истории вручную
Когда вы входите в систему или открываете сеанс терминала, список истории считывается из файла истории. В Bash файл истории по умолчанию — .bash_history.
Любые изменения, которые вы вносите в текущем сеансе окна терминала, записываются в файл истории только при закрытии окна терминала или выходе из системы.
Предположим, вы хотите открыть другое окно терминала, чтобы получить доступ к полному списку истории, включая команды, которые вы вводили в первом окне терминала. Параметр -a (all) позволяет сделать это в первом окне терминала перед тем, как открыть второе.
Чтобы использовать его, введите следующее:

Команды незаметно записываются в файл истории.
Если вы хотите записать все изменения в списке истории в файл истории (например, если вы удалили некоторые старые команды), вы можете использовать параметр -w (запись), например:

Очистка списка истории
Чтобы удалить все команды из списка истории, вы можете использовать параметр -c (очистить) следующим образом:

Если вы дополнительно хотите принудительно внести эти изменения в файл истории, используйте параметр -w, например:
Безопасность и файл истории
Если вы используете какие-либо приложения, которые требуют от вас ввода конфиденциальной информации (например, паролей) в командной строке, помните, что это также будет сохранено в файле истории. Если вы не хотите сохранять определенную информацию, вы можете использовать следующую структуру команд, чтобы немедленно удалить ее из списка истории:

Эта структура включает две команды, разделенные точкой с запятой (;). Давайте разберем это:
special-app: название программы, которую мы используем.
my-secret-password: секретный пароль, который нам нужно указать для приложения в командной строке. Это конец первой команды.
history -d: во второй команде мы вызываем параметр истории -d (удалить). То, что мы собираемся удалить, находится в следующей части команды.
$ (история 1): используется подстановка команд. Часть команды, содержащаяся в $ (), выполняется в подоболочке. Результат этого выполнения публикуется как текст в исходной команде. Команда history 1 возвращает предыдущую команду. Итак, вы можете думать о второй команде как о history -d «последняя команда здесь».
Вы можете использовать команду history 5, чтобы убедиться, что команда, содержащая пароль, была удалена из списка истории.
Однако есть еще более простой способ сделать это. Поскольку Bash по умолчанию игнорирует строки, начинающиеся с пробела, просто добавьте пробел в начало строки, как показано ниже:

Команда с паролем не добавляется в список истории. Причина, по которой этот трюк работает, содержится в файле .bashrc.
Файл .bashrc
Файл .bashrc запускается каждый раз, когда вы входите в систему или открываете окно терминала. Он также содержит некоторые значения, которые управляют поведением команды history. Давайте отредактируем этот файл с помощью gedit.

В верхней части файла вы видите две записи:
HISTSIZE: максимальное количество записей, которое может содержать список истории.
HISTFILESIZE: ограничение на количество строк, которое может содержать файл истории.

Эти два значения взаимодействуют следующим образом:
Когда вы входите в систему или запускаете сеанс окна терминала, список истории заполняется из файла .bash_history.
Когда вы закрываете окно терминала, максимальное количество команд, заданное в HISTSIZE, сохраняется в файле .bash_history.
Если опция оболочки histappend включена, команды добавляются в .bash_history. Если histappend не установлен, .bash_history перезаписывается.
После сохранения команд из списка истории в .bash_history файл истории усекается, чтобы содержать не более HISTFILESIZE строк.
Также в верхней части файла вы видите запись для значения HISTCONTROL.

Вы можете установить это значение для выполнения любого из следующих действий:
ignorespaces: строки, начинающиеся с пробела, не добавляются в список истории.
ignoredups: повторяющиеся команды не добавляются в файл истории.
ignoreboth: включает оба вышеперечисленных.
Вы также можете указать конкретные команды, которые не хотите добавлять в свой список истории. Разделите их двоеточием (:) и заключите в кавычки («…»).
Вы должны следовать этой структуре, чтобы добавить строку в ваш файл .bashrc и заменить команды, которые вы хотите игнорировать:

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

Теперь, когда вы запускаете команду history, вы видите дату и время. Обратите внимание, что все команды, которые были в списке истории до того, как вы добавили метки времени, будут отмечены датой и временем первой команды, получившей метку времени. В этом примере, показанном ниже, это была команда 118.

Это очень длинная метка времени. Однако вы можете использовать токены, отличные от% c, для его уточнения. Вы можете использовать и другие токены:
% d: День
% m: месяц
% y: Год
% H: час
% M: минуты
% S: секунды
% F: Полная дата (формат год-месяц-дата)
% T: Время (формат час: минуты: секунды)
% c: полная отметка даты и времени (форматы день-дата-месяц-год и час: минуты: секунды)
Давайте поэкспериментируем и воспользуемся несколькими разными токенами:

В выходных данных используются день, месяц и время.

Однако, если мы удалим день и месяц, он просто покажет время.
Любые изменения, которые вы вносите в HISTIMEFORMAT, применяются ко всему списку истории. Это возможно, потому что время для каждой команды сохраняется как количество секунд от эпохи Unix. Директива HISTTIMEFORMAT просто определяет формат, используемый для визуализации этого количества секунд в удобочитаемом стиле, например:

Наша продукция теперь более управляема.

Вы также можете использовать команду history для аудита. Иногда просмотр команд, которые вы использовали в прошлом, может помочь вам определить, что могло вызвать проблему.
Как и в жизни, в Linux вы можете использовать команду history, чтобы заново пережить хорошие времена и извлечь уроки из плохих.
Шпаргалка по работе в командной строке
Feb 2, 2017 21:07 · 840 words · 4 minute read console
Командная строка дает продвинутым пользователям гораздо больше возможностей в любом дистрибутиве с GUI, позволяя быстрее и эффективнее выполнять необходимые действия.
Если говорить о серверах, то она и вовсе незаменима. Какие из команд командной строки самые важные? Давайте разберемся!
Нет необходимости запоминать сотни (если не тысячи) команд, тем более, что большинство из них могут так и не пригодиться, но самые популярные все же нужно знать. Или найти/сделать шпаргалку по работе в командной строке.
Итак, команды для работы с файлами:
- ls — вывод содержимого каталога;
- ls -la — вывод содержимого каталога в форматированном виде (в т.ч. скрытые файлы);
- cd dir — перейти в каталог dir ;
- cd — перейти в домашний каталог;
- pwd — показать текущий каталог;
- mkdir dir — создать каталог dir ;
- rm file — удалить файл;
- rm -r dir — удалить каталог dir ;
- rm -f file — принудительно удалить файл;
- rm -rf dir — принудительно удалить каталог dir ;
- cp file1 file2 — скопировать file1 в file2 ;
- cp -r dir1 dir2 — скопировать каталог dir1 в каталог dir2 (если каталога dir2 нет, он будет создан);
- mv file1 file2 — переместить (или переименовать, если file1 и file2 находятся в одном каталоге) file1 в file2 ;
- ln -s file link — создать симлинк link на файл file ;
- touch file — создать файл;
- cat > file — направить стандартный ввод в file ;
- more file — вывод содержимого file ;
- head file — вывод содержимого первых 10 строк file ;
- tail file — вывод содержимого последних 10 строк file ;
- tail -f file — вывод содержимого file по мере появления, начиная с последних 10 строк файла.
Команды для изменения прав доступа:
- chmod octal file — установить права доступа к файлу в восьмеричном виде (подробнее тут или man chmod );
- chown user:group file — изменить владельца ( user ) и группу ( group ) файла file ;
- chown -R user:group dir — рекурсивно изменить владельца и группу каталога dir и его содержимого.
Команды управления процессами:
- ps — вывод списка активных процессов;
- top — вывод списка запущенных процессов в реальном времени (подробнее);
- kill pid — «убить» процесс по его pid ;
- killall proc — «убить» все процессы с именем proc ;
- bg — вывод списка приостановленных или фоновых задач и запуск выполнения приостановленной задачи в фоне;
- fg — «разбудить» последнюю приостановленную задачу;
- fg n — «разбудить» приостановленную задачу под номером n в списке.
Поиск в системе:
- grep pattern files — поиск по шаблону pattern в файлах files ;
- grep -r pattern dir — рекурсивный поиск по шаблону pattern в каталоге dir ;
- command | grep pattern — поиск по шаблону pattern в результатах вывода команды command ;
- locate file — вывод всех упоминаний file в файловой системе.
Команды для получения системной информации (многие из них подробно рассмотрены здесь):