
KTNI_Kozlov_otvety / 23
.docx23. Метасимволы Linux. Назначение метасимволов, их применение.
Метасимволы
Метасимволы используются для поиска имен файлов, посредством их упрощается задача указания файлов или групп файлов как аргументов команды.
Символ |
Функция |
* ? [ ] |
Эти метасимволы позволяют указывать сокращенные имена файлов при поиске по шаблону |
& |
Означает, что команда будет выполняться в фоновом режиме |
; |
Точка с запятой разделяет команды в командной строке |
\ |
Отменяет специальное значение символов, таких как *, ?, [, ], &, ;, <, >, | |
'...' |
Одиночные кавычки отменяют значение пробела как разделителя и специальное значение всех символов |
"..." |
Двойные кавычки отменяют значение пробела как разделителя и специальное значение всех символов, за исключением $ и \ |
> |
Перенаправляет вывод команды в файл |
< |
Перенаправляет ввод для команды из файла |
>> |
Перенаправляет вывод команды, который должен быть добавлен в конец существующего файла |
| |
Создает канал, направляющий вывод одной команды во ввод другой команды |
`...` |
Используется в паре; позволяет использовать вывод команды как аргументы в командной строке |
$ |
Используется с позиционными параметрами и определенными пользователем переменными; также используется по умолчанию в качестве подсказки shell |
В качестве параметров в командах чаще всего встречаются имена файлов или другие объекты файловой системы. Однако имена файлов можно задавать как в явной (точное имя файла), так и в неявной (шаблон данного) формах, например, если вы будете знать только часть имени файла или захотите указать несколько имен файлов с одинаковым расширением или одинаковыми буквами в начале или в конце.
В командном интерпретаторе используется ряд специальных символов, называемых групповыми символами, с помощью которых файлы можно искать, сравнивать, а также создавать список имен файлов. Этими символами являются «звездочка», «вопросительный знак» и квадратные скобки ( *, ?, [ ] ). Получив частичное имя файла, командный интерпретатор использует эти символы как образец для поиска и формирования cписка имен обнаруженных файлов. Параметр с неполным именем файла заменяется списком совпавших с ним имен файлов. Этот список имен может использоваться как параметр в командах, оперирующих с несколькими файлами (например, ls).
С помощью «звездочки» (*) можно обращаться к файлам, имена которых начинаются или заканчиваются определенной комбинацией символов. При этом «звездочка» помещается до или после комбинации, являющейся образцом, который нужно найти в именах файлов. Если «звездочка» стоит перед образцом, производится поиск всех файлов, имена которых заканчиваются этим образцом. Если «звездочка» стоит после образца, то производится поиск имен файлов, которые начинаются этим образцом. Найденные имена копируются в список имен файлов, создаваемый посредством данной операции.
В следующем примере
осуществляется поиск имен файлов,
начинающихся комбинацией символов
«BMT», и составляется соответствующий
список.
Имена файлов часто содержат расширения, состоящие из точки и нескольких символов. Например, расширение .cmd обозначает командные файлы САПР, .par файлы с электрофизическими параметрами САПР, .dat – файл с данными для визуализатора PICASSO, .log файл с комментариями текстового сопровождения выполнения приложений, .txt текстовые файлы, .с файлы языка С, .срр файлы программ C++, a .jpg файлы изображений JPEG. Расширение имени файла не является обязательным, не может применяться отдельно от имени и должно составлять часть имени файла. Использование символа «звездочки» облегчает выделение файлов с данным расширением.
Групповой символ «звездочки» можно использовать с командой rm для удаления сразу нескольких файлов. Сначала с помощью «звездочки» задается список файлов с данным расширением, либо начинающихся, либо заканчивающихся данной комбинацией символов, а затем этот список передается команде rm для удаления. Если в командной строке поставить «звездочку» без дополнительных символов, то это будет соответствовать всем файлам. Если использовать ее как параметр в команде rm, то будут удалены все файлы. В следующем примере команда ls * выдает список всех файлов, а команда rm * удаляет все файлы:
[antonk@lab4236sl ~]$ ls *
1 3.txt BMT_dio.cmd c.c te cplot.phy
l.txt 4.txt BMT_mdr.dat d.c tecswb.pref
2 5.txt BMT_mdr.grd dessis.par vnc2swf-0.5.0.tar.gz
2.txt BMT.log a.c pyvnc2swf-0.8.2.tar.gz
3 BMT_des.cmd b.c script
DBtest:
genesis_layout_antonk.X-2005.10 inspect_macro.par
inspect_layout_antonk.X-2 0 0 5.10
Desktop:
TCL_License.terms bin tcad
temp:
a.c b.c c.c d.c list
[antonk@lab4236sl ~]$
Символом * в команде rm следует пользоваться очень осторожно и осмотрительно. Такая комбинация может оказаться весьма опасной. «Звездочка», по ошибке поставленная в команде rm без опции -i, может привести к случайному удалению всех ваших файлов в текущей директории.
[antonk@lab4236sl ~]$ rm *
В следующем примере производится стирание только файлов с расширением .с, вторая команда удаляет все файлы.
[antonk@lab4236sl ~]$ rm *.c
Далее покажем вывод всех файлов, имена которых начинаются на комбинацию символов «BMT».
[antonk@lab4236sl ~]$ ls BMT*
BMT.log BMT_des.cmd BMT_dio.cmd BMT_mdr.dat BMT_mdr.grd
[antonk@lab4236sl ~]$
Групповые символы «звездочка» и «знак вопроса» задают неуказанные части имени файла, а «квадратные скобки» позволяют задавать набор допустимых символов для поиска. Система будет искать в имени файла любой из этих символов.
Набор символов можно задавать в виде диапазона. Дефис между верхним и нижним пределами набора символов позволяет указать сразу на все символы в данном диапазоне. Диапазон, как правило, определяется используемым набором символов. В наборе символов ASCII диапазон [a-g] означает все строчные буквы от а до g включительно. В следующем примере выбираются имена файлов, имеющих в своем названии один символ с первого по четвёртый включительно.
[antonk@lab4236sl ~]$ ls [1-4]
1 2 3
[antonk@lab4236sl ~]$
При комбинации «квадратных скобок» с другими групповыми символами можно формировать очень гибкие шаблоны поиска по образцу. Иногда групповой символ входит в состав имени файла. В этом случае перед ним нужно поставить обратную косую черту [ \ ].
В следующем примере пользователю нужно обозначить файл, который начинается на три фиксированные буквы «bmt» и заканчивается символом «?». Здесь ? – групповой символ, который обозначит все имена файлов, начинающиеся комбинацией букв «bmt» и имеющие далее один символ. Если спецсимвол обратной косой черты перед знаком вопроса не поставить, то отобразятся все файлы, имеющие сначала комбинацию букв «bmt», а затем один любой произвольный символ, а если спецсимвол обратной косой черты стоит, то отобразится только тот файл, который в имени имеет сначала «bmt», а затем только знак вопроса. Ниже приведен пример, в котором шаблон формируется сначала неправильно, а затем правильно.
[antonk@lab4236s ~]$ ls -l bmt?
-rw-rw-r– 1 antonk antonk 0 Sep 21 15:11 bmtl
-rw-rw-r– 1 antonk antonk 0 Sep 21 15:11 bmt2
-rw-rw-r– 1 antonk antonk 0 Sep 21 15:11 bmt3
-rw-rw-r– 1 antonk antonk 42 Sep 21 15:11 bmt?
[antonk@lab4236s ~]$ ls -l bmt\?
-rw-rw-r– 1 antonk antonk 42 Sep 21 15:11 bmt?
[antonk@lab4236s ~]$
|
||||||||||
Табл. 12. Метасимволы регулярного выражения grep |