Разное

Оболочка linux: Оболочка пользователя Linux ( shell )

Содержание

Оболочка пользователя Linux ( shell )











&nbsp &nbsp
Операционные системы семейства Linux, как впрочем, и любые другие ОС,
предполагают наличие интерфейса взаимодействия между компонентами
компьютерной системы и конечным пользователем, т. е. наличие программного
уровня, который обеспечивает ввод команд и параметров для получения желаемых
результатов. Такой программный уровень получил название «оболочка»
или, на английском языке — shell.

Что такое оболочка ?

Командная оболочка ( shell ) обеспечивает взаимотействие между пользователем и средой операционной системы Linux. Она является специализированным программным продуктом, который обеспечивает выполнение команд и получения результатов их выполнения, или, если совсем уж упрощенно, оболочка — это программа, которая предназначена для обеспечения выполнения других программ по желанию пользователя. Примером оболочки может быть, например, интерпретатор команд command.com операционной системы MS DOS, или оболочка bash
операционных систем Unix / Linux.

Все оболочки имеют схожие функции и свойства, в соответствием с их основным
предназначением — выполнять команды пользователя и отображать результаты
их выполнения:

— Интерпретация командной строки.

— Доступ к командам и результатам их выполнения.

— Поддержка переменных , специальных символов и зарезервированных слов.

— Обработка файлов, операций стандартного ввода и вывода.

— Реализация специального языка программирования оболочки.

&nbsp &nbsp
Для операционных систем семейства Unix / Linux возможно использование нескольких
различных оболочек, отличающихся свойствами и методами взаимодействия с
системой. Наиболее распространенными оболочками являются

sh — оболочка Bourne , классическая оболочка для ОС Unix

bash оболочка Bourne Again (GNU Bourne-Again SHell). Пожалуй, наиболее распространенная на данный момент, оболочка в среде ОС семейства Linux.

ksh — оболочка Korn, разработанная в качестве развития оболочки
Bourne с историей командной строки и возможностью редактирования команд.

csh — оболочка C, использующая синтаксис популярного языка программирования C

tcsh — версия оболочки C с интерактивным редактированием командной строки.

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

&nbsp &nbsp
В процессе загрузки операционных систем семейства Linux, после загрузки ядра системы выполняется переход в интерактивный режим – режим взаимодействия пользователя и операционной системы. В ОС Linux, первым запускаемым в ходе загрузки процессом, является программа инициализации init, которая считывает содержимое конфигурационного
файла /etc/inittab, определяет перечень и характеристики терминалов, имеющихся в
системе, и вызывает программу интерактивного входа getty, отображающую
приглашение для ввода имени пользователя. После ввода имени пользователя и пароля, программа getty вызывает программу login, которая проверяет достоверность учетной записи, выполняет переход в домашний каталог пользователя и передает управление программе начального запуска сеанса, в качестве которой обычно используется программа оболочки пользователя, конкретная разновидность которой определяется содержимым файла /etc/passwd для данной учетной записи. Например:


user1:x:508:511::/home/user1:/bin/sh

interbase:x:510:511::/home/interbase:/bin/csh

apb:x:511:513:apb:/home/apb:/bin/bash




Как видно из содержимого файла /etc/passwd, для пользователя user1 будет запущена оболочка sh ( оболочка Bourne ), для пользователя interbase — оболочка csh (оболочка C ) и для пользователя apb — оболочка bash ( Bourne Again ). После старта оболочки, на экран выводится приглашение к вводу команд
( обычно в виде знака доллара $, если работа выполняется в контексте учетной записи обычного пользователя , или фунта # , если оболочка используется под учетной записью привилегированного пользователя (root).

При выходе из оболочки, ядро системы возвращает управление программе init, которая перезапускает процесс входа в систему и на терминале отображается приглашение к вводу имени пользователя. Выход из оболочки может быть выполнен одним из двух способов :

— посредством команды exit выполненной пользователем

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



Интерпретация командной строки.

&nbsp &nbsp
Пользовательский ввод в ответ на приглашение оболочки обычно называют
командной строкой или командой.

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

ls -l file01 file02

содержит команду ls, опцию -l и два имени файлов file01 file02 .

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


ls -l -d

ls -ld

Команды, являющиеся частью оболочки, называются встроенными.
К таким командам относятся, например, cd, if, case и т. п.
Естественно, встроенные команды могут отличаться для различных вариантов оболочек. Кроме встроенных команд, возможно использование программных модулей, представляющих собой отдельные исполняемые файлы, или
файлов скриптов или сценариев — обычных текстовых файлов, содержащих последовательно выполняемые строки с командами оболочки. Некоторые скрипты (сценарии) могут выполняться процессами Linux, как например, планировщиком задач
cron. Планировщик задач, как правило, предназначен для автоматического выполнения задач администрирования системы по расписанию. Задачи cron представляют собой команды или скрипты и выполняются автоматически, без какого либо вмешательства человека и могут выполняться в контексте разных учетных записей пользователей. В случае, когда задача планировщика предполагает выполнение какого-либо скрипта, возникает проблема выбора оболочки, которая должна быть запущена в качестве дочернего процесса cron для обработки команд из файла скрипта — ведь оболочка может быть любой, а синтаксис скрипта, как правило, предполагает использование конкретной оболочки, под которую он написан. Для устранения данной проблемы, в ОС семейства Linux принято в первой строке скрипта указывать разновидность оболочки, необходимой для его выполнения, в виде:


#!/bin/bash
— для оболочки bash


#!/bin/sh
— для оболочки sh

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

При выполнении команд или сценариев используются переменные окружения (на английском языке — environment , значения которых характеризуют программную среду, в которой происходит выполнение команд. Такие переменные могут содержать общие настройки системы, параметры графической или командной оболочки, пути исполняемых файлов и т. п. Значения переменных окружения устанавливаются на уровне системы (для всех пользователей) и на уровне конкретного пользователя. Для установки переменных окружения на уровне системы используется содержимое файлов:

/etc/profile — устанавливает переменные только для командных оболочек. Может запускать любые скрипты в оболочках, совместимых с Bourne shell.

/etc/bash.bashrc — устанавливает переменные только для интерактивных оболочек. Он также запускает bash-скрипты.

/etc/environment — используется модулем PAM-env. В этом файле можно указывать только пары имя=значение.

Каждый из этих файлов имеет свои особенности применения, поэтому следует внимательно выбирать тот, который подходит для ваших целей. Например, если нужно добавить пользовательский каталог ~/bin в переменную PATH для всех пользователей, поместите следующий код в один из системных файлов инициализации окружения (/etc/profile или /etc/bash.bashrc):



# Если идентификатор ID пользователя более или равно 1000, и существует каталог ~/bin, и он

#не был ранее добавлен в переменную PATH,

# выполнить экспорт ~/bin в переменную $PATH.

if [[ $UID -ge 1000 && -d $HOME/bin && -z $(echo $PATH | grep -o $HOME/bin)

]]
then

export PATH=$HOME/bin:${PATH}

fi


Как правило, в операционных системах Linux, идентификатор пользователя менее 1000 или менее 500 используется для служебных учетных записей.

В данном примере, переменная окружения будет установлена для всех локальных пользователей системы с идентификатором 1000 или более.

Если же нужно изменить среду окружения для конкретного пользователя, используется модификация содержимого среды окружения пользователя:

~/.bash_profile, ~/.bash_login и т.п. — файлы инициализации командной оболочки из домашнего каталога пользователя.

~/.profile — файл инициализации профиля пользователя. Используется многими оболочками для определения переменных среды.

~/.pam_environment — пользовательский аналог файла /etc/environment, который используется модулем PAM-env.

Например, чтобы добавить каталог пользователя ~/bin в пути поиска исполняемых файлов, заданных переменной PATH, можно например, в файл ~/.profile поместить строку:

export PATH=»${PATH}:/home/пользователь/bin»

Чтобы установить переменные окружения для графических приложений, используется содержимое файлов настройки графической среды пользователей ~/.xinitrc

Гораздо чаще значения переменных окружения задаются для текущего сеанса пользователя. Например, для добавления пользовательского каталога ~/bin в пути поиска исполняемых файлов:

export PATH=~/bin:$PATH

Новое значение переменной PATH будет действовать только до завершения текущего сеанса пользователя.

Для просмотра значения переменной можно использовать команду echo $переменная, например:

echo $PATH

В настоящее время, самой распространенной оболочкой, как уже упоминалось выше, является bash. Вызвано это, в первую очередь тем, что оболочка bash является sh — совместимой командной оболочкой, в которую добавлены полезные возможности из оболочек Korn shell (ksh) и C shell (csh). Оболочка bash может без какой-либо модификации выполнять большинство скриптов, написанных под язык программирования оболочки sh и в максимальной степени пытается приблизиться к стандарту POSIX, что привело к появлению множества улучшений, причем как для программирования, так и использования в интерактивном режиме. В современной реализации bash имеется режим редактирования командной строки, неограниченный размер истории команд, средства управление заданиями, возможность использования псевдонимов, обширный перечень встроенных команд, функции командной оболочки и т.п. В целом, bash в наибольшей степени соответствует потребностям среднестатистического пользователя, что и сделало ее наиболее используемой в среде Linux.

При запуске bash без параметров командной строки, оболочка запускается в интерактивном режиме, отображая на экране приглашение к вводу команд. Интерактивная оболочка обычно читает данные из терминала пользователя и пишет данные в этот же терминал, стандартным устройством ввода является клавиатура, а стандартным устройством вывода – дисплей. Пользователь вводит команды на клавиатуре, а результат их выполнения отображается на дисплее.

Статьи по теме:

Основы работы в командной строке Linux.

Перечень наиболее часто используемых команд Linux.

Если вы желаете помочь развитию проекта, можете воспользоваться кнопкой «Поделиться» для своей социальной сети











В начало страницы &nbsp &nbsp &nbsp | &nbsp &nbsp &nbsp На главную страницу сайта.

6 лучших графических оболочек Linux

Рассказываем о самых удобных и интересных графических оболочках для дистрибутивов Linux.

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

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

Как видите, изделка даже напоминает Windows 7

Тут стоит сразу отметить, что именно полезность для человека стоит во главе угла. Причем под этим человеком подразумевается вообще любой пользователь. Из-за этого KDE Plasma изобилует кучей интересных функций. Например:

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

В общем и целом, визуально KDE частично наследует логику Windows. Внизу находится панель инструментов, где отображаются все запущенные программы. Там же можно закрепить избранные приложения и некоторые виджеты. А в левой части этой панели отображается местный аналог меню «Пуск». Тем, кто только недавно перешел на Linux с Windows, будет гораздо проще освоиться в этой графической оболочке.

Остальные окна располагаются выше, как в системе Microsoft. Более того, они даже ведут себя схожим образом. Есть аналогичная система переключения между рабочими столами.

Это специальная утилита для связки KDE со смартфоном на базе Android

Естественно, как и другие оболочки, KDE может похвастаться коллекцией мультимедийных программ и других базовых инструментов. Имеется собственный браузер, знаменитый проигрыватель Amarok, инструмент для записи файлов на сторонние носители. Короче, есть все необходимое для работы с ПК. Причем гораздо больше, чем получают пользователи Windows и других оболочек Linux.

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

KDE, кстати, можно установить на Windows и на множество Android-смартфонов.

Скачать, конечно же, можно на официальном сайте проекта https://kde.org

KDE входит в состав популярных дистрибутивов типа Kubuntu, openSUSE, Slackware.

Вводим в терминал команду:

sudo apt-get install kubuntu-desktop

Перезагружаем устройство, чтобы изменения вступили в силу. 

Эта оболочка разительно отличается от предыдущей. Там, где KDE пытается не сильно уходить от классики и быть лояльной к пользователям Windows, GNOME идет в совершенно ином направлении и плюет на условности.

Рабочий стол GNOME не похож ни на что из того, что вы видели ранее. Разработчики этой оболочки пришли к совершенно уникальному расположению элементов и их дизайну (по крайней мере, для компьютеров).

Вот это меню явно было позаимствовано из macOS

Первое, на что обращаешь внимание, установив GNOME — отсутствие каких-либо лишних элементов на панели управления. Список запущенных приложений отображается в отдельном меню, виджетов вовсе не существует как класса. Кругом царит минимализм и простота, а многозадачность сводится к одному злополучному меню «Activities», которое многие считают крайне неудобным.

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

Тем не менее (несмотря на свою простоту) невозможно отрицать вклад GNOME в развитие интерфейсов и огромный вклад в развитие Linux. Может, местами решения разработчиков кажутся слегка противоречивыми, но они двигают дизайн рабочих столов вперед и заставляют на многие вещи взглянуть по-новому. К тому же, раньше GNOME куда больше походил на гибрид Windows с macOS нежели на что-то уникальное. А сейчас так вовсе не скажешь.

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

При этом, помимо своей инновационности GNOME может похвастаться целым набором удобных приложений для повседневной работы. В их числе знаменитый почтовый клиент Evolution, браузер Epiphany, программа для работы с таблицами Gnumerics и так далее.

Также стоит отметить, что на базе GNOME построено несколько мощных оболочек, используемых в таких популярных дистрибутивах как Ubuntu (там дополненная версия GNOME 3 распространяется под названием Unity) и Elementary OS (там есть своя оболочка Pantheon, которая по сути является продвинутой надстройкой над GNOME).

Инструкцию по установке GNOME, конечно, можно найти на официальном сайте. Оболочка входит в состав дистрибутивов Fedora, openSUSE, Debian, Ubuntu.

Официальный сайт — https://www.gnome.org

Необходимо открыть терминал и ввести команду:

sudo apt install ubuntu-gnome-desktop

Установка займет около 3 минут.

До выхода третьей версии GNOME выглядел значительно проще. Он комбинировал в себе лучшие решения конкурентов и проповедовал здравый минимализм не в убыток функциональности и удобству. Кардинальные изменения, пришедшие в GNOME 3, отпугнули многих пользователей. Они хотели развивающуюся оболочку, но без чересчур радикальных перевоплощений. Такой и стала MATE.

Это рабочий стол дистрибутива Fedora с оболочкой MATE

MATE практически полностью наследуют дизайн GNOME 2 и копирует базовый набор приложений, входящий в состав рабочего стола. По большому счету изменились только названия. Привычные инструменты, такие как Nautilus, Gedit и Evince превратились в Gaja, Pluma и Atril. В отличие от своих предшественников новые программы выглядят как прежде, но получили ряд новшеств и развитие.

В общем, я бы рекомендовал эту оболочку тем, кто только знакомится с Linux и хочет взглянуть на то, каким он был до массовых перевоплощений. Кроме того, MATE довольно прост в освоении и не напрягает вычурным внешним видом. Эдакая классика. Чисто функционально он не хуже и не лучше, чем тот же GNOME. Просто не такой современный.

Загрузить рабочий стол и ознакомиться с программным обеспечением, которое входит в него, можно на сайте https://mate-desktop.org.

Оболочка поставляется с дистрибутивами Linux Mint (в модификации Cinnamon), Ubuntu MATE и некоторыми редакциями Fedora.

Следует последовательно ввести в терминал следующие команды:

sudo add-apt-repository ppa:jonathonf/mate-1.16
sudo apt update
sudo apt-get install mate-desktop-environment-core mate-desktop-environment-extras

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

Этот вариант рабочего стола заслуживает отдельного внимания, потому что он создан для особой категории людей. Если вы из тех, кто готов заняться изучением документации и тонкой настройкой компьютера, то awesomeWM — то, что вам нужно.

AwesomeWM даже нельзя назвать оболочкой. Это менеджер окон, в котором каждое приложение занимает определенный участок и делит его с другими на одном рабочем столе. В нем нет слоев. То есть одна программа не может перекрыть другую. Рабочий стол имеет только одно единственное «плоское» измерение. Задача AwesomeWM задействовать каждый пиксель экрана максимально толково, чтобы пространство не расходовалось напрасно.

Типичный внешний вид рабочего стола AwesomeWM. Используются в основном текстовые приложения

Отдельно стоит отметить, что AwesomeWM полностью открыт к модификациям за счет бесконечного количества расширений, которые написаны на языке Lua. Это позволит вам самостоятельно дополнять его новыми функциями.

Этот менеджер окон очень стабилен. У него довольно простой код, который почти ничего не может вывести из строя. Он управляется с помощью клавиатуры — разработчики по умолчанию не предусматривают поддержку мыши и всячески призывают пользователей использовать только клавиатуру.

Скачать оболочку можно на официальном сайте: https://awesomewm.org. Там же есть ссылка на документацию, в которой описаны все ее особенности и методы управления.

Установка происходит из репозитория. Открываем терминал и вводим:

sudo apt-get install awesome awesome-extra

На этом все. Перезагружаем систему и радуемся. 

Относительно новая оболочка, которая объединяет в себе простоту, легковесность и функциональность. LXDE тесно взаимосвязана с KDE и использует многие элементы из того монструозного графического окружения.

При этом она потребляет намного меньше ресурсов и делает ставку на простоту. Дистрибутив с LXDE можно запросто запустить на компьютере с 512 мегабайтами оперативной памяти и каким-нибудь стареньким процессором типа Intel Celeron. Все потому, что он модульный и базируется на упрощенном рабочем столе LXQT, который совсем не выглядит привлекательно, но зато быстро работает.

Это один из старых вариантов LXDE, запущенный в операционной системе Debian

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

К сожалению, скорость работы LXDE проявляется только при взаимодействии со встроенными приложениями. Стороннее ПО (типа Firefox) работает жутко медленно и сразу выделяется своей низкой производительностью. Поэтому, чтобы наслаждаться высокой скоростью интерфейса, придется использовать ограниченные встроенные приложения или искать такие же легковесные альтернативы.

Ссылка для скачивания: https://lxde.org/get/

Все, что нужно, это ввести следующую команду в терминал:

sudo apt-get install lxde

Еще одна очень легкая оболочка для рабочего стола, специально разработанная для запуска на старых и слабых компьютерах. В отличие от LXDE, XFCE заимствует меньше чужих элементов и содержит больше своего кода.

Вот так минималистично и приятно выглядит рабочий стол XFCE

XFCE поддерживается сообществом энтузиастов, желающих сделать рабочий стол, которым можно пользоваться на дешевом ноутбуке, не переживая о том, что оболочка сожрет все ресурсы и превратит компьютер в тормозное бесполезное нечто.

Также стоит отметить, что XFCE лучше структурирован и выглядит довольно приятно для глаз. Панель инструментов и большая часть приложений вышли очень даже симпатичными и, несмотря на свою простоту, могут потягаться в плане внешнего вида с MATE и GNOME 3.

XFCE входит в состав дистрибутива Xubuntu. А еще его часто устанавливают в Arch Linux и системы, созданные на его базе.

Познакомиться с рабочим столом поближе можно на официальном сайте https://www.xfce.org.

Вводим в терминал команду:

sudo apt-get install xubuntu-desktop

И ждем окончания загрузки и установки. 

Оценивая удобство и привлекательный вид, я считаю вышеуказанные оболочки для Linux лучшими. Вы можете попробовать разные варианты и остановится на наиболее предпочтительном — благо, что установка оболочки обычно не занимает более 5 минут. Удачи! 

 Загрузка …



Post Views:
750

Bash – командная оболочка Linux. Курс «Введение в Linux и Bash»

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

Курс с ответами к заданиям и дополнительными уроками:
android-приложение, pdf-версия.

Как определить и изменить командную оболочку (shell) в Linux. Linux статьи

Что такое командная оболочка

Командная оболочка или командный интерпретатор в Linux — это программа, которая в текстовой среде выступает в качестве интерфейса между пользователем и операционной системой. Она интерпретирует вводимые команды с терминала и вызывает необходимые программы.

Когда вы работаете в терминале, именно командная оболочка обрабатывает вводимые вами команды. Более того, оболочки Linux поддерживают написание программ на языке оболочки.

Оболочки Linux

Одна из самых популярных командных оболочек — это оболочка Bash (Bourne Again Shell). Она используется по умолчанию в большинстве дистрибутивов Linux.

Существуют разные оболочки Linux. Можно отметить:

  • bash
  • csh
  • dash
  • fish
  • ksh
  • pdksh
  • rbash
  • sh
  • tcsh
  • zsh

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

Как определить текущую командую оболочку

Есть несколько способов определить оболочку, используемую по умолчанию в вашей системе Linux. Рассмотрим несколько из них, так как в разных системах (и оболочках) какие-то способы могут не сработать.

Также нужно знать, что у разных пользователей системы могут использоваться разные оболочки.

Способ 1

Переменная окружения SHELL хранит путь до исполняемого файла оболочки. Выполним команду:

echo $SHELL
/bin/bash

Из вывода команды, мы видим, что используется оболочка bash.

Способ 2

Также можно воспользоваться командой echo $0. Данная команда выведет на экран имя текущего работающего процесса, внутри которого она выполнена. Так как мы выполняем команду внутри оболочки, то будет выведено имя оболочки.

echo $0
bash

Способ 3

Определим, работающий процесс оболочки командой ps.

ps -p $$
PID TTY TIME CMD
10792 pts/3 00:00:00 bash

Как посмотреть список оболочек, доступных в системе

Список оболочек, которые в данный момент установлены и доступны в системе Linux, хранится в файле /etc/shells

Выведем содержимое файла /etc/shells, для этого выполняем команду:

cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/bin/rbash
/bin/dash

Как временно переключиться на другую оболочку

Чтобы временно переключиться на другую оболочку, достаточно выполнить в терминале команду, соответствующую ее имени. После этого вы переключитесь на новую оболочку.

Например, переключимся на оболочку sh. Выполняем команду:

sh

Как изменить оболочку

Для изменения командной оболочки на постоянной основе служит команда chsh (от слов change shell).

Чтобы изменить оболочку текущего пользователя нужно выполнить команду:

chsh -s путь_новой_оболочки

В качестве параметра путь_новой_оболочки необходимо указать путь до исполняемого файла оболочки, который вы можете найти в файле /etc/shells (см. выше).

Например, изменим оболочку на sh. Для этого выполняем команду (при выполнении команды нужно будет ввести пароль):

chsh -s /bin/sh

После этого нужно выйти и снова войти в систему.

Чтобы изменить оболочку, используемую по умолчанию, для другого пользователя, то команде chsh необходимо указать имя этого пользователя:

chsh -s /bin/sh yuriy

Заключение

Мы рассмотрели, как определить текущую оболочку Linux, как просмотреть список доступных оболочек, а также как изменить оболочку, используемую по умолчанию.

Чтобы получить информацию о какой-либо оболочке (доступной в системе) можно воспользоваться Man-страницами. Например:

man rbash

Дополнительные оболочки можно устанавливать средствами системы (из репозиториев). Например, для установки оболочки fish в Ubuntu Linux, выполните команду

sudo apt install fish

Считывание и настройка переменных оболочки и окружения в Linux

Введение

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

Одним из способов, с помощью которого оболочка следит за всеми этими настройками и данными, состоит в использовании области, которая называется окружением. Окружение — это область, которую оболочка создает каждый раз при запуске сеанса, где содержатся переменные, определяющие свойства системы.

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

Как работают окружение и переменные окружения

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

Окружение предоставляет среду, через которую процесс оболочки может получать или задавать настройки и, в свою очередь, передавать эти настройки его дочерним процессам.

Окружение реализуется в виде строк, которые содержат пары ключ-значение. Если передается несколько значений, они обычно разделяются двоеточием (:). Каждая пара, как правило, выглядит следующим образом:

KEY=value1:value2:...

Если значение содержит значительное количество пробелов, используются кавычки:

KEY="value with spaces"

Ключи в этих случаях являются переменными. Они могут относиться к одному из двух типов: переменные окружения или переменные оболочки.

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

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

Согласно конвенции эти типы переменных обычно определяются с помощью заглавных букв. Это помогает пользователям различать переменные окружения внутри других контекстов.

Вывод переменных оболочки и окружения

Каждый сеанс оболочки отслеживает собственные переменные оболочки и окружения. Мы можем получить доступ к этим переменным разными способами.

Мы можем просмотреть список всех наших переменных окружения с помощью команд env или printenv. В состоянии по умолчанию они должны работать одинаково:

Output

SHELL=/bin/bash TERM=xterm USER=demouser LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca:... MAIL=/var/mail/demouser PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games PWD=/home/demouser LANG=en_US.UTF-8 SHLVL=1 HOME=/home/demouser LOGNAME=demouser LESSOPEN=| /usr/bin/lesspipe %s LESSCLOSE=/usr/bin/lesspipe %s %s _=/usr/bin/printenv

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

Output

/bin/bash

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

  • env VAR1="value" command_to_run command_options

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

Как вы можете видеть в выводе команды printenv, в системных файлах и процессах существует небольшое количество переменных окружения, доступных без нашего ввода.

Эти команды отображают переменные окружения, но как мы можем просмотреть переменные оболочки?

Для этого вы можете использовать команду set. Если мы введем команду set без каких-либо дополнительных параметров, то получим список всех переменных оболочки, переменных окружения, локальных переменных и функций оболочки:

Output

BASH=/bin/bash BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() . . .

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

Количество дополнительной информации, которую мы получаем, немного ошеломляет. Нам, скорее всего, не нужно знать, например, все функции bash, которые определены.

Мы можем очистить вывод, указав, что команда set должна работать в режиме POSIX, которые не подразумевает вывода функций оболочки. Также эту команду можно выполнить в субоболочке, чтобы не менять наше текущее окружение:

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

Мы можем попытаться сравнить данный вывод с выводом команд env или printenv, чтобы получить список исключительно переменные оболочки, но этот список будет несовершенен из-за того, что эти команды отображаются информацию по-разному:

  • comm -23 <(set -o posix; set | sort) <(env | sort)

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

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

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

Стандартные переменные окружения и оболочки

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

  • SHELL: описывает оболочку, где будет выполняться интерпретация любых команд, которые вы вводите. В большинстве случаев по умолчанию будет использоваться bash, но другие значения можно установить, если вы предпочитаете использовать другие варианты.
  • TERM: указывает тип терминала, который будет использоваться при запуске оболочки. Различные аппаратные терминалы могут имитироваться согласно различным операционным требованиям. Скорее всего вам не придется думать об этом.
  • USER: текущий пользователь, для которого выполнен вход.
  • PWD: текущий рабочий каталог.
  • OLDPWD: предыдущий рабочий каталог. Эта информация сохраняется оболочкой, чтобы выполнять переход к предыдущему каталогу с помощью команды cd -.
  • LS_COLORS: цветовые коды, которые используются для опционального добавления цветного вывода для команды ls. Эта команда используется для выделения различных типов файлов и предоставления пользователю большего количества информации при беглом просмотре.
  • MAIL: путь к почтовому ящику текущего пользователя.
  • PATH: список каталогов, которые система будет проверять при поиске команд. Когда пользователь вводит команду, система будет проверять каталоги в указанном здесь порядке при поиске исполняемого файла.
  • LANG: текущий язык и настройки локализации, включая кодирование символов.
  • HOME: домашний каталог текущего пользователя.
  • _: последняя предыдущая выполненная команда.

Помимо этих переменных окружения существует ряд переменных оболочки, с которыми вы будете часто встречаться:

  • BASHOPTS: список опций, которые использовались при исполнении bash. Это может быть полезно, если вам нужно узнать, будет ли окружение оболочки работать так, как вы хотите.
  • BASH_VERSION: используемая версия bash, описанная в понятной человеку форме.
  • BASH_VERSINFO: версия bash в машиночитаемом виде.
  • COLUMNS: количество столбцов, используемых для отображения вывода на экране.
  • DIRSTACK: стек каталогов, доступных с помощью команд pushd и popd.
  • HISTFILESIZE: количество строк истории команды, хранящейся в файле.
  • HISTSIZE: количество строк истории команды, допустимое для хранения в памяти.
  • HOSTNAME: имя хоста компьютера в настоящий момент.
  • IFS: внутренний разделитель поля для выделения ввода в командной строке. По умолчанию используется пробел.
  • PS1: определение первичного приглашения ввода. Эта опция используется для определения того, как будет выглядеть ваше приглашение при запуске сеанса оболочки. PS2 используется для объявления вторичного приглашения для случаев, когда команда использует несколько строк.
  • SHELLOPTS: опции оболочки, которые можно задать с помощью опции set.
  • UID: уникальный идентификатор текущего пользователя.

Настройка переменных оболочки и окружения

Чтобы лучше понять разницу между переменными оболочки и окружения, а также для знакомства с синтаксисом, используемым для настройки этих переменных, мы воспользуемся небольшой демонстрацией.

Создание переменных оболочки

Мы начнем с определения переменной оболочки внутри нашего текущего сеанса. Сделать это достаточно просто; нам нужно указать только имя и значение. Мы будем придерживаться конвенции по использованию исключительно заглавных букв в имени и зададим для него в качестве значения простую строку.

Здесь мы использовали кавычки, поскольку значение нашей переменной содержит пробел. Кроме того, мы использовали одинарные кавычки, потому что восклицательный знак — это специальный символ оболочки bash, который обычно использует историю bash, если не воспользоваться экранированием или одинарными кавычками.

Теперь у нас есть переменная. Эта переменная доступна в нашем текущем сеансе, но она не будет передаваться дочерним процессам.

Мы можем увидеть это, выполнив с помощью команды grep поиск новой переменной в выводе set:

Output

TEST_VAR='Hello World!'

Мы можем убедиться, что это не переменная окружения, попробовав выполнить то же самое действие для команды printenv:

Вывод должен быть пустой.

Давайте воспользуемся этим как возможностью продемонстрировать способ получения доступа к значению любой переменной оболочки или окружения.

Output

Hello World!

Как вы можете видеть, сослаться на значение переменной можно, добавив перед ее именем знак $. Оболочка в результате понимает, что при обнаружении этой конструкции следует подставить значение переменной.

Теперь у нас есть переменная оболочки. Она не должна передаваться каким-либо дочерним процессам. Мы можем развернуть новую оболочку bash, используя для этого текущую оболочку, чтобы продемонстрировать это:

Если мы введем bash, чтобы развернуть дочернюю оболочку, а затем попробуем получить доступ к содержимому переменной, значение не будет возвращено. Именно этого мы и ожидали.

Вернитесь к нашей оригинальной оболочке, введя exit:

Создание переменных окружения

Теперь давайте превратим нашу переменную оболочки в переменную окружения. Мы можем сделать это с помощью экспорта переменной. Команда для выполнения этой задачи имеет соответствующее название:

Наша переменная будет превращена в переменную окружения. Мы можем убедиться в этом, снова проверив наш список переменных окружения:

Output

TEST_VAR=Hello World!

В этот раз наша переменная отображается в списке. Давайте повторим наш эксперимент с дочерней оболочкой:

Output

Hello World!

Отлично! Наша дочерняя оболочка получила переменную, настроенную в родительской оболочке. Перед тем как выйти из дочерней оболочки, давайте попробуем экспортировать другую переменную. Мы можем задать переменные окружения за один шаг, например:

  • export NEW_VAR="Testing export"

Проверьте, что переменная успешно была экспортирована в окружение:

Output

NEW_VAR=Testing export

Теперь давайте вернемся в нашу оригинальную оболочку:

Давайте посмотрим, доступна ли наша новая переменная:

Ничего не возвращается.

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

Переменная NEW_VAR была установлена в качестве переменной окружения в нашей дочерней оболочке. Эта переменная будет доступна из своей оболочки и любой из ее дочерних оболочек и процессов. Когда мы вышли обратно в нашу основную оболочку, это окружение было уничтожено.

Понижение и сброс переменных

Наша переменная TEST_VAR все еще определена в качестве переменной окружения. Мы можем превратить ее обратно в переменную оболочки, введя следующую команду:

Она больше не является переменной окружения:

Однако она все еще сохранила статус переменной оболочки:

Output

TEST_VAR='Hello World!'

Если мы хотим полностью сбросить переменную, как оболочки, так и окружения, мы можем сделать это с помощью команды unset:

Мы можем убедиться, что эта переменная больше не задана:

Ничего не возвращается, потому что переменная была сброшена.

Настройка переменных окружения во время входа

Мы уже упоминали, что многие программы используют переменные окружения для определения специфики своей работы. Мы не хотим задавать важные переменные каждый раз при запуске нового сеанса оболочки, и мы уже видели, сколько переменных уже задано при входе. Так как же мы можем создавать и определять переменные автоматически?

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

Разница между сеансами оболочки входа, без входа, интерактивными и неинтерактивными сеансами

Оболочка bash считывает разные файлы конфигурации в зависимости от того, как запускается сеанс.

Одно из различий между сеансами заключается в том, что оболочка запускается в рамках сеанса входа или без входа.

Оболочка входа — это сеанс оболочки, начинающийся с аутентификации пользователя. Если вы выполняете вход в сеанс терминала или через SSH с аутентификацией, ваш сеанс оболочки будет настроен в виде оболочки со входом.

Если вы запускаете новый сеанс оболочки внутри аутентифицированного сеанса, как мы уже делали, вызывая команду bash из терминала, запускается сеанс оболочки без входа. При запуске вашей дочерней оболочки вам не потребовалось вводить данные для аутентификации.

Еще одним отличием, которое можно отметить, является интерактивный или неинтерактивный характер сеанса оболочки.

Интерактивный сеанс оболочки — это сеанс оболочки, прикрепленный к терминалу. Неинтерактивный сеанс оболочки не прикреплен к сеансу терминала.

Таким образом, каждый сеанс оболочки классифицируется либо как сеанс входа или без входа, либо как интерактивный или неинтерактивный.

Обычный сеанс, который начинается с SSH, как правило, представляет собой интерактивный сеанс входа. Скрипт, запускаемый из командной строки, обычно запускается в неинтерактивном сеансе без входа. Сеанс терминала может быть иметь любое сочетание этих двух параметров.

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

Сеанс, запускаемый в виде сеанса входа, будет считывать данные конфигурации сначала из файла /etc/profile. Затем он будет искать первый файл конфигурации сеанса входа в домашнем каталоге пользователя, чтобы получить данные конфигурации для конкретного пользователя.

Сеанс считывает первый из файлов ~/.bash_profile, ~/.bash_login и ~/.profile, который ему удается найти, и не считывает остальные файлы.

В отличие от этого сеанс, определенный в оболочке без входа, будет читать файл /etc/bash.bashrc и затем использовать файл ~/.bashrc конкретного пользователя для создания окружения.

Неинтерактивные оболочки считывают значение переменной окружения BASH_ENV и указанный в нем файл для определения нового окружения.

Реализация переменных окружения

Как вы можете видеть, существует множество разных файлов, которые часто требуется просмотреть при определении наших настроек.

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

К счастью, большинство дистрибутивов Linux позволяют настраивать файлы конфигурации входа для использования файлов конфигурации без входа. Это означает, что вы можете определить переменные окружения, которые вы хотите использовать в обоих случаях, только в файлах конфигурации без входа. Затем эти файлы будут считываться в обоих сценариях.

Чаще всего мы будем настраивать переменные окружения для конкретного пользователя, и наши настройки, как правило, будут доступны в оболочках как со входом, так и без входа. Это означает, что лучше всего использовать для определения этих переменных файл ~/.bashrc.

Откройте этот файл:

Скорее всего, он уже содержит довольно большое количество данных. Большинство определений здесь предназначены для настройки опций bash, которые не имеют отношения к переменным окружения. Вы можете задать переменные окружения таким же образом, как вы делали это в командной строке:

Любые новые переменные окружения можно добавить в любое место файла ~/.bashrc при условии, что они не помещаются внутри другой команды или цикла. Сохраните и закройте файл. В следующий раз при запуске сеанса оболочки ваше объявление переменной окружения будет считываться и передаваться в среду оболочки. Вы можете заставить ваш текущий сеанс считать файл прямо сейчас, введя следующую команду:

Если вам потребуется задать общесистемные переменные, вы можете рассмотреть возможность их добавления в файлы /etc/profile, /etc/bash.bashrc или /etc/environment.

Заключение

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

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

Существует много других, более простых, но очень распространенных сценариев, где вам может потребоваться считывать или изменять окружение вашей системы. Эти инструменты и техники могут послужить хорошей основой для внесения этих изменений и их корректного использования.

Настройка оболочки | Linux | Рецепты Linux

Оболочка предоставляет множество механизмов для создания индивидуальных условий для работы. Как говорилось выше, оболочка═ — это больше, чем интерпретатор команд. Оболочка является также мощным языком программирования. Методика написания скриптов командной оболочки═ — отдельная большая тема; здесь будут даны лишь отдельные способы, с помощью которых можно привлечь развитые возможности командной оболочки для облегчения работы в системе Linux.

Как указывалось выше, при выполнении скриптов различные оболочки используют различный синтаксис. Например, оболочка tcsh использует синтаксис, похожий на язык программирования C, тогда как оболочка bash использует синтаксис другого типа. В данном разделе эти различия не будут очень существенными, однако все же предполагается, что скрипты будут исполняться оболочкой bash.

Скрипты командной оболочки

Допустим, что вам часто приходится выполнять некоторую последовательность команд, и вы хотите сократить время ввода команд, сгруппировав их в одну «команду». Например, для объединения файлов chapter1, chapter2 и chapter3 в файл с именем book, выдачи количества строк и печати этого файла будет использоваться последовательность из трёх команд:

/home/larry# cat chapter1 chapter2 chapter3 $>$ book 
/home/larry# wc -l book /home/larry# lp book 

Вместо того, чтобы вводить эти три команды с клавиатуры, их можно объединить в скрипт командной оболочки (shell script). Скрипт, который будет исполнять эти три команды, будет выглядеть примерно так:

#!/bin/sh 
# Скрипт для создания и печати книги cat chapter1 
chapter2 chapter3 > book wc -l book lp book 

Скрипты командной оболочки являются обычными текстовыми файлами; их можно создавать текстовыми редакторами, такими как emacs или vi.

Рассмотрим этот скрипт. Первая строка #!/bin/sh идентифицирует этот файл как скрипт и сообщает командной оболочке, как его исполнять. Эта строка сообщает оболочке, что этот файл надо передать на исполнение программе /bin/sh, т. е. самой программной оболочке. Данная строка будет важной потому, что в большинстве систем Linux файл /bin/sh содержит оболочку типа bash, например, bash, и данная строка принуждает работающую в системе оболочку выполнять этот скрипт, используя синтаксис, принятый в оболочке bash (а не синтаксис на основе языка C, к примеру). Даже если в качестве стартовой оболочки (login shell) используется tcsh, с данной строкой этот скрипт будет выполняться оболочкой bash.

Вторая строка является комментарием (comment). Комментарии начинаются символом # и продолжаются до конца строки. Командная оболочка комментарии игнорирует. Обычно комментарии используются для того, чтобы указывать назначение скрипта и делать его более понятным.

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

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

/home/larry# chmod u+x makebook 

Эта команда даст вам право на исполнение скрипта в файле makebook.

Теперь для исполнения всех команд скрипта достаточно одной команды

/home/larry# makebook 

Переменные оболочки и окружение

Подобно большинству языков программирования, командные оболочки позволяют создавать переменные (variables). Переменная═ — это просто некоторые данные, которым дано имя.

Оболочка tcsh, а также другие оболочки с синтаксисом, основанным на языке C, для создания переменных используют механизм, отличный от описываемого здесь. Приводимые примеры относятся к оболочке типа bash, например, bash. Подробности можно найти в экранной документации к программе tcsh.

В следующем примере показывается, как переменной присваивается значение оператором = и как можно извлекать это значение, приписывая символ $ перед именем переменной.

/home/larry# foo="hello there" 

Переменной foo присваивается значение hello there. Теперь это значение можно извлечь из переменной, приписав перед именем символ $. Например команда

/home/larry# echo $foo 
hello there 
/home/larry# 

даст те же результаты, что и команда

/home/larry# "hello there" 
hello there 
/home/larry# 

Такие переменные являются внутренними переменными оболочки, что означает, что к ним имеет доступ лишь командная оболочка. Это может быть полезно при написании скриптов: если нужно, например, проследить за файлом с некоторым именем, это имя можно присвоить некоторой переменной и действовать, как было показано выше. Вывести список всех созданных переменных оболочки можно командой set.

Кроме этого, оболочка позволяет экспортировать (export) переменные во (внешнее) окружение (environment). Окружение представляет собой набор переменных, к которым имеют доступ все исполняемые команды. После того, как переменная, созданная внутри командной оболочки, экспортирована, она также становится частью окружения. Для экспортирования переменных используется команда export.

Здесь опять имеются различия между командными оболочками bash и tcsh. Если используемой оболочкой является tcsh, то для установки переменных окружения используется другой синтаксис (а именно — команда setenv). Более подробно об этом написано в экранной документации к программе tcsh.

Окружения играют очень важную роль в системе UNIX. Задавая некоторые переменные окружения, которые известны определённым командам, можно конфигурировать эти команды.

Приведём простой пример. Переменная окружения PAGER используется командой man и указывает, что надо выводить экранную документацию по одному экрану за один раз. Если установить значением переменной PAGER имя некоторой команды, то она будет использоваться для вывода документации на экран вместо команды more, используемой по умолчанию.

Установим, например, для переменной PAGER значение cat. При этом вывод команды man станет выводиться на экран сразу целиком, а не страница за страницей. Продемонстрируем это. Сначала переменной присваивается значение:

/home/larry# PAGER=cat 

Потом переменную PAGER надо экспортировать.

/home/larry# export PAGER 

Теперь переменная PAGER стала частью окружения. Можно попробовать ввести команду man ls. При этом экранная документация целиком промелькнёт по экрану, вместо того, чтобы выдаваться экран за экраном с приглашением.

Изменим теперь значение переменной PAGER на more. Теперь для вывода документации будет использоваться команда more:

/home/larry# PAGER=more 

Заметим, что теперь после изменения значения переменной PAGER команду export использовать не нужно: переменная экспортируется один раз, и все изменения в ней, сделанные после этого, автоматически распространяются на окружение.

Для того, чтобы оболочка не трактовала некоторые символы как специальные, часто строки приходится заключать в кавычки. Например, для того, чтобы оболочка не интерпретировала некоторым специальным образом символы *, ? или пробелы, используются кавычки. Есть ещё много символов, которые надо защищать от интерпретирования. Подробное объяснение этой процедуры даётся в документе Bourne Shell Tutorial (Учебник по оболочке bash), изданном компанией SSC.

Экранная документация укажет также, использует ли команда какие-либо переменные окружения. Например, экранная документация к команде man объясняет, что для назначения программы постраничной выдачи используется переменная PAGER.

Иногда несколько команд используют одну и ту же переменную окружения. Например, многим командам нужна переменная окружения EDITOR, чтобы определить имя редактора, вызываемого (когда требуется) по умолчанию.

Окружение также используется для того, чтобы следить за важной информацией о сеансе работы в системе (login session). Примером может служить переменная окружения HOME, которая содержит имя вашего домашнего каталога (home directory):

/home/larry/papers# echo $HOME 
/home/larry 

Ещё одна интересная переменная окружения — PS1, определяющая вид основного приглашения оболочки. Ей можно присвоить новое значение:

/home/larry# PS1=" Your command, please: " 
Your command, please: 

Для того, чтобы оболочка не трактовала некоторые символы как специальные, часто строки приходится заключать в кавычки. Например, для того, чтобы оболочка не интерпретировала некоторым специальным образом символы *, ? или пробелы, используются кавычки. Есть ещё много символов, которые надо защищать от интерпретирования. Подробное объяснение этой процедуры даётся в экранной документации по bash.

Your command, please: PS1= "\w# " 
/home/larry# 

О синтаксисе, использованном в этой команде, можно прочитать в экранной документации к bash.

Переменная окружения PATH

Допустим вы вводите команду ls. Каким образом, по вашему мнению, оболочка находит исполняемый файл ls? Ответ будет таков: в большинстве случаев исполняемый файл ls находится в каталоге /bin, а командная оболочка использует переменную PATH для поиска исполняемых файлов, соответствующих вводимым командам, и в этой переменной указан нужный путь.

Например, значение переменной PATH может быть таким:

/bin:/usr/bin:/usr/local/bin:. 

Это список каталогов, разделённых символом :, в которых командная оболочка будет производить поиск. Когда вводится команда ls, оболочка сначала пытается найти файл /bin/ls, затем — /usr/bin/ls и т. д.

Отметим, что значение переменной PATH влияет только на поиск исполняемых файлов. Например, если вводится команда

/home/larry\# cp foo bar 

то оболочка не использует переменную PATH для того, чтобы найти файлы foo и bar — т. е. она считает, что эти имена являются полными. Только при поиске исполняемого файла cp будет использоваться переменная PATH.

Подобная система сохраняет время пользователя и позволяет ему не задумываться о том, где хранятся исполняемые файлы для вводимых им команд. В большинстве систем исполняемые файлы рассеяны по большому количеству каталогов, таких как /usr/bin, /bin, /usr/local/bin. Вместо того, чтобы каждый раз вводить полный путь к исполняемому файлу команды (например, /usr/bin/cp), можно указать список каталогов в переменной PATH, и оболочка будет автоматически просматривать этот список.

Обращаем внимание, что в списке переменной PATH есть ., что обозначает текущий каталог. Это позволяет создавать скрипт или программу и запускать их как команду из текущего каталога, не указывая пути к файлу (например как ./makebook). Если каталог (в том числе и текущий) не находится в списке переменной PATH, то оболочка не будет его просматривать в поиске исполняемого файла.

Скрипты инициализации командных оболочек

Помимо создаваемых вами скриптов командной оболочки, имеется несколько скриптов, которые использует для некоторых целей сама командная оболочка. Наиболее важными из них являются скрипты инициализации (initialization scripts). Эти скрипты исполняются при входе пользователя в систему.

По своей сути скрипты инициализации являются обычными скриптами командной оболочки. Однако они производят инициализацию окружения путём автоматического выполнения некоторых команд; все это происходит при входе в систему. Если, например, при каждом входе в систему вы проверяете, не пришло ли сообщение по почте, вам есть смысл поместить эту команду в скрипт инициализации, так чтобы эта команда исполнялась автоматически.

Как оболочка bash, так и оболочка tcsh делают различия между начальной оболочкой (login shell) и другими ситуациями, когда вызывается оболочка. Начальная оболочка вызывается при входе в систему, и, как правило, это единственная оболочка, с которой вы работаете. Однако когда вы временно выходите (shell out) из некоторой программы, например, из редактора vi, запускается другой сеанс (instance) оболочки, который будет отличаться от сеанса начальной оболочки. Кроме того, новый сеанс оболочки автоматически запускается всякий раз, когда нужно исполнить скрипт.

Инициализационными файлами, используемыми оболочкой bash, являются: /etc/profile (создаётся системным администратором и исполняется всеми пользователями оболочки bash при входе в систему), $HOME/.bash_profile (исполняется при запуске оболочки bash) и $HOME/.bashrc (исполняется остальными сеансами оболочки bash). Если файла .bash_profile нет, вместо него исполняется файл .profile.

Оболочка tcsh использует следующие скрипты инициализации: /etc/csh.login (исполняется всеми пользователями оболочки tcsh при входе в систему), $HOME/.tcshrc (исполняется при входе в систему и при каждом запуске tcsh) и $HOME/.login (исполняется при входе в систему вслед за .tcshrc). Если файла .cshrc.

Создание полного руководства к программированию командных оболочек лежит вне задач данной книги. Более полно о создании индивидуального окружения для работы в системе Linux можно из экранной документации к программам bash и tcsh.

Работа в командной оболочке Linux

На сегодняшний день для операционной системы (ОС) Linux существует целый ряд систем, обеспечивающих полноценное и эффективное графическое окружение, упрощающее восприятие, использование, а иногда даже управление ОС. Однако, для администрирования и полного контроля системы самым незаменимым инструментом в Linux, как впрочем и других Unix-подобных систем, является командная оболочка. Стоит заметить, что в умелых руках и с должным уровнем опыта работа «в консоли» выполняется с большей скоростью и производительностью, чем в графической среде.

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

Какие бывают оболочки

Командных оболочек существует множество, но самой первой была Bourne shell – «оболочка Борна». Она была создана Стивеном Борном. Эта оболочка появилась ещё в 7-м издании UNIX и исполняемым файлом для неё является sh. Обычно он находится в каталоге /bin. Синтаксис  Bourne shell напоминает язык Алгол 68, поскольку на основе этого языка оболочка и создавалась.

На сегодняшний день в Linux стандартной оболочкой является Bourne again shall – «возрождённая оболочка Борна» и исполняемым файлом является bash, который также находится в каталоге /bin и чаще всего в виде символической или жёсткой ссылки под именем sh.

Существую и другие командные оболочки, но они менее распространены. Так, например, оболочка C shell (sch) имеет Си-подобный синтаксис, заимствованный из языка Си. Эта оболочка имеет свободную версию tsch, которая используется по-умолчанию в системе FreeBSD. Кстати, именно в ней  впервые появилось автодополнение кода.

Стоит упомянуть также и о Z shell (zsh) – это тоже свободная и современная оболочка. Отличается от остальных своей интерактивностью.

Основы работы в командной оболочке

Администрирование ОС, а уж тем более Linux не может обойтись без написания сценариев. Это просто необходимо для избавления от выполнения автоматических и рутинных действий в задачах администрирования. Но и написание самого сценария в оболочке требует знания некоторых приёмов для более быстрого и удобного редактирования кода.

Очень многие для редактирования команд в оболочке используют клавиши перемещения курсора. Это отталкивает от работы с консолью, поскольку на лишние телодвижения которых можно и нужно избегать тратится много времени. Для sh-совместимых командных оболочек, таких как sh и bash, существуют некоторые приёмы, которые следует использовать.

Например, больше всего времени тратится на набор одного и того же текста. Но клавиатурная комбинация <Ctrl + P> даёт возможность вернуться к ранее использованным командам и задействовать их снова, предварительно отредактировав.

Комбинация <Ctrl + E> перемещает курсор в конец строки, а комбинация <Ctrl + A> в её начало. Одни только эти базовые приёмы экономят много времени, а процесс написания сценариев, да и вообще администрирования становится более увлекательным, если можно так выразиться.

Нажатием сочетания клавиш <Ctrl + R> можно «отмотать» в прошлое историю использованных команд, при этом используя поиск. По каждому введённому символу ищется соответствие в истории команд.

Классическим приёмом для просмотра истории команд является использование клавиши <Стрелка вверх>.

Для придания наглядности выводимым результатам существует команда cut. Она обычно используется для извлечения частей текстовых данных, разделённых каким-либо разделителем, например, символом табуляции:

$ cut -d: -f7 < /etc/passwd | sort -u

Здесь ключ -d задаёт символ разделителя, а ключ -f – указывает поля , которые нужно включать в вывод.

Часто, опять же, для наглядности выводимых результатов, требуется отсортировать текстовые данные. Для этого служит команда sort:

$ sort -t: -k3,3 -n /etc/group1
root:х:0:
bin:х:1:daemon
daemon:x:2:

В приведённом выше примере вывод содержимого файла /etc/group1. Для форматирования вывода и сортировки данных здесь используются ключи -t – для установки разделителя полей, и -k – для задания сортировочного ключа. В данном случае сортируются записи с разделителем «двоеточие» по третьему полю, содержащему идентификатор группы. Наиболее часто с утилитой sort используются следующие ключи:

Ключ командыЗначение
-bНе учитывать в сортировке символы пробелов
-fНе учитывать буквенные регистры
-kКлюч сортировки (номера столбцов)
-nПоля сравниваются как целые числа
-rОбратный порядок сортировки
-tУстановить разделитель полей (по умолчанию — пробельный символ)
-uПомещать в вывод только уникальные записи

Основные команды для работы с файлами и каталогами

Никакое системное администрирование не обходится без работы с файловой системой, т. е. с файлами и каталогами.

Для создания файла часто используют команду cat. Вообще, эта утилита  изначально предназначена для перенаправления потоков, но именно поэтому её возможности удобно использовать для создания файлов:

$ cat > my_newfile

В данном случае на вход команды направляется стандартный ввод, а результат команды, т. е. её вывод — в новый файл.

Утилиту cat можно ещё использовать и для копирования, однако, для этого лучше подходит утилита cp:

$ cp [options] source destination

Файлы, или каталоги  source будут скопированы в файл или каталог destination. Причём, если  destination существует, то он будет перезаписан. Использование ключа -i позволяет выдавать подтверждение в таких случаях. Также для этой команды доступны некоторые полезные опции:

ОпцияЗначение
-pСохраняет права доступа, а также время изменения файла. При отсутствии этой опции для файла будут назначены полномочия, соответствующие запустившему команду пользователю.
-R или -rСохранение исходного дерева каталогов, если source – это каталог, то все подкаталоги будут также скопированы.
-dСохранение символических ссылок. Иначе будет скопирован сам файл.
-fПерезапись файлов без дополнительный подтверждений.

Для перемещения/переименования файлов осуществляется командой mv:

$ mv oldname newname

У неё такой же синтаксис как и у cp и для этой команды также полезно использование ключа -i.

Для удаления каталогов и файлов следует воспользоваться командами rm и rmdir соответственно. Тут необходимо заметить, что командой rm можно удалять и каталог со всеми находящимися в нём подкаталогами и файлами, но при использовании ключа -r:

$ rm -rv folder

Дополнительный ключ -v используется здесь для вывода списка удалённый файлов и каталогов. Также для использования этой команды полезно использование опции -i.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Изучение оболочки — Урок 1: Что такое оболочка?

Проще говоря, оболочка — это программа, которая принимает команды с клавиатуры.
и дает их операционной системе для выполнения. Раньше это было
единственный пользовательский интерфейс, доступный в Unix-подобной системе, такой как Linux.
В настоящее время у нас есть графических пользовательских интерфейсов (GUI) в дополнение к
интерфейсы командной строки (CLI) , такие как оболочка.

В большинстве систем Linux программа называется bash (что означает Bourne Again
SHell, расширенная версия исходной программы оболочки Unix, sh , написанная Стивом Борном) действует как программа оболочки.Помимо
bash , доступны другие программы оболочки для
Системы Linux. К ним относятся: ksh , tcsh и zsh .

Что такое «Терминал»?

Это программа под названием эмулятор терминала . Это программа, которая
открывает окно и позволяет вам взаимодействовать с оболочкой. Есть куча
различные эмуляторы терминала, которые мы можем использовать. Установка некоторых дистрибутивов Linux
несколько. Сюда могут входить gnome-terminal , konsole , xterm , rxvt , kvt , nxterm и eterm .

Запуск терминала

Оконные менеджеры обычно имеют возможность запускать терминал из меню.
Просмотрите список программ, чтобы увидеть, не похоже ли что-нибудь на терминал
эмулятор. Хотя существует множество различных эмуляторов терминала, все они
сделай то же самое. Они дают нам доступ к сеансу оболочки. Вы, вероятно, будете
выработать предпочтение к одному, основываясь на разных наворотах
это обеспечивает.

Тестирование клавиатуры

Хорошо, попробуем набрать текст.Откройте окно терминала. Первым делом мы
должен увидеть приглашение оболочки , которое содержит наше имя пользователя и имя
машины, за которым следует знак доллара. Примерно так:

[me @ linuxbox me]

долларов

Отлично! Теперь введите несколько бессмысленных символов и
нажмите клавишу ввода.

[me @ linuxbox me] долларов kdkjflajfks

Если все прошло хорошо, мы должны были получить сообщение об ошибке с жалобой на то, что
он не может понять команду:

[me @ linuxbox me] долларов kdkjflajfks
bash: kdkjflajfks: команда не найдена

Замечательно! Теперь нажмите клавишу со стрелкой вверх.Посмотрите, как наша предыдущая команда
«кдкйфлайфкс» возвращается. Да, у нас история команд . нажмите
стрелка вниз, и мы снова получаем пустую строку.

Вызовите команду «kdkjflajfks», используя клавишу со стрелкой вверх, если необходимо. Теперь,
попробуйте клавиши со стрелками влево и вправо. Мы можем разместить текстовый курсор где угодно
в командной строке. Это позволяет нам легко исправлять ошибки.

Вы работаете не как root, не так ли?

Если последний символ вашего приглашения оболочки — #, а не $, вы
работает как суперпользователь .Это означает, что у вас есть административные
привилегии. Это может быть опасно, так как вы можете удалить или перезаписать
любой файл в системе. Если вам абсолютно не нужны административные привилегии,
не действуют как суперпользователь.

Использование мыши

Несмотря на то, что оболочка является интерфейсом командной строки, мышь по-прежнему
удобно.

Помимо использования мыши для прокрутки содержимого окна терминала, мы
можно использовать его для копирования текста. Перетащите указатель мыши на текст (например,
«kdkjflajfks» прямо здесь, в окне браузера), удерживая левую
кнопка.Текст следует выделить. Отпустите левую кнопку и переместите мышь
указатель на окно терминала и нажмите среднюю кнопку мыши
(поочередно нажмите левую и правую кнопки одновременно, когда
работает на тачпаде). Текст, который мы выделили в окне браузера
следует скопировать в командную строку.

Дополнительная литература

Bash — Проект GNU — Фонд свободного программного обеспечения

GNU Bash


Bash — это оболочка проекта GNU — Bourne Again Shell.Это sh-совместимая оболочка, которая
включает полезные функции из оболочки Korn (ksh) и оболочки C
(csh). Он предназначен для соответствия IEEE POSIX P1003.2 / ISO 9945.2.
Стандарт Shell и Tools. Он предлагает функциональные улучшения по сравнению с sh
как для программирования, так и для интерактивного использования. Кроме того, большинство скриптов sh
может быть запущен Bash без изменений.

Среди улучшений, предлагаемых Bash:

  • редактирование командной строки,
  • история команд неограниченного размера,
  • рабочий,
  • функций оболочки и псевдонимы,
  • индексированных массивов неограниченного размера,
  • целочисленных арифметических операций с любым основанием от двух до шестидесяти четырех.

У сопровождающего также есть страница Bash, на которой
включает часто задаваемые вопросы.

Скачать

Стабильные выпуски можно найти на главном сервере GNU
(HTTPS,
HTTP,
FTP) и его
зеркала; пожалуйста
по возможности используйте зеркало.

Документация

Документация для
Баш
доступно в Интернете, так как
— это документация для большинства программ GNU. Вы можете
также найти информацию о
Баш
запустив info bash
или же
man bash , или посмотрев на
/ usr / share / doc / bash / , / usr / local / share / doc / bash / ,
или аналогичные каталоги в вашей системе.Краткое изложение доступно по адресу
запущен bash --help .

Списки рассылки

Объявления о
Баш
и большая часть другого программного обеспечения GNU производится по адресу [email protected].

Чтобы подписаться на эти или любые списки рассылки GNU, отправьте пустое письмо.
с заголовком Subject: просто «подпишитесь» на соответствующий
-запрос лист. Например, чтобы подписаться на GNU
список объявлений, отправьте письмо по адресу .
Или вы можете использовать веб-интерфейс.

Участие

Разработка
Баш,
и GNU в целом — это работа добровольцев, и вы можете внести свой вклад. Для
информацию, пожалуйста, прочтите Как помочь GNU. Если бы ты
хотите принять участие, это хорошая идея присоединиться к рассылке обсуждения
список (см. выше).

Развитие
Для источников разработки, трекеров ошибок и исправлений и др.
информацию см.
Баш
страница проекта
на savannah.gnu.org.
Перевод Bash
Для перевода программных сообщений на другие языки см.
перевод
Страница проекта для Bash.Новые переводы или обновления существующих
строки не будут включены в Bash, если они будут отправлены в другое место.
Для получения дополнительной информации см. Проект перевода.
домашняя страница.
Сопровождающий
Bash в настоящее время поддерживается Chet Ramey.
Пожалуйста, используйте списки рассылки для связи.

Лицензирование

Баш
бесплатное программное обеспечение; вы можете распространять и / или изменять его под
условия Стандартной общественной лицензии GNU, опубликованной Free
Фонд программного обеспечения; либо версии 3 Лицензии, либо (на ваш
вариант) любой более поздней версии.

Как создать сценарий оболочки в Linux / Unix

Создание сценария оболочки

Создание сценария оболочки — это компьютерная программа с открытым исходным кодом, разработанная для запуска оболочкой Unix / Linux. Shell Scripting — это программа для написания серии команд для выполнения оболочкой. Он может объединять длинные и повторяющиеся последовательности команд в один простой скрипт, который можно сохранить и выполнить в любое время, что снижает затраты на программирование.

Это руководство по написанию сценариев оболочки помогает получить базовые знания о программе сценариев оболочки Linux / Unix и продвинуться в концепции сценариев оболочки.Это руководство по сценариям оболочки предназначено для новичков и профессионалов, которые хотят узнать, что такое сценарии оболочки? Как работает сценарий оболочки, типы оболочки и многое другое.

Что такое Shell?

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

Операционная система состоит из многих компонентов, но двумя основными ее компонентами являются:

Компоненты программы Shell

Ядро является ядром компьютера. Это делает возможным обмен данными между аппаратным и программным обеспечением. В то время как ядро ​​является самой внутренней частью операционной системы, оболочка — самой внешней.

Оболочка в операционной системе Linux принимает от вас входные данные в виде команд, обрабатывает их, а затем выдает выходные данные. Это интерфейс, через который пользователь работает с программами, командами и сценариями.К оболочке обращается терминал, который ее запускает.

Когда вы запускаете терминал, оболочка выдает командную строку (обычно $), , где вы можете ввести свой ввод, который затем выполняется, когда вы нажимаете клавишу Enter. После этого вывод или результат отображается на терминале.

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

Это руководство по сценариям оболочки Unix / Linux помогает понять основы создания сценариев оболочки до продвинутого уровня.

В этом руководстве по сценарию оболочки вы узнаете:

Щелкните здесь, если видео недоступно

Типы оболочки

В Linux есть две основные оболочки:

1 . Оболочка Bourne Shell : приглашение для этой оболочки — $, а ее производные перечислены ниже:

  • Оболочка POSIX также известна как sh
  • Korn Shell также известна как sh
  • B ourne A gain SH ell также известен как bash (самый популярный)

2. Оболочка C : Приглашение для этой оболочки -%, и ее подкатегории:

  • Оболочка C также известна как csh
  • Tops Оболочка C также известна как tcsh

Мы обсудим оболочку на основе bash. сценарии в этом руководстве.

Как написать сценарий оболочки в Linux / Unix

Сценарии оболочки написаны с использованием текстовых редакторов. В вашей системе Linux откройте программу текстового редактора, откройте новый файл, чтобы начать вводить сценарий оболочки или программирование оболочки, затем дайте оболочке разрешение на выполнение вашего сценария оболочки и поместите свой сценарий в то место, откуда оболочка может его найти.

Давайте разберемся с этапами создания сценария оболочки:

  1. Создайте файл , используя редактор vi (или любой другой редактор). Назовите файл сценария с расширением .sh
  2. Запустите сценарий с #! / bin / sh
  3. Напишите код.
  4. Сохраните файл сценария как filename.sh
  5. Для , выполняющего , тип сценария bash filename.sh

«#!» — это оператор shebang, который направляет скрипт в место интерпретатора.Итак, если мы используем «#! / Bin / sh», сценарий будет направлен в bourne-shell.

Создадим небольшой скрипт —

 #! / Bin / sh
ls 

Давайте посмотрим, как создать программы сценария оболочки в Linux / Unix — Шаги по созданию сценария оболочки в Linux / Unix Команда ‘ls’ выполняется, когда мы выполняем файл сценария sample.sh.

Добавление комментариев оболочки

Комментирование важно в любой программе. В программировании Shell синтаксис для добавления комментария:

 #comment 

Давайте разберемся с этим на примере.

Что такое переменные оболочки?

Как обсуждалось ранее, переменные хранят данные в форме символов и чисел. Точно так же переменные оболочки используются для хранения информации, и это может делать только оболочка.

Например, следующий код создает переменную оболочки и затем печатает ее:

переменная = "Привет"
echo $ variable 

Ниже приведен небольшой скрипт, который будет использовать переменную.

#! / bin / sh
echo "как тебя зовут?"
читать имя
echo "Как поживаешь, $ name?"
прочитать замечание
echo "Я тоже $ реплика!" 

Давайте разберемся, шаги по созданию и выполнению скрипта

Как видите, программа выбрала значение переменной name как Joy и замечание как отличное.

Это простой скрипт. Вы можете разрабатывать сложные сценарии, которые содержат условные операторы, циклы и функции. Сценарии оболочки сделают вашу жизнь проще, а администрирование Linux — легким ветерком.

Описание:

  • Ядро является ядром операционных систем, и оно обменивается данными между аппаратным и программным обеспечением
  • Оболочка — это программа, которая интерпретирует пользовательские команды через интерфейс командной строки, например Терминал
  • Оболочка Борна и оболочка C являются наиболее используемыми оболочки в Linux
  • Сценарии оболочки Linux — это написание серии команд для оболочки для выполнения
  • Переменные оболочки хранят значение строки или число, которое оболочка будет читать.
  • Сценарии оболочки в Linux могут помочь вам создавать сложные программы, содержащие условные операторы, циклы и функции
  • Основные команды сценариев оболочки в Linux: cat, more, less, head, tail, mkdir, cp, mv, rm, touch, grep, sort, wc, cut и другие.

15 самых популярных Linux-оболочек с открытым исходным кодом

Системы Unix покорили мир с момента своего создания в 70-х годах. Одной из фундаментальных функций, которые помогли дистрибутивам Linux и BSD сохранить свой нынешний статус, является оболочка Linux. Оболочка является одним из основных инструментов для многих поклонников Linux из-за ее огромной мощности и разнообразия приложений. Это интерфейс командной строки для вашей операционной системы, который позволяет выполнять любые операции в зависимости от ваших критериев.Более того, оболочки Linux — это не просто интерфейс, но и полноценный язык сценариев со своим набором синтаксиса и семантики.

Часто используемые оболочки Linux


Linux предлагает одни из лучших оболочек с открытым исходным кодом для опытных пользователей, которые всегда ищут новые наборы инструментов в свой арсенал. Что, в свою очередь, затрудняет выбор конкретной оболочки для многих обычных пользователей. Наши редакторы позволили себе указать на некоторые из лучших и бесплатных оболочек с открытым исходным кодом для пользователей Linux.Оставайтесь с нами, чтобы узнать, какая оболочка Linux лучше всего подходит для ваших целей.

1. sh Shell


Оболочка Борна или «sh» была исходной оболочкой в ​​исторической операционной системе Unix. Его создатель, Стивен Борн, разработал его в лаборатории AT&T Bell Labs в 1977 году, и с тех пор он поставляется с большинством более ранних систем Unix. Оболочка Bourne Shell получила свою сокращенную форму благодаря используемому ей расширению сценариев, которое, что неудивительно, требует, чтобы пользователи заканчивали имена сценариев с помощью sh.Он установил планку для многих популярных будущих оболочек с такими функциями, как перенаправление, возможности написания сценариев и надежные языковые конструкции.

Характеристики оболочки Bourne

  • Приглашение оболочки Bourne Shell по умолчанию — это символ $, и это была первая оболочка, которая использовала этот символ для своего приглашения.
  • Он имеет встроенную поддержку перенаправления ввода-вывода, Unicode, перенаправления потока, пакетного сценария и многого другого.
  • Хотя первоначальная версия этой оболочки 1977 года была проприетарной, она стала общедоступной с доступом к исходному тексту.
  • Оболочка sh легко настраивается и может быть легко изменена в соответствии с различными критериями системы.

2. Bash Shell


Широко известный как Bourne Again Shell, Bash, вероятно, является наиболее часто используемой оболочкой Linux на современных машинах Unix. Если вы используете стандартный дистрибутив Linux, такой как Ubuntu или Arch, то по умолчанию вы используете оболочку Bash. Эта оболочка Linux с открытым исходным кодом хорошо известна в сообществе своим надежным набором функций и удобством использования.Таким образом, большинство пользователей Linux запускают Bash в тот или иной момент своей жизни.

Особенности Bash Shell

  • Возможности редактирования командной строки, предоставляемые Bash, просто выдающиеся, и он предлагает неограниченную историю команд.
  • Bash предоставляет надежные функции оболочки, псевдонимы, механизмы управления заданиями, перенаправление ввода-вывода, поддержку ISO 8061 наряду с поддержкой Unicode.
  • Эта оболочка Linux с открытым исходным кодом обеспечивает поддержку автозаполнения для имен команд, путей, подстановочных знаков и позволяет выводить цветные списки каталогов наряду с выделением текста.
  • Bash может выполнять целочисленную арифметику с любым основанием от двух до шестидесяти четырех и позволяет индексировать массивы неограниченного размера.

3. Корпус C


Оболочка C или «csh» — одна из старейших оболочек Unix с открытым исходным кодом. Он был разработан в 70-х Биллом Джоем, тогда еще аспирантом UCB. С тех пор csh поставлялся с многочисленными вариациями Unix, в первую очередь с различными BSD. Он включает синтаксис интерпретатора, подобный C, который полезен для многих из-за того, что исходная система Unix и современные ядра Linux в основном написаны на C / C ++.

Характеристики корпуса C

  • Оболочка C предлагает инновационный механизм истории, процедуры управления заданиями, интерактивное имя файла и завершение имени пользователя наряду со стандартными синтаксисами, подобными C.
  • Он позволяет опытным пользователям использовать его либо как интерактивную оболочку входа в систему, либо как командный процессор для сценариев оболочки.
  • Приглашение оболочки по умолчанию, используемое оболочкой C Linux, представляет собой символ «%», в отличие от знакомого многим пользователям Bash знака «$».
  • Оболочка

  • C позволяет пользователям выполнять поиск и замену замен переменных наряду с соответствующими шаблонами на основе подстановочных знаков.

4. Korn Shell


Korn Shell или ksh, пожалуй, одна из самых популярных на сегодняшний день оболочек с открытым исходным кодом для Linux. Он был разработан в легендарной Bell Labs Дэвидом Корном, вдохновленным интерактивностью оболочки C и производительностью оболочки Bash. Korn Shell приобрела огромную популярность с первых дней своего существования благодаря своим опережающим функциям, которые включают расширенное управление заданиями, псевдонимы команд, арифметику с плавающей запятой и многие другие.

Характеристики корпуса Korn

  • Korn Shell позволяет пользователям завершать текущие задания с помощью Ctrl + Z и переводить их на передний или задний план с помощью команд fg и bg .
  • Может использоваться для хранения шелл-кода непосредственно в памяти, что позволяет увеличить возможности программирования и повысить эффективность работы.
  • ksh предлагает расширенное редактирование в командной строке, где пользователи могут использовать команды редактирования в стиле vi или Emacs прямо из своей оболочки.
  • Сценарии

  • Korn Shell обычно быстрее, чем сценарии оболочки Bourne, и предлагают расширенные функции ввода-вывода наряду с заметными механизмами безопасности.

5. Zsh Shell


ZSH Shell — это инновационная современная оболочка Linux с множеством надежных функций. Он разработан поверх Bash и предлагает интерактивную оболочку входа в систему вместе с эффективным интерпретатором команд. Zsh известен своей производительностью, которая значительно превосходит многие оболочки с открытым исходным кодом для Linux.Он также заимствует элементы из других популярных снарядов 90-х годов, в том числе снарядов Ksh и Tcsh. Попробуйте Zsh, если вы гуру Linux и ищете продвинутые оболочки Linux.

Особенности Zsh Shell

  • Функциональность автозаполнения Zsh очень интеллектуальна и поддерживает сильно интерактивное автозаполнение как для файлов, так и для путей.
  • Механизм совместного использования истории этой оболочки Unix с открытым исходным кодом просто огромен, позволяя совместно использовать историю множества различных экземпляров терминала, работающих одновременно.
  • Пользователи могут выбирать из более чем 400 плагинов и более 200 тем из популярной, управляемой сообществом платформы oh-my-zsh.
  • Zsh также поддерживает vi-режим, интеллектуальное экранирование, рекурсивную глобализацию, вывод по конвейеру во временные файлы, исправление орфографии и многие другие интерактивные функции.

6. Tcsh Shell


Оболочка Tcsh — это обновленная версия оболочки C, которая предлагает программируемое завершение команд и редактирование командной строки в качестве основных функций.Он полностью совместим с оболочкой Csh и может использоваться как в качестве интерактивной оболочки для входа в систему, так и в качестве обработчика сценариев оболочки. Tcsh поставляется с мощным редактором командной строки, современным механизмом истории, программируемым завершением слов, управлением заданиями, поддержкой проверки орфографии и синтаксисом, подобным C, за которым следует Csh. Эта оболочка Unix больше всего подходит для опытных программистов.

Характеристики корпуса ТЧШ

  • Tcsh имеет встроенную поддержку автозаполнения файлов и переменных, а также программируемое завершение и селекторы аргументов псевдонима.
  • Это позволяет опытным пользователям использовать подстановочные знаки для большей гибкости при запуске сценариев оболочки на терминале.
  • Предварительно созданная команда where этой оболочки Linux работает так же, как команда which в Bash, но отображает каждое местоположение цели, указанной в каталоге $ PATH.
  • Tcsh — это интерпретатор командной строки по умолчанию для FreeBSD и ее потомков, таких как DragonFly BSD и DesktopBSD.

7. Рыбная раковина


Fish Shell — это дружественная интерактивная оболочка Unix, которая призвана стать современной заменой ранних оболочек с открытым исходным кодом для Linux.Он доступен во всех дистрибутивах Linux и BSD вместе с операционной системой Windows. Fish предлагает богатый набор мощных функций, которые упрощают обнаружение, запоминание и использование интересных команд Linux на вашем компьютере. Если вы ищете умную оболочку командной строки для рабочего стола Linux, вам, безусловно, стоит попробовать Fish.

Характеристики панциря рыбы

  • Fish предлагает мощную функцию автоматического предложения, известную как «поиск по мере ввода» на основе истории вашей командной строки и текущего каталога.
  • Его многофункциональная функция завершения Tav позволяет пользователям расширять пути к файлам, переменные и многие специфические завершения команд с помощью подстановочных знаков и фигурных скобок.
  • Fish имеет встроенную поддержку 24-битного истинного цвета, что делает ваши терминальные сеансы более красочными и привлекательными.
  • Это отличная оболочка для людей, которые ищут оболочки с открытым исходным кодом, которые работают «из коробки» и не требуют настройки.

8. Ионная оболочка


Оболочка Ion — это увлекательная современная оболочка, которая отличается простым, но мощным синтаксисом наряду со значительным увеличением производительности.Он написан с использованием языка программирования Rust, что делает его менее уязвимым для распространенных проблем «ShellShcok», с которыми сталкиваются многие пользователи Bash. Ion заимствует многие элементы дизайна у популярных оболочек, таких как Bash, Fish и Oil. Так что вам не потребуется много времени, чтобы начать работу с этой фантастической оболочкой.

Характеристики ионной оболочки

  • Оболочка Ion быстрее, чем Dash, которая сама примерно в четыре раза быстрее, чем стандартная оболочка Bash, которую сегодня используют большинство Linux-машин.
  • Благодаря тому, что Ion написан на Rust, он предлагает более высокую степень безопасности памяти, чем традиционные оболочки командной строки Unix на C / C ++.
  • Ion имеет встроенную поддержку расширения для строк, массивов, глобусов, фигурных скобок (диапазоны, перестановки, вложенные фигурные скобки), арифметики и процессов.
  • Его простой, понятный и лаконичный дизайн позволяет относительно легко привыкнуть к нему и позволяет пользователям компилировать оболочку как статический двоичный файл.

9. Dash Shell


Оболочка Dash — это аббревиатура от Debian Almquist shell (тире) и интерпретатор командной строки по умолчанию для операционных систем Debian.Он намного меньше стандартной оболочки GNU Bash, но по-прежнему нацелен на совместимость с POSIX. Dash произошел от версии ash для NetBSD (Almquist SHell) до того, как был перенесен в экосистему Linux, и предлагает значительный прирост производительности по сравнению с традиционными оболочками Unix. Dash работает быстрее, чем большинство оболочек, и требует меньше места и библиотек.

Характеристики Dash Shell

  • Dash — одна из самых быстрых оболочек с открытым исходным кодом для Linux, работающая почти в четыре раза быстрее, чем Bash и другие стандартные оболочки.
  • Минималистичный дизайн Dash делает его намного меньше, чем обычные интерпретаторы командной строки, и требует ограниченных системных ресурсов (дискового пространства, ОЗУ или ЦП).
  • Благодаря значительно меньшей кодовой базе, Dash имеет меньшую поверхность атаки и очень защищен от частых атак оболочки.
  • Пользователи системы

  • Ubuntu или Debian могут найти дополнительную информацию о Dash, набрав man dash в окне своего терминала.

10. Eshell


Eshell — это удобная программа-интерпретатор командной строки, написанная с использованием Emacs Lisp и стремящаяся к максимальной переносимости наряду с обеспечением полной поддержки кодов Lisp.Он предлагает довольно обширный список повседневных функций, включая автозаполнение, управление историей, механизм управления заданиями и многое другое. Конструкции сценариев, поставляемые с Eshell, довольно просты и работают правильно. Если вы программист на Lisp или авангардный энтузиаст Emacs, Eshell может стать для вас идеальной оболочкой Linux.

Характеристики Eshell

  • Eshell — это не автономный эмулятор терминала, а обычная оболочка, которая взаимодействует с вашим компьютером, используя функции Emacs.
  • На данный момент он не поддерживает интерактивные программы напрямую, поэтому вам нужно вызывать их в отдельном экземпляре ANSI-term.
  • По умолчанию, поддержка

  • Eshell для изменения истории и взаимодействия довольно хороша, а синтаксис в чем-то похож на Bash и Zsh.
  • Пользователи могут настроить Eshell, изменив переменную eshell-prompt-function , которая определяет, как приглашение должно вести себя в вашей системе.

11. RC Shell


Оболочка rc — это классический интерпретатор командной строки, который очень похож на оболочку Bourne.Однако по сравнению с оболочкой Борна она имеет несколько простую структуру. Это связано с тем, что rc использует управляющие структуры, подобные C, а не синтаксис, подобный ALGOL, используемый sh. Том Дафф, основной разработчик этой оболочки Unix, хорошо известен своим качественным программированием и исключительными способностями к решению проблем.

Характеристики пульта дистанционного управления Shell

  • rc использует конструкции сценария if not вместо vanilla else и предоставляет тот же цикл for, который вы используете в оболочке Bourne.
  • Хотя rc имеет слабую дисциплину типизации, он включает мощный механизм для управления переменными.
  • rc достаточно легкий, что делает его быстрее, чем многие традиционные оболочки с открытым исходным кодом для Linux.
  • Он оснащен отличной поддержкой обработки исключений, механизма поиска и замены, сопоставления с образцом и многого другого.

12. Scsh Shell


Scheme Shell или Scsh — это переносимая оболочка командной строки, доступная для самых разных операционных систем, помимо Linux и BSD.Он имеет многоуровневый программный интерфейс Scheme и предназначен для легкого написания реальных программ Unix. Его можно использовать для написания эффективных сценариев для приложений и стандартных программ операционной системы. Он поставляется со встроенной поддержкой конвейеров, перенаправления ввода-вывода, символических ссылок, сокетов BSD, шаблонов регулярных выражений, а также многих других интересных функций.

Особенности Scsh Shell

  • Оболочка Scheme имеет отличную библиотечную поддержку для таких повседневных скриптовых конструкций, как списки, символы и строки.
  • Пользователи могут выбирать между использованием регулярных выражений Scheme, предметно-ориентированным языком (DSL) или небольшими языками при работе с регулярными выражениями.
  • Сетевая поддержка, обеспечиваемая этой оболочкой с открытым исходным кодом, действительно на высшем уровне и быстрее по сравнению со многими другими.
  • Его качественные абстракции поддерживают псевдотерминалы, awk-скрипты, макросы, интеллектуальный поиск и возможности замены среди многих других.

13. Xonsh Shell


Xonsh — это современная оболочка Linux, работающая на языке сценариев Python.Если вы когда-нибудь задумывались, можете ли вы использовать интерпретатор Python в качестве оболочки Unix, Xonsh позволяет вам делать именно это. Этот язык был создан как надмножество Python 3.5+ и предоставляет множество примитивов оболочки, которые вы регулярно используете в Bash и iPython. Более того, их веб-сайт действительно великолепен и позволяет новым пользователям опробовать Xonsh вживую из своего браузера.

Характеристики корпуса Xonsh Shell

  • Xonsh был разработан как нормальный язык с встроенной поддержкой ряда операционных систем, включая Linux, Mac OSX и Windows.
  • Функция завершения с помощью табуляции в этой оболочке просто выдающаяся, а также поддерживает завершение на основе синтаксического анализа страниц руководства.
  • Пользователи, знакомые с Python, найдут Xonsh очень подходящим, поскольку синтаксис очень похож на синтаксис Python.
  • Поставляется с довольно обширной библиотекой, которая предлагает множество повседневных примитивов прямо из коробки.

14. Oh Shell


Oh — фантастическая оболочка с открытым исходным кодом для современных пользователей Linux. Хотя на первый взгляд он может показаться очень похожим на традиционные оболочки Unix, он отличается от них, когда дело доходит до программирования.Разработанный с использованием Golang, Oh предлагает высококачественную поддержку параллелизма. Однако ядро ​​Oh — это чрезвычайно модифицированный экземпляр языка программирования Scheme. Он также использует тот же синтаксис для кода, данных, конвейера и каналов, что позволяет конечному пользователю использовать их взаимозаменяемо в своих сценариях.

Характеристики Oh Shell

  • Сама оболочка построена с использованием Go, но программные конструкции являются диалектом языка программирования Scheme.
  • Oh — одна из лучших оболочек Unix, когда дело касается поддержки параллелизма.
  • Он обрабатывает каналы вместе с конвейерами как первоклассные значения и имеет лаконичную синтаксическую структуру.
  • Oh допускает как публичные, так и частные члены и использует их в качестве основы объектной системы на основе прототипов.

15. Эльфийский панцирь


Оболочка Elvish — одна из моих самых любимых оболочек с открытым исходным кодом для Linux с тех пор, как я пробовал ее несколько месяцев назад.Это действительно фантастический интерпретатор командной строки, который позволяет вам делать на вашем компьютере все, что угодно. Elvish можно использовать для выполнения обширного списка задач, от управления самой системой до написания красноречивых сценариев. Он поставляется с богатой библиотекой надежных функций для обработки строк, сопоставления регулярных выражений, синтаксического анализа JSON, работы в сети и многого другого.

Характеристики эльфийского панциря

  • Эльфийские конвейеры позволяют системе передавать структурированные данные, такие как списки, карты и даже функции, наряду со стандартными текстовыми данными.
  • Он имеет знакомый C-подобный синтаксис, который делает создание сценариев на эльфийском языке интуитивно понятным для опытных пользователей Linux.
  • Elvish написан с использованием языка программирования Go и, следовательно, очень безопасен по сравнению с другими оболочками Unix.
  • Эта оболочка Unix поставляется со встроенным файловым менеджером, который значительно упрощает управление системой.

Конечные мысли


Из-за множества надежных оболочек с открытым исходным кодом, предлагаемых растущей экосистемой Linux, часто становится сложной задачей выбрать правильную оболочку Linux для вас.Таким образом, наши редакторы просмотрели все популярные варианты, которые вы можете найти, и составили для вас это удобное руководство. Поскольку люди по-разному отдают предпочтение разным видам снарядов, выбор лучшего для вас полностью зависит от вас. Мы рекомендуем нашим читателям попробовать некоторые из этих оболочек в зависимости от их требований и получить личный опыт. Оставьте нам комментарий к своим мыслям о наших выборах.

Обзор оболочки Linux: bash, ksh, tcsh, zsh и fish

Есть два типа пользователей Linux: осторожные и предприимчивые.

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

С другой стороны, это пользователь, который находит то, что им нравится, и придерживается этого. Им, как правило, нравятся настройки их дистрибутива по умолчанию. Если они увлечены текстовым редактором, то это тот, который они освоили в первую очередь.

Как пользователь Linux как на сервере, так и на настольном компьютере, вот уже пятнадцать лет я определенно больше принадлежу ко второй категории, чем к первой.У меня есть склонность использовать то, что мне предлагают, и мне нравится тот факт, что это чаще всего означает, что я могу найти исчерпывающую документацию и примеры практически любого варианта использования, который я могу придумать. Если я использовал что-то нестандартное, переключение было тщательно исследовано и часто предполагалось сильным голосом кого-то, кому я доверяю.

Но это не значит, что я не люблю иногда пытаться увидеть, что мне не хватает. Так недавно, после многих лет использования оболочки bash, даже не задумываясь, я решил опробовать четыре альтернативные оболочки: ksh, tcsh, zsh и fish.Все четыре были легко установлены из моих репозиториев по умолчанию в Fedora, и они, вероятно, уже были упакованы для выбранного вами дистрибутива.

Вот немного о каждом варианте и о том, почему вы можете выбрать его в качестве следующего интерпретатора командной строки Linux.

баш

Во-первых, давайте взглянем на знакомое. GNU Bash, оболочка Bourne Again Shell, была по умолчанию практически во всех дистрибутивах Linux, которые я использовал на протяжении многих лет. Первоначально выпущенный в 1989 году, bash превратился в наиболее часто используемую оболочку в мире Linux, а также часто встречается в других unix-подобных операционных системах.

Bash — вполне респектабельная оболочка, и, ища документацию о том, как делать различные вещи в Интернете, почти всегда можно найти инструкции, которые предполагают, что вы используете оболочку bash. Но у bash есть некоторые недостатки, что может подтвердить любой, кто когда-либо писал сценарий bash, состоящий из нескольких строк. Дело не в том, что вы что-то не умеете, дело в том, что чтение и запись не всегда интуитивно понятны (или, по крайней мере, элегантны). Для некоторых примеров см. Этот список распространенных ошибок bash.

Тем не менее, bash, вероятно, останется, по крайней мере, в ближайшем будущем, с его огромной установочной базой и легионами как случайных, так и профессиональных системных администраторов, которые уже настроены на его использование и причуды. Проект bash доступен по лицензии GPLv3.

кш

KornShell, также известный как вызов команд ksh, представляет собой альтернативную оболочку, созданную Дэвидом Корном из Bell Labs в 1980-х годах. Первоначально проприетарное программное обеспечение, более поздние версии были выпущены под общественной лицензией Eclipse.

Сторонники ksh перечисляют несколько способов, в которых они считают его превосходным, в том числе наличие лучшего синтаксиса цикла, более чистых кодов выхода из каналов, более простого способа повторения команд и ассоциативных массивов. Он также способен имитировать многие из поведения vi или emacs, поэтому, если вы очень неравнодушны к текстовому редактору, возможно, стоит попробовать. В целом, я обнаружил, что он очень похож на bash для базового ввода, хотя для расширенных сценариев это, безусловно, будет другой опыт.

тчш

Tcsh является производным от csh, оболочки Berkely Unix C, и имеет очень долгую историю, уходящую корнями в ранние дни Unix и самих вычислений.

Большим преимуществом tcsh является его язык сценариев, который должен показаться очень знакомым любому, кто программировал на C. Сценарии tcsh одни любят, а другие ненавидят. Но у него есть и другие функции, в том числе добавление аргументов к псевдонимам и различные значения по умолчанию, которые могут понравиться вашим предпочтениям, в том числе способ автозаполнения с помощью вкладки и завершение вкладки истории.

Вы можете найти tcsh по лицензии BSD.

zsh

Zsh — это еще одна оболочка, которая имеет сходство с bash и ksh. Созданный в начале 90-х годов, zsh обладает рядом полезных функций, включая исправление орфографии, создание тем, именуемые ярлыки каталогов, совместное использование вашей истории команд на нескольких терминалах и различные другие незначительные изменения из исходной оболочки Bourne.

Код и двоичные файлы для zsh могут распространяться по лицензии, подобной MIT, хотя некоторые части находятся под GPL; подробности см. в действующей лицензии.

рыбы

Я знал, что мне понравится Friendly Interactive Shell, fish, когда я посетил веб-сайт и обнаружил, что он насмешливо описывает «Наконец, оболочка командной строки для 90-х» —fish был написан в 2005 году.

Авторы fish предлагают ряд причин для перехода, все они вызывают немного юмора и немного подшучивают над раковинами, которые не совсем подходят. Возможности включают автоматические подсказки («Осторожно, Netscape Navigator 4.0»), поддержку «удивительной» 256-цветовой палитры VGA, а также некоторые действительно полезные функции, включая завершение команд на основе страниц руководства на вашей машине, чистые сценарии и веб-конфигурация.

Fish лицензируется в основном под GPL версии 2, но с частями под другими лицензиями; проверьте репозиторий для получения полной информации.


Ищете более подробное изложение точных различий между каждым вариантом? Этот сайт должен вам помочь.

Так где я приземлился? Что ж, в конечном итоге я, вероятно, вернусь к bash, потому что различия были достаточно тонкими, чтобы тот, кто в основном использовал командную строку в интерактивном режиме, а не писал сложные сценарии, действительно не получил бы большой пользы от переключателя, а я уже довольно комфортно в баше.

Но я рад, что решил выйти из своей оболочки (ха!) И попробовать новые возможности. И я знаю, что есть много-много других. Какие оболочки вы пробовали, а какую предпочитаете? Дайте нам знать об этом в комментариях!

Справочное руководство по оболочке

Basic — руководство по Linux от PenguinTutor

Что такое ракушка?

Оболочка — это командная строка в Linux, в которой вы можете вводить команды. Если вы вошли в систему через сеть (с помощью ssh или telnet), то введенные вами команды были запущены оболочкой.Если вы вошли в систему с помощью графического интерфейса, вам может потребоваться открыть клиентский терминал, чтобы увидеть оболочку. Доступно несколько различных терминальных клиентов, таких как xterm, konsole и lxterm, или его можно назвать просто эмулятором терминала. Его расположение в меню отличается в разных дистрибутивах, если в меню «Пуск» разрешен поиск (в большинстве случаев, но не во всех), затем введите термин, и он должен показать соответствующий терминал, если нет, то загляните в меню системы или утилит.

Пользователи Windows могут быть знакомы с концепцией командной строки или подсказки DOS, которая похожа на оболочку UNIX.Оболочка UNIX имеет больше функций и представляет собой практически целый язык программирования, хотя пусть это вас не смущает, поскольку вы можете использовать оболочку без каких-либо навыков программирования. Даже если вы не «занимаетесь программированием», вы можете обнаружить, что стоит немного изучить программирование сценариев оболочки, поскольку это может облегчить вашу жизнь.

Часто люди, видя оболочку, думают, что это операционная система UNIX / Linux. На самом деле это программа, работающая поверх операционной системы.Чтобы получить общее представление о том, как устроен Linux, см. Диаграмму ниже:

Различные уровни операционной системы Linux

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

Оболочка — это приложение, которое позволяет пользователям общаться с компьютером. Это текстовое приложение, которое позволяет запускать программы и запускать задачи. Оболочка входит в набор утилит, известных как GNU. Без ядра компьютер не может работать, а без утилит GNU он не может делать ничего полезного, поэтому операционную систему иногда называют GNU / Linux; хотя это игнорирует множество других приложений, которые также включены (для краткости я просто использую Linux, имея в виду все, что включено в дистрибутив Linux).

Различные оболочки

Точно так же, как были разработаны разные варианты UNIX, существуют также разные варианты оболочки.

Вот список наиболее распространенных оболочек UNIX:

На основе Bourne

shell с улучшениями

Имя оболочки Имя команды Описание
Оболочка Борна sh Самая базовая оболочка, доступная во всех системах UNIX
Korn Shell ksh / 90ourne
C Shell csh Синтаксис похож на язык программирования C
Bash Shell bash Bourne Again Shell сочетает в себе преимущества Korn Shell и C Shell.По умолчанию в большинстве дистрибутивов Linux.
tcsh tcsh Аналогично оболочке C

Общие оболочки Linux / UNIX

Когда вы входите в систему с Linux (или открываете окно оболочки), вы обычно находитесь в оболочке bash.

Вы можете временно изменить оболочку, выполнив соответствующую команду оболочки. Чтобы изменить оболочку для будущих входов в систему, вы можете использовать команду chsh. Обычно это делается так, чтобы вы могли перейти только к одной из утвержденных оболочек, перечисленных в файле / etc / shells.Если вы измените оболочку для будущих сеансов, она будет сохранена в файле / etc / passwd.

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

Более подробная информация о снарядах приведена ниже.

Bourne Shell — это самая старая оболочка, и поэтому она не так богата функциями, как многие другие оболочки. Его набор функций достаточен для большинства потребностей программирования, однако он не имеет некоторых пользовательских удобств, которые нравятся в командной строке.Нет возможности повторно редактировать предыдущие команды или управлять фоновыми заданиями. Поскольку оболочка bourne доступна во всех системах UNIX, ее часто используют для программирования файлов сценариев, поскольку она обеспечивает максимальную переносимость между различными версиями UNIX. Bash полностью обратно совместим с оболочкой Bourne Shell, поэтому запуск оболочки bourne в Linux часто вызывает оболочку bash (используя ссылку между файлами).

Korn Shell — основан на оболочке Bourne. Одним из особенно полезных усовершенствований является возможность редактирования из командной строки.Для вызова и редактирования предыдущих команд можно использовать клавиши vi или emacs. Это не так просто использовать, как некоторые другие оболочки, но хорошо работает в сети или с использованием физического терминала (что редко в наши дни). Он также имеет более мощные программные конструкции, чем оболочка Bourne, однако они не так переносимы. Чтобы запустить оболочку Korn, вы можете запустить ksh или pdksh из обычной оболочки (если она установлена).

Оболочка C — Синтаксис оболочки c взят из языка программирования C.Таким образом, это полезный инструмент для всех, кто знаком с программированием C.

Bash Shell — Bash Shell представляет собой комбинацию функций Bourne Shell и C Shell. Это название происходит от Bourne Again SHell. В нем есть редактор командной строки, который позволяет использовать клавиши курсора более «дружественным» способом, чем оболочка Korn. Он также имеет полезную справку, позволяющую получить список команд, набрав несколько первых букв, а затем нажмите клавишу «TAB». Это оболочка по умолчанию в большинстве дистрибутивов Linux, и, если не указано иное, используется оболочка для будущих примеров.

tcsh — это другая оболочка, эмулирующая оболочку C. Он имеет ряд улучшений и дополнительных функций даже по сравнению с оболочкой bash.

Подсказка Shell

После входа в командную оболочку вы обычно увидите одно из следующих запросов: $,% или #.

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

Оболочки Bourne, Korn и Bash используют одинаковый синтаксис. Если вы не используете одну из расширенных функций, вам не обязательно знать, в какой из них вы находитесь. Однако, если вы работаете в оболочках C или tcsh, здесь используется совершенно другой синтаксис и может потребоваться другой ввод команд. Чтобы упростить задачу, у них есть два разных приглашения в зависимости от оболочки.

Запросы по умолчанию:

$ — Снаряды Bourne, Korn и Bash
% — C Shell

Когда вы вошли в систему как root (что является именем пользователя admin), вы должны очень внимательно относиться к вводимым командам.Если вы введете что-то неправильно, вы можете повредить установочные файлы Linux или даже удалить все данные с диска. По этой причине при входе в систему с правами суперпользователя появляется другое приглашение, которое постоянно напоминает о рисках.

Приглашение по умолчанию для root — это знак решетки # независимо от используемой оболочки.

Параметры входа в оболочку Bash

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

  1. / и т. Д. / Профиль
  2. ~ / .bash_profile
  3. ~ / .bashrc
  4. ~ / .bash_logout

Эти файлы представляют собой текстовые сценарии оболочки, которые можно использовать для определения настроек либо для общесистемных настроек (в каталоге / etc), либо для отдельного пользователя (в домашнем каталоге пользователей, указанном ~). Различные файлы вызываются в зависимости от того, является ли это интерактивной оболочкой входа или неинтерактивной оболочкой.

Bash как интерактивная оболочка входа в систему

Следующее выполняется, если bash вызывается как интерактивная оболочка входа в систему или как неинтерактивная оболочка с параметром —login.

Сначала оболочка считывает и выполняет команды из файла ‘/ etc / profile’, если этот файл существует. После прочтения этого файла он ищет «~ / .bash_profile». Если он не найден, вместо него можно использовать «~ / .bash_login» или «~ / .profile». Параметр —noprofile может использоваться при запуске оболочки, чтобы запретить такое поведение.

Файл .bash_profile обычно настроен так, что он также вызывает файл ~ / .bashrc (если он существует) в конце .bash_profile.

Когда оболочка входа завершается, Bash читает и выполняет команды из файла `~ / .bash_logout ‘, если он существует.

Bash как интерактивная оболочка без входа в систему

Следующее выполняется при запуске интерактивной оболочки, которая не является оболочкой входа в систему (например, при переключении пользователя или запуске изнутри оболочки). Bash читает и выполняет команды из ‘~ /.bashrc ‘, если этот файл существует. Это можно запретить с помощью параметра —norc. Опция `—rcfile file ‘заставит Bash читать и выполнять команды из файла вместо` ~ / .bashrc’.

Bash как неинтерактивная оболочка

Если bash запускается как неинтерактивная оболочка, сценарии не вызываются, если не используется опция -login. Если в переменной BASH_ENV задан сценарий, он будет запущен.

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

/ etc / profile

Файл / etc / profile содержит общесистемные переменные среды по умолчанию. Обычно это устанавливает umask, LOGNAME, почтовые каталоги и т. Д. Его также можно использовать для изменения пути поиска команд по умолчанию (PATH) для всех пользователей в системе. Поскольку в большинстве систем нет файла / etc / bashrc, псевдонимы иногда включаются в файл / etc / profile.

~ / .bash_profile

Предоставляет переменные среды, зависящие от пользователя, и часто используется для добавления локальных путей поиска в PATH.Это вызывается после сценария / etc / profile.

~ / .bashrc

Этот файл вызывается для неинтерактивных оболочек и обычно вызывается из ~ / .bash_profile для интерактивных оболочек. Обычно он используется для настройки псевдонимов и любых других команд, запускаемых во время запуска.

~ / .bash_logout

Сценарий ~ / .bash_logout вызывается, когда пользователь выходит из интерактивной оболочки.

История

Можно вызвать предыдущие команды с помощью клавиш курсора, однако это также возможно с помощью команды истории.

Выполнение команды history покажет ранее введенные команды, вы можете передать их через tail, чтобы просто увидеть самые последние.

 

$ история | хвост

50 кд $ HOME

51 pwd

52 ясно

53 лс

54 CD тест

55 лс

56 человек в день

57 кд ..

58 vi temp.txt

59 история

$

  

, чтобы вызвать одну из перечисленных команд, введите r, за которым следует число

р 55

История хранится в файле в переменной среды $ HISTFILE.Для bash это обычно $ HOME / .bash_history.

Дополнительная литература

Для получения дополнительной информации см. Справочные страницы или Справочное руководство Bash

.

Краткое руководство по использованию сценариев оболочки в Linux: приложение Coin Toss

Проще говоря, сценарий оболочки — это программа, запускаемая оболочкой UNIX / Linux. Это файл, содержащий серию команд, которые выполняются последовательно, как если бы они были введены в интерфейсе командной строки (CLI) или терминале.

В этом кратком руководстве по написанию сценариев оболочки мы напишем простую программу, которая подбрасывает монету .По сути, результат нашей программы должен быть либо HEADS, либо TAILS (конечно, случайным образом).

Для начала первая строка сценария оболочки должна указывать, какой интерпретатор / оболочка будет использоваться для выполнения сценария. В этом руководстве мы будем использовать / bin / bash , и он будет обозначен как #! / Bin / bash , который называется shebang!

Далее мы будем использовать внутреннюю функцию Bash — переменную оболочки с именем RANDOM. Он возвращает случайное (фактически псевдослучайное) целое число в диапазоне 0-32767 .Мы будем использовать эту переменную, чтобы получить 2 случайных значения — либо 0 (для HEADS), либо 1 (для TAILS). Это будет сделано с помощью простой арифметической операции в оболочке с использованием% (оператор модуля, возвращает остаток), $ ((RANDOM% 2)) , и это будет сохранено в переменной результата. Итак, вторая строка нашей программы становится Result = $ ((RANDOM% 2)) — Обратите внимание, что не должно быть места вокруг = (оператор присваивания) при присвоении значения переменной в сценариях оболочки.

Наконец, нам просто нужно вывести HEADS, если мы получили 0, или TAILS, если мы получили 1, в переменной Result .Возможно, вы уже догадались, мы будем использовать для этого условные операторы if. В рамках условий сравним значение переменной Result с 0 и 1; и напечатайте соответственно ГОЛОВУ или ХВОСТ. Для этого используется оператор целочисленного сравнения -eq (равно), чтобы проверить, равны ли значения двух операндов или нет.

Итак, наш сценарий оболочки выглядит следующим образом:

  #! / Bin / bash
Результат = $ ((СЛУЧАЙНОЕ% 2))
если [[$ {Результат} -экв 0]]; потом
эхо ГОЛОВКИ
elif [[$ {Результат} -экв 1]]; потом
эхо ХВОСТ
fi  

Допустим, мы назвали скрипт cointoss.sh — Обратите внимание, что .sh предназначен только для того, чтобы пользователи могли идентифицировать файл / сценарий как сценарий оболочки. И Linux — это система без расширений.

Наконец, чтобы запустить скрипт, нам нужно сделать его исполняемым, и это можно сделать с помощью команды chmod chmod + x cointoss.sh

Мало выполнений скриптов:

  $ ./cointoss.sh

ХВОСТ

$ ./cointoss.sh

ГОЛОВКИ

$ ./cointoss.sh

ГОЛОВКИ

$ ./cointoss.sh

ХВОСТ  

В заключение в этом кратком руководстве по написанию сценариев оболочки мы узнали о shebang, RANDOM , присвоении переменных, арифметической операции с использованием оператора модуля % , условных операторах if, операторе сравнения целых чисел -eq и выполнении a сценарий оболочки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *