Фундаментальные основы Linux. Часть III. Раскрытие команд командной оболочкой
Глава 15. Формирование списков имен файлов на основе шаблонов
Командная оболочка также ответственна за формирование списков имен файлов на основе шаблонов (или динамическую генерацию списков имен файлов). В данной главе даются пояснения относительно работы данного механизма.
Звездочка (*)
Знак вопроса (?)
Квадратные скобки ([])
Диапазоны a-z и 0-9
Предотвращение формирования списков имен файлов на основе шаблонов
Практическое задание: формирование списков имен файлов на основе шаблонов
1. Создайте тестовую директорию и перейдите в нее.
(Имя последнего файла состоит из 6 символов, включая пробел).
3. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки file.
4. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File.
5. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки file и заканчиваются числовым символом.
6. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки file и заканчиваются буквенным символом.
7. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File и имеют пятый числовой символ.
8. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File, имеют пятый числовой символ и никаких символов более.
9. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с буквенного символа и заканчиваются числовым символом.
10. Выведите список всех имен файлов (с помощью команды ls), которые состоят ровно из пяти символов.
11. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с символа f или F и оканчиваются символом 3 или A.
12. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с символа f и оканчиваются числовым символом, причем вторым символом является символ i или R.
13. Выведите список всех имен файлов (с помощью команды ls), которые не начинаются с символа F.
17. Существуют ли другие команды, помимо cd, предназначенные для изменения текущей директории?
Корректная процедура выполнения практического задания: формирование списков имен файлов на основе шаблонов
1. Создайте тестовую директорию и перейдите в нее.
(Имя последнего файла состоит из 6 символов, включая пробел).
3. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки file.
4. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File.
5. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки file и заканчиваются числовым символом.
6. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки file и заканчиваются буквенным символом.
7. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File и имеют пятый числовой символ.
8. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File, имеют пятый числовой символ и никаких символов более.
9. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с буквенного символа и заканчиваются числовым символом.
10. Выведите список всех имен файлов (с помощью команды ls), которые состоят ровно из пяти символов.
11. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с символа f или F и оканчиваются символом 3 или A.
12. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с символа f и оканчиваются числовым символом, причем вторым символом является символ i или R.
13. Выведите список всех имен файлов (с помощью команды ls), которые не начинаются с символа F.
Обратитесь к примеру в книге.
17. Существуют ли другие команды, помимо cd, предназначенные для изменения текущей директории?
Что происходит когда вводишь в терминал unix звездочку (*)?
Кто объяснит нормально, или дайте ссылку где описано. Что происходит когда в linux`е вводишь команду (*). Я так понял она берет все файлы подряд и выполняет их подряд. Там только названия файлов учитывается? Или как то содержимое тоже на что то влияет. Как все это работает?
Если оболочка встречает символ *, то она воспринимает его как символ шаблона. Если это символ шаблона, то она берёт символы вокруг него, составляя шаблон. Когда шаблон составлен, она берёт все имена из текущей директории по порядку и сравнивает с этим шаблоном. Все имена, которые совпали с шаблоном, вставляются через пробел вместо шаблона. А потом всё это дело выполняется.
Что происходит когда в linux`е вводишь команду (*).
* может быть использована не как параметр, а как имя внешнего исполняемого файла.
О-о-о-о. мсье понимает истинный вкус в извращениях! 😉
Что такое метасимволы Linux и как вы их используете
Узнайте, как метасимволы Linux расширяют использование инструментов командной строки
Согласно Википедии, метасимвол – это любой символ, имеющий особое значение, например, карат (^), знак доллара ($) или звездочка (*).
С точки зрения Linux, существует множество таких метасимволов, и их значения различаются в зависимости от того, какую команду или программу Linux вы используете.
Полная остановка как метасимвол (.)
Скромный полный останов используется для указания текущей позиции при запуске таких команд, как cd, find или sh, но в таких приложениях, как awk, grep и sed, это подстановочный знак, используемый для обозначения определенного числа любого символа.
Например, следующая команда найдет все mp3-файлы в текущей папке и ее подпапках.
Если вы выполните эту команду в своем текущем рабочем каталоге (pwd), вы, вероятно, увидите возвращенные результаты, при условии, что вы храните ваши mp3-файлы в папке музыки в вашей домашней папке.
Теперь посмотрите на эту команду:
Команда ps выводит список всех запущенных процессов на вашем компьютере. Команда grep берет строки ввода и ищет шаблон.
Если у вас запущен Firefox, вы получите совпадение. Точно так же, если у вас запущена программа с именем fonefox или freefox, они также будут возвращены.
Если вы знаете, что вам нужно искать только один символ, а не использовать “.” метасимвол, вы можете использовать «?». С помощью “?” относится к любому отдельному символу либо в начале, либо в конце шаблона.
Звездочка как метасимвол (*)
Звездочка является более широко известным метасимволом и используется для обозначения нуля или более любого символа при поиске шаблона.
Стоит отметить, что это немного отличается, потому что звездочка означает ноль или более, поэтому, кроме поиска Firefox, Facefox и Fonefox, он также может найти Flutefox, Ferretfox и даже просто Fefox.
Карат как метасимвол (^)
Карат (^) используется для обозначения начала строки или строки. Так как это используется?
Команда ls используется для вывода списка всех файлов в папке следующим образом:
Если вы хотите знать все файлы в папке, которая начинается с определенной строки, такой как «gnome», тогда для указания этой строки можно использовать карат.
Обратите внимание, что здесь перечислены только файлы, начинающиеся с gnome. Если вам нужны файлы с гномом в любом имени файла, вам следует вернуться к использованию звездочки.
В приведенном выше примере ls возвращает список имен файлов и передает этот список команде grep, которая используется для сопоставления с образцом. Grep знает, что символ карата означает найти все, что начинается с символов, следующих за ним, и в данном случае это «гном».
Символ доллара как метасимвол ($)
Символ доллара может иметь несколько значений в качестве метасимвола в Linux.
При использовании для сопоставления с образцами это означает противоположность каратам и обозначает любой образец, который оканчивается определенной строкой.
Символ доллара также используется для доступа к переменным среды в оболочке bash.
Метасимволы (\\)
Теперь посмотрим на следующую команду:
Как вы думаете, что возвращается? И f.refox, и firefox возвращаются, потому что они оба соответствуют шаблону.
Чтобы вернуть только f.refox, вам нужно будет выйти из полной остановки, чтобы фактически означать полную остановку следующим образом:
Скобки как метасимвол ([])
Вы можете использовать скобки при поиске материалов. Скобки позволяют указать конкретные буквы, которые вы хотите сопоставить в любом месте шаблона.
В этом списке перечислены все файлы, которые начинаются с букв a, b или c.
Вы можете использовать скобки в начале, конце или даже в середине шаблона поиска.
Если вы хотите искать большой диапазон букв, вы можете вместо этого использовать символ переноса (-). Например, ls [a-h] * вернет все файлы, которые начинаются с любой буквы от a до h.
Метасимвол Акцента Могила
Во всех приведенных выше примерах метасимвол канала использовался для отправки результатов одной команды (например, команды ls) другой команде (например, команды grep).
Альтернативный способ сделать это – использовать обратную кавычку (также известную как акцентная могила), чтобы вставить результаты одной команды в другую команду.
Служебные символы, используемые в текстах сценариев.
Комментарии могут располагаться и в конце строки с исполняемым кодом.
Комментариям могут предшествовать пробелы (пробел, табуляция).
Само собой разумеется, экранированный символ # в операторе echo не воспринимается как начало комментария. Более того, он может использоваться в операциях подстановки параметров и в константных числовых выражениях.
Кавычки » ‘ и \ экранируют действие символа #.
В операциях поиска по шаблону символ # так же не воспринимается как начало комментария.
Разделитель команд. [Точка-с-запятой] Позволяет записывать две и более команд в одной строке.
Следует отметить, что символ » ; » иногда так же как и # необходимо экранировать.
Символ точка довольно часто используется для обозначения каталога назначения в операциях копирования/перемещения файлов.
Более детальному рассмотрению темы экранирования посвящена Глава 5.
Разделитель, используемый в указании пути к каталогам и файлам. [слэш] Отделяет элементы пути к каталогам и файлам (например /home/bozo/projects/Makefile).
пустая команда. [двоеточие] Это эквивалент операции «NOP» ( no op, нет операции). Может рассматриваться как синоним встроенной команды true. Команда » : » так же является встроенной командой Bash, которая всегда возвращает «true» ( 0 ).
Символ-заполнитель в условном операторе if/then:
Как символ-заполнитель в операциях, которые предполагают наличие двух операндов, см. Пример 8-2 и параметры по-умолчанию.
Как символ-заполнитель для оператора вложенного документа. См. Пример 17-9.
Вышеизложенное применимо только к обычным файлам и неприменимо к конвейерам, символическим ссылкам и другим специальным файлам.
символ-шаблон. [звездочка] Символ * служит «шаблоном» для подстановки в имена файлов. Одиночный символ * означает любое имя файла в заданном каталоге.
В регулярных выражениях токен * представляет любое количество (в том числе и 0) символов.
арифметический оператор. В арифметических выражениях символ * обозначает операцию умножения.
end-of-line (конец строки). В регулярных выражениях, символ «$» обозначает конец строки.
группа команд.
Переменные, создаваемые в дочернем процессе не видны в «родительском» сценарии. Родительский процесс-сценарий, не может обращаться к переменным, создаваемым в дочернем процессе.
инициализация массивов.
Фигурные скобки.
Команда интерпретируется как список команд, разделенных точкой с запятой, с вариациями, представленными в фигурных скобках. [1] При интерпретации имен файлов (подстановка) используются параметры, заключенные в фигурные скобки.
Использование неэкранированных или неокавыченных пробелов внутри фигурных скобок недопустимо.
file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C
Код, заключенный в фигурные скобки, может выполнять перенаправление ввода-вывода.
Пример 3-1. Вложенные блоки и перенаправление ввода-вывода
Пример 3-2. Сохранение результата исполнения вложенного блока в файл
test.
Проверка истинности выражения, заключенного в квадратные скобки [ ]. Примечательно, что [ является частью встроенной команды test (и ее синонимом), И не имеет никакого отношения к «внешней» утилите /usr/bin/test.
test.
Проверка истинности выражения, заключенного между [[ ]] (зарезервированное слово интерпретатора).
элемент массива.
При работе с массивами в квадратных скобках указывается порядковый номер того элемента массива, к которому производится обращение.
диапазон символов.
двойные круглые скобки.
Конструкция scriptname >filename перенаправляет вывод scriptname в файл filename. Если файл filename уже существовал, то его прежнее содержимое будет утеряно.
Конструкция command &>filename перенаправляет вывод команды command, как со stdout, так и с stderr, в файл filename.
Конструкция command >&2 перенаправляет вывод со stdout на stderr.
Конструкция scriptname >>filename добавляет вывод scriptname к файлу filename. Если задано имя несуществующего файла, то он создается.
(command)>
перенаправление ввода на встроенный документ.
bash$ grep ‘\ ‘ textfile
конвейер. Передает вывод предыдущей команды на ввод следующей или на вход командного интерпретатора shell. Этот метод часто используется для связывания последовательности команд в единую цепочку.
В конвейер могут объединяться и сценарии на языке командной оболочки.
Если одна из команд в конвейере завершается аварийно, то это приводит к аварийному завершению работы всего конвейера.
принудительное перенаправление, даже если установлен ключ noclobber option.
логическая операция OR (логическое ИЛИ). В опрециях проверки условий, оператор || возвращает 0 (success), если один из операндов имеет значение true (ИСТИНА).
В сценариях команды, и даже циклы могут запускаться в фоновом режиме.
Пример 3-3. Запуск цикла в фоновом режиме
Команда, исполняемая в пределах сценария в фоне, может подвесить сценарий, ожидая нажатия клавиши. К счастью, это легко «лечится».
Логическая операция AND (логическое И). В операциях проверки условий, оператор && возвращает 0 (success) тогда, и только тогда, когда оба операнда имеют значение true (ИСТИНА).
префикс ключа. С этого символа начинаются опциональные ключи команд.
перенаправление из/в stdin или stdout. [дефис]
В случае, когда ожидается имя файла, тогда «-» перенаправляет вывод на stdout (вспомните пример с tar cf) или принимает ввод с stdin.
Сама по себе команда file без параметров завершается с сообщением об ошибке.
Добавим символ «-» и получим более полезный результат. Это заставит командный интерпретатор ожидать ввода от пользователя.
Теперь команда принимает ввод пользователя со stdin и анализирует его.
Используя передачу stdout по конвейеру другим командам, можно выполнять довольно эффектные трюки, например вставка строк в начало файла.
И наконец пример использования служебного символа «-« с командой tar.
Пример 3-4. Резервное архивирование всех файлов, которые были изменены в течение последних суток
Не путайте оператор «-» (предыдущего рабочего каталога) с оператором «-» (переназначения). Еще раз напомню, что интерпретация символа «-» зависит от контекста, в котором он употребляется.
Минус. Знак минус в арифметических операциях.
В зависимости от контекста применения, символ » = » может выступать в качестве оператора сравнения.
Плюс. Оператор сложения в арифметических операциях.
В зависимости от контекста применения, символ + может выступать как оператор регулярного выражения.
Ключ (опция). Дополнительный флаг для ключей (опций) команд.
В зависимости от контекста применения, символ % может выступать в качестве шаблона.
bozo выведет содержимое его домашнего каталога.
/ выведет содержимое домашнего каталога текущего пользователя.
начало-строки. В регулярных выражениях символ «^» задает начало строки текста.
Ctl-C
Завершение выполнения процесса.
Ctl-D
Выход из командного интерпретатора (log out) (аналог команды exit).
«EOF» (признак конца файла). Этот символ может выступать в качестве завершающего при вводе с stdin.
Ctl-G
Ctl-H
Ctl-J
Ctl-L
Перевод формата (очистка экрана (окна) терминала). Аналогична команде clear.
Ctl-M
Ctl-U
Стирание строки ввода.
Ctl-Z
Пустые строки никак не обрабатываются командным интерпретатором и могут свободно использоваться для визуального выделения отдельных блоков сценария.
Примечания
Интерпретатор, встретив фигурные скобки, раскрывает их и возвращает полученный список команд, которые затем и исполняет.
Исключение: блок кода, являющийся частью конвейера, может быть запущен в дочернем процессе (subshell-е).
15 специальных символов-команд, которых нужно знать для работы Bash Linux
Всем доброго времени суток и других разностей.
, *, | и >) имеют решающее значение.
Сегодня мы расскажем какое и как с ними работать. А то давно что-то ничего не было про линуксы и терминал, да и остальные вкусности.
Что такое специальные символы?
Существует набор символов, которые оболочка Bash обрабатывает двумя различными способами. Когда вы вводите их в оболочку, они действуют как инструкции или команды и сообщают оболочке выполнить определенную функцию. Думайте о них как об односимвольных командах.
Иногда вам просто нужно напечатать символ, и вам не нужно, чтобы он действовал как «магический». Есть способ, которым вы можете использовать символ, чтобы представлять себя, а не его специальную функцию.
Мы покажем вам, какие символы являются «специальными» или «мета-» символами, а также как вы можете использовать их функционально и буквально.
Домашний каталог
) является сокращением для вашего домашнего каталога. Это означает, что вам не нужно вводить полный путь к вашей домашней директории в командах. Где бы вы ни находились в файловой системе, вы можете использовать эту команду для перехода в ваш домашний каталог:
Вы также можете использовать эту команду с относительными путями. Например, если вы находитесь в файловой системе, которая не находится в вашей домашней папке, и хотите перейти в archive каталог в вашем work каталоге, используйте тильду, чтобы сделать это:
. текущая директория
Вы также можете использовать точку в командах для представления пути к вашей текущей директории. Например, если вы хотите запустить скрипт из текущего каталога, вы бы назвали его так:
.. Parent Directory
Двойной период или «двойная точка» (..) представляет родительский каталог вашего текущего. Вы можете использовать это, чтобы перейти на один уровень вверх в дереве каталогов.
Вы также можете использовать эту технику для быстрого перехода к каталогу на том же уровне в дереве каталогов, что и текущий. Вы запрыгиваете на один уровень вверх, а затем обратно в другой каталог.
/ Path Directory Separator
Одна косая черта представляет кратчайший возможный путь к каталогу. Поскольку все в дереве каталогов Linux начинается с корневого каталога, вы можете использовать эту команду для быстрого перехода в корневой каталог:
# Комментарий или «обрезка строк»
Однако он не игнорируется, потому что он добавлен в историю команд.
В этом примере мы присваиваем текст « Dave Geek! » переменной.
«Подстановочный» знак вопроса представляет ровно один символ. Рассмотрим следующий шаблон имени файла:
Это переводится как: «перечислить любой файл с именем, начинающимся с « badge » и сопровождаемым любым отдельным символом перед расширением имени файла».
Это соответствует следующим файлам. Обратите внимание, что у некоторых есть цифры, а у некоторых есть буквы после части имени файла в виде значка. «Подстановочный» знак вопроса будет соответствовать как буквам, так и цифрам.
Этот шаблон имени файла не соответствует значению « badge.txt », поскольку в имени файла нет ни одного символа между «значком» и расширением файла. «Подстановочный» знак вопроса должен совпадать с соответствующим символом в имени файла.
Вы также можете использовать знак вопроса, чтобы найти все файлы с определенным количеством символов в именах файлов. Здесь перечислены все текстовые файлы, которые содержат ровно пять символов в имени файла:
Вы можете использовать «подстановочный» знак звездочка ( * ) для обозначения любой последовательности символов, включая отсутствие символов. Рассмотрим следующий шаблон имени файла:
Это соответствует всем следующим:
Он соответствует « badge.txt », потому что «подстановочный» знак представляет собой любую последовательность символов или не содержит символов.
Эта команда сопоставляет все файлы, называемые «исходными», независимо от расширения файла.
Вы можете сформировать «подстановочный» знак с квадратными скобками ([]) и символами, которые они содержат. Соответствующий символ в имени файла должен соответствовать хотя бы одному из символов в наборе символов подстановки.
Вы можете использовать более одного набора скобок на шаблон имени файла:
Вы также можете включить диапазоны в набор символов. Следующая команда выбирает файлы с номерами от 21 до 25 и от 31 до 35 в имени файла.
В командной строке Вы можете вводить столько команд, сколько Вам нужно, если Вы разделяете каждую из них точкой с запятой ( ; ). Мы сделаем это в следующем примере:
Если Вы хотите остановить последовательность выполнения в случае сбоя одной команды, используйте двойной амперсанд ( && ) вместо точки с запятой:
Однако вы можете запустить приложение как фоновый процесс и продолжать использовать окно терминала. Для этого просто добавьте амперсанд в командную строку:
Bash показывает идентификатор процесса, который был запущен, а затем возвращает вас в командную строку. Затем Вы можете продолжать использовать окно терминала.
Linux принимают файл в качестве параметра и берут свои данные из этого файла. Большинство из этих команд также могут принимать данные из потока. Чтобы создать поток, используйте левую угловую скобку ( ), как показано в следующем примере, чтобы перенаправить файл в команду:
Когда команда перенаправляет ввод в нее, она может вести себя иначе, чем при чтении из именованного файла.
Вот несколько примеров того, как вы можете использовать wc :
> Перенаправление вывода
Вы можете использовать правую угловую скобку ( > ), чтобы перенаправить вывод команды (обычно в файл). Вот пример:
Она же «трубка» объединяет команды. Он принимает выходные данные одной команды и передает их следующей в качестве входных данных. Количество переданных команд (длина цепочки) произвольно.
Мы набрали следующее:
В этой командной строке есть две команды:
Следующая команда повторно запускает предыдущую команду:
В оболочке Bash вы создаете переменные для хранения значений. Некоторые, такие как переменные среды, существуют всегда, и вы можете получить к ним доступ в любое время, когда открываете окно терминала. Они содержат значения, такие как ваше имя пользователя, домашний каталог и путь.
Добавьте фигурные скобки ( <> ) вокруг знака доллара и выполните расширение параметра, чтобы получить значение переменной и разрешить дальнейшие преобразования значения.
Это создает переменную, которая содержит строку символов, как показано ниже:
Используйте следующую команду для вывода строки в окно терминала:
Чтобы вернуть подстроку, начиная с позиции 6 всей строки, используйте следующую команду (смещение нуля, поэтому первая позиция равна нулю):
Если вы хотите отобразить подстроку, которая начинается с нулевой позиции и содержит следующие шесть символов, используйте следующую команду:
Используйте следующую команду, чтобы отобразить подстроку, которая начинается с четвертой позиции и содержит следующие четыре символа:
Цитирование специальных символов
Например, эта команда печатает дату и время:
Если вы заключите текст в одинарные кавычки (‘ … ‘), как показано ниже, он останавливает функцию всех специальных символов:
Вы можете использовать обратную косую черту ( \ ), чтобы не использовать следующий символ в качестве специального символа. Это называется «избегать» персонажа; см. пример ниже:
Послесловие
В общем, просто думайте о специальных символах как об очень коротких командах. Если вы запомните их использование, то это может принести огромную пользу Вашему пониманию оболочки Bash и сценариев (скриптов, команд) других людей (если Вы пользуетесь чьими-то шаблонами).
В двух словах как-то так. Если есть вопросы, мысли, дополнения и всё такое прочее, то добро пожаловать в комментарии к этой записи.