Библиотека сайта rus-linux.net
Фундаментальные основы Linux. Часть III. Раскрытие команд командной оболочкой
Оригинал: Linux FundamentalsАвтор: Paul Cobbaut
Дата публикации: 16 октября 2014 г.
Перевод: А.Панин
Дата перевода: 13 декабря 2014 г.
Глава 14. История команд командной оболочки
В командной оболочке реализован механизм для упрощения повторного ввода команд, который в подробностях описан в данной главе.
Повторение последней выполненной команды
!!
. Данная последовательность символов носит имя bang bang
(бэнг-бэнг).
paul@debian5:~/test42$ echo данная команда будет повторно исполнена > file42.txt paul@debian5:~/test42$ !! данная команда будет повторно исполнена > file42.txt paul@debian5:~/test42$
Повторение других команд
!
, после которого должен быть введен один или несколько начальных символов команды. В результате командная оболочка повторит последнюю команду, начинающуюся с введенных символов.
paul@debian5:~/test42$ touch file42 paul@debian5:~/test42$ cat file42 paul@debian5:~/test42$ !to touch file42 paul@debian5:~/test42$
Команда history
history
, которая позволяет вывести информацию об истории команд, выполненных в рамках данной командной оболочки (или использовать команду history n
для ознакомления со списком из n последних выполненных команд).
paul@debian5:~/test$ history 10 38 mkdir test 39 cd test 40 touch file1 41 echo привет > file2 42 echo Сегодня очень холодно > winter.txt 43 ls 44 ls -l 45 cp winter.txt summer.txt 46 ls -l 47 history 10
Команда !n
!
с последующим вводом номера команды для повторения, командная оболочка выведет строку соответствующей команды и исполнит ее.
paul@debian5:~/test$ !43 ls file1 file2 summer.txt winter.txt
Сочетание клавиш Ctrl-r
ctrl-r
. В примере ниже я использовал сочетание клавиш ctrl-r
и ввел четыре символа apti
, после чего в файле истории команд командной оболочки был осуществлен поиск последней команды, содержащей последовательность из этих четырех символов.
paul@debian5:~$ (reverse-i-search)`apti': sudo aptitude install screen
Переменная окружения $HISTSIZE
paul@debian5:~$ echo $HISTSIZE 500
paul@debian5:~$ HISTSIZE=15000 paul@debian5:~$ echo $HISTSIZE 15000
Переменная окружения $HISTFILE
bash
стандартным значением данной переменной является путь к файлу ~/.bash_history
.
paul@debian5:~$ echo $HISTFILE /home/paul/.bash_history
Данные истории команд для сессии работы с командной оболочкой сохраняются в данном файле в момент, когда вы завершаете сессию
!
При закрытии эмулятора терминала gnome-terminal с помощью мыши или команды reboot
в случае работы с учетной записью пользователя root, история команд вашего терминала НЕ БУДЕТ сохранена.
Переменная окружения $HISTFILESIZE
paul@debian5:~$ echo $HISTFILESIZE 15000
Предотвращение сохранения команд
файл истории
, использовав пробел в качестве префикса команды.
paul@debian8:~/github$ echo abc abc paul@debian8:~/github$ echo def def paul@debian8:~/github$ echo ghi ghi paul@debian8:~/github$ history 3 9501 echo abc 9502 echo ghi 9503 history 3
Регулярные выражения (дополнительная информация)
регулярных выражений
в случае использования символа !
для повтора команд. В примере ниже перед повторным исполнением команды производится замена символа 1 на символ 2 в строке этой команды.
paul@debian5:~/test$ cat file1 paul@debian5:~/test$ !c:s/1/2 cat file2 hello paul@debian5:~/test$
История команд оболочки Korn Shell (дополнительная информация)
Повторение команды при работе с командной оболочкой Korn Shell осуществляется похожим образом. Командная оболочка Korn Shell точно так же поддерживает команду history
, но для извлечения команд из списка ранее исполненных команд в данной командной оболочке используется символ r
.
$ history 17 17 clear 18 echo hoi 19 history 12 20 echo world 21 history 17
r
в качестве аргумента могут быть использованы как номера команд, возвращенные командой history, так и последовательности начальных символов команд.
$ r e echo world world $ cd /etc $ r cd /etc $
Практическое задание: история команд командной оболочки
-
1. Выполните команду
echo Ответом на вопросы о смысле жизни, вселенной и всем сущем является 42
. -
2. Повторите предыдущую команду, использовав только два символа (существуют два решения!)
-
3. Выведите список из 5 последних исполненных вами команд.
-
4. Повторно выполните длинную команду
echo
из вопроса 1, воспользовавшись номерами команд, которые вы получили вместе с выводом команды из вопроса 3. -
5. Сколько команд может храниться в файле истории команд в рамках текущей сессии вашей командной оболочки?
-
6. В какой файл сохраняются команды при при завершении сессии командной оболочки?
-
7. Сколько команд может быть записано в
файл истории команд
при завершении вашей текущей сессии командной оболочки? -
8. Сделайте так, чтобы ваша командная оболочка bash сохранила 5000 введенных вами впоследствии команд.
-
9. Откройте более одной консоли (используйте сочетание клавиш Ctrl-shift-t в эмуляторе терминала gnome-terminal) с использованием одной и той же учетной записи пользователя. Когда данные истории команд запишутся в файл истории команд?
Корректная процедура выполнения практического задания: история команд командной оболочки
-
1. Выполните команду
echo Ответом на вопросы о смысле жизни, вселенной и всем сущем является 42
. -
echo Ответом на вопросы о смысле жизни, вселенной и всем сущем является 42
-
2. Повторите предыдущую команду, использовав только два символа (существуют два решения!)
-
!! или !e
-
3. Выведите список из 5 последних исполненных вами команд.
-
paul@ubu1010:~$ history 5 52 ls -l 53 ls 54 df -h | grep sda 55 echo Ответом на вопросы о смысле жизни, вселенной и всем сущем является 42 56 history 5
В вашем случае номера команд будут отличаться.
-
4. Повторно выполните длинную команду
echo
из вопроса 1, воспользовавшись номерами команд, которые вы получили вместе с выводом команды из вопроса 3. -
paul@ubu1010:~$ !56
-
5. Сколько команд может храниться в файле истории команд в рамках текущей сессии вашей командной оболочки?
-
echo $HISTSIZE
-
6. В какой файл сохраняются команды при при завершении сессии командной оболочки?
-
echo $HISTFILE
-
7. Сколько команд может быть записано в
файл истории команд
при завершении вашей текущей сессии командной оболочки? -
echo $HISTFILESIZE
-
8. Сделайте так, чтобы ваша командная оболочка bash сохранила 5000 введенных вами впоследствии команд.
-
HISTSIZE=5000
-
9. Откройте более одной консоли (используйте сочетание клавиш Ctrl-shift-t в эмуляторе терминала gnome-terminal) с использованием одной и той же учетной записи пользователя. Когда данные истории команд запишутся в файл истории команд?
-
В момент исполнения команды
exit
.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Глава 13. Встраивание и параметры командных оболочек | Глава 15. Формирование списков имен файлов на основе шаблонов |