Что такое оболочка linux
Что такое командная оболочка (shell) в Linux?
Обновл. 27 Июл 2021 |
В этой статье мы разберемся, что такое shell и зачем это нужно, а также рассмотрим наиболее часто используемые командные оболочки в Linux и Unix.
Что такое shell?
Shell (или «шелл», «командная оболочка») — это не только командный интерпретатор, который обеспечивает интерфейс взаимодействия между пользователем и ядром операционной системы, но и своеобразный язык программирования, в котором присутствуют такие конструкции, как операторы условного ветвления, циклы, переменные и многое другое.
Окно терминала привилегированного (root) пользователя (виден символ #)
Примечание: Знак тильды (
) указывает на то, что мы находимся в домашнем каталоге текущего пользователя.
После приглашения, пользователь вводит различные команды в терминал, оболочка запускает программы для пользователя, а затем отображает в терминале результат их выполнения. Команды могут быть либо введены непосредственно самим пользователем, либо считаны из файла, называемого shell-скриптом или shell-программой.
Внутренние и внешние команды оболочки
Вводимые пользователем команды делятся на два типа:
Внутренние — это команды, изначально встроенные в оболочку.
Внешние — это команды, которые не встроены в оболочку. По своей сути они являются скорее небольшими отдельными программами, расположенными где-то в файловой системе (обычно, в каталогах /bin или /usr/bin).
Чтобы определить тип команды, достаточно в окне терминала ввести type :
Ознакомиться с полным списком внутренних команд оболочки можно при помощи команды help :
Как узнать какая оболочка у меня установлена?
Если вы только начинаете свое знакомство с Linux и не меняли оболочку, то наиболее вероятно, что в вашей системе используется bash. Самый простой способ узнать, какая оболочка используется в данный момент — это обратиться к переменной окружения SHELL :
Не трудно заметить, что в настоящее время используется оболочка bash. Для просмотра всех доступных оболочек в вашей системе, необходимо обратиться к содержимому файла /etc/shells:
Типы командных оболочек
В *nix-системах существует два основных типа оболочек: оболочки на основе Bourne shell и оболочки на основе C shell.
Типичными представителями оболочек типа Bourne shell являются:
bash (Bourne Again shell)
К оболочкам типа C Shell относятся:
tcsh (TENEX/TOPS C shell)
Ниже представлены некоторые из самых распространенных шеллов, используемых в *nix-системах:
Примечание: Термин «*nix-системы» обозначает Unix-подобные операционные системы.
sh (Bourne shell)
sh (сокр. от «Bourne shell») — это самая старая (среди рассматриваемых) оболочка, написанная Стивеном Борном из AT&T Bell Labs для ОС UNIX v7. Оболочка доступна практически в любом *nix-дистрибутиве. Многие другие шеллы уходят своими корнями именно к sh. Благодаря своей скорости работы и компактности, данная оболочка является предпочтительным средством для написания shell-скриптов. К её недостаткам можно отнести отсутствие функций для использования оболочки в интерактивном режиме, а также отсутствие встроенной обработки арифметических и логических выражений.
Примечание: Стоит отметить, что из-за общего морального устаревания оболочки, в современных системах ссылка на шелл sh (/bin/sh), обычно, является псевдонимом для запуска текущей, более новой оболочки.
Характерные черты sh:
Полные пути к интерпретатору: /bin/sh и /sbin/sh.
bash (Bourne-Again shell)
bash (сокр. от «Bourne–Again shell») — это усовершенствованный и дополненный вариант шелла sh, является одной из самых популярных современных командных оболочек *nix-систем.
Объединяет в себе полезные фишки оболочек ksh и csh.
Поддерживает навигацию при помощи стрелок, благодаря чему можно просматривать историю команд и выполнять редактирование прямо в командной строке.
Характерные черты bash:
Полный путь к интерпретатору: /bin/bash.
Приглашение для обычного пользователя: имя_пользователя@имя_хоста:
— это домашний каталог текущего пользователя, например, mrsmith@mypc:
Приглашение для суперпользователя (root): root@имя_хоста:
ksh (Korn shell)
ksh (сокр. от «Korn shell») — это командная оболочка, разработанная Дэвидом Корном из AT&T Bell Labs в 1980-x годах.
Является расширением sh.
Имеет обратную совместимость с sh.
Имеет интерактивный функционал, сравнимый с csh.
Включает в себя удобные для программирования функции, такие как: встроенную поддержку арифметических выражений/функций, Си-подобный синтаксис скриптов и средства для работы со строками.
Работает быстрее, чем csh.
Может запускать скрипты, написанные для sh.
Характерные черты ksh:
Полный путь к интерпретатору: /bin/ksh.
csh (C shell)
csh (сокр. от «C shell») — это командная оболочка, созданная Биллом Джоем (автором редактора vi) с целью усовершенствования стандартного шелла Unix (sh).
Имеет встроенные функции для интерактивного использования, например, псевдонимы (aliases) и историю команд.
Включает в себя удобные для программирования функции, такие как: встроенную поддержку арифметических выражений и Cи-подобный синтаксис скриптов.
Характерные черты csh:
Полный путь к интерпретатору: /bin/csh.
tcsh (TENEX C Shell)
tcsh (сокр. от «TENEX C shell») — это командная оболочка, созданная Кэном Гриром, которая позиционируется как улучшенная версия шелла csh.
Имеет полную совместимость csh.
Именно в данном шелле впервые появилась функция автодополнения команд и путей.
Удобна для интерактивной работы.
Поддерживает редактор командной строки в стиле vi или emacs.
Является стандартным шеллом во FreeBSD.
Характерные черты tcsh:
Полный путь к интерпретатору: /bin/tcsh.
Приглашение для обычного пользователя: имя_хоста:
zsh (Z Shell)
zsh (сокр. от «Z shell») — это командная оболочка, созданная Паулем Фалстадом во время его учебы в Принстонском университете, позиционируется как свободная современная sh-совместимая командная оболочка.
Среди стандартных шеллов больше всего похожа на ksh, но включает в себя множество улучшений.
Встроенная поддержка программируемого автодополнения команд, имен файлов и пр.
Поддержка проверки орфографии и опечаток.
Раздельная история команд для одновременной работы с несколькими запущенными шеллами.
Характерные черты zsh:
Полный путь к интерпретатору: /bin/zsh.
Приглашение для суперпользователя (root): root@имя_хоста:
Резюмируем
Краткая сводная таблица для 6 вышерассмотренных командных оболочек:
Командная оболочка | Путь | Приглашение (обычный пользователь) | Приглашение (root) |
sh (Bourne Shell) | /bin/sh и /sbin/sh | $ | # |
bash (Bourne-Again Shell) | /bin/bash | имя_пользователя@имя_хоста: |
$
#
>
Примечание: Помимо представленных выше оболочек, есть еще и такие оболочки, как:
mksh — оболочка, основной упор в которой сделан на написание скриптов;
dash — более легковесная в сравнении с bash оболочка, но из-за этого обладающая ограниченной функциональностью;
fish — «новая» оболочка, написанная в 2005 году, отличительной чертой которой является упор на комфорт использования и упрощение командного языка;
Поделиться в социальных сетях:
Как устроена графика в Linux: обзор различных сред оформления рабочего стола
Эта статья о том, как устроена графика в Linux и из каких компонентов она состоит. В ней много скриншотов с различными реализациями сред рабочих столов.
Если вы не сильно различаете KDE и GNOME или различаете, но хотели бы узнать, какие еще есть альтернативы, то эта статья для вас. Она обзорная, и хотя в ней много названий и немного терминов, материал будет также полезен начинающим и только посматривающим в сторону Linux.
Тема может заинтересовать и продвинутых пользователей при настройке удаленного доступа и при реализации тонкого клиента. Часто встречаю вполне матерых линуксойдов с утверждениями «на сервере только командная строка, и графику подробнее изучать не планирую, так как это всё нужно для простых пользователей». Но даже знатоки Linux с большим удивлением и радостью открывают для себя опцию «-X» у команды ssh (а для этого полезно понимать работу и функции X-сервера).
По ходу статьи по каждому компоненту я указываю ссылки для тех, кому захочется глубже погрузиться в тему, например, на статьи в Википедии (при этом указываю на более полную/полезную версию при наличии англоязычной и русскоязычной статей).
Для основных примеров и скриншотов я использовал дистрибутив openSUSE. Можно было использовать любой другой дистрибутив, разрабатываемый сообществом, с наличием большого количества пакетов в репозитории. Сложно, но возможно, продемонстрировать многообразие оформления рабочего стола на коммерческом дистрибутиве, так как часто в них используются только одна или две наиболее известных сред рабочего стола. Так разработчики сужают себе задачу выпуска стабильной отлаженной ОС. На данную же систему я установил все DM/DE/WM (объяснение этих терминов ниже), которые нашёл в репозитории.
Скриншоты с «синими рамками» как раз и сделаны на openSUSE.
Скриншоты с «белыми рамками» делал на других дистрибутивах, они указаны на скриншоте.
Скриншоты с «серыми рамками» были взяты из интернета, в качестве примеров оформлений рабочего стола из прошлых лет.
Основные компоненты, из которых состоит графика
Выделю три основные компонента и перечислю их в порядке, как они запускаются при старте системы:
DM (Display Manager)
Первое приложение, которое запускается при старте «графики», — это DM (Display Manager), дисплейный менеджер. Его основные задачи:
Стоит отметить, что на следующих скриншотах используется один и тот же дисплейный менеджер LightDM, но в разных дистрибутивах (названия дистрибутивов указаны в круглых скобках). Оцените, насколько по-разному может выглядеть этот DM благодаря работе дизайнеров различных дистрибутивов.
Главное в этом многообразии, чтобы было понятно, что есть такое приложение, которое отвечает за запуск графики и допуск пользователя к этой графике, и есть разные реализации этого приложения, различающиеся внешним видом и немного функционалом (выбор сред оформления, выбор пользователей, версия для плохо видящих пользователей, наличие возможности удаленного доступа по протоколу XDMCP).
Display Server
Display Server — это некий фундамент графики, основная задача которого — работать с видеокартой, монитором и с различными устройствами ввода (клавиатура, мышь, тачпады). То есть приложению (например, браузер или текстовый редактор), которое отрисовывается в «графике», не нужно знать, как напрямую работать с устройствами, не нужно знать про драйверы. Это всё на себя берет X Window.
Когда говорится про Display Server, то много лет в Linux, да и в Unix имелось в виду приложение X Window System или в простонародье X (Иксы).
Сейчас во многих дистрибутивах на смену X внедряют Wayland.
Также можно почитать:
Практикум «запускаем Х и приложения в нём»
Выполнять всё буду от свежесозданного пользователя webinaruser (проще, но не безопаснее было бы всё выполнить от root’а).
Посмотреть список запущенных X’ов можно так:
После того, как задали переменную, можно запускать приложения в наши X’ы — например, запускаю часы:
Основные идеи и выводы из этого фрагмента:
Компоненты DE
Далее разберём компоненты, из которых обычно состоит рабочий стол.
Компоненты DE: кнопка «Пуск» и «Панель задач»
Начнём с так называемой кнопки «Пуск». Часто это отдельный апплет, используемый на «Панели задач». Также там обычно имеется апплет для переключения между запущенными приложениями.
Посмотрев на разные среды рабочих столов, я обобщил бы подобные приложения под общим названием «Apps Manager (Launcher/Switcher)», то есть инструмент для управления приложениями (запуска и переключением между запущенными), а также укажу утилиты, которые являются примером приложения данного типа.
Компоненты DE: WM (Window Manager)
WM (Оконный менеджер) — некое приложение, которое отвечает за управление окнами, добавляет возможность:
Перечислю наиболее известные (в круглых скобках указываю, в каком DE используется по умолчанию):
Также перечислю «старые WM с элементами DE». Т.е. помимо оконного менеджера в них имеются элементы типа кнопки «Пуск» и «Панели задач», более присущие полноценным DE. Хотя какие они «старые», если и IceWM, и WindowMaker уже выпустили свои обновлённые версии в 2020 году. Получается, что корректнее не «старые», а «старожилы»:
Помимо «классических» («стековых оконных менеджеров») стоит отдельно отметить тайловые WM, которые позволяет размещать окна «черепицей» по всему экрану, а также для некоторых приложений отдельный рабочий стол для каждого запускаемого приложения на весь экран. Это немного непривычно для людей, ранее их не использовавших, но так как я сам достаточно давно использую такой интерфейс, могу сказать, что это вполне удобно и быстро привыкаешь к такому интерфейсу, после чего уже «классические» оконные менеджеры не кажутся удобными.
Также стоит отдельно упомянуть проект Compiz и такое понятие, как «Композитный менеджер окон», использующий возможности аппаратного ускорения для отображения прозрачности, теней, различных трёхмерных эффектов. Около 10 лет назад был бум 3D-эффектов на Linux-десктопах. Сейчас многие из оконных менеджеров, встроенных в DE, частично используют композитные возможности. Недавно появился Wayfire — продукт с аналогичным Compiz функционалом под Wayland.
Подробный список различных оконных менеджеров также можно посмотреть в статье-сравнении.
Компоненты DE: остальные
Также стоит отметить следующие компоненты рабочего стола (здесь использую английские устоявшиеся термины для описания разновидности приложения — это не названия самих приложений):
DE (Desktop Environment)
Из перечисленных выше компонентов получается так называемая «Среда оформления рабочего стола». Часто все её компоненты разрабатываются с использованием одних и тех же графических библиотек и с использованием одинаковых принципов оформления. Тем самым, как минимум, выдерживается общий стиль для внешнего вида приложений.
Здесь можно выделить следующие существующие на данный момент среды рабочего стола:
Сравнение по различным параметрам в виде таблицы можно посмотреть в соответствующей статье Википедии.
Многообразие DE
Даже есть такие интересные примеры уже из истории: в 2003-2007 годах для Linux было сделано «3D-оформление рабочего стола» с названием «Project Looking Glass» от фирмы Sun. Я сам пользовался этим рабочим столом, точнее «игрался», так как пользоваться было тяжело. Это «3D-оформление» было написано на Java во времена, когда не было ещё видеокарт с поддержкой 3D. Потому все эффекты пересчитывались процессором, и компьютер должен был быть очень мощным, иначе все работало медленно. Но зато получалось красиво. Трёхмерные плашки приложений можно было поворачивать/разворачивать. Можно было поворачиваться в цилиндре рабочего стола с обоями из панорамы в 360 градусов. Было несколько своих красивых приложений: например, прослушивание музыки в виде «смены CD-дисков» и т. д. Можно на youtube посмотреть видео про этот проект, только качество этих видео скорее всего будет плохим, так как в те годы не было возможности загрузить видео высокого качества.
Легковесный рабочий стол. Существует проект достаточно давно, с 1996 года. В последние годы достаточно популярен, в противовес более тяжёлым KDE и GNOME, на многих дистрибутивах которым требуется лёгкий и «классический» интерфейс рабочего стола. В нем имеется много настроек и большое количество своих программ: терминал (xfce4-terminal), файловый менеджер (thunar), просмотрщик картинок (ristretto), текстовый редактор (mousepad).
Используется в дистрибутиве «Elementary OS». Тут можно сказать, что есть «рабочие столы», которые разрабатываются и используются в рамках одного отдельного дистрибутива и не сильно используются (если не сказать «совсем не используются») в других дистрибутивах. По крайней мере они пока не набрали популярность и не убедили большую часть аудитории в преимуществах своего подхода. Pantheon ставит перед собой задачу построить интерфейс, похожий на macOS.
Вариант с dock-панелью:
Сильный уклон в графические эффекты и виджеты (ещё со времён, когда другие рабочие среды не имели виджеты на рабочем столе, например, календарь/часы). Использует свои библиотеки. Имеется большой набор своих «красивых» приложений: терминал (Terminology), видеоплеер (Rage), просмотр картинок (Ephoto).
Это форк Enlightenment17, который используется в дистрибутиве BodhiLinux.
Изначально «классический» интерфейс рабочего стола, созданный в противовес KDE, который был написан на библиотеке Qt, на тот момент распространяющийся по лицензии, не очень удобной для коммерческих дистрибутивов.
С третьей версии GNOME стал поставляться с оболочкой GNOME Shell, имеющей «неклассический вид», что понравилось не всем пользователям (любые резкие изменения в интерфейсах пользователями сложно принимаются). Как следствие — появление форк-проектов, продолжающих развитие этого рабочего стола в «классическом» стиле: MATE и Cinnamon. Используется по умолчанию во многих коммерческих дистрибутивах. Имеет большое количество настроек и своих приложений.
Дополнение: Рекомендую к просмотру очень хорошую ретроспективу «как менялся внешний вид и функционал оболочки GNOME»: История GNOME (Видео)
Появилась на основе GNOME2 и продолжает развитие этой среды оформления. Имеет большое количество настроек и форков приложений, которые использовались еще в GNOME2 (употребляются новые имена) для того, чтобы не путать форки с их новой версией для GNOME3.
Форк GNOME Shell, предоставляющий пользователям интерфейс в «классическом» стиле (как это было в GNOME2).
Имеет большое количество настроек и те же приложения, что и для GNOME Shell.
Форк GNOME в «классическом» стиле, который развивался в рамках дистрибутива Solus, но сейчас также поставляется в рамках самостоятельного рабочего стола на различных других дистрибутивах.
KDE_Plasma (или, как часто называют, просто KDE)
Среда рабочего стола, развиваемая в рамках проекта KDE.
Имеет огромное количество настроек, доступных простому пользователю из графического интерфейса и много графических приложений, развиваемых в рамках этого рабочего стола.
Дополнение: Рекомендую к просмотру ретроспективу «как менялся внешний вид и функционал оболочки KDE»: История KDE (Видео)
В 2008 году KDE выпустила свою новую реализацию KDE Plasma (был сильно переписан движок рабочего стола). Также, как и с GNOME/MATE, не всем фанатам KDE это понравилось. В результате появился форк проекта, продолжающий развитие предыдущей версии, под названием TDE (Trinity Desktop Environment).
Одна из новых сред рабочего стола, написанная с использованием Qt (на котором написан KDE). Имеет много настроек и достаточно красивый (хотя это субъективное понятие) и проработанный интерфейс. Разрабатывается в рамках дистрибутива Deepin Linux. Также есть пакеты под другие дистрибутивы
Пример среды рабочего стола, написанной с использованием Qt. Разрабатывается в рамках дистрибутива Astra Linux.
Легковесная среда рабочего стола. Как и несколько предыдущих примеров, написана с использованием Qt. Фактически является продолжением проекта LXDE и результатом объединения с проектом Razor-qt.
Как видите, рабочий стол в Linux может выглядеть очень по-разному и на вкус любого здесь найдётся подходящий интерфейс: от очень красивых и с 3D-эффектами до минималистических, от «классических» до необычных, от активно использующих ресурсы системы до легковесных, от больших экранов до планшетов/смартфонов.
Ну и хочется надеяться, что у меня получилось дать представление о том, из каких основных компонентов состоит графика и рабочий стол в ОС Linux.
Материал для этой статьи был обкатан в июле 2020 года на вебинаре. Его можно посмотреть здесь.
На этом всё. Надеюсь, было полезно. Если есть какие-то вопросы и комментарии, пишите. Буду рад ответить. Ну и приходите учиться в «Сетевую Академию ЛАНИТ»!