Перейти к содержимому

Os shell что это

  • автор:

Основные сведения о shell-скриптах в Терминале на Mac

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

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

Плюс в том, что в одном shell-скрипте можно объединить большое количество стандартных задач. Это обеспечивает экономию Вашего времени и сокращает количество возможных ошибок при многократном выполнении однотипных задач. Кроме того, shell-скрипты можно автоматизировать с помощью таких инструментов, как launchd или Apple Remote Desktop.

Shell-скрипт начинается с комбинации символов, которая сообщает, что это shell-скрипт. Это символы # и ! (вместе называемые shebang), после которых указывается оболочка shell, в которой должен быть выполнен скрипт. Например, вот первая строка shell-скрипта, который будет запущен в sh :

Рекомендуется снабжать shell-скрипты комментариями. Чтобы добавить комментарий, начните строку со знака номера (#). Каждая строка комментария должна начинаться со знака номера:

#This program returns the #contents of my Home folder

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

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

Инструкции по написанию shell-скриптов см. в статье Основные сведения о shell-скриптах на веб‑сайте Apple для разработчиков.

Command-line shell (Русский)

Состояние перевода: На этой странице представлен перевод статьи Command-line shell. Дата последней синхронизации: 15 октября 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Кома́ндная оболо́чка Unix (англ. Unix shell, часто просто «шелл» или «sh») — командный интерпретатор, используемый в операционных системах семейства Unix, в котором пользователь может либо давать команды операционной системе по отдельности, либо запускать скрипты, состоящие из списка команд. В первую очередь, под shell понимаются POSIX-совместимые оболочки, восходящие к Bourne shell (шелл Борна), появившемуся в Unix Version 7.

Список оболочек

Оболочки, более или менее совместимые с POSIX, перечислены в разделе #POSIX-совместимые, а оболочки с другим синтаксисом — в разделе #Альтернативные оболочки.

POSIX-совместимые

На эти оболочки может вести символическая ссылка /usr/bin/sh . Когда Bash, mksh AUR и zsh запускаются через исполняемый файл с именем sh , они автоматически становятся более совместимыми с POSIX.

  • Bash — Bash расширяет оболочку Bourne shell, добавляя историю и автодополнение, индексированные и ассоциативные массивы, целочисленную арифметику, подстановку процессов, here strings, регулярные выражения и расширение скобок.
  • Dash — Потомок NetBSD-версии Almquist SHell (ash). Быстрая POSIX-совместимая оболочка, которая стремится быть настолько маленькой, насколько это возможно.
  • Korn shell (ksh) — Язык KornShell представляет собой полный, мощный язык программирования высокого уровня для написания приложений, зачастую легче и быстрее, чем на других языках высокого уровня. Это делает его особенно подходящим для прототипирования. ksh сочетает в себе лучшие черты оболочки Bourne и C, плюс множество самостоятельных возможностей. Таким образом Ksh может сделать многое, чтобы повысить продуктивность и качество вашей работы при взаимодействии с системой и в программировании. Программы на ksh легче писать, они более кратки и читабельны, чем программы, написанные на языке более низкого уровня, таком как C.
  • nsh — Командная оболочка, похожая на fish, но POSIX-совместимая.
  • Oil Shell (OSH) — Bash-совместимая оболочка командной строки UNIX. OSH может быть запущена на большинстве UNIX-подобных операционных систем, в том числе GNU/Linux. Она написана на языке Python (v2.7), но поставляется в виде нативного исполняемого файла. Диалект Bash, распознаваемый OSH, называется языком OSH.
  • Yash — Yet another shell, POSIX-совместимая оболочка командной строки, написанная на языке C99 (ISO/IEC 9899:1999). Yash стремится стать самой POSIX-совместимой оболочкой в мире, поддерживая при этом функции для интерактивного использования и для написания скриптов.
  • Zsh — Оболочка, предназначенная для интерактивного использования, хотя это также мощный скриптовый язык. Многие из полезных особенностей Bash, ksh и tcsh были включены в Zsh; были добавлены многие оригинальные черты. Во введении перечислены некоторые из уникальных особенностей Zsh.

Совет: Скрипты POSIX и Bash можно проверить на наличие ошибок с помощью shellcheck .

Альтернативные оболочки

  • C shell (tcsh) — Командный интерпретатор, используемый как интерактивная оболочка входа в систему и командный процессор скриптов. Он имеет редактор командной строки, программируемое автодополнение слов, проверку орфографии, механизм истории, управление заданиями и C-подобный синтаксис.
  • Closh — Bash-подобная командная оболочка на Clojure.
  • Elvish — Современная и выразительная оболочка, которая может переносить внутренние структурированные значения через конвейеры. Эта возможность позволяет избежать большого количества сложного кода для обработки текста. Это выразительный язык программирования с такими возможностями, как исключения, пространства имён и анонимные функции. Также есть мощный readline, который проверяет синтаксис при наборе текста, и подсветка синтаксиса по умолчанию.
  • fish — Умная и удобная командная оболочка. Fish делает полноцветную подсветку синтаксиса командной строки, а также подсветку и автодополнение команд и их аргументов, существующих файлов и истории. Поддерживается функция завершения по мере ввода для истории и команд. Fish способен анализировать man-страницы системы для определения допустимых аргументов команд, что позволяет ему подсвечивать и дополнять команды. Лёгкий просмотр последних команд может быть сделан с помощью Alt+Up . Демон Fish (fishd) облегчает синхронизацию истории всех экземпляров fish, а также универсальных и постоянных переменных окружения. Кроме того, fish имеет простой синтаксис программирования и поток управления (подобно ruby). Для получения дополнительной информации смотрите руководство.
  • ion — Современная системная оболочка с простым, но мощным синтаксисом. Она полностью написана на Rust, что значительно повышает общее качество и безопасность оболочки, устраняя возможность появления уязвимостей вроде ShellShock и упрощая разработку. Она также обеспечивает уровень производительности, превосходящий Dash, при использовании возможностей Ion. Хотя он разрабатывается наряду с RedoxOS и в первую очередь для неё, он вполне пригоден и для других *nix-платформ. Для получения более подробной информации смотрите руководство.
  • Murex — Командная оболочка с расширенными возможностями и улучшенным пользовательским интерфейсом.
  • Nash — Системная оболочка, созданная на основе plan9 rc, которая позволяет легко создавать надёжные и безопасные скрипты, используя преимущества пространств имён операционных систем (в Linux и plan9) идиоматичным способом.
  • nushell — Nu черпает вдохновение в функциональных языках программирования и современных инструментах командной строки. Вместо того, чтобы рассматривать файлы и сервисы как необработанные потоки текста, Nu рассматривает каждый ввод как нечто, имеющее структуру.
  • Oh — Unix-оболочка, написанная на Go. Это оболочка в духе Unix, но отличается в деталях. Oh расширяет возможности языка программирования оболочки без ущерба интерактивных функций оболочки.
  • PowerShell — Объектно-ориентированный язык программирования и интерактивная оболочка командной строки, изначально написанная для Windows. Позже PowerShell был открыт и портирован на macOS и Linux.
  • rc — Командный интерпретатор для Plan 9, который предоставляет возможности, похожие на Bourne shell, с небольшими дополнениями и менее своеобразным синтаксисом.
  • xonsh — Оболочка на Python с дополнительными примитивами, к которым вы привыкли из Bash и IPython.

Выбор оболочки по умолчанию

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

Посмотрите все установленные оболочки:

$ chsh -l

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

$ chsh -s полный-путь-до-оболочки 

Если вы используете systemd-homed, выполните:

$ homectl update --shell=полный-путь-до-оболочки пользователь 

Где полный-путь-до-оболочки — это путь, который вывела команда chsh -l .

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

Совет: chsh берёт информацию об оболочках из файла /etc/shells . Если свежеустановленная оболочка не появилась в списке, вы можете добавить её вручную в этот файл.

Удаление оболочки

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

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

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

Оболочка входа

Оболочка входа (login shell) — это режим запуска оболочки, в котором она читает файлы, предназначенные для однократной инициализации, такие как общесистемный /etc/profile или пользовательский ~/.profile или другие специфические для оболочки файлы. Эти файлы задают начальное окружение, которое наследуется всеми другими процессами, запущенными из оболочки (в том числе другими оболочками, не связанными со входом в систему, или графическими приложениями). Следовательно, они читаются только один раз в начале сеанса, то есть, например, когда пользователь входит в консоль или через SSH, меняет пользователя с помощью sudo или su с параметром —login , или когда пользователь вручную запускает оболочку входа (например, командой bash —login ).

Обзор различных файлов инициализации смотрите в разделе #Файлы настроек и по ссылкам в нём. Для получения дополнительной информации об оболочке входа смотрите также Difference between Login Shell and Non-Login Shell? и Why a «login» shell over a «non-login» shell? на Stack Exchange.

Файлы настроек

Чтобы сделать автозапуск программ в консоли или при входе в систему, можно использовать файлы/каталоги, которые оболочка выполняет при запуске. Смотрите документацию к вашей оболочке или соответствующую статью в ArchWiki: например, Bash (Русский)#Файлы настроек или Zsh (Русский)#Файлы запуска/завершения.

/etc/profile

При входе в систему все Bourne-совместимые оболочки выполняют source файла /etc/profile , который, в свою очередь, выполняет source всех читабельных файлов *.sh в каталоге /etc/profile.d/ : в этих скриптах не требуется указывать директиву интерпретатора (шебанг) и их не нужно делать исполняемыми. Они используются для настройки окружения и определения параметров, специфичных для приложений.

Стандартизация

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

Ввод и вывод

    При перенаправлении вывода в файл важно иметь в виду, что файл очищается (truncate) перед выполнением команды. Если вы попытаетесь сделать что-то подобное:

$ команда файл > файл

Смотрите также

  • Evolution of shells in Linux on the IBM developerWorks
  • terminal.sexy — Конструктор цветовых схем терминала
  • Hyperpolyglot — Сравнение синтаксиса разных оболочек
  • UNIX Power Tools — General command-line tool usage
  • commandlinefu.com — Command-line snippets sharing
  • List of applications#Terminal emulators
  • Command-line shells (Русский)
  • Lists of software (Русский)

Os shell что это

КОМАНДНЫЙ ЯЗЫК SHELL

Вы взаимодействуете с ОС UNIX с помощью языка shell. Программа shell переводит вводимые Вами команды в формат, который более понятен ОС UNIX.

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

В этом разделе представлены основные понятия, необходимые для разработки и выполнения процедур shell.

    1. Создавать простую процедуру shell.
    2. Помещать в нее пустые строки и комментарии.
    3. Выполнять эту процедуру.
    4. Определить термин процесс .
    5. Определить отношение между процессом-предком и процессом-потомком.
    6. Описать переменные, которые создаются shell автоматически.
    7. Выполнять команду set для вывода имен и значений всех переменных в Вашем входном shell.
    8. Выполнять команду env для вывода значений переменных среды.
    9. Использовать команду export , чтобы разрешить нескольким процессам shell одновременно использовать имена и значения переменных.
    10. Использовать оператор echo для вывода значений отдельных переменных.
    11. Определить типы переменных, допустимые в shell.
    12. Определить имена переменных, допустимые в shell.
    13. Использовать оператор присваивания и оператор read для присвоения переменным значений.
    14. Использовать подстановку команд для присвоения значения переменной.
    15. Использовать символы, завершающие значение переменной shell в операторе присваивания.
    16. Защищать оператор присваивания значения переменной от действий специальных символов (метасимволов).
    17. Соединять значения переменных.
    18. Использовать позиционные параметры.
    19. Использовать специальную переменную параметров $* .
    20. Определить процессы, выполняемые программой входа login .
    21. Описывать и создавать файл .profile.
    22. Выполнять файл .profile с помощью команды «точка» (dot).
    23. Устанавливать режимы терминала с помощью команды stty .
    24. Назначать Вашу клавишу стирания для исправления одного символа.
    25. Перечислить метасимволы, имеющие специальное значение в shell.
    26. Использовать символ обратной косой черты (backslash) для буквализации (отмены специального значения) одного метасимвола.
    27. Буквализовывать (отменять специальное значение) все метасимволы, заключенные между символами одинарных кавычек.
    28. Перечислить метасимволы, сохраняющие специальное значение между символами двойных кавычек.
    29. Использовать символы двойных кавычек для буквализации (отмены специального значения) заключенных в них метасимволов.
    30. Применять более чем один метод буквализации внутри одной и той же командной строки.
    1. Создавать простую процедуру shell.
    2. Помещать в нее пустые строки и комментарии.
    3. Выполнять эту процедуру.
    4. Определить термин процесс .
    5. Определить отношение между процессом-предком и процессом-потомком.

Создание процедуры Shell

Процедура Shell — это файл, содержащий команды shell (командный файл). Эти процедуры имеют большое значение поскольку они:

  • освобождают от набора на клавиатуре часто используемых команд
  • упрощают задачу запуска (submit) сложных команд
  • позволяют настроить стандартные команды ОС UNIX
  • позволяют создавать новые команды

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

В отличие от языка C , shell — интерпретирующий язык и процедуры shell не нужно компилировать. Исходный файл является выполняемым и должен иметь права доступа читать (read) и выполнять (execute) . Право доступа выполнять присваивает файлу команда chmod . Для выполнения файла, нужно, в ответ на подсказку, набрать на клавиатуре его имя и нажать клавишу .

В этом курсе Вы выполняете процедуры shell неявно. Неявное выполнение процедур или программ shell означает, что Вы:

1. Создаете процедуру используя текстовый редактор.

2. Присваиваете командному файлу право доступа выполнять командой chmod .

3. Выполняете командный файл, набирая на клавиатуре его имя, как имя команды.

На примере 1 справа процедура c именем nfiles выводит число строк в листинге Вашего текущего каталога. Ее можно создать любым редактором, например, vi . Затем присвойте файлу право доступа выполнять командой chmod . Для выполнения наберите, в ответ на подсказку $, имя файла nfiles и .

Имена файлов процедур shell можно выбирать произвольно, но имена стандартных команд ОС UNIX , такие как cat, ls, pwd, применять не следует.

Если Вы не присвоили файлу право доступа выполнять с помощью команды chmod , выводится сообщение об ошибке. Например:

$nfiles
nfiles: execute permission denied
$

Это значит, что файл nfiles не имеет право доступа выполнять . Команда ls -l выведет текущие права доступа. Измените их командой chmod и выполните файл.

СОЗДАНИЕ ПРОЦЕДУРЫ SHELL

(текст файла nfiles был создан с помощью редактора vi)

nfiles: execute permission denied

$ chmod 755 nfiles
$

-rwxr-xr-x 1 slf train 4 Dec 7 08:35 nfiles
$

Комментарии и пустые строки

Выполняя процедуру, shell читает и выполняет каждую строку содержащего ее файла. Строки, начинающиеся с символа # или любые символы, следующие за #, shell интерпретирует как комментарий. Комментарии завершаются символом в конце строки. Кроме того интерпретатор shell игнорирует пустые строки.

Это очень полезная привычка — помещать комментарии в процедуру shell чтобы облегчить понимание ее текста. Пустые и начинающиеся с символа # строки облегчают чтение процедуры.

КОММЕНТАРИИ И ПУСТЫЕ СТРОКИ

 

# Эта процедура shell с именем nfiles выводит количество # # строк в листинге Вашего текущего рабочего каталога # ls | wc -l # вывести листинг текущего каталога # и связать в конвейер эту команду ls # с командой вывода количества строк wc -(lines) pwd # вывести имя каталога, # в котором только что подсчитали строки

################################################################# # # # Комментарии легче читать, если они окружены этими символами # # Это хорошая привычка для выделения информации # # # #################################################################

Создание нового процесса

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

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

Процесс shell интерпретирует строки команд ОС UNIX . Во время сеанса работы за терминалом может быть несколько одновременно выполняющихся процессов shell. При этом любой из них интерпретирует один уровень команд (команды из одного файла). Например, один процесс shell интерпретирует строки команд в программе, вызванной из входного shell; это один уровень команд. Другой процесс shell может интерпретировать строки команд, набираемых на клавиатуре терминала и это другой уровень команд.

Например входной процесс shell интерпретирует строку команды, введенную с терминала:

При этом он выполняет генерацию имени файла, согласно указанию в параметре file* . Другой процесс shell интерпретирует строки команд в файле nfiles этой процедуры.

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

Каждый процесс имеет уникальный номер идентификации, называемый PID (Process Identification Number). Несмотря на то, что у родительского процесса и его потомка данные образа процесса совпадают, и номера идентификации различны. Команда ps — статус процессов, выводит PID всех выполняющихся в этот момент процессов, она обсуждается в разделе 8.

СОЗДАНИЕ НОВОГО ПРОЦЕССА

— Выводит подсказку shell: $ nfiles

— Передает образ процесса

Os shell что это

Интерпретатор командной строки, или shell (shell — оболочка) — эта та программа, которая принимает команды от пользователя и исполняет их.

  • Взаимодействие с пользователем (редактирование командной строки, история команд и т.д.).
  • Обработка (расширение) шаблонов имен (» * «, » ? » и т.д.).
  • Перенаправление ввода/вывода команд.
  • Управление заданиями.

Кроме того, shell — это специализированный язык программирования, в котором есть переменные, конструкции while, if, for и т.д., функции и много чего еще. Он позволяет писать как несложные сценарии для автоматизации повседневных задач, так и довольно сложные программы (например, запуск и останов большинства Unix’ов производятся сценариями на языке shell).

Хотя работа непосредственно в командной строке (а не в оболочке типа NortonCommander или какой-нибудь оконной) на первый взгляд не столь удобна, она обеспечивает более удобный доступ к таким функциям, как перенаправление ввода/вывода и управление заданиями — оболочки типа Midnight Commander в этом случае будут только мешать.

Shell — это не одна конкретная программа. Исторически существует несколько подвидов оболочек; «генеалогическое древо» представлено на Рис.1.

Рис.1: семейство
интерпретаторов командной строки

Не вдаваясь в подробности истории (краткое описание можно найти в разделе 3.10 книги «Unix: универсальная среда программирования» Кернигана и Пайка), стоит лишь заметить, что csh и tcsh не в полной мере реализуют командный язык sh, а zsh, являясь самой последней разработкой, умеет все, что и любой другой подвид, и плюс много чего еще.

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

Изложение в данном разделе основано на zsh (которая и используется на практических занятиях), но большая часть описанного верно и для других оболочек.

Совет: чтобы узнать, какой используется shell, надо выполнить команду

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

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