# Общие сведения о работе в командной оболочке Linux

**Командная строка**, **оболочка**, **консоль** - эти термины используются для обозначения взаимодействия человека-оператора с операционной системой с применением стандартных устройств ввода-вывода, обеспечивающих ввод **команд** и получение результатов их выполнения.&#x20;

В операционных системах семейства Linux подобное взаимодействие обеспечивается специальным программным продуктом - **оболочкой** ( **shell** ). Наиболее распространенной из них, является оболочка проекта **GNU bash** ( **B**ourne **A**gain **SH**ell ).&#x20;

**bash** основывается на оболочке **Bourne** ( **sh** ) созданной Стефеном Борном и включает в себя свойства множества других оболочек - **C** ( **csh** ) , **Korn** ( **ksh** ), **tc** ( **tcsh** ). **bash** была написана Брайаном Фоксом (Brian Fox ) и в настоящее время поддерживается Четом Рейми ( Chet Ramey ).

Свойства оболочки **bash** делают ее наиболее универсальным и удобным средством взаимодействия с ОС Linux:

* **bash** обеспечивает редактирование командной строки. Курсор может быть перемещен в любую позицию команды для изменения ее содержания.
* **bash** поддерживает режим истории команд, позволяя отображать и изменять ранее введенные команды. Оболочка **bash** также имеет несколько переменных, значения которых влияют на сохранение и повторный вызов ранее введенных команд.
* **bash** обеспечивает завершение частично введенных слов для имен переменных, пользователей, хостов, команд и файлов.
* **bash** обеспечивает гибкое управление процессами, позволяя приостанавливать их, перезапускать, переключаться между задачами переднего плана и фоновыми, и даже продолжать выполнение задачи при завершении родительского процесса.
* **bash** позволяет использовать функции и псевдонимы, выполнять арифметические операции и вводить арифметические выражения в качестве команд.
* **bash** позволяет создавать целые наборы последовательно выполняемых команд (сценарии или скрипты) с использованием гибкого и функционального языка программирования данной оболочки.
* **bash** имеет гибкие настройки, обеспечивающие изменение внешнего вида командной строки.

Оболочка **bash** может выполняться как в интерактивном, так и в неинтерактивном режимах. В первом случае программа **bash** взаимодействует с пользователем, во втором - используется для выполнения скриптов ( специально подготовленных текстовых файлов с последовательностью команд) .

**Стандартная командная строка** (на примере Ubuntu) выглядит так:

`user@ubuntu:~$`

Она содержит следующие данные:

* user – имя текущего пользователя;
* ubuntu – имя хоста;
* @ - знак разделитель;
* \~ – текущий каталог (в bash символ тильды соответствует домашнему каталогу, путь к нему – /home/ubuntu);
* $ – символ, который означает конец командной строки, после которого появится ввод пользователя с клавиатуры.

Ниже приведён пример командной строки пользователя root, который находится в каталоге /var/log.

`root@webapp:/var/log#`

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

## Выполнение команд

Команды можно выполнять с помощью командной строки, указав имя файла (бинарного файла или сценария). По умолчанию в системах Linux установлено много стандартных команд, которые позволяют перемещаться по файловой системе, устанавливать программное обеспечение и пакеты, настраивать систему и приложения и т.п.

Каждая запущенная команда является отдельным процессом. Если команда выполняется на переднем плане (по умолчанию все команды выполняются именно так), то пользователь не сможет работать с терминалом, пока команда не будет выполнена.

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

Рассмотрим несколько базовых примеров запуска команд.

### Запуск команд без опций и аргументов

Чтобы запустить команду без аргументов и опций, просто введите саму команду и нажмите RETURN.

В таком случае команда выполнит своё стандартное действие. У каждой команды индивидуальное поведение по умолчанию. К примеру, команда cd без аргументов откроет домашний каталог текущего пользователя. Команда ls без аргументов выведет список файлов и каталогов, хранящихся в текущем каталоге.

### Запуск команд с аргументами

Многие команды принимают аргументы, или параметры, которые могут влиять на их поведение. К примеру, в качестве аргумента команды cdчасто используется имя каталога, в который нужно перейти. Например, чтобы перейти в /usr/bin, нужно ввести:

`cd /usr/bin`

Сначала нужно ввести саму команду, а после неё указать аргументы. Перейдя в новый каталог, путь в командной строке изменится.

### Команды с опциями

Большинство команд имеют список опций, или флагов, которые позволяют изменять поведение команды.

Опции указываются после команды через дефис. Они бывают верхнего и нижнего регистра. Некоторые опции начинаются с двух дефисов (–). После одного дефиса можно указать несколько опций подряд, а после двух дефисов обычно идёт одна опция, состоящая из нескольких символов (обычно это описательное слово).

Для примера рассмотрим некоторые опции команды ls:

* **-l**: включает подробный листинг, который предоставляет дополнительные детали (права доступа, права собственности, размер файлов и т.п.).
* -a: выводит полный список файлов, которые хранятся в каталоге (включая скрытые файлы).

Флаг -l команде ls передаётся так:

`ls -l`

Такая команда выведет много дополнительной информации о файлах.

Как уже говорилось, опции можно группировать. Например, вы можете передать команде ls флаги -l и –a одновременно. Для этого можно запустить:

`ls -l -a`

Но лучше скомбинировать их так:

`ls -la`

Теперь команда выведет подробные данные обо всех файлах, включая скрытые.

### Команда с опциями и аргументами

Опции и аргументы почти всегда можно комбинировать, запуская команду.

К примеру, чтобы просмотреть полное содержимое каталога /home, можно использовать:

`ls -la /home`

Такая команда вернёт подробные данные о каждом файле заданного каталога.

### Запуск нескольких команд одновременно

Linux позволяет производить запуск нескольких команд в одной строчке. Существует два способа:

1. Используется символ ";":

```
sudo apt-get update; sudo apt-get upgrade -y 
```

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

2. Используется символы "&&":

```
sudo apt-get update && sudo apt-get upgrade -y
```

Будут выполняться обе версии команды, но вторая форма будет выполнять вторую команду только в том случае, если первая завершится успешно.

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

### Ввод команд на нескольких строках

Linux позволяет вводить команды на нескольких строках, использовав символ "\\". Для сравнения будет приведено стандартное выполнение команды и с использованием символа \\

```
ping 127.0.0.1

ping \
> 127.0.0.1
```

Вывод представленных команд будет аналогичен.

## Переменные окружения

**Переменные окружения** – это значения, которые влияют на выполнение команд и процессов. При первом запуске сервера система установит несколько переменных окружения в соответствии с конфигурационными файлами по умолчанию.

### Просмотр переменных

Чтобы просмотреть все переменные окружения, установленные для определённой сессии терминала, используйте env:

`env`

Вывод этой команды обычно очень объёмен. Найдите в нём запись PATH:

`PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games`

Переменная окружения PATH – это разделённый двоеточиями список каталогов, в которых оболочка будет искать исполняемые программы или сценарии при выполнении команды. Например, команда env находится в каталоге /usr/bin, но при выполнении команды не нужно указывать путь к ней, поскольку он уже указан в переменной PATH.

### Значения переменных

Чтобы извлечь значение переменной, укажите перед её именем $.

Например, чтобы вывести значение переменной PATH, можно использовать команду echo:

`echo $PATH`

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

`cd $HOME`

Если запрашиваемая переменная не установлена, терминал вернёт пустую строку.

### Установка значений переменных

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

`ПЕРЕМЕННАЯ=значение`

Обратите внимание, что если вы устанавливаете существующую переменную, её исходное значение будет перезаписано. Если переменная не существует, она будет создана.

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

Также на существующие переменные можно ссылаться при установке переменной. К примеру, если вы установили приложение в /opt/app/bin, вы можете добавить этот каталог в конец переменной PATH с помощью такой команды:

`export PATH=$PATH:/opt/app/bin`

Теперь запросите значение переменной PATH:

`echo $PATH`

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

## Эмулятор терминала

**Эмулятор терминала** – это программа, которая позволяет использовать терминал в графической среде. Большинство людей используют ОС с графическим пользовательским интерфейсом (GUI), потому эмулятор терминала необходим многим пользователям Linux-сервера.

Наиболее популярными эмуляторами являются:

* Mac OS X: iTerm 2
* Windows: PuTTY, SecureCRT, TeraTerm
* Linux: Terminal, KDE Konsole, XTerm

Каждый эмулятор терминала имеет свой индивидуальный набор функций.



Больше информации об установке и чтении переменных среды и оболочки на сервере Linux вы можете прочитать по след. ссылке:

{% embed url="https://www.8host.com/blog/chtenie-i-ustanovka-peremennyx-sredy-i-obolochki-na-servere-linux/" %}

{% embed url="https://translated.turbopages.org/proxy_u/en-ru.ru.77621dc6-65300d3d-78304441-74722d776562/https/www.linuxcommand.org/lc3_lts0010.php" %}
