Почти все дистрибутивы Linux по умолчанию оснащены командной оболочкой Bash. Заметим, что различия между оболочками, которые совместимы со стандартом POSIX для Unix-подобных систем, минимальны.
Bash функционирует в текстовом режиме или в приложении "Терминал" и работает в интерактивном режиме. Это означает, что он ожидает действий пользователя, затем обрабатывает введённую строку как команду для выполнения. Команды могут быть самыми разнообразными: запуск программ, манипуляции с файлами, выполнение скриптов на языке Bash и другие.
Unix был разработан как универсальная операционная система для многих пользователей, которые получали доступ через терминалы. Например, в здании мог стоять мощный компьютер, тогда как в офисах сотрудников были расположены терминалы – точки доступа к ресурсам этого компьютера.
С ростом популярности персональных компьютеров в 80-х годах, многопользовательские ОС утратили массовую актуальность. Однако для серверов они оказались удачным выбором.
Представьте, как устанавливаете соединение через SSH с веб-сервером, где размещены ваши файлы сайта. Работая в GNU/Linux и открыв приложение "Терминал", вы приказываете Bash подключиться к удалённой системе под заданным именем пользователя. Сервер отвечает и запрашивает ввод пароля пользователя. Это связано с тем, что пользоваться данным сервером может не один человек.
На локальной машине при использовании текстового режима (если, например, нажать Ctrl + Alt + F2) эмулируется доступ к системе через терминал. Здесь Bash сперва просит ввести логин, а потом – пароль. Ввод пароля не отображается на экране, чтобы избежать возможности подсмотреть его длину. Если данные логин и пароль совпадают с информацией зарегистрированного пользователя, Bash приветствует вас командной строкой. В случае ошибок потребуется повторный ввод данных для входа.
В графическом режиме при запуске "Терминала" автоматически передаются Bash'у данные текущего пользователя, и вы сразу получаете доступ к системе с запросом к командной строке.
Строка приглашения командной строки имеет достаточно стандартный вид и состоит приблизительно из следующего: имя_пользователя@имя_компьютра:текущий_каталог знак
.
На представленной картинке pl обозначает имя пользователя, comp – имя компьютера. Символ тильды ~ является сокращением для домашнего каталога пользователя (/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, чтобы определить, в каких каталогах расположены их исполняемые файлы.