Bash – командная оболочка Linux

В большинстве дистрибутивов Linux по умолчанию установлена командная оболочка Bash. Отметим, что между всеми командными оболочками, соответствующими стандарту POSIX Unix-подобных операционных систем, разница небольшая.

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

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

В связи с распространением персональных компьютеров, начавшимся в 80-х годах, многопользовательские ОС оказались не востребованными массовым потребителем. Однако для серверов они стали хорошим выбором.

Представьте, что подключаетесь по протоколу SSH к веб-серверу, на котором размещаете файлы сайта. Работая в ОС GNU/Linux и запустив программу "Терминал", вы даете Bash'у команду на подключение к удаленной машине под конкретным именем пользователя. Сервер отвечает вам и требует ввести пароль этого пользователя. Все потому, что пользоваться данным компьютером-сервером может далеко не один человек.

На локальном компьютере в текстовом режиме Linux (если вы нажмете, например, Ctrl + Alt + F2) эмулируется удаленный доступ к машине через терминал. Здесь Bash первым делом предлагает вам ввести логин, после чего – пароль. При вводе пароля на экране ничего не отображается. Так сделано специально, чтобы нельзя было подсмотреть даже количество вводимых символов. Если введенная пара логин/пароль соответствуют какому-либо ранее зарегистрированному в системе пользователю, то вы увидите приглашение командной строки Bash'а на ввод команды. В случае ошибки потребуется заново вводить логин/пароль.

В графическом режиме приложение "Терминал" автоматически "берет" данные запустившего его пользователя и передает Bash'у. Таким образом, вы уже оказываетесь представленными системе и первое, что видите, – приглашение командной строки.

Приглашение командной строки имеет относительно стандартный синтаксис и выглядит примерно так: имя_пользователя@имя_компьютра:текущий_каталог знак.

На скриншоте pl – имя пользователя, comp – имя компьютера. Символ тильды ~ в Linux-системах – это сокращенное обозначение домашнего каталога пользователя (/home/user). Именно эту директорию Bash делает текущей по умолчанию. Знак доллара $ обозначает, что мы работаем под непривилегированным пользователем. Если находиться в системе под администратором, вместо доллара будет знак решетки #.

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

Существует множество команд, которые можно отдавать в Bash. В основном это команды запуска различных программ, которые находятся в каталогах /bin, /usr/bin и ряде других. Проверяемые каталоги записаны в переменной $PATH оболочки:

Здесь с помощью команды echo мы просим Bash выдать нам значение переменной $PATH. В выводе каталоги отделены друг от друга с помощью двоеточия.

Можно посмотреть, какие программы установлены в том или ином каталоге, после чего запустить одну из них:

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

Существуют программы с текстовым интерфейсом. Например, редактор Nano:

В данном случае Bash'у была дана команда nano, и прямо в терминале был открыт редактор GNU Nano. В нем была введена пара слов. Чтобы завершить работу редактора, надо нажать Ctrl + X, подтвердить сохранение или отказаться от него. После этого произойдет возврат к командной строке Bash.

Многие из запускаемых в Bash программ не предполагают взаимодействие с пользователем в интерактивном режиме (в режиме диалога). По смыслу их правильнее называть командами, а не программами. Пользователь вводит команду, она выполняется и передает управление обратно Bash. Что делает команда, зависит от команды.

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

Здесь в домашнем каталоге был создан файл test.py, содержащий код на языке программирования Python, выводящий на экран число 10. Код был написан в Nano (на скриншоте не показано). Далее мы пытаемся выполнить программу, обратившись к файлу по его адресу. Точкой обозначается текущий каталог. В данном случае он домашний, поэтому это равносильно ~/test.py или /home/pl/test.py.

При первом вызове мы получаем ошибку, так как у нас нет прав на исполнение программы. С помощью команды chmod мы добавляем такое право (параметр +x).

Существует множество команд. Знать их все как минимум затруднительно. Однако есть ряд наиболее востребованных. Это команды для совершения операций над файлами, установки программ, просмотра директорий и файлов, перемещения по дереву каталогов, то есть всего того, что мы делаем в графическом режиме операционной системы. Многие из них будут рассмотрены в данном курсе. С некоторыми мы уже немного познакомились (cd, ls, echo, chmod).

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

Также не будем забывать, что Bash – это еще и скриптовый язык программирования. В файл, обычно с расширением .sh, может быть записан не только список команд, но также инструкции языка (условный оператор, циклы и др.), "говорящие" как и в каких случаях исполнять те или иные команды. Программирование в Bash в данном курсе не изучается.

Задание

Исследуйте самостоятельно, что делают следующие команды: date, cal, pwd, who, clear, exit. С помощью команды which выясните, в каких каталогах находятся исполняемые файлы этих программ.

Курс с ответами к заданиям и дополнительными уроками в PDF


Введение в Linux и Bash. Курс




Все разделы сайта