Метасимволы Linux: всё, что нужно знать

Одна из самых мощных функций оболочки Linux Bash — её способность работать с файлами и эффективно перенаправлять их ввод и вывод. Для этого можно использовать специальные символы — метасимволы. Они придают командам оболочки особое значение, открывая вам выигрышные комбинации Linux.

* Bash — улучшенная версия оболочки Bourne shell. В Linux её часто используют как предустановленную командную оболочку.

Для чего нужны специальные символы

Если вы пользуетесь Linux, то знаете о служебных символах по типу “#” — комментария. Метасимволы — не настолько известные, но не менее полезные символы.

Они помогают при выводе списка, удалении и копировании файлов в Linux. При этом функция каждого специального символа меняется в зависимости от команды, с которой вы его используете. Сейчас мы покажем, как с их помощью соединять и расширять команды.

Чтобы разобраться, как всё работает, советуем сразу пробовать применять метасимволы. Для этого создайте пустую папку внутри каталога /tmp:

sudo mkdir /tmp/meta

Перейдите в каталог /tmp/meta с помощью команды cd и создайте новые пустые файлы, используя touch

touch apple.txt cider.sh vinegar.php cat.txt lemon.txt juice.sh catfish.sh 

Всё нужное готово, так что переходим к практике.

Метасимволы соответствия файлов

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

Метасимвол * 

Знак подстановки, который соответствует нулю или большим символам. Как его можно использовать:

ls c*
Output:
catfish.sh cat.txt cider.sh

Такой формат записи найдёт все файлы на букву с, независимо от количества символов в имени файла.

ls c*h
Output:
catfish.sh cider.sh

Так получаем файлы, которые начинаются на букву с и заканчиваются h. 

ls *r*
Output:
cider.sh vinegar.php

Находим все файлы, содержащие букву r в названии.

sudo rm *p*

Эта команда удалит все файлы, в имени которых есть буква р. Проверить это можно с помощью команды ls:

ls
Output:
catfish.sh cat.txt cider.sh juice.sh lemon.txt

Специальный знак ?

Это тоже знак подстановки, который означает совпадение нуля или одного предыдущего символа:

ls a?*
Output:
apple.txt

ls c?t*
Output:
catfish.sh cat.txt

Вторая команда найдёт файлы, начинающиеся на букву с и с буквой t на третьем месте.

Метасимвол [ ]

Означает любой указанный символ из перечисленных. Записывается в виде чисел, символов или букв в квадратных скобках и чаще всего разделенных дефисом.

Для примера используем параметр [av]* с командой ls, чтобы получить список всех файлов, начинающихся с a или v:

ls [av]*
Output:
apple.txt vinegar.sh

Теперь изменим команду, чтобы получить файлы, которые заканчиваются на букву t:

ls [ac]*[t]
Output:
apple.txt catfish.txt cat.txt

Ещё можно использовать дефис, чтобы указать диапазон: 

ls [a-j]*
Output:
apple.txt catfish.sh cat.txt cider.sh juice.sh

Метасимволы перенаправления файлов

Чтобы разобраться с перенаправлениями в Bash, важно уточнить, что у каждого процесса Linux есть свои дескрипторы: стандартные ввод (stdin/0), вывод (stdout/1) и ошибка (stderr/2). Они определяют источник команды и решают, куда отправлять вывод и сообщения об ошибках.

Обычно оболочка Linux считывает ввод команды с клавиатуры и записывает вывод на экран. А метасимволы перенаправления могут менять поток ввода-вывода контента. Перенаправление ввода позволяет команде считывать контент из файла, а не с клавиатуры. А перенаправление вывода сохраняет вывод команды в файл. То есть такие специальные символы могут перенаправлять контент в файл или из него.

Три основных метасимвола перенаправления:

1. < направляет содержимое файла в команду. Например, вывод у следующих команд будет одинаковым:

less .bashrc
less < .bashrc

2. > направляет вывод команды в файл. Команда ниже сохранит вывод в файл lists.txt:

ls /etc > lists.txt 

3. >> добавляет вывод команды к содержимому файла:

wc означает количество слов, его можно использовать, чтобы увидеть разницу между файлом до и после добавления вывода команды.

Метасимвол расширения { } 

Метасимвол {} позволяет расширить каталоги, имена файлов или другие аргументы командной строки. Например, вы можете сделать новую папку brace внутри папки /tmp и создать набор файлов с помощью команды touch следующим образом:

sudo mkdir /tmp/brace; cd /tmp/brace
touch test{1,2,3,4,5} 

Теперь проверим, создались ли файлы:

ls
Output:
test1 test2 test3 test4 test5   

Можно указать несколько списков, чтобы сгенерировать имена на основе комбинаций элементов списка. Например:

touch {apple,cider,vinegar}.{fruit,liquid,sour}
touch {a,b,c}.{1,2,3}

Так мы создадим в текущей папке файлы:

создание файла linux

Два набора фигурных скобок в первой команде связывает имена файлов в каждом наборе с другим. Ещё можно написать последнюю команду как touch {a..c}.{1..3}, чтобы указать диапазоны а-с и 1-3. Это пригодится, когда нужно указать много значений.  

Помимо создания файлов, фигурные скобки можно использовать, чтобы удалить или скопировать файлы в другие места.

Другие метасимволы Linux

Вот таблица некоторых метасимволов для подключения и расширения команд с описанием и примерами:

СимволОписаниеПример
Делает вывод одной команды вводом для другойcat /etc/passwd | grep root
;Позволяет выполнять последовательные команды, одну за другойcd /etc ; ls -la ; chmod +x /tmp/script.php
&Запускает процессы или команды в фоновом режимеfind / -perm -u=s -type f &
$Разворачивает арифметическое выражение и передает его оболочкеshell echo «total files in this directory are: $(ls | wc -l)»
2>Направляет стандартные сообщения об ошибке в файл /dev/nullyour_command 2>/dev/null
^Соответствует любому шаблону, который начинается с выражения, написанного после ^cd /etc/ssh ; ls | grep ^s
\Позволяет экранировать метасимвол, то есть отменять его особое значениеls | grep f \. refox
.Есть несколько значений: может указывать текущую позицию при запуске таких команд, как cd, find или sh; может быть подстановочным знаком, обозначает один любой символ.. -тип f -name ‘* .mp3’
ps -ef | grep f..efox

Резюмируем

Специальные символы придают командам особое значение и помогают оптимизировать работу пользователей в продуктивной среде. Умение ими пользоваться — обязательное условие, если вы хотите прокачаться в Linux. Применяя их в своей работе, вы заметите, что они не только дают вам дополнительные функции, но и сильно экономят ваше время.

Добавить комментарий

Спасибо, что поделились