15 специальных символов-команд, которых нужно знать для работы Bash Linux

статьи
операционные системы

Всем доброго времени суток и других разностей.

Если вы хотите освоить оболочку Bash в Linux, macOS или другой UNIX-подобной системе, то специальные символы (например, ~, *, | и >) имеют решающее значение.

15 специальных символов-команд, которых нужно знать для работы Bash Linux - иконка статьи

Сегодня мы расскажем какое и как с ними работать. А то давно что-то ничего не было про линуксы и терминал, да и остальные вкусности.

Поехали.

Что такое специальные символы?

Существует набор символов, которые оболочка Bash обрабатывает двумя различными способами. Когда вы вводите их в оболочку, они действуют как инструкции или команды и сообщают оболочке выполнить определенную функцию. Думайте о них как об односимвольных командах.

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

Мы покажем вам, какие символы являются «специальными» или «мета-» символами, а также как вы можете использовать их функционально и буквально.

к содержанию ↑

Домашний каталог

Тильда (~) является сокращением для вашего домашнего каталога. Это означает, что вам не нужно вводить полный путь к вашей домашней директории в командах. Где бы вы ни находились в файловой системе, вы можете использовать эту команду для перехода в ваш домашний каталог:

cd ~

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 1

Вы также можете использовать эту команду с относительными путями. Например, если вы находитесь в файловой системе, которая не находится в вашей домашней папке, и хотите перейти в archive каталог в вашем workкаталоге, используйте тильду, чтобы сделать это:

cd ~/work/archive

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 2

к содержанию ↑

. текущая директория

Точка (.) Представляет текущий каталог. Вы увидите это в списках каталогов, если используете -a опцию (все) с ls.

ls -a

"15

Вы также можете использовать точку в командах для представления пути к вашей текущей директории. Например, если вы хотите запустить скрипт из текущего каталога, вы бы назвали его так:

 

./script.sh

 

Это говорит Bash искать script.sh файл в текущем каталоге . Таким образом, он не будет искать каталоги в вашем пути для поиска исполняемого файла или сценария.

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 4

к содержанию ↑

.. Parent Directory

Двойной период или «двойная точка» (..) представляет родительский каталог вашего текущего. Вы можете использовать это, чтобы перейти на один уровень вверх в дереве каталогов.

cd ..

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 5

Вы также можете использовать эту команду с относительными путями - например, если вы хотите подняться на один уровень вверх в дереве каталогов, а затем ввести другой каталог на этом уровне.

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

cd ../gc_help

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 6

к содержанию ↑

/ Path Directory Separator

Вы можете использовать косую черту (/) - часто называемую косой чертой - для разделения каталогов в имени пути.

ls ~ / work / archive

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 7

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

cd /

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 8

к содержанию ↑

# Комментарий или "обрезка строк"

Чаще всего вы используете хеш или знак числа (#), чтобы сообщить оболочке, что ниже следует комментарий, и он не должен на него воздействовать. Вы можете использовать его в сценариях оболочки и, - менее полезно, - в командной строке.

# This will be ignored by the Bash shell

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 9

Однако он не игнорируется, потому что он добавлен в историю команд.

Вы также можете использовать хеш, чтобы обрезать строковую переменную и удалить некоторый текст с начала. Эта команда создает строковую переменную с именем this_string.

В этом примере мы присваиваем текст «Dave Geek!» переменной.

this_string="Dave Geek!"

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 10

Эта команда использует echo для печати слова «How-To» в окне терминала. Он извлекает значение, хранящееся в строковой переменной, через расширение параметра . Поскольку мы добавляем хеш и текст «Dave», он обрезает эту часть строки перед тем, как передать её в echo.

echo How-To ${this_string#Dave}

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 11

Это не меняет значение, хранящееся в строковой переменной; это влияет только на то, что отправлено echo. Мы можем использовать echo для печати значения строковой переменной еще раз и проверить это:

echo $this_string

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 12

к содержанию ↑

? - как знак подстановки символа

Оболочка Bash поддерживает три символа подстановки, одним из которых является знак вопроса (?). Вы используете "подстановочные" знаки для замены символов в шаблонах имен файлов. Имя файла, которое содержит "подстановочный" знак, формирует шаблон, который соответствует диапазону имен файлов, а не одному.

"Подстановочный" знак вопроса представляет ровно один символ. Рассмотрим следующий шаблон имени файла:

ls badge? .txt

Это переводится как: «перечислить любой файл с именем, начинающимся с «badge» и сопровождаемым любым отдельным символом перед расширением имени файла».

Это соответствует следующим файлам. Обратите внимание, что у некоторых есть цифры, а у некоторых есть буквы после части имени файла в виде значка. "Подстановочный" знак вопроса будет соответствовать как буквам, так и цифрам.

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 13

Этот шаблон имени файла не соответствует значению «badge.txt», поскольку в имени файла нет ни одного символа между «значком» и расширением файла. "Подстановочный" знак вопроса должен совпадать с соответствующим символом в имени файла.

Вы также можете использовать знак вопроса, чтобы найти все файлы с определенным количеством символов в именах файлов. Здесь перечислены все текстовые файлы, которые содержат ровно пять символов в имени файла:

ls ?????. txt

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 14

к содержанию ↑

* - как "подстановочный" знак последовательности символов

Вы можете использовать "подстановочный" знак звездочка (*) для обозначения любой последовательности символов, включая отсутствие символов. Рассмотрим следующий шаблон имени файла:

ls badge*

Это соответствует всем следующим:

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 15

Он соответствует «badge.txt», потому что "подстановочный" знак представляет собой любую последовательность символов или не содержит символов.

Эта команда сопоставляет все файлы, называемые «исходными», независимо от расширения файла.

ls source.*

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 16

к содержанию ↑

[] - набор символов

Как указано выше, вы используете знак вопроса для обозначения любого отдельного символа, а звездочку - для любой последовательности символов (включая символы).

Вы можете сформировать "подстановочный" знак с квадратными скобками ([]) и символами, которые они содержат. Соответствующий символ в имени файла должен соответствовать хотя бы одному из символов в наборе символов подстановки.

В этом примере команда переводит: «любой файл с» .txt», имя файла , начиная с „badge_0,“и в котором следующий символ либо 2, 4 или 6.»

ls badge_0 [246] .txt

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 17

Вы можете использовать более одного набора скобок на шаблон имени файла:

ls badge_ [01] [789] .txt

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 18

Вы также можете включить диапазоны в набор символов. Следующая команда выбирает файлы с номерами от 21 до 25 и от 31 до 35 в имени файла.

ls badge_ [23] [1-5] .txt

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 19

к содержанию ↑

; - разделитель команд оболочки

В командной строке Вы можете вводить столько команд, сколько Вам нужно, если Вы разделяете каждую из них точкой с запятой (;). Мы сделаем это в следующем примере:

ls> count.txt; wc -l count.txt; rm count.txt

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 20

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

Если Вы хотите остановить последовательность выполнения в случае сбоя одной команды, используйте двойной амперсанд (&&) вместо точки с запятой:

cd ./doesntexist && cp ~ / Documents / reports / *.

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 21

к содержанию ↑

& - "фоновый процесс"

После того, как Вы введете команду в окне терминала и она завершится, Вы вернетесь в командную строку. Как правило, - это занимает всего минуту или две. Но если вы запустите другое приложение, например gedit, вы не сможете использовать окно терминала, пока не закроете приложение.

Однако вы можете запустить приложение как фоновый процесс и продолжать использовать окно терминала. Для этого просто добавьте амперсанд в командную строку:

gedit command_address.page &

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 22

Bash показывает идентификатор процесса, который был запущен, а затем возвращает вас в командную строку. Затем Вы можете продолжать использовать окно терминала.

к содержанию ↑

< - перенаправление ввода

Многие команды Linux принимают файл в качестве параметра и берут свои данные из этого файла. Большинство из этих команд также могут принимать данные из потока. Чтобы создать поток, используйте левую угловую скобку (<), как показано в следующем примере, чтобы перенаправить файл в команду:

sort < words.txt

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 23

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

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

Вот несколько примеров того, как вы можете использовать wc:

wc words.txt
wc < words.txt

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 24

к содержанию ↑

> Перенаправление вывода

Вы можете использовать правую угловую скобку (>), чтобы перенаправить вывод команды (обычно в файл). Вот пример:

ls > files.txt
cat files.txt

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 25

Перенаправление вывода также может перенаправлять сообщения об ошибках, если вы используете цифру (2 в нашем примере) с  >. Вот как это сделать:

wc doesntexist.txt 2> errors.txt
cat errors.txt

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 26

к содержанию ↑

| - вертикальная черта

Она же «трубка» объединяет команды. Он принимает выходные данные одной команды и передает их следующей в качестве входных данных. Количество переданных команд (длина цепочки) произвольно.

Здесь мы будем использовать cat для передачи содержимого файла words.txt grep, которая извлекает любую строку, содержащую «C» в нижнем или верхнем регистре, grep и затем передает эти строки  sortsort использует -r (обратный) вариант, поэтому отсортированные результаты будут отображаться в обратном порядке.

Мы набрали следующее:

cat words.txt | grep [cC] | sort -r

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 27

к содержанию ↑

! - логический оператор НЕ и оператор истории

Восклицательный знак (!) - это логический оператор, который означает НЕ.

В этой командной строке есть две команды:

[! -d ./backup] && mkdir ./backup
  • Первая команда - это текст в квадратных скобках;
  • Вторая команда - это текст, который следует за двойными амперсандами &&.

Первая команда использует ! в качестве логического оператора. Квадратные скобки указывают на то, что будет проведено испытание. Опция  -d (directory) проверяет наличие каталога с именем backup. Вторая команда создает каталог.

Поскольку двойные амперсанды разделяют две команды, Bash выполнит вторую только в случае успеха первой  . Однако это противоположность того, что нам нужно. Если проверка для «резервной» директории прошла успешно, нам не нужно её создавать. И если проверка для каталога «backup» не пройдена, вторая команда не будет выполнена, а отсутствующий каталог не будет создан.

Это где логический оператор ! входит. Он действует как логическое НЕ. Таким образом, если тест пройден успешно (т.е каталог существует), он ! переходит на «НЕ успешно», что является ошибкой. Итак, вторая команда не активирована.

Если проверка каталога не пройдена (т.е каталог не существует), ! ответ изменяется на «НЕ сбой», что является успехом . Таким образом, команда для создания недостающего каталога будет выполнена.

Чтобы проверить состояние папки резервной копии, вы используете ls команду и параметры -l (длинный список) и -d (каталог), как показано ниже:

ls -l -d backup

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 28

Вы также можете запускать команды из истории команд с восклицательным знаком. Команда history выводит список вашей истории команд, а затем Вы набираете номер команды, с которой хотите выполнить ее повторно !, как показано ниже:

!24

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 29

Следующая команда повторно запускает предыдущую команду:

!!
к содержанию ↑

$ - выражения переменных

В оболочке Bash вы создаете переменные для хранения значений. Некоторые, такие как переменные среды, существуют всегда, и вы можете получить к ним доступ в любое время, когда открываете окно терминала. Они содержат значения, такие как ваше имя пользователя, домашний каталог и путь.

Вы можете использовать, echo, чтобы увидеть значение, которое содержит переменная, - просто перед именем переменной следует знак доллара ($), как показано ниже:

echo $ USER
echo $ HOME
echo $ PATH

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 30

Чтобы создать переменную, вы должны дать ей имя и указать значение для ее хранения. Вам не нужно использовать знак доллара для создания переменной. Вы добавляете только $, когда ссылаетесь на переменную, например, в следующем примере:

ThisDistro=Ubuntu
MyNumber=2001
echo $ThisDistro
echo $MyNumber

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 31

Добавьте фигурные скобки ({}) вокруг знака доллара и выполните расширение параметра, чтобы получить значение переменной и разрешить дальнейшие преобразования значения.

Это создает переменную, которая содержит строку символов, как показано ниже:

MyString = 123456qwerty

Используйте следующую команду для вывода строки в окно терминала:

echo $ {MyString}

Чтобы вернуть подстроку, начиная с позиции 6 всей строки, используйте следующую команду (смещение нуля, поэтому первая позиция равна нулю):

echo $ {myString: 6}

Если вы хотите отобразить подстроку, которая начинается с нулевой позиции и содержит следующие шесть символов, используйте следующую команду:

echo $ {myString: 0: 6}

Используйте следующую команду, чтобы отобразить подстроку, которая начинается с четвертой позиции и содержит следующие четыре символа:

echo $ {myString: 4: 4}

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 32

к содержанию ↑

Цитирование специальных символов

Если вы хотите использовать специальный символ в качестве литерального (не специального) символа, вы должны указать оболочку Bash. Это называется цитированием, и есть три способа сделать это.

Если вы заключите текст в кавычки («»), это не позволит Bash воздействовать на большинство специальных символов, а они просто будут печатать. Однако, одним заметным исключением является знак доллара ($). Он по-прежнему действует как символ для выражений переменных, поэтому вы можете включить значения из переменных в свой вывод.

Например, эта команда печатает дату и время:

echo "Today is $ (date)"

Если вы заключите текст в одинарные кавычки (''), как показано ниже, он останавливает функцию  всех  специальных символов:

echo 'Today is $ (date)'

Вы можете использовать обратную косую черту (\), чтобы не использовать следующий символ в качестве специального символа. Это называется «избегать» персонажа; см. пример ниже:

echo "Today is \ $ (date)"

15 специальных символов-команд, которых нужно знать для работы Bash Linux - скриншот 33

к содержанию ↑

Послесловие

В общем, просто думайте о специальных символах как об очень коротких командах. Если вы запомните их использование, то это может принести огромную пользу Вашему пониманию оболочки Bash и сценариев (скриптов, команд) других людей (если Вы пользуетесь чьими-то шаблонами).

В двух словах как-то так. Если есть вопросы, мысли, дополнения и всё такое прочее, то добро пожаловать в комментарии к этой записи.

PS: Написано на основе howtogeek

Подписка:

Мы в соц.сетях: ВКFacebookTwitter Telegram
Sonikelf's Project's логотип Sonikelf's Project's логотип Космодамианская наб., 32-34 Россия, Москва (916) 174-8226
10000
1 Цепочка комментария
1 Ответы по цепочке
0 Последователи
 
Популярнейший комментарий
Цепочка актуального комментария
2 Авторы комментариев
  Подписаться  
Уведомление о
SanekK

в разделителе [] опечатка .

png», имя файла , начиная с„pipes_0,“

не .png, а .txt, и не pipes_0, а badge_0. Понимаю что и оригинальной статье опечатка, но можно было бы исправить.