Наши партнеры

UnixForum




Новости Москвы

Библиотека сайта 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 показывает только команды, выполняемые пользователями, и не печатает дату и время, но записывает время, когда вы запускали команду.

Если вы хотите добавить дату и время в выводе истории команд, просто перейдите по следующей ссылке.

How To Display Date And Time In History Command

Как использовать историю команд 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