- Команда History в Linux (Bash History)
- History Command in Linux (Bash History)
- В этой статье мы поговорим о history команде, которая позволяет просматривать список ранее выполненных команд, осуществлять поиск по списку и манипулировать файлом истории.
- Использование history команд и расширений истории
- Сохранение списка истории
- Очистка истории
- Изменение истории поведения
- Вывод
- Bash History Display Date And Time For Each Command
- Bash History Display Date And Time For Each Command
- How to see time stamps in bash history
- How to retrieve Linux or Unix bash command line history by date and time
- Controlling Bash history behavior
- Other shell variables
- Conclusion
- Настраиваем ведение истории команд в Linux
Команда 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 отображает список ранее выполненных команд. Например, вы можете использовать историю, чтобы просмотреть длинную команду, которую вы использовали до того, что вы не можете вспомнить.
Источник
Bash History Display Date And Time For Each Command
H ow do I display shell command history with date and time under a Linux, MacOS or Unix-like operating systems? How do I see date and time stamps in bash history command running on a Linux or Unix-like systems?
The bash shell provides access to the command history, the list of commands previously typed. The value of the HISTSIZE variable is used as the number of commands to save in a history list. If the HISTTIMEFORMAT is set, the time stamp information associated with each history entry is written to the history file, marked with the history comment character. This page shows how to display bash History with date and time when running the history command on a Linux or Unix-like systems.
Tutorial details | |
---|---|
Difficulty level | Easy |
Root privileges | No |
Requirements | Bash on Linux, macOS & Unix |
Est. reading time | 2 minutes |
Bash History Display Date And Time For Each Command
By default history command will display output as follows:
$ history
Sample outputs:
The above command won’t display what time the commands were executed from the bash history. To solve this problem create a shell variable called HISTTIMEFORMAT.
How to see time stamps in bash history
- %d – Day
- %m – Month
- %y – Year
- %T – Time
Use the source command to load HISTTIMEFORMAT from file into the current shell script or a command prompt:
$ .
/.bash_profile
OR
$ source
How to retrieve Linux or Unix bash command line history by date and time
Now, to see history, type:
$ history
Sample outputs:
Here is another output from my Ubuntu Linux server:
Fig.01: Adding date and time to my bash history
Controlling Bash history behavior
We can use the shopt command to control optional shell behavior for the history command under Linux, macOS and Unix-like OS. The syntax is:
Option | Description | Set value | Unset value |
---|---|---|---|
histappend | If set, the history list is appended to the file named by the value of the HISTFILE variable when the shell exits, rather than overwriting the file. | set -s histappend | set -u histappend |
histreedit | If set, and readline is being used, a user is given the opportunity to re-edit a failed history substitution. | set -s histreedit | set -u histreedit |
histverify | If set, and readline is being used, the results of history substitution are not immediately passed to the shell parser. Instead, the resulting line is loaded into the readline editing buffer, allowing further modification. | set -s histverify | set -u histverify |
Other shell variables
We can set the following additonal variables for history command:
- No ads and tracking
- In-depth guides for developers and sysadmins at Opensourceflare✨
- Join my Patreon to support independent content creators and start reading latest guides:
- How to set up Redis sentinel cluster on Ubuntu or Debian Linux
- How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
- How to set up Mariadb Galera cluster on Ubuntu or Debian Linux
- A podman tutorial for beginners – part I (run Linux containers without Docker and in daemonless mode)
- How to protect Linux against rogue USB devices using USBGuard
Join Patreon ➔
Environment variable (use the export command) | Description |
---|---|
HISTCONTROL=ignoreboth:erasedups | If the list of values includes ignorespace , lines which begin with a space character are not saved in the history list. Also ignoredups option causes lines matching the previous history entry to not be saved. A value of ignoreboth is shorthand for ignorespace and ignoredups . We can set erasedups option that causes all previous lines matching the current line to be removed from the history list before that line is saved. Any value not in the above list is ignored. |
PROMPT_COMMAND=»history -a; history -n» | Run history command before next prompt displayed. The -a option append history lines from this session to the history file. The -n read all history lines not already read from the history file and append them to the history list |
HISTIGNORE=»ls:ll:cd:pwd:bg:fg:history» | A colon-separated list of patterns used to decide which command lines should be saved on the history list. |
HISTSIZE=100000 | The number of commands to remember in the command history. |
HISTFILESIZE=10000000 | The maximum number of lines contained in the history file. |
Conclusion
You just learned how to display or see time stamps in bash history including date when the command were executed. For more info type the following commands or see gnu/bash page here:
man bash
help history
man 3 strftime
See “A Shell Primer: Master Your Linux, OS X, Unix Shell Environment” for more info.
🐧 Get the latest tutorials on Linux, Open Source & DevOps via
Источник
Настраиваем ведение истории команд в Linux
Всем известно, что Bash ведет историю всех команд, введенных в консоли, но по умолчанию некоторые настройки хранения этой истории заданы не сильно рациональными.
Давайте сделаем ведение и чтение истории более удобным, а так же рассмотрим вопрос очистки истории команд.
Исходные данные: Debian 9
Как известно, история команд в Linux хранится в файле
Размер файла ограничен списком из 500 последних выполненных команд, которые затираются по мере заполнения этого файла.
500 команд — это довольно мало, Вы легко можете потерять полезную команду которую выполнили скажем неделю назад.
Чтобы увеличить размер хранимой истории необходимо в файл
/.bashrc добавить строки:
HISTSIZE — количество команд, которые необходимо запоминать в списке истории (по умолчанию — 500);
HISTFILESIZE — максимальное количество строк, содержащееся в файле истории
/.bash_history (по умолчанию — 500);
Теперь у нас будет храниться история последних 10 тыс. команд.
Для применения настроек нужно выполнить:
или перезайти в терминал.
Идем дальше, если Вы выполните команду history, то заметите, что выполненные подряд одни и те же команды повторяются в истории. Это жутко неудобно, давайте отключим такое поведение. Для этого в файл
/.bashrc добавим строку:
Опция HISTCONTROL контролирует каким образом список команд сохраняется в истории.
ignorespace — не сохранять строки начинающиеся с символа
ignoredups — не сохранять строки, совпадающие с последней выполненной командой
ignoreboth — использовать обе опции ‘ignorespace’ и ‘ignoredups’
erasedups — удалять ВСЕ дубликаты команд с истории
Не забываем выполнить source
/.bashrc для применения настроек на лету.
Следующая полезная настройка отвечает за игнорирование определенных команд при добавлении в историю, это HISTIGNORE.
Давайте не будем сохранять в истории команды ls, ps и history с доп. опциями. Для этого в файл
/.bashrc добавим строку:
Не забываем выполнить source
/.bashrc для применения настроек на лету.
По умолчанию, Bash записывает историю команд в
/.bash_history только при завершении сессии. Если Ваша сессия будет отключена некорректно, то как правило история команд в текущем сеансе не сохраниться — это неудобно. Чтобы это исправить нужно добавить в
/.bashrc следующую строку:
Как Вы уже заметили, вывод истории команд не учитывает дату и время выполнения этой команды, а иногда бывает очень нужно понимать, когда же Вы выполнили эту команду. Но все можно поправить, чтобы добавить дату к списку команд нужно изменить формат вывода истории, для этого в
/.bashrc нужно добавить строку:
Не забываем выполнить source
/.bashrc для применения настроек на лету.
И в конце, все вышеописанные опции можно добавить в
/.bashrc с помощью одной команды:
Иногда случаются ситуации, когда необходимо очистить историю команд Linux. Например, Вы случайно ввели в консоле команду, содержащую пароль в открытом виде. В этом случае Вам потребуется либо удалить всю историю, либо только определенную ее часть.
Если нужно удалить конкретную строку в истории, то выполните:
Для удаления всей истории команд выполните:
Если нужно очистить историю команд только для текущей сессии, то выполните:
Следует обратить внимание, что если Вы сохраняете историю сразу по факту выполнения команды (настройка PROMPT_COMMAND=’history -a’), а не по выходу из сессии как это предусмотрено по умолчанию, то полную очистку истории указанными выше способами (опции -c и -r) Вы не сделаете, история в файле
/.bash_history сохраниться. Тогда для полной очистки истории команд нужно очистить файл
/.bash_history, для этого выполните:
и закройте текущую сессию, тогда история будет очищена полностью.
По умолчанию, история команд включена всегда и все введенные команды можно использовать повторно не затрачивая времени на их набор. Но при желании функцию ведения истории можно временно отключить. В Bash история команд в текущей сессии отключается с помощью команды:
Для включения ведения истории команд в текущей сессии выполните:
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Источник