Метасимволи 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). Вони визначають джерело команди та вирішують, куди надсилати висновок та повідомлення про помилки.
Цікаво дізнатися яка різниця між RAID 5 та RAID 10? Переходьте за лінком та читайте на нашому блозі ITEDU. Тут багато корисного та цікавого.
Зазвичай оболонка 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}
Так ми створимо в поточній теці файли:
Два набори фігурних дужок у першій команді пов’язують імена файлів у кожному наборі з іншим. Ще можна написати останню команду як 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/null | your_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. Застосовуючи їх у своїй роботі, ви помітите, що вони не лише дають вам додаткові функції, але й заощаджують ваш час.