Библиотека сайта rus-linux.net
Эффективное использование истории команд в Linux
Оригинал: How To Use History Command Effectively In Linux
Автор: Magesh Maruthamuthu
Дата публикации: 28 февраля 2018 года
Перевод: А. Кривошей
Дата перевода: октябрь 2018 г.
Большинство администраторов Linux-серверов проводят много времени в командной строке, поэтому история команд - важная вещь для них.
BASH (Bourne Again SHell) - это оболочка командной строки, которая используется по умолчанию в большинстве основных дистрибутивов Linux.
Что такое история команд
Команда history используется для отображения журнала команд Bash, которые вы набирали ранее. Этот журнал называется «историей», которая позволяет нам быстро увидеть, какие команды выполнялись ранее в системе. Когда вы закрываете сеанс терминала, BASH записывает все команды, которые вы выполнили, в файл ~/.bash_history.
Когда вы одновременно запускаете два сеанса, команда history отображает историю текущего сеанса и не показывает историю другого сеанса.
Как читать историю команд
Запустите команду history без каких-либо параметров для просмотра команд, которые вы запускали ранее. Если у вас огромные журналы истории команд, вы не можете их нормально просмотреть. В этом случае вы должны использовать команды просмотра файлов, такие как less, more и т. д.
# history или # history | more или # history | less или # history | head -20 или # history | tail -15 . . 759 ls -lh 760 touch magi.txt 761 echo "Magi-Thanu" >>magi.txt 762 cat magi.txt 763 grep -r "Magi-Thanu" / 764 grep -r "Magi-Thanu" / 2> /dev/null 765 grep -r /* | grep "Magi-Thanu" / 2> /dev/null 766 grep -r /* | grep "Magi-Thanu" 767 grep -r /* | grep "Magi-Thanu" 2> /dev/null 768 find / -xdev -type f -print0 | xargs -0 grep -H "Magi-Thanu" 2> /dev/null 769 grep -r /* | grep "Magi-Thanu" 2> /dev/null 770 exit 771 histor 772 history 773 hostname 774 date 775 uname -a 776 history
Как просмотреть последние n команд
По умолчанию команда history показывает последние 1000 выполненных нами команд. Если вы хотите dsdtcnb только n команд, введите число n после команды history. Например, чтобы отобразить последние 10 команд, введите:
# history 10 764 grep -r "Magi-Thanu" / 2> /dev/null 765 grep -r /* | grep "Magi-Thanu" / 2> /dev/null 766 grep -r /* | grep "Magi-Thanu" 767 grep -r /* | grep "Magi-Thanu" 2> /dev/null 768 find / -xdev -type f -print0 | xargs -0 grep -H "Magi-Thanu" 2> /dev/null 769 grep -r /* | grep "Magi-Thanu" 2> /dev/null 770 exit 771 # history -10 772 history -10 773 history 10
Как повторно выполнить введенную ранее команду
С помощью клавиш стрелок вверх и вниз перейдите к нужной команде. Затем нажмите Enter, чтобы выполнить ее или клавиши со стрелками влево и вправо, чтобы отредактировать команду.
Повтор последней команды
Повторить последнюю команду, которую вы выполнили, введите !! - двойной восклицательный знак.
Как повторить последнюю команду, используя ее номер
Повторите ранее выполненную команду, используя ее номер. Это позволит быстро запустить ранее выполненную команду, вместо ввода всей команды.
Поиск и выполнее ранее введенных команд
История команд предлагает множество вариантов поиска. Она позволяет нам выполнять поиск и выполнять ранее выполненные команды. Можно выполнить команду, которая соответствует строке в начале команды. Или выполнить команду, которая соответствует заданной строке
Чтобы выполнить эту операцию, я взял последние 30 команд в истории.
# history | tail -30 751 du 752 top -c 753 cat /etc/*-release 754 docker ps 755 history 756 docker run -ti fedora /bin/bash 757 ls -lh 758 cd /opt 759 ls -lh 760 touch magi.txt 761 echo "Magi-Thanu" >>magi.txt 762 cat magi.txt 763 grep -r "Magi-Thanu" / 764 grep -r "Magi-Thanu" / 2> /dev/null 765 grep -r /* | grep "Magi-Thanu" / 2> /dev/null 766 grep -r /* | grep "Magi-Thanu" 767 grep -r /* | grep "Magi-Thanu" 2> /dev/null 768 find / -xdev -type f -print0 | xargs -0 grep -H "Magi-Thanu" 2> /dev/null 769 grep -r /* | grep "Magi-Thanu" 2> /dev/null 770 exit 771 # history -10 772 history -10 773 history 10 774 uname -a 775 history 776 uname -a 777 grep -r /* | grep "Magi-Thanu" 2> /dev/null 778 history 779 history | tail -25 780 history | tail -30
1) Предположим, вы хотите запустить команду, которая соответствует строке в начале команды. Используйте приведенный ниже формат. В нем будет запущена последняя команда, начинающаяся со строки doc.
В моем случае она выполнит команду запуска docker, которая находится в строке 756.
# !doc docker run -ti fedora /bin/bash [root@54bc0e2c1323 /]# cat /etc/fedora-release Fedora release 27 (Twenty Seven)
2) Если вы хотите запустить команду, которая соответствует заданной строке, используйте следующий формат команды:
В моем случае она выполнит команду docker ps, которая находится в строке 754.
Как заменить строку и выполнить ранее введенную команду
Если вы хотите повторить последнюю команду с новой строкой, просто замените string1 на string2 (эквивалентно «!!:s/string1/string2/»).
Используйте следующий формат команды. В приведенном ниже примере сначала я запустил образ Fedora docker, а затем запустил образ Centos docker, заменив строку Fedora на CentOS.
Если вы хотите запустить какую-либо конкретную команду, которая была выполнена ранее, с новой строкой, используйте один из следующих форматов команды.
В моем случае строка 821 истории команд была fedora docker container. Чтобы запустить centos container, просто замените слово fedora на centos.
# !821:s|fedora|centos docker run -ti centos /bin/bash [root@e37a89af2959 /]# exit exit
или
# !821:s/fedora/centos docker run -ti centos /bin/bash [root@050610f3198b /]#
Вывод подходящих строк с помощью команды grep
Если вы запускали много команд помимо docker, можно очень легко отобразить список команд, соответствующих команде docker, используя команду grep.
# history | grep docker 23 docker ps 24 docker images 25 docker pull centos 26 docker ps 503 docker --version 504 docker ps 505 docker pull fedora 506 docker pull debian 507 docker pull archlinux 508 docker pull arch 509 docker pull arch linux 510 docker pull opensuse 516 docker run -ti fedora /bin/bash 517 docker run -ti debian /bin/bash 518 docker run -ti centos /bin/bash
Как в истории команд отобразить дату и время
По умолчанию команда history показывает только команды, выполняемые пользователями, и не печатает дату и время, но записывает время, когда вы запускали команду.
Если вы хотите добавить дату и время в выводе истории команд, просто перейдите по следующей ссылке.
Как использовать историю команд YUM для отката обновлений
Yum (Yellowdog Update Modified) - утилита для управления пакетами RPM в системах CentOS и Red Hat, история команд Yum позволяет администратору откатить систему в предыдущее состояние, но из-за некоторых ограничений откат работает не во всех ситуациях, то есть команда yum может просто ничего не делать, или она может удалить не те пакеты, которые вы ожидаете.
Как просмотреть историю команд других пользователей
Используйте следующий формат команды, чтобы просмотреть историю команд других пользователей:
# more /home/$USER/.bash_history
Как искать в истории Bash
Мы можем выполнить поиск ранее выполненной команды с использованием ключевого слова, нажав CTRL-r (этот поиск отображает самый последний найденный результат). Нажмите CTRL-r еще раз, чтобы увидеть следующий результат.
# (reverse-i-search)`dock': docker run -ti centos /bin/bash