Работа с историей команд bash
Количество хранимых команд определяется двумя переменными: HISTSIZE и HISTFILESIZE . Первая определяет количество команд, хранимых в памяти, вторая — в файле. Их уместно устанавливать в ~/.bachrc . Такие значения, мне представляются оптимальными:
HISTSIZE=5000 HISTFILESIZE=10000
Настройка способа сохранения
По умолчанию, каждый экземпляр bash переписывает историю. То есть, если вы запустите два терминала, что-то в них сделаете, а потом закроете, то история сохранится только от последнего закрытого. (Она затрёт историю первого закрытого.) Это очень неудобно и легко исправляется вот такой командой:
shopt -s histappend
которую тоже уместно написать в ~/.bachrc .
Простой просмотр истории
history
Пять последних команд:
history 5
В сочетании с grep :
history | grep cd
Но это всё только присказка.
Выполнение команд из истории по номеру
Восклицательный знак выполняет команду с данным номером. Пример:
~$ ls -ld /bin lrwxrwxrwx 1 root root 7 май 31 2013 /bin -> usr/bin ~$ history 3 4220 cd 4221 ls -ld /bin 4222 history 3 ~$ !4221 ls -ld /bin lrwxrwxrwx 1 root root 7 май 31 2013 /bin -> usr/bin ~$ echo !4221 echo ls -ld /bin ls -ld /bin
Как видно из последней команды, подстановка с восклицательным знаком может быть частью другой команды. Она может быть использована в пайпе или в другом контексте. Примеры:
$ sudo !4221 $ !4221 >/dev/null
Номер может быть относительным, с конца: !-2 . Специальное сокращение !! — последняя команда.
Передвижение по истории
Все знают о том, что по истории можно двигаться клавишами-стрелками. Но иногда бывают ситуации, когда эти клавиши недоступны, работают не правильно, или просто отсутствуют (у меня такое было, когда я подключался каким-то ssh-клиентом с iPad). На этот случай полезно знать, что промотка работает по Ctrl-p и Ctrl-n .
Поиск по истории
Режим поиск включается по Ctrl-r . Для поиска следующего совпадения надо повторно нажать Ctrl-r . Для передвижения по совпадениям в другую строну есть сочетание клавиш Ctrl-s .
Проблема в том, что Ctrl-s в большинстве терминалов приводит к засыпанию. Чтобы выйти из сна, нажмите Ctrl-q . Чтобы отключить засыпание, есть команда:
stty -ixon
Поиск по истории по началу команды
Bash (а вернее readline) поддерживает очень удобный стиль поиска — по первым символам команды. К сожалению, по умолчанию, этот механизм недоступен. Чтобы его включить, надо написать в ~/.inputrc что-то такое:
# Shift-[Up][Down] "\e[1;2A" history-search-backward "\e[1;2B" history-search-forward
Теперь вы можете набрать начало команды и нажать Shift- . И для вас будет найдена последняя команда из истории с таким же началом. Стрелки с клавишей Shift теперь позволяют двигаться по совпадениям.
Естественно, можно настроить любые другие клавиши.
Подстановки и изменения команд
Вы уже видели три простейшие подстановки:
- !! — последняя команда
- !n — n-ная в истории команда (с номером n)
- !-n — n-ная с конца команда
После восклицательного знака можно указывать подстроку-начало команды.
!ls — последняя команда ls (со всеми аргументами).
Можно указывать подстроку для поиска:
!?encoder? последняя команда с подстрокой encoder .
Операции с отдельными словами
Все слова (параметры разделённые пробелами) доступны через модификатор : (двоеточие). Пример:
$ cd /home $ echo . 1 echo /home /home
Здесь !! — ссылка на последнюю команду, а :1 ссылка на её первый аргумент. Поэтому, в нашем примере echo . 1 преобразуется в echo /home .
Для этого случая: когда мы оперируем именно с последней командой, можно опускать один восклицательный знак и двоеточие:
$ echo !1
Есть и привычные сокращения: первый аргумент — ^ , последний — $ , все — * . Имеются ввиду именно параметры команды. Без учёта самой команды.
Манипуляции с путями и именами файлов
Следующий уровень модификаторов позволяет минимально управлять именами файлов.
Модификатор :t даёт доступ к имени файла. Эта удобно скажем в таком сценарии работы:
Вы обращаетесь к некому файлу, указывая полный путь:
cat /etc/hosts
Потом переходите в директорию с этим файлом
cd /etc
Выполняете ещё какие-то команды, а потом решаете отредактировать файл. Тогда вы можете написать так:
vi !cat:$:t
То есть, вы находите в историю последнюю команду cat ( !cat ), берёте её последний аргумент :$ , а от него оставляете только имя файла :t .
Модификатор :h работает противоположно, он отрезает имя файла, оставляя весь остальной путь. Это полезно, например, когда вы хотите перейти в директорию с последним просмотренным файлом:
vi /etc/hosts cd $vi:$:h
Последняя команда перейдёт в директорию /etc .
Последний модификатор из этой серии — :r . Он отрезает расширение. Его можно указывать несколько раз, есть вы хотите отрезать несколько расширений ( .tar.gz ).
Как посмотреть историю какие команды выполнялись от имени sudo (root-а) на linux?
Где то читал что какие команды мы запускаем от имени sudo,то запуск этой команды регистрируется лог файле. Но я не помню этот файл. Пожалуйста помогите.
- Вопрос задан более двух лет назад
- 1474 просмотра
Комментировать
Решения вопроса 0
Ответы на вопрос 3
В убунте (наверно, и в debian) пишется в /var/log/auth.log:
Nov 25 01:12:08 host.domain sudo: galaxy : TTY=pts/1 ; PWD=/home/user ; USER=root ; COMMAND=/bin/bash
В других системах могут писать в другие файлы (/var/log/secure.log и пр.) или в syslog.
Тут написано, как логировать ввод и вывод команд, что позволяет смотреть даже, что делалось после sudo su —
Ответ написан более двух лет назад
Нравится 3 2 комментария
by_EL @by_EL Автор вопроса
Спасибо galaxy ,А какое команда выполнялось показывается точно ?
Проверьте. Я пример лога брал у себя с сервера

Михаил Васильев @vasilyevmn
~/. bash_history
Ответ написан более двух лет назад
Нравится 2 7 комментариев
by_EL @by_EL Автор вопроса
Михаил Васильев мне нужено увидеть что какие пользователи выполняли команды от имени рута, и на этом файле указывается время запуска и TTY PTY .

Михаил Васильев @vasilyevmn
by_EL, по умолчанию нет.
Если только добавить в .bashrc такую команду:
export HISTTIMEFORMAT=»%h/%d-%H:%M:%S «
by_EL @by_EL Автор вопроса
Михаил Васильев, не знаю но где то читал что все команды выполненные через sudo регистрируется но точно не знаю какой лог файл был это ,Не помню -но точно читал
by_EL @by_EL Автор вопроса

Михаил Васильев @vasilyevmn
by_EL, ничего не мешает, человеку с sudo ввести su — и перейти в рута.
В общем, такого файла отдельного нет.
by_EL @by_EL Автор вопроса
Михаил Васильев но возможно Если отключен рут как в Ubuntu

Михаил Васильев @vasilyevmn
by_EL, в Убунте по умолчанию запрещен доступ по ssh руту, но сам рут никуда не отключен.
Пользователь с правами судо соединяется с сервером от своего пользователя, потом вводит su — и становится рутом.
/root/.bash_history
Ответ написан более двух лет назад
Нравится 2 7 комментариев
by_EL @by_EL Автор вопроса
на этом файле отображаются все команды и какие пользователи выполняли команду от имени рута ?
by_EL @by_EL Автор вопроса
Нет только история команд выполненных от рута, но этот файл существует и у других пользователей можно их посмотреть на предмет выполнения sudo или su, хотя вряд ли там это будет записано, так как эти команда переключают пользователя на рут и история будет записыватся в лог рута
Еще как вариант посмотреть /home/user/.sh_history
этот файл содержит только те команды, которые пользователь ввел в терминал
этот файл полностью доступен на редактирование пользователю
пользователь может добавить пробел перед командой в терминале и тогда она не будет записана в этот файл
нельзя этот файл использовать как инструмент логирования безопасности.
rPman, если пользователь смог выполнить команды из под рута, он мог и все остальные логи почистить
Fenrir89, sudo может быть сильно ограниченным, вообще то его применение выходит дальше чем примитивный sudo -i, можно настроить кому когда что запускать с какими ключами.
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Linux
NetworkManager буянит?
- 1 подписчик
- 4 часа назад
- 45 просмотров

- Linux
- +2 ещё
Совместимость реализаций ZFS?
- 2 подписчика
- 17 часов назад
- 58 просмотров
История — Основы командной строки
Чем больше работаешь в командной строке, тем чаще возникает необходимость повторять введенные ранее команды. Самый простой способ просматривать историю команд — нажимать клавиши «вверх» и «вниз». При каждом нажатии стрелки «вверх» в поле ввода начнет появляться предыдущая выполненная команда, если нажать «вниз» — то следующая.
В этом уроке вы узнаете, как работать с историей и где это может пригодиться.
История команд bash хранится в специальном файле .bash_history , который лежит в домашней директории пользователя. Каждый раз, когда пользователь вводит команду, она попадает именно в этот файл. Он ничем не отличается от остальных файлов: его можно открыть, посмотреть и даже отредактировать. За то, какое количество команд хранится в истории, отвечает переменная окружения HISTFILESIZE . Если она выставлена, то берется указанное в ней число. Если переменной нет, история не обрезается и файл .bash_history растет бесконечно:
tail .bash_history rm -r one/ env HOME=/tmp cd pwd cd echo $HOME export HOME=/tmp id exit id
Посмотреть историю можно и более простым способом. Достаточно выполнить команду history :
history 1 docke rps 2 free -m 3 docker ps 4 docker exec -it 8678a6520641 bash 5 ls 6 exit 7 docker ps 8 docker exec -it 1209b6e5ce6b bash .
Эта команда выведет содержимое файла .bash_history , добавив слева номер. Если набрать history 5 , то отобразятся только пять последних введенных команд. Используя номер команды в выводе history , можно выполнить повторный запуск без необходимости набирать или копировать команду из истории:
# Эта команда имела второй номер в списке выше !2 free -m total used free shared buff/cache available Mem: 1998 1532 75 21 390 227 Swap: 0 0 0
При необходимости историю всегда можно погрепать:
history | grep export 174 export HOME=/tmp 183 history | grep export
Последнее и самое интересное — реверсивный поиск. Если нажать комбинацию Ctrl + r , то запустится поиск по истории. Он ожидает ввода символов и сразу отображает ближайшую команду, в которой эти символы встречаются. Если найденное соответствие вас не устроило, то повторное нажатие Ctrl + r выберет следующее соответствие из истории:
На скриншоте выше продвинутая версия этого поиска, работающая через утилиту fzf .
Самостоятельная работа
Проанализируйте историю на своем локальном компьютере и поэкспериментируйте с реверсивным поиском.
![]()
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Об обучении на Хекслете
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Урок «Как эффективно учиться на Хекслете»
- Вебинар « Как самостоятельно учиться »
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Команда History, как сделать резервную копию в Ubuntu

В следующей статье мы рассмотрим как мы можем сделать резервную копию истории терминала в Ubuntu и как его восстановить. Терминал Gnu / Linux предлагает пользователям называется команда история. Эта функция будет делать резервную копию каждой операции с помощью используемых нами команд, что позволяет пользователям использовать ее в другое время.
Поскольку все лос команды терминала которые мы выполняем, пользователи сохраняются в папке ‘запись«, в некоторых случаях может быть очень полезно иметь резервную копию для дальнейшего использования. В следующих строках мы увидим, как сделать резервную копию истории терминала в Ubuntu, а также как восстановить ее позже.
Посмотреть все разделы
Команда истории

Теме статьи:
Некоторые необычные, но занимательные команды терминала
Где хранится история терминала?
Терминал Gnu / Linux хранит свою историю в файле. Восток назван ‘.bash_history‘и хранится в домашнем каталоге, откуда любой может его редактировать. Поскольку файл истории терминала хранится в каталоге пользователя, у каждого будет свой файл.
Любой пользователь системы может просмотреть историю другого с помощью простой команды. Так, например, если бы мы хотели взгляните на историю командной строки, нам просто нужно написать в терминале что-то вроде следующего (Ctrl + Alt + T):

cat /home/usuario/.bash_history
Пользователи также смогут просмотреть историю текущего пользователя с помощью которого мы авторизуемся в терминале, выполнив:
history
Поскольку история — это всего лишь один файл, мы сможем искать внутри, как в обычном текстовом файле, используя утилиту grep. Например, чтобы найти экземпляры ‘трогать‘вы должны использовать что-то вроде следующего:

cat /home/user/.bash_history | grep 'touch'
Мы также можем использовать следующую команду:

history | grep 'termino-a-buscar'
к посмотреть возможные варианты использования команды history, мы можем написать:

history --help
Сохранить историю терминала в резервную копию
Как мы уже говорили, «история» для терминала — это просто скрытый текстовый файл, содержащий все команды, написанные пользователем. Что ж, поскольку это всего лишь один файл, это означает, что очень легко сделать резервную копию для сохранения.
Сделать это мы будем использовать команду cat. С помощью этой команды мы сможем увидеть весь текстовый файл прямо в терминале. Если мы воспользуемся этой командой в сочетании с символом ‘>‘мы можем перенаправить вывод визуализации в файл, который мы будем использовать в качестве резервной копии.
Мы получим нашу резервную копию, набрав в терминале следующее (Ctrl + Alt + T):

cat ~/.bash_history > backup_historial
Мы также можем запустить команду истории в сочетании с ‘>’ чтобы сохранить вывод команды в файл:
history > backup_historial
Другая возможность будет резервное копирование истории другого пользователя. Важно убедиться, что вы изменили «имя пользователя‘поскольку нас интересуют:
cat /home/nombre_usuario/.bash_history > backup_historial
Сделайте резервную копию определенных элементов истории
Если мы хотим сделать резервную копию только определенных команд из истории, мы можем сделать это, просмотрев файл истории и объединив его с командой grep, который будет фильтровать определенные ключевые слова.
В следующих примерах давайте использовать ‘>>’ вместо ‘>’. Причина использования «>>» заключается в том, что он не будет перезаписывать содержимое резервной копии файла журнала и его можно запускать несколько раз для добавления в резервную копию.
Например, если мы хотим сделать резервную копию команд в истории, которые содержат команду настройки, мы можем выполнить следующую операцию:

cat ~/.bash_history | grep 'gsettings' >> backup_historial
Или также можно было бы использовать:
cat /home/nombre_usuario/.bash_history | grep 'gsettings' >> backup_historial
Фильтрацию с помощью grep также можно применить к команде history:
history | grep 'gsettings' >> backup_historial
Чтобы сделать резервную копию определенных ключевых слов из файла истории, просто замените «настройки‘в примерах выше. Кроме того, мы можем повторно запускать эту команду сколько угодно раз.
Восстановить резервную копию истории
Восстановить резервную копию истории так же просто, как удалите исходный файл и поместите резервную копию на его место. Чтобы удалить исходный файл истории, мы можем используйте команду rm, чтобы удалить ‘.bash_history«.
После удаления файла из домашней папки пользователя, в которой мы хотим восстановить историю, с помощью команды mv мы можем изменить имя ‘backup_historial’ на ‘.bash_history».
mv backup_historial ~/.bash_history
Теперь, когда новый файл журнала создан, мы должны выполните следующую команду, чтобы перезагрузить функцию.
history -rw
Когда мы закончим, мы сможем пробег ‘история‘чтобы увидеть восстановленные команды в окне терминала.
Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.
Полный путь к статье: Убунлог » Ubuntu » Команда History, как сделать резервную копию в Ubuntu
Будьте первым, чтобы комментировать