Введение
На протяжении десятков лет Bash (Bourne Again SHell) была основным интерфейсом в Unix-подобных системах. Это универсальная настраиваемая оболочка, полная функций, которые позволяют обычным пользователям, программистам и системным администраторам эффективно использовать командную строку.
Эта статья призвана познакомить вас с Bash, рассказать о ее функциях и особенностях, а также объяснить, почему она по-прежнему остается востребованной даже в эпоху новомодных графических интерфейсов.
Что такое Bash?
Bash – это программа-оболочка, которая предоставляет пользователям среду, где они могут вводить команды и запускать другие приложения. Когда вы открываете терминал, вы уже по умолчанию используете оболочку Bash (так происходит в большинстве дистрибутивов Linux).
Пользователи могут вводить команды в командной строке Bash для того, чтобы перемещаться по файлам, управлять процессами, устанавливать программное обеспечение и выполнять практически любые операции, которые поддерживает операционная система.
Для того, чтобы узнать, используете вы Bash или нет, откройте окно терминала и введите вот эту команду:
echo $0
Система ответит, указав, что запущена оболочка Bash.
Кроме того, Bash – это язык описания сценариев, а это значит, что пользователи могут создавать сценарии, содержащие несколько команд Bash, которые будут выполняться в определенной последовательности. Это те же команды, которые пользователи вводят в терминале вручную. Bash-скрипты (Bash-сценарии) позволяют автоматизировать повторяющиеся задачи, оптимизировать сложные операции и создавать новые инструменты и утилиты.
Примечание: Bash-сценарии являются переносимыми и могут работать в любой системе, где установлена оболочка Bash.
Что такое оболочка?
Оболочка – это пользовательский интерфейс, который переводит команды, вводимые пользователями, в действия, которые может выполнять операционная система. К этим действиям относятся управление файлами, взаимодействие с аппаратным обеспечением и запуск приложений.
Есть два основных типа оболочек:
- Командная оболочка. Это тип оболочки, предоставляющий командную строку для операционной системы. Пользователи вводят команды в терминал, которые потом обрабатываются оболочкой. Среды популярных командных оболочек можно выделить следующие: Bash, Zsh, Tcsh, Fish и KornShell.
- Графическая оболочка. Здесь пользователи взаимодействуют с системой через графический интерфейс и его значков, кнопок и окон. Для взаимодействия используются мышь и клавиатура (сочетание клавиш). Вот примеры графических оболочек: GNOME Shell (часть рабочей среды GNOME) и интерфейс macOS Finder.
Большая часть оболочек также предлагают среду разработки, где пользователи могут писать сценарии и выполнять задачи программным путем.
Краткая историческая справка о Bash
Некоторые решения, та же оболочка Bash, так крепко вошли в технологическую экосистему, что легко забыть о том, что их все-таки кто-то придумал.
Брайан Фокс разработал Bash в 1989 году в рамках проекта GNU в качестве бесплатной альтернативы оболочки Bourne (sh). Ее название - Bourne Again Shell, означает, что Bash – это новая улучшенная версия sh. В основе Bash лежит sh, но при этом в ней есть дополнительные функции, которых нет в оригинальной оболочке Bourne, например,
- Управление заданиями
- История команд
- Функции оболочки и их псевдонимы
- Редактирование и автозаполнение командной строки
- Команды условий (операторы bash if и bash case)
- Базовая отладка и обработка сигналов
- Индексированные массивы без ограничений на размер
- Поддержка HereDocs
Внедрение Bash в дистрибутивы Linux укрепило ее позиции в качестве главной оболочки Unix-подобных операционных систем.
Примечание: Bash была оболочкой по умолчанию в macOS до того, как вышла MacOS Catalina. После ее заменила оболочка Zsh. Но при этом Bash по-прежнему может использоваться в macOS. Для этого необходимо заменить оболочку Zsh обратно на Bash.
С момента своего выпуска оболочка Bash претерпела несколько изменений, введя новые функции и улучшения. Чет Рэми взял на себя разработку еще в конце 1980-х годов и по-прежнему сопровождает эту оболочку.
Для чего нужна Bash?
IT-специалисты часто используют Bash для выполнения самых разных задач, в частности:
- Выполнение команд. Командная строка Bash позволяет пользователям управлять запущенными процессами, файлами и каталогами, перемещаться по файловой системе и запускать приложения.
- Создание сценариев. Программисты могут писать Bash-скрипты и выполнять, таким образом, последовательность команд, которые помогают автоматизировать рабочие процессы и создавать новые инструменты и функции.
- Конвейер и обработка данных. Bash поддерживает использование символа конвейера (|) для передачи вывода одной команды другой. Таким образом, вы можете применять к данным целую цепь операций. Например, специалисты по обработке данных и аналитики используют конвейер Bash для того, чтобы быстро обрабатывать данные.
- Персонализация и настройка среды. Файлы конфигурации, например, .bashrc и .bash_profile, позволяют пользователям настраивать среду Bash в соответствии со своими потребностями, а также устанавливать псевдонимы, переменные среды и строки приглашения.
- Планирование задач. Bash-скрипты можно планировать для того, чтобы запускать их в определенное время или через определенные промежутки времени. Например, администраторы баз данных используют Bash для того, чтобы планировать процедуры резервного копирования или оптимизации баз данных и проводить их в периоды неполной нагрузки.
- Составление программ и разработка. Разработчики используют Bash для того, чтобы компилировать и запускать программное обеспечение, управлять зависимостями проектов и автоматизировать рабочие процессы разработки.
- Системное администрирование. Системные администраторы используют Bash для того, чтобы настраивать службы, контролировать ресурсы, развертывать приложения и выполнять соответствующие задачи управления системой.
- Работа в сети. Сетевые администраторы используют такие команды, как ssh и netstat, для того, чтобы упростить процессы передачи данных и удаленного управления системой.
- Интерактивные рабочие процессы. Bash может запрашивать у пользователей ввод данных, что позволяет создавать управляемые рабочие процессы. Например, специалисты службы поддержки клиентов могут разрабатывать управляемые рабочие процессы для того, чтобы устранять какие-то типичные проблемы, вместо того, чтобы лично помогать пользователю на протяжении всего процесса.
Как работает Bash?
Как и любая другая оболочка, Bash выполняет функцию интерфейса между пользователем и базовой операционной системой, в частности ядром. Ниже представлен обобщенный обзор того, как работает Bash:
1. Инициализация. При запуске Bash считывает и выполняет сценарии инициализации (.bashrc для отдельных пользователей или /etc/profile для общесистемной настройки). Эти сценарии определяют среду Bash и ее функции, а также настраивают логику работы оболочки.
2. Приглашение к вводу команды. После инициализации Bash отображает приглашение и ожидает от пользователя ввода команды.
3. Считывание команды. Пользователь вводит команду в командной строке и нажимает Enter. Bash считывает команду.
4. Анализ команды. Bash разбивает команду на слова и операторы. Она определяет названия команд, аргументы, операторы и символы перенаправления.
5. Расширения. Если команда содержит фигурные скобки, переменные или расширения имен маршрутов, Bash изменит или расширит исходную команду на основе шаблонов или результатов других команд.
6. Выполнение команды. Bash определяет, что это за команда (встроенная, внешняя или функция), после чего выполняет ее и запускает соответствующую программу.
7. Перенаправление и конвейер. Bash обрабатывает любые перенаправления, то есть то, куда направляется вывод команды и откуда поступает ввод. Кроме того, она обрабатывает конвейерные операции, отправляя результат одной команды на вход другой.
8. Управление заданиями. Bash может управлять несколькими задачами (заданиями) одновременно. При этом пользователи могут приостанавливать, завершать и управлять фоновыми или приоритетными задачами, используя команды bg и fg.
9. Повтор. После того, как команда выполнена, Bash возвращается к шагу 2, предлагает пользователю ввести следующую команду и ожидает ввода.
10. Завершение. Когда пользователь вводит команду exit или нажимает Ctrl+D, он выходит из оболочки, а Bash завершает фоновые процессы и выполняет сценарии завершения, после чего закрывается.
Во время всего этого процесса Bash взаимодействует с ядром посредством системных вызовов, выполняя, таким образом, все необходимые действия.
Функции Bash
Вот некоторые из самых важных функций Bash:
- Встроенные команды. У Bash есть огромное количество встроенных команд, например, cd, echo и pwd, которые выполняются непосредственно внутри оболочки без обращения к внешним двоичным файлам.
- История команд. Bash хранит историю пользовательских команд, позволяя, таким образом, запускать их повторно.
- Редактирование командной строки. Пользователи могут перемещаться по командам и редактировать их с помощью специальных сочетаний клавиш, подобных тем, что используются в vim.
- Автозаполнение. Нажав клавишу Tab, можно автоматически заполнить (или получит предложение по заполнению) названий команд, имен файлов и каталогов или прочих интересующих вас данных в зависимости от контекста и символов, которые были введены.
- Псевдонимы. Bash поддерживает пользовательские сочетания клавиш для длинных команд или их последовательностей.
- Сценарии оболочки. Пользователи могут использовать команды Bash и создавать с их помощью сценарии с переменными, функциями, условными операторами и циклами. Это помогает автоматизировать работу.
- Перенаправление. Ввод и вывод команд можно направлять в файлы или устройства с помощью специальных операторов направления, таких как >, >> и <.
- Конвейер. С помощью оператора конвейера (|) пользователи могут использовать результат одной команды в качестве входных данных для другой.
- Переменные и среда. Пользователи могут настраивать локальные переменные и переменные среды, например, $PATH или $HOME, чтобы изменять настройки оболочки и соответствующих программ.
- Арифметические вычисления. Bash может выполнять арифметические операции непосредственно внутри оболочки, используя следующий синтаксис: $((expression)).
- Интерактивные функции. Оболочка Bash может взаимодействовать с пользователями и запрашивать у них ввод данных в процессе выполнения сценария или команды. Предложения к вводу можно настроить так, чтобы пользователю было максимально удобно.
- Расширяемость. Bash позволяет пользователям создавать собственные команды и функции, что, в свою очередь, позволяет расширять ее возможности.
- Работа в сети. В сценариях и последовательностях команд можно использовать сетевые инструменты, например, Curl и scp.
Концепции Bash
Огромное количестве концепций Bash определяет то, как оболочка функционирует и как она взаимодействует с пользователем и системой:
Концепция Bash |
Описание |
Приглашение к вводу |
Отправная точка в командной строке, где вводятся команды. Как правило, это значит, что оболочка ожидает команду. |
Аргументы |
Дополнительная информация, которая предоставляется команде и которая определяет поведение команды. |
Флаги |
Специальные аргументы с префиксом - или --, которые позволяют изменить поведение команды. |
Функции |
Функция Bash – это группа многоразовых частей кода под одним именем, которую можно будет использовать в дальнейшем. |
Специальные символы |
Такие символы, как *, ? или [], используются для обозначения или сопоставления имен файлов или строк на основе шаблонов. |
Переменные |
Bash-скрипты используют переменные для того, чтобы хранить данные и управлять ими. Переменные могут содержать строки, числа или результаты выполнения команд. |
Расширения |
Механизм, при котором оболочка заменяет определенные операторы соответствующими значениями, например, расширение переменной $VARNAME, подстановка команды $(command) или раскрытием скобок {1..100}. |
Код завершения |
Числовое значение, которое возвращается командой после того, как она завершится. Оно указывает на успешное выполнение команды (0) или тип ошибки (не 0). |
Фоновые задания |
Команды или процессы выполняются в фоновом режиме, при этом пользователь может продолжать работу. |
Подстановка |
Процесс, с помощью которого оболочка сопоставляет имена файлов на основе шаблонов, которые были предоставлены пользователем. |
Интерактивный и неинтерактивный режимы |
Bash может работать как в интерактивном режиме (то есть взаимодействовать напрямую с пользователем), так и в неинтерактивном (то есть выполнять сценарии). |
Оболочка входа и оболочки без входа в систему |
Оболочки входа (запускаются, когда пользователь входит в систему) и оболочки без входа в систему используют разные файлы конфигурации. |
Что такое Bash-скрипты?
Bash-скрипт – это текстовый файл, который содержит последовательность команд Bash. При выполнении скрипта (сценария) оболочка Bash считывает и обрабатывает эти команду одну за другой.
Bash-скрипты позволяю расширить возможности оболочки. Вместо простого выполнения команд в терминале в интерактивном режиме появляется хитроумное объединение команд в цепочку, выполнение условной логики и перебор значений последовательности.
Для того, чтобы создать простой сценарий Bash, вам нужно выполнить следующие шаги:
1. Откройте терминал и воспользуйтесь текстовым редактором, чтобы создать простой текстовый файл. В данном случае используется текстовый редактор nano, и с его помощью создается файл с именем test_script.sh:
nano test_script.sh
Bash-скрипт начинается с последовательности символов, которая называется шебанг (#!). За ней следует путь к исполняемому файлу Bash. Таким образом, система получает указание, что этот сценарий необходимо выполнить с помощью оболочки Bash.
Примечание: в Bash-скриптах, как и в других языках программирования, для комментирования используется символ #.
2. Скопируйте и вставьте в файл test_script.sh следующий код:
#!/bin/bash
# Prompt the user for input { # Просим пользователя ввести данные }
echo "Please enter your name:"
# Read the user's input into a variable called 'username' { # Считываем ввод пользователя и сохраняем его в переменной username }
read username
# Print a greeting { # Печатаем приветственное сообщение }
echo "Hello, $username! Welcome to the Bash world."
Команды в сценарии test_script.sh указывают Bash о необходимости выполнить следующее:
- Попросить пользователя ввести имя
- Сохранить имя, которое ввел пользователь, как переменную username
- Вывести приветственное сообщение, используя переменную username
3. Сохраните файл и выйдите их редактора.
4. Введите следующую команду, чтобы сделать сценарий исполняемым:
chmod +x test_script.sh
5. Введите следующую команду, чтобы запустить сценарий:
./test_script.sh
Сценарий запросит имя и поприветствует пользователя.
Сценарий, приведенный выше, - это простой пример Bash-сценария. Bash-сценарии поддерживают продвинутые механизмы программирования, например, условные выражения, блоки многократного использования и ассоциативные массивы.
25 самых популярных команд Bash
Знание команд и концепций Bash – это основа для написания хороших сценариев. Ниже перечислены 25 самых популярных команд Bash:
Операции с файлами и каталогами
- ls – перечисляет содержимое каталога
- cp – копирует файлы или каталоги
- rm – удаляет файлы или каталоги
- cat – объединяет и отображает содержимое файла
- mkdir – создает каталог
- rmdir – удаляет каталог
Права доступа и владение
- choown – изменяет владельца и группу файла
- chgrp – изменяет группу файла
Управление процессами
- top – отображает процессы реального времени
- kill – отправляет процессам команды (чаще всего используется для завершения процессов)
Работа в сети
- ping – отправляет хосту эхо-запросы протокола ICMP
- ifconfig – отображает или изменяет конфигурацию сетевого интерфейса
Архивирование и сжатие
- tar – создает архивы и извлекает из них данные
- gzip и gunzip – сжимает и разворачивает файлы
Обработка текста
- grep – производит поиск определённых шаблонов в файлах
- sed – открывает потоковый редактор для работы с текстом
- awk – открывает инструмент обработки текста и извлечения данных
Прочее
- alias – создает комбинации клавиш для быстрого вызова команд
- history – показывает историю команд
- eval – выполняет динамические команды со строками и переменными
- read – считывает текст из стандартного ввода
- find – выполняет поиск файлов в структуре каталогов
- let – вычисляет арифметические выражения
- trap – прогнозируемо выходит из сценария
- wait – указывает оболочке дождаться завершения фоновых процессов перед выходом
Этот список – это лишь часть команд, инструментов и утилит Bash, предлагаемые крупной экосистемой UNIX.
Заключение
Прочитав эту статью, вы узнали о том, как работает оболочка Bash, о том, как она появилась и какие у нее есть функции, а также ее основные концепции.
Запуская терминал в своей системе Linux, вашим интерфейсом становится Bash. Она не только отлично подходит для выполнения простых команд, но, что еще более важно, является «ключом» к автоматизации повторяющихся задач и оптимизации операций.