Поговорка для айтишников
Есть такая поговорка «Взял Bosch и ебошь», но у нас, у айтишников, эта поговорка звучит немного иначе: «Взял Bash и ебашь». Из песни слов не выбросишь.

Команда 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?

Сейчас и в ней сделаем нечто подобное.

Из коробки 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
Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
History — это как спасательный круг. С помощью неё можно воссоздать всю картину настройки сервера либо отдебажить момент, когда всё работало, а сегодня перестало.

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

А завтра снова пятница, неделя прям в трубу вылетела. Давайте, увидимся.