Перейти к содержанию

2.1 Как работает командная оболочка Linux (How the Linux Shell Works)

Хотя графические пользовательские интерфейсы, как правило, удобнее в работе, многие задачи по администрированию и поддержке системы Linux необходимо выполнять из командной строки. По сути, конечные пользователи работают через GUI, а администраторы — через командную строку.

Совет к экзамену

На экзаменах Linux+ и LPIC-1 вы будете активно проверяться на умение управлять системой с помощью CLI Linux.

Поэтому в данной книге мы уделим значительное время работе с интерфейсом командной строки Linux. Мы рассмотрим следующие темы:

  • оболочки Linux;
  • управление файлами конфигурации оболочки.

Начнём с обзора наиболее распространённых оболочек Linux.

Оболочки Linux

Чтобы по-настоящему понять, как работает интерфейс командной строки в Linux, необходимо разобраться в понятии оболочки (shell). Оболочка — это интерпретатор команд, позволяющий вводить команды с клавиатуры и передавать их ядру операционной системы.

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

  • sh (Bourne Shell) — оболочка sh является самой ранней: она была разработана для UNIX в конце 1970-х годов. Сегодня на системах Linux применяется редко, однако по-прежнему широко используется на системах UNIX.
  • bash (Bourne-Again Shell) — оболочка bash представляет собой улучшенную версию sh и является одной из наиболее популярных оболочек. Фактически, она используется по умолчанию в большинстве дистрибутивов Linux. Если вы работаете в интерфейсе командной строки Linux, то, скорее всего, используете именно bash.
  • csh (C Shell) — оболочка csh была изначально разработана для BSD UNIX. Она использует синтаксис, очень похожий на язык программирования C.
  • tcsh — оболочка tcsh является улучшенной версией C Shell. Это оболочка по умолчанию в системах FreeBSD.
  • zsh (Z Shell) — оболочка zsh является улучшенной версией bash.

При первой загрузке системы Linux и входе в неё загружается оболочка по умолчанию. Узнать, какая оболочка используется, можно, введя команду echo $SHELL в приглашении командной строки. Команда echo выводит текст на экран. Добавление $SHELL указывает echo вывести содержимое переменной окружения SHELL для текущего пользователя. Ниже показан пример, в котором оболочка bash установлена оболочкой по умолчанию для учётной записи пользователя rtracy:

rtracy@openSUSE:~> echo $SHELL
/bin/bash

Тем не менее вы не обязаны оставаться с оболочкой по умолчанию. Чтобы переключиться на другую оболочку, достаточно ввести её имя в приглашении командной строки. Например, если вы используете оболочку bash и хотите переключиться на zsh, просто введите zsh в приглашении. Чтобы завершить работу в новой оболочке и вернуться к исходной, введите exit.

Совет к экзамену

Оболочку по умолчанию можно также задать, изменив параметры учётной записи пользователя. Как это сделать, мы рассмотрим в главе 9. Для экзаменов Linux+ и LPIC-1 достаточно знать только оболочку bash. Поэтому в данной главе рассматривается только bash.

Linux способен одновременно запускать несколько сеансов оболочки. Каждый сеанс может выполнять собственные программы параллельно с другими. Это бывает очень удобно, когда одна программа уже запущена, а вам нужен доступ к приглашению командной строки. Во многих дистрибутивах, например в openSUSE, для открытия нового сеанса достаточно нажать alt-fx (где x — число от 2 до 6). Например, чтобы переключиться на третий альтернативный экран консоли, нажмите alt-f3. Вернуться к исходному сеансу можно, нажав alt-f1.

Примечание

В некоторых дистрибутивах, например Ubuntu, для открытия нового сеанса необходимо нажать ctrl-alt-fx.

Как и в Windows, в Linux можно запускать терминальные сеансы в графической среде. Для этого используется программа-терминал, например Konsole или GNOME Terminal. Чтобы открыть несколько сеансов командной строки, просто запустите два или более окна терминала. Каждый сеанс оболочки запускает программы независимо от остальных сеансов.

Существует и ещё один способ. Находясь в графической среде Linux, нажмите ctrl-alt-fx (где x — число от 1 до 6). Это переключит вас в текстовое приглашение оболочки. Для возврата в графическую среду нажмите alt-f7 (на большинстве дистрибутивов).

Упражнение 2-1. Работа с оболочками Linux

В этом упражнении вы научитесь получать доступ к приглашению оболочки, переключаться между оболочками и работать с альтернативными экранами консоли. Упражнение можно выполнить на виртуальной машине, прилагаемой к книге. Для получения настроенной среды загрузите снимок состояния (snapshot) 2-1.

VIDEO Посмотрите видео к упражнению 2-1 с демонстрацией выполнения этого задания.

Выполните следующие действия:

  1. Загрузите систему Linux.
  2. Войдите в систему как пользователь student с паролем student, затем нажмите ctrl-alt-f1.
  3. В приглашении входа выполните аутентификацию в системе как пользователь student с паролем student.
  4. Узнайте оболочку по умолчанию, введя в приглашении команду echo $SHELL. Будет показана ваша оболочка по умолчанию. На большинстве систем это /bin/bash.
  5. Откройте альтернативное окно консоли, нажав alt-f2. Отобразится новое приглашение входа в систему.
  6. Снова выполните аутентификацию в системе.
  7. Вернитесь на первый экран консоли, нажав alt-f1.
  8. Загрузите оболочку sh, введя sh в приглашении.
  9. Вернитесь к оболочке по умолчанию, введя exit в приглашении.
  10. Введите logout.
  11. Вернитесь в графическую среду, нажав alt-f7.

Теперь, когда вы умеете получать доступ к оболочке bash, рассмотрим, как её настроить.

Управление файлами конфигурации оболочки

Среду оболочки bash можно настроить с помощью нескольких файлов конфигурации. Конкретные файлы, используемые для настройки оболочки, зависят от того, является ли она оболочкой входа (login shell) или неинтерактивной оболочкой (non-login shell). Оболочка входа используется тогда, когда система Linux загружается с текстовым экраном входа и вы входите в систему через CLI. Пример такой оболочки показан на рис. 2-1.

Примечание

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

Рис. 2-1. Приглашение входа в систему в текстовом режиме (оболочка входа).

Рис. 2-1. Использование оболочки входа.

Даже если система настроена на загрузку в графическую среду (уровень выполнения 5), при загрузке всё равно создаётся оболочка входа — вы просто её не видите. Однако если вы открываете окно терминала в среде рабочего стола, оболочка входа не используется. Вместо этого запускается неинтерактивная оболочка. Это показано на рис. 2-2.

Рис. 2-2. Окно терминала в графической среде — неинтерактивная оболочка.

Рис. 2-2. Использование неинтерактивной оболочки.

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

Примечание

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

Наиболее часто используемые файлы конфигурации оболочки перечислены в табл. 2-1.

Файл конфигурации bash Тип оболочки Функция
/etc/bashrc или /etc/bash.bashrc Неинтерактивные оболочки Содержит общесистемные функции и псевдонимы оболочки
~/.bashrc Неинтерактивные оболочки (хотя оболочки входа во многих дистрибутивах также используют этот файл — он часто вызывается из одного из файлов конфигурации, перечисленных ниже) Хранит пользовательские функции и псевдонимы
/etc/profile и файлы в /etc/profile.d Оболочки входа Содержит общесистемные параметры конфигурации среды оболочки
~/.bash_profile Оболочки входа Хранит пользовательские настройки оболочки
~/.bash_login Оболочки входа Хранит пользовательские настройки оболочки
~/.profile Оболочки входа Хранит пользовательские настройки оболочки
~/.bash_logout Оболочки входа Хранит пользовательские настройки оболочки

Табл. 2-1. Файлы конфигурации оболочки bash.

Если используется неинтерактивная оболочка, всё достаточно просто: оболочка bash запускает /etc/bashrc для общесистемных функций и псевдонимов, а затем — ~/.bashrc из домашнего каталога пользователя для пользовательских настроек.

Если используется оболочка входа, bash сначала запускает /etc/profile и применяет указанные в нём настройки. Затем, однако, ситуация немного усложняется. Как вы могли заметить из табл. 2-1, несколько файлов, похоже, выполняют одно и то же. Это действительно так. Причина в том, что ни один дистрибутив не использует все эти файлы одновременно. Например, система Fedora использует ~/.bashrc, ~/.bash_profile и ~/.bash_logout. Системы openSUSE и Ubuntu используют ~/.bashrc и ~/.profile.

При запуске оболочки входа программа bash ищет файлы конфигурации в следующем порядке:

  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile

Она использует первый найденный файл и игнорирует остальные. Для систем SUSE и Fedora это не представляет особой проблемы. Важно помнить, что файл .bashrc не читается bash при загрузке оболочки входа (хотя он может вызываться из .bash_profile или .profile). Поэтому после чтения /etc/profile оболочка bash на системе Fedora читает .bash_profile. На системе openSUSE bash читает .profile после /etc/profile.

Внимание

Если вы хотите внести изменение в среду оболочки bash, которое будет применяться ко всем пользователям системы Linux при каждом открытии оболочки входа, внесите это изменение в файл /etc/profile. Однако существует риск, что внесённые изменения будут потеряны при обновлении операционной системы. Большинство дистрибутивов рекомендуют вносить изменения в файл /etc/profile.local, чтобы избежать этого.

Файл .bash_logout используется только при выходе из оболочки входа. Большинство дистрибутивов по умолчанию не включают этот файл в домашние каталоги пользователей. Однако большинство дистрибутивов позволяют отдельным пользователям создавать собственный файл .bash_logout и добавлять в него команды, выполняемые при выходе из системы.

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