# Терминал Командная оболочка Bash является одним из нескольких главных компонентов в дистрибутивах Linux. Она позволяет читать и запускать команды, выполнять скрипты, работать с файлами. Наличие Bash не менее важно для полноценного функционирования операционных систем семейства Linux, чем ядро или рабочее окружение. Рассмотрим, как и для чего был создан программный продукт, разберем его преимущества, области применения и расскажем о начале работы с Bash. Обзор будет полезен всем, кто начинает свое практическое знакомство с Linux, а также тем, кто хочет иметь под рукой удобную шпаргалку с основным функционалом командного интерпретатора. **Что такое Bash** **Bash** (Bourne again shell или «возрождённый» shell) – это модифицированная версия программной оболочки Bourne-shell (sh или «Оболочка Борна»). Она является командным процессором, работающим интерактивно в текстовом окне. Bash нужен для приема команд пользователя и их отправки операционной системе для последующей обработки. ![](Aspose.Words.37828ec9-38e1-4906-8d34-877ca1aed47b.001.png) **Bash** – это универсальный инструмент для выполнения различных задач, который в некоторых случаях позволяет избежать установки специализированного программного обеспечения. Одновременно, это скриптовый язык программирования, позволяющий создавать сценарии для автоматизации различных операций. **История создания** Предшественница Bash  –  Bourne-shell (sh, «Оболочка Борна») была одной из первых оболочек для операционных систем Unix. Ее создал в 1978 году британский ученый Стивен Борн, давший Bourne-shell свое имя. Изначально оболочка sh обладала относительно небольшим набором функций. Но в 1987 году Bourne-shell заинтересовался программист Брайан Фокс, сумевший доработать и значительно расширить ее функционал. В 1989 году Брайан создал бета-версию Bash и продолжал поддерживать свое детище вплоть до 1993 года. ![](Aspose.Words.37828ec9-38e1-4906-8d34-877ca1aed47b.002.png) Брайан Фокс — создатель оболочки Bash. Основные команды, правила их написания и прочие особенности Bash были перенесены из sh. Прочие возможности, включая историю, позаимствованы из Korn Shell и C Shell (других вариаций Bourne-shell). Bash практически полностью соответствует стандартам POSIX. Сегодня оболочка Bash предустановлена в большей части дистрибутивов Unix/Linux. Взаимодействие оболочки и операционной системы обеспечивается с помощью специальной программы – терминала (например, lxterm, xterm, eterm, gnome-terminal). **Синтаксис** Правила написания Bash представляют собой расширенный синтаксис Bourne-shell. Узнать подробности про основы взаимодействия с оболочкой, а также спецификации конкретных команд можно в руководстве [Bash Reference Manual](https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html), распространяемом GNU. Это полезная шпаргалка для начинающих, позволяющая быстрее сориентироваться в оболочке. **Пример скрипта** Ниже рассмотрен пример самого простого скрипта, выводящего надпись «Hello world». #!/usr/bin/env bash **echo** 'Hello World!' Данный сценарий состоит из двух строк, где первая указывает операционной системе, что файл должен запускаться при помощи оболочки Bash. Во второй строчке указывается действие – его и должен выполнить скрипт. Это действие должно напечатать в окне терминала соответствующую надпись. ![](Aspose.Words.37828ec9-38e1-4906-8d34-877ca1aed47b.003.png) **Отличие Bash от Bourne-shell** Bash в Linux способна выполнять практически все важные сценарии Bourne-shell без внесения дополнительных изменений. Исключение составляют те, где необходимо ссылаться на спецпеременные Bourne-shell или, где применяются ее встроенные команды. В синтаксисе Bash применяются приемы из Korn Shell и C Shell: - редактирование командной строки; - вывод истории команд; - создание стеков директорий; - правила замены команд «$(…)»; - переменные «$PPID» и «$RANDOM». Используя консоль Bash в качестве интерактивного интерпретатора, можно прибегать к автодополнению названий файлов, программ, переменных и команд нажатием клавиши Tab (↹). **Для чего нужен Bash** ![](Aspose.Words.37828ec9-38e1-4906-8d34-877ca1aed47b.004.png) **Основные преимущества** На данный момент разработано множество различных вариаций Bourne-Shell. Но, по сравнению с ними, командный интерпретатор Bash обладает рядом преимуществ. - Позволяет работать со структурами «[[» (в sh доступна только «[» с ограничениями). - Поддерживает работу с массивами в Линуксе. - Доступно множество расширений, выполненных по стандартам C, включая циклы с тремя аргументами «for((i=0;i<=3;i++))», возможность присваивать инкремент «+=» и многое другое. - Поддерживает синтаксис «<<<‘here strings’». - Работает с расширениями «.{png,jpg}». - Доступны алиасы для перенаправления, подобно «Csh», подобно «&|» для «2>&1 |» и «&>» для «> … 2>&1». - Поддерживает сопроцессы с перенаправлением «<>». - Огромный комплект расширений нестандартных конфигураций, включая изменение регистра. - Существенно увеличены возможности арифметики (правда, нет поддержки чисел с плавающей точкой). - Переменные «$RANDOM», «$SECONDS», «$PIPESTATUS[@]» и «$FUNCNAME» в Bash являются расширениями. - Доступно огромное количества функций, обеспечивающих работу в интерактивном режиме. Хотя на поведение скриптов они не влияют. *Примечание. Чем новее интерпретатор, тем больше функций он предоставляет. Узнать версию Bash в Linux можно командой:* **$SHELL** --version ![](Aspose.Words.37828ec9-38e1-4906-8d34-877ca1aed47b.005.png) **Примеры применения** - Вывести указанное количество строчек из лога. - Найти и составить выборку ключевых слов, сохранив их в новом файле. - Очистить экран терминала. - Приостановить работающие задачи и перезапустить ранее приостановленные. - Создать архив директории с файлами и отправить его на другой компьютер в одной сети через определенный сетевой протокол. - Произвести настройку системы создания резервных копий файлов баз данных, используя дампинг. - Послать запрос о конфигурации других компьютеров в сети. Отправить файл с собранной информацией на электронную почту. - Найти на диске дублированные файлы, отобразить их список и выполнить запрос их удалить. - Рекурсивно заменить владельцев указанных файлов и папок. **Как работать с Bash** Рассмотрим, как пользоваться Bash на примере подключения к веб-серверу (где находятся файлы сайта) с установленным дистрибутивом Linux через протокол SSH с нуля. ![](Aspose.Words.37828ec9-38e1-4906-8d34-877ca1aed47b.006.png) Для этого можно воспользоваться любым предпочитаемым [способом](https://eternalhost.net/base/vps-vds/ssh-podklyuchenie). В данном случае рассматривается веб-сервер с Ubuntu, хотя в других дистрибутивах принцип остается тем же. 1. После успешного ввода логина и пароля программа Терминал Linux в автоматическом режиме запустит Bash. Собственно, пользователь уже подключится к системе и увидит приглашение на ввод команд. 2. Приглашение отображается относительно стандартно и имеет следующий вид: <имя пользователя>@<имя компьютера>:<текущий каталог><знак>. ![](Aspose.Words.37828ec9-38e1-4906-8d34-877ca1aed47b.007.png) В примере: - размытием закрыто имя пользователя; - «vPro» – название компьютера; - графема тильда (~) в Линуксе обозначает домашнюю папку пользователя в сокращенном виде (/home/user). Она в Bash по умолчанию является текущей - знак доллара ($) указывает, что пользователь не имеет прав администратора. Работая как администратор, вместо знака доллара отображается знак решетки (#). 3. Когда приглашение выполнено, терминал автоматически поставит пробел и будет находиться в ожидании ввода команд. На предложенном изображении была нажата кнопка «Enter». В следующей строчке введена команда «cd» перейти в существующий каталог «/opt». Еще ниже отображается результат вывода – рабочей папкой стала «/opt» и это показано в приглашении. ![](Aspose.Words.37828ec9-38e1-4906-8d34-877ca1aed47b.008.png) 4. Командная строка Linux позволит запускать любое установленное в системе приложение. Как правило, каталоги со списком исполняемых программ расположены в папках «/bin, /usr/bin». Проверяемые каталоги интерпретатор сохраняет в переменной «$PATH». Просмотреть их список можно командой: **echo** **$PATH** 5. Далее можно воспользоваться командой «ls» и добавить к ней один из каталогов, найденных в «$PATH», чтобы увидеть список доступных программ. Например: ![](Aspose.Words.37828ec9-38e1-4906-8d34-877ca1aed47b.009.png) 6. Если приложение консольное, Bash произведет его запуск в терминале. Ниже показан пример запуска редактора Nano. ![](Aspose.Words.37828ec9-38e1-4906-8d34-877ca1aed47b.010.png) 7. Bash также позволяет осуществлять запуск приложений в фоновом режиме. Для запуска в фоне, после ввода названия программы в конце следует добавить знак амперсанда (&). ![](Aspose.Words.37828ec9-38e1-4906-8d34-877ca1aed47b.011.png) Здесь строка «[2] 23258» – это номер и PID процесса. При этом nano находится в фоновом режиме. Вернуться к нему можно командой «fg» (добавив номер задачи, если их запущено несколько) или «jobs». ![](Aspose.Words.37828ec9-38e1-4906-8d34-877ca1aed47b.012.png) Поскольку в фоне может работать достаточно много команд, проверить номер требуемой можно командой «bg». Она отобразит список активных задач. ![](Aspose.Words.37828ec9-38e1-4906-8d34-877ca1aed47b.013.png) #Cписок использованной литературы: https://eternalhost.net/blog/sistemnoe-administrirovanie/linux-bash-chto-eto#p0