Как вы, возможно, заметили в вышеперечисленных примерах, ввод команд в Bash может привести в большому объему печатания, узнайте некоторые особенности Bash, которые могут сделать вашу работу намного проще и сохранят ваше время.
- История
По умолчанию, Bash «запоминает» команды, которые вы ввели. Это особенность называется история. Вы можете просматривать команды, которые вы ввели раньше, выбрать ту, которую вы хотите повторить и затем выполнить ее снова. Для этого повторно нажимайте ↑ до тех пор, пока нужная команда появится в строке. Для того, чтобы перейти вперед в вписке ранее выполненных команд, нажмите ↓.
Теперь вы можете редактировать выбранную команду (например, изменить имя файла или путь) перед тем, как выполнить ее нажатием Enter. Для редактирования командной строки просто перемещайте курсор к нужной позиции, используя клавиши со стрелками и начинайте печатать.
Вы также можете искать определенную команду в истории. Нажмите Ctrl+R для запуска функции инкрементного поиска, показывающей следующую строку:
(reverse-i-search)`':
Просто введите один или несколько символов из команды, которую вы ищете. С каждым символ, который вы ввели, сужается область поиска. Соответствующий результат поиска показан справа двоеточия, тогда как то, что вы вводите появляется слева него. Для принятия результата поиска нажмите Esc. Строка примет свой обычный вид и покажет команду, которую вы выбрали. Теперь вы можете редактировать команду или напрямую выполнить ее, нажав Enter.
- Дополнение
Дополнение имени файла или каталога до его полной длины после ввода его первых символов является другой полезной особенностью Bash. Для этого введите первые символы, затем нажмите →| (Табулятор). Если имя файла или пути уникально он дополняется сразу и курсор перемещается в конец имени файла. Затем, при необходимости, вы можете ввести следующий параметр команды. Если имя файла или пути не уникально (потому что существует несколько имен файлов, начинающихся с тех же символов), имя файла или пути дополняется лишь до места, где оно снова неоднозначно. Затем вы можете получить список вариантов, нажав →| второй раз. После этого вы можете ввести следующие символы файла или пути, затем снова попробовать дополнение, нажав →|. При дополнении имен файлов или путей при помощи →| вы можете одновременно проверять, существует ли файл или путь, который вы хотите ввести (также вы можете удостовериться в правильном написании).
- Безразличные символы
Вы можете заменить один или более символов в имени файла при помощи безразличного символа для расширения имени пути. Безразличные символы — это символы, которые могут означать другие символы. Существует три их типа в Bash:
Безразличные символ
Действие
?
Соответствует точно одному произвольному символу
*
Соответствует любому количеству символов
[
set
]Соответствует одному из символов из группы, указанной внутри квадратных скобок, которая представлена здесь строкой
set
.
Следующие примеры иллюстрируют, как воспользоваться этими удобными особенностями Bash.
Если вы уже выполнили примеры, которые содержит Раздел 8.3.1, «Примеры работы с файлами и каталогами», ваша оболочка должна быть наполнена командами, которые вы можете получить, используя функцию истории.
Повторно нажимайте ↑ до тех пор, пока появится команда cd ~.
Нажмите Enter для выполнения команды и перехода в ваш домашний каталог.
По умолчанию, ваш домашний каталог содержит два подкаталога, начинающихся с одной буквы,
Documents
иDesktop
.Введите cd D и нажмите →|.
Ничего не произойдет, так как Bash не может определить, к какому из подкаталогов вы хотите перейти.
Нажмите →| еще раз и вы увидите список возможных вариантов:
tux@knox:~> cd D Desktop/ Documents/ tux@knox:~> cd D
Строка по-прежнему показывает ваш первоначальный ввод. Напечатайте следующий символ подкаталога, к которому вы хотите перейти и нажмите →| снова.
Теперь Bash дополнит путь.
Теперь вы можете выполнить команду нажатием Enter.
Теперь, предположим, ваш домашний каталог содержит некоторое число файлов с различными расширениями. В него также входят несколько вариантов одного файла, которые вы сохранили под различными именами myfile1.txt
, myfile2.txt
и т.д. Вы хотите найти определенные файлы по их свойствам.
Сначала создайте некоторые тестовые файлы в вашем домашнем каталоге:
Используйте команду touch, которые вы уже знаете, для создания нескольких (пустых) файлов с различными расширениями, например
.pdf
,.xml
и.jpg
.Вы можете сделать это последовательно (не забывайте использовать функцию истории Bash) или же используйте одну команду touch: просто добавьте несколько имен файлов, разделенных пробелом.
Создайте по крайней мере два файла, которые имеют одно и то же расширение, например
.html
.Для создания нескольких «вариантов» одного файла введите
touch myfile{1..5}.txt
Эта команда создает последовательно пять пронумерованных файлов:
myfile1.txt,…,myfile5.txt
Проверьте содержимое вашего домашнего каталога. Он должен выглядеть примерно так:
-rw-r--r-- 1 tux users 0 2006-07-14 13:34 foo.xml -rw-r--r-- 1 tux users 0 2006-07-14 13:47 home.html -rw-r--r-- 1 tux users 0 2006-07-14 13:47 index.html -rw-r--r-- 1 tux users 0 2006-07-14 13:47 toc.html -rw-r--r-- 1 tux users 0 2006-07-14 13:34 manual.pdf -rw-r--r-- 1 tux users 0 2006-07-14 13:49 myfile1.txt -rw-r--r-- 1 tux users 0 2006-07-14 13:49 myfile2.txt -rw-r--r-- 1 tux users 0 2006-07-14 13:49 myfile3.txt -rw-r--r-- 1 tux users 0 2006-07-14 13:49 myfile4.txt -rw-r--r-- 1 tux users 0 2006-07-14 13:49 myfile5.txt -rw-r--r-- 1 tux users 0 2006-07-14 13:32 tux.png
При помощи безразличных символов выберите определенные подмножества файлов, в соответствии различным признакам:
Для получения списка всех файлов с расширением
.html
введитеls -l *.html
Для получения списка всех «вариантов»
myfile.txt
введитеls -l myfile?.txt
Заметьте, здесь вы можете использовать только безразличный символ
?
, потому что нумерация файлов одноразрядная. Как только у вас появится файл под именемmyfile10.txt
, вы будете должны использовать безразличный символ*
для просмотра всех вариантовmyfile.txt
(или добавить другой вопросительный знак так, что ваша строка бы выглядела наподобие myfile??.txt).Для удаления, например, вариантов 1-3 и варианта 5
myfile.txt
введитеrm myfile[1-3,5].txt
Проверьте результат при помощи
ls -l
Из всех вариантов
myfile.txt
должен остаться толькоmyfile4.txt
.
Конечно, вы также можете совмещать несколько безразличных символов в одной команде. В вышеприведенном примере rm myfile[1-3,5].* приведет к тому же результату, что и rm myfile[1-3,5].txt, потому что есть файлы только с одним расширением, .txt
.
Использование безразличных символов с командой rm | |
---|---|
Безразличные символы в команде rm могут быть очень полезны, но также и очень опасны: вы можете удалить больше файлов из вашего каталога, чем нужно. Для того, чтобы узнать, какие файлы будут подвержены rm, запустите сначала вашу строку с безразличным символом с ls вместо rm. |