Большинство администраторов Linux-серверов проводят много времени в командной строке, поэтому история команд - важная вещь для них.
BASH (Bourne Again SHell) - это оболочка командной строки, которая используется по умолчанию в большинстве основных дистрибутивов Linux.
Что такое история команд
Команда history используется для отображения журнала команд Bash, которые вы набирали ранее. Этот журнал называется «историей», которая позволяет нам быстро увидеть, какие команды выполнялись ранее в системе. Когда вы закрываете сеанс терминала, BASH записывает все команды, которые вы выполнили, в файл ~/.bash_history.
Когда вы одновременно запускаете два сеанса, команда history отображает историю текущего сеанса и не показывает историю другого сеанса.
Как читать историю команд
Запустите команду history без каких-либо параметров для просмотра команд, которые вы запускали ранее. Если у вас огромные журналы истории команд, вы не можете их нормально просмотреть. В этом случае вы должны использовать команды просмотра файлов, такие как less, more и т. д.
# history or # history | more or # history | less or # history | head -20 or # 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, чтобы выполнить ее или клавиши со стрелками влево и вправо, чтобы отредактировать команду.
Повтор последней команды
Повторить последнюю команду, которую вы выполнили, введите !! - двойной восклицательный знак.
# uname -a Linux vps138235 4.4.0-108-generic #131-Ubuntu SMP Sun Jan 7 14:34:49 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux # !! uname -a Linux vps138235 4.4.0-108-generic #131-Ubuntu SMP Sun Jan 7 14:34:49 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Как повторить последнюю команду, используя ее номер
Повторите ранее выполненную команду, используя ее номер. Это позволит быстро запустить ранее выполненную команду, вместо ввода всей команды.
# !774 uname -a Linux vps138235 4.4.0-108-generic #131-Ubuntu SMP Sun Jan 7 14:34:49 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Поиск и выполнение ранее введенных команд
История команд предлагает множество вариантов поиска. Она позволяет нам выполнять поиск и выполнять ранее выполненные команды. Можно выполнить команду, которая соответствует строке в начале команды. Или выполнить команду, которая соответствует заданной строке
Чтобы выполнить эту операцию, я взял последние 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.
# !? ps or # !? ps? docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 25431e3d61fc rancher/scheduler:v0.8.3 "/.r/r /rancher-entr…" 5 days ago Up About an hour r-scheduler-scheduler-1-297af68f 5420cdb768bc centos "/bin/bash" 5 days ago Up 5 days festive_colden f453843a43f4 centos:latest "/bin/bash" 7 days ago Up 7 days gifted_kepler 6a385828575a fedora "/bin/bash" 7 days ago Up 7 days dreamy_einstein ca5148e8d4f6 centos "/bin/bash" 7 days ago Up 7 days nifty_joliot 6f49f5fd6e49 fedora "/bin/bash" 10 days ago Up 7 days tender_bhabha 73878066ab70 centos:latest "/.r/r /bin/bash" 2 weeks ago Up 2 weeks r-CentOS-2307d873 a8f8bda21205 rancher/healthcheck:v0.3.3 "/.r/r /rancher-entr…" 2 weeks ago Up 2 weeks r-healthcheck-healthcheck-2-9d8b4357 507817dbf425 rancher/network-manager:v0.7.19 "/rancher-entrypoint…" 2 weeks ago Up 2 weeks r-network-services-network-manager-2-b5a2e972 009034ba6536 rancher/net:v0.13.7 "/rancher-entrypoint…" 2 weeks ago Up 2 weeks r-ipsec-ipsec-connectivity-check-2-c5addb83 6fb051f8d176 rancher/net:v0.13.7 "/rancher-entrypoint…" 2 weeks ago Up 2 weeks r-ipsec-ipsec-router-2-ab035109 fdd5cd881fc1 rancher/dns:v0.15.3 "/rancher-entrypoint…" 2 weeks ago Up 2 weeks r-network-services-metadata-dns-2-44490e8d 26cf808ef887 rancher/net:holder "/.r/r /rancher-entr…" 2 weeks ago Up 2 weeks r-ipsec-ipsec-2-ff75d784 8a82a7ae9192 rancher/metadata:v0.9.5 "/rancher-entrypoint…" 2 weeks ago Up 2 weeks r-network-services-metadata-2-d034268c c2cc6d345430 rancher/net:v0.13.7 "/rancher-entrypoint…" 2 weeks ago Up 2 weeks r-ipsec-cni-driver-1-8c666e6b 3415a1fd101f rancher/agent:v1.2.9 "/run.sh run" 2 weeks ago Up 2 weeks rancher-agent 008e8d292f46 rancher/server:stable "/usr/bin/entry /usr…" 3 weeks ago Up 5 days 3306/tcp, 0.0.0.0:8080->8080/tcp sharp_hypatia
Как заменить строку и выполнить ранее введенную команду
Если вы хотите повторить последнюю команду с новой строкой, просто замените string1 на string2 (эквивалентно «!!:s/string1/string2/»).
Используйте следующий формат команды. В приведенном ниже примере сначала я запустил образ Fedora docker, а затем запустил образ Centos docker, заменив строку Fedora на CentOS.
# !794 docker run -ti fedora /bin/bash [root@029af8069eaa /]# uname -a Linux 029af8069eaa 4.4.0-108-generic #131-Ubuntu SMP Sun Jan 7 14:34:49 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux [root@029af8069eaa /]# exit exit # ^fedora^centos docker run -ti centos /bin/bash [root@710ea49f548b /]# cat /etc/centos-release CentOS Linux release 7.4.1708 (Core) [root@710ea49f548b /]# exit exit
Если вы хотите запустить какую-либо конкретную команду, которая была выполнена ранее, с новой строкой, используйте один из следующих форматов команды.
В моем случае строка 821 истории команд была fedora docker container. Чтобы запустить centos container, просто замените слово fedora на centos.
# !821:s|fedora|centos docker run -ti centos /bin/bash [root@e37a89af2959 /]# exit exit or # !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
Комментариев нет:
Отправить комментарий