Большинство администраторов 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
Комментариев нет:
Отправить комментарий