# Терминал

Командная оболочка 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
