Найти в Дзене
BASH DAYS | Linux Factory

Прокачиваем History

Оглавление

Команда history, это не просто вывод истории команд, которые ты или кто-то набирал в консоли. Это великолепный инструмент, с помощью которого можно воссоздать к примеру всю картину настройки сервера. Либо отдебажить момент когда всё работало, а сегодня перестало, по причине какого нибудь отбитого админа, который решил тонко оптимизировать linux ядро.

В общем — history, это как спасательный круг. Давай сегодня затюним её на удобство.

Чего же не хватает из коробки? А не хватает временны́х маркеров, то есть даты и времени, когда была выполнена та или иная команда. Это легко решаемо. Для оболочки bash это делается так:

export HISTTIMEFORMAT="%d/%m/%y %T "

И вывод будет примерно таким:

369 20/07/23 15:46:54 flask run
370 20/07/23 15:46:54 /usr/bin/python3
371 20/07/23 15:46:54 python --version
372 20/07/23 15:46:54 python3 --version
373 20/07/23 15:46:54 ps ax|grep python
374 20/07/23 15:46:54 sudo kill -9 30049
375 20/07/23 15:46:54 brew install pyenv


Либо можешь прописать это в ~/.bashrc чтобы export выполнялся автоматически:

echo "export HISTTIMEFORMAT=\"%d/%m/%y %T \"" >> ~/.bashrc

Прекрасно, теперь намного нагляднее. Идем дальше. Давай перекрасим временные маркеры в синий цвет, чтобы более лаконично выглядело.

export MY_BASH_BLUE="\033[0;34m"
export MY_BASH_NOCOLOR="\033[0m"
export HISTTIMEFORMAT=`echo -e ${MY_BASH_BLUE}[%F %T $MY_BASH_NOCOLOR`


Эти экспорты можешь так же закинуть в ~/.bashrc и затем выполнить команду source ~/.bashrc чтобы не перезагружать сессию и применить настройки в моменте.

Окей, но как же быть с оболочкой zsh? Сейчас и в ней сделаем нечто подобное.

Подпишись на BashDays в телеграм

Из коробки zsh, ты можешь воспользоваться командой:

history -E

вывод будет таким:

9481 9.5.2023 16:04 export FLASK_RUN_PORT=8888
9482 9.5.2023 16:04 export FLASK_APP=index.py
9483 9.5.2023 16:04 flask run
9484 9.5.2023 16:08 export TGS_API_KEY=12345
9485 9.5.2023 16:08 flask run


Уже более менее информативно, а если так:

history -i

опа-опа-опапа:

9481 2023-05-09 16:04 export FLASK_RUN_PORT=8888
9482 2023-05-09 16:04 export FLASK_APP=index.py
9483 2023-05-09 16:04 flask run
9484 2023-05-09 16:08 export TGS_API_KEY=12345
9485 2023-05-09 16:08 flask run


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

man zshoptions
man zshbuiltins


Ну а чтобы каждый раз не вводить ключи, сделай нужный тебе alias в ~/.zshrc

alias history="history -i"

А еще есть такая утилита как «fc», я думаю большинство про нее вообще ничего не слышали.

fc — unix-утилита, служащая для редактирования списка ранее введенных команд, а также их выполнения.


Вот тебе команда на основе fc, которая выведет историю, сразу же с временными маркерами:

fc -li 100

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

Увидимся!

Рекомендую почитать