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

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

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

Терминалы, подключенные к общей ЭВМ

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

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

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

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

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

Приглашение Bash

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

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

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

Вывод каталогов, содержащихся в переменной $PATH

Используя команду echo, можно запросить у Bash содержимое переменной $PATH. Каталоги в этом выводе разделены двоеточием.

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

Запуск приложения из командной строки

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

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

Консольный текстовый редактор Nano

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

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

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

Запуск скрипта на Python

Здесь в домашнем каталоге был создан файл 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, чтобы определить, в каких каталогах расположены их исполняемые файлы.

Вопросы для самопроверки:

  1. Какой символ в приглашении командной строки указывает на работу под непривилегированным пользователем?
  2. Какая команда используется для изменения прав доступа к файлу в Bash?
  3. Что необходимо сделать для выполнения программы, если она находится в каталоге, не указанном в $PATH?
  4. Какой язык программирования включает в себя Bash, помимо командной оболочки?

Программа курса:

  1. Описание курса
  2. История операционной системы Linux
  3. Основы лицензии GNU GPL и её преимущества
  4. Функции и структура ядра Linux-систем
  5. Структура и каталоги файловой системы Linux
  6. Основные типы файлов в системе Linux
  7. Интерфейс командной строки в Linux
  8. Командная оболочка Bash в Linux
  9. Использование параметров команд в Bash
  10. Использование Ctrl+C, Ctrl+D и Ctrl+Z
  11. Автодополнение и история команд в Bash
  12. Перенаправление ввода и вывода в Bash
  13. Документация Linux и Man-страницы
  14. Абсолютная и относительная адресация в Linux
  15. Команда ls - как просматривать каталоги в Linux
  16. Копирование, перемещение и удаление в Linux
  17. Жесткие и символьные ссылки в Linux
  18. Создание жестких и символических ссылок в Linux
  19. Права доступа к файлам и каталогам в Linux
  20. Изменение прав доступа к файлам с помощью chmod
  21. Использование шаблонов имен файлов в Linux
  22. Поиск файлов в Linux с помощью команды find
  23. Использование команды sudo в Linux
  24. Управление пакетами с помощью APT в Linux