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