- Настраиваем ведение истории команд в Linux
- Не сохраняется история команд в консоли
- 2 комментария
- иногда команды истории не сохраняются в .bash_history
- Команда History в Linux (История Bash)
- Использование команды history и расширений истории
- Сохранение списка истории
- История очистки
- Изменение поведения в истории
- Выводы
Настраиваем ведение истории команд в 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 история команд в текущей сессии отключается с помощью команды:
Для включения ведения истории команд в текущей сессии выполните:
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Источник
Не сохраняется история команд в консоли
Не знаю почему, но на моей новой домашней системе в консоли командной строки на системе «Ubuntu 12.04 Desktop amd64» набранные команды почему-то не сохраняются . А это очень и очень не удобно. Т.к. Я по большей части люблю управлять своей системой из консоли, а не заниматься кликательностью по «GUI» интерфейсу. Понимание на таком уровне систему для меня блаженство. Но набирать каждый раз одни и те же команды уж извольте . Я уже описывал как работать с настройками «bash» вот здесь, поэтому эта заметка есть продолжение. «Bash» по умолчанию ведет историю набранных за сеанс команд, но при закрытии консоли не сохраняются. Поэтому сейчас я покажу, как восстановить сохранение истории команд в консоли:
Открываем пользовательский конфиг
и добавляем в него эти две строчки:
shopt -s histappend
Сохраняем внесенные изменения, а после не забываем проверить какие права установлены на файл «
-rw——- 1 root root 48 авг. 31 21:35 /home/ekzorchik/.bash_history
нужно изменить их на пользователя :
$ sudo chown ekzorchik:ekzorchik
Далее перезапускаем консоль командной строки для принятия изменений. Этим мы исправляем ситуацию по сохранении истории набранный команд в консоли. Чтобы отобразить набранные команды вводим «history» и видим порядковые номера когда либо набранных команды, а чтобы запустить какую либо из них, делаем ![номер_команды]. Вот собственно и всё по данной заметке. С уважением, ekzorchik.
2 комментария
Столкнулся с той же проблемой в Ubuntu 14.04. Ваша статья очень помогла, удалось сэкономить много времени! Спасибо огромное!
На Mac Os high sierra 10.13.5 тоже эта инструкция сработала! Спасибо огромной))
Comments are closed.
Используйте прокси ((заблокировано роскомнадзором, используйте vpn или proxy)) при использовании Telegram клиента:
Поблагодари автора и новые статьи
будут появляться чаще 🙂
Карта МКБ: 4432-7300-2472-8059
Большое спасибо тем кто благодарит автора за практические заметки небольшими пожертвованиями. С уважением, Олло Александр aka ekzorchik.
Источник
иногда команды истории не сохраняются в .bash_history
Вчера я выпустил много команд в своем CentOS 7. Но когда я хотел получить эти команды сегодня, я обнаружил, что никакой записи не было. Когда я открыл файл .bash_history , я все еще не мог найти команды, которые я дал вчера, но я нашел много старых команд несколько дней назад. Почему последние команды не были сохранены? Как я могу увеличить возможности истории?
Наиболее вероятная причина того, что элементы истории не отображаются, заключается не в том, HISTFILE чтобы установить ничего или HISTSIZE ноль, а в том, что вы дважды заходите на одну и ту же машину и выходите со вторым экземпляром bash (в котором вы сделали мало или ничего) после того, где ты много сделал По умолчанию Bash не объединяет истории, и второй выход Bash перезаписывает тот, .bash_history который был так хорошо обновлен первым выходом Bash.
Чтобы этого не произошло, вы можете добавить в файл истории вместо перезаписи, вы можете использовать параметр histappend оболочки:
Если включена опция оболочки histappend (см. Описание shopt в разделе «Команды SHELL BUILTIN» ниже), строки добавляются в файл истории, в противном случае файл истории перезаписывается.
Более подробная информация в этом ответе включает в себя, как использовать HISTSIZE , HISTFILESIZE и HISTCONTROL контролировать размер, дубликаты и т. Д.
Для изменения истории использовать размер два BASH переменных HISTSIZE , HISTFILESIZE (обычно устанавливаются в .bashrc ).
Описание со страницы руководства BASH:
HISTSIZE Количество команд, которые нужно запомнить в истории команд (см. ИСТОРИЯ ниже). Если значение равно 0, команды не сохраняются в списке истории. Числовые значения меньше нуля приводят к тому, что каждая команда сохраняется в списке истории (ограничений нет). Оболочка устанавливает значение по умолчанию 500 после чтения любых файлов запуска.
HISTFILESIZE Максимальное количество строк, содержащихся в файле истории. Когда этой переменной присваивается значение, файл истории усекается, если необходимо, чтобы он содержал не более этого числа строк, удаляя самые старые записи. Файл истории также усекается до этого размера после записи при выходе из оболочки. Если значение равно 0, файл истории усекается до нулевого размера. Нечисловые значения и числовые значения меньше нуля препятствуют усечению. Оболочка устанавливает значение по умолчанию в значение HISTSIZE после чтения любых файлов запуска.
В качестве примера у меня есть следующая настройка в моем .bashrc файле:
Я имел это случиться, но решение не было перечислено здесь. Причиной была просто проблема копирования + вставки. Я копировал команду из другого документа, и у меня было несколько лишних пробелов в буфере обмена. По какой-то причине это привело к тому, что Ubuntu не сохранил команду в файл истории.
Приведенное выше изображение было командой, которая была у меня в буфере обмена в виде документов Google. Эта команда выполнялась, но была пропущена из моей истории. Я просто вернулся и выбрал команду без пробелов, а затем она появилась в истории Bash.
Убедитесь, что для вашей HISTCONTROL переменной среды не установлено значение ignorespace или ignoreboth .
Вы можете изменить его, установив значение в вашем
/.bash_profile или вашем
С bash man-страницы:
Список значений, разделенных двоеточиями, управляющий тем, как команды сохраняются в списке истории.
Если список значений включает в себя ignorespace , строки, начинающиеся с пробела, не сохраняются в списке истории.
Значение ignoredups приводит к тому, что строки, соответствующие предыдущей записи истории, не будут сохранены.
Значение ignoreboth является сокращением для ignorespace и ignoredups .
Значение erasedups вызывает удаление всех предыдущих строк, соответствующих текущей строке, из списка истории перед сохранением этой строки.
Любое значение, отсутствующее в приведенном выше списке, игнорируется.
Если значение HISTCONTROL не установлено или не содержит допустимого значения, все строки, считываемые анализатором оболочки, сохраняются в списке истории в зависимости от значения HISTIGNORE . Вторая и последующие строки многострочной составной команды не тестируются и добавляются в историю независимо от значения HISTCONTROL .
Источник
Команда 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 отображает список ранее выполненных команд. Например, вы можете использовать историю, чтобы просмотреть длинную команду, которую вы использовали раньше, но не можете вспомнить.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Источник