2 какие типы командных оболочек вы знаете
Перейти к содержимому

2 какие типы командных оболочек вы знаете

  • автор:

Типы командных оболочек

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

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

Командная оболочка является не только интерпретатором команд, которые вводятся в интерактивном режиме, но также и мощным языком программирования. С помощью командных оболочек можно выполнять скрипты командных оболочек (shell scripts). В скриптах несколько команд оболочки объединяются в один пакет (batch). Скрипты командных оболочек системы Linux имеют аналогию с командными файлами (batch files) системы MS-DOS. Скрипты являются очень мощным средством, с помощью которого можно автоматизировать и сделать более удобным использование системы Linux. Скриптам командной оболочки далее будет посвящён специальный раздел.

В системах Linux имеется несколько типов командных оболочек. Два основных типа называются Bourne shell и C shell. Оболочка Bourne shell использует такой же синтаксис команд, какой использовался в самых первых системах UNIX, таких как System III. Исполняемым файлом оболочки Bourne shell в большинстве версий систем Linux является /bin/sh (где sh является сокращением от « shell »═ — оболочка). Оболочка C shell использует иной синтаксис, чем-то напоминающий язык программирования C. В большинстве систем Linux исполняемым файлом этой оболочки будет /bin/csh.

В системе Linux имеются несколько вариантов указанных командных оболочек. Наиболее употребительным является вариант Bourne Again Shell или « bash » (файл /bin/ bash ), а также tcsh (файл /bin/tcsh). Оболочка bash является модификацией оболочки Bourne shell, в которую включено много развитых функций из оболочки C shell. Поскольку синтаксис оболочки bash содержит в качестве подмножества синтаксис оболочки Bourne shell, скрипты, написанные для стандартной оболочки Bourne shell, будут работать и с её модификацией bash . Если вы предпочитаете использовать синтаксис, основанный на языке программирования C, то можно воспользоваться оболочкой tcsh, которая является расширенной версией исходной оболочки C shell.

Выбор типа оболочки является вопросом вкуса. Некоторая разница заключается в том, что синтаксис оболочек, основанных на языке C, более структурирован. Для обычных команд, таких как cp или ls, тип используемой командной оболочки не имеет значения═ — синтаксис будет одинаковым. Только когда вы начнёте самостоятельно писать скрипты или использовать некоторые развитые возможности командных оболочек, разница между ними начнёт играть роль.

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

О разных командных оболочках Linux и Unix

image

Наверняка почти все читатели Хабра знают оболочки sh и bash. Так же большинство из нас что-то слышали про zsh и tcsh. Однако на этом список существующих оболочек не заканчивается. Условно можно разделить их на три группы:

  • Клоны Bourne shell (bash, zsh)
  • C shell (csh, tcsh)
  • Базирующиеся на популярных языках программирования(psh, ipython, scsh)
  • Экзотические, специфические и все остальные

Наибольшее распространение получили POSIX-совместимые оболочки, ведущие родословную от Bourne shell (шелл Борна), поэтому с него и начнем

Bourne shell и его клоны

Bourne shell, исполняемый файл: sh. Командная оболочка названная в честь своего создателя Стивена Борна. Большая часть операторов была заимствована им из языка Алгол 68. Вышла в 7-м издании операционной системы UNIX, где была оболочкой по умолчанию. До сих пор подавляющее большинство Unix-подобных систем имеют /bin/sh — символическую или жесткую ссылку на sh-совместимую оболочку.

Bourne again shell, исполняемый файл: bash. Название можно перевести, как «Возрождённый шел Борна». Скорее всего самая популярная оболочка на сегодняшний день. Де-факто стандарт для Linux. Не буду на ней останавливаться, т.к. в интернете много хороших статей про bash. Например вот и вот.

Z shell, исполняемый файл: zsh. Свободная современная sh-совместимая оболочка. Имеет ряд преимуществ перед bash касающихся в основном работы в интерактивном режиме. О ней на Хабре писали тут и тут
Кроме того существует довольно много оболочек попадающих в эту группу: Korn shell (ksh) и Almquist shell (ash) etc но не будем подробно на них останавливаться.

C shell

C shell, исполняемый файл: csh Командная оболочка разработанная автором vi Биллом Джоем. За основу для скриптового языка csh был взят, как понятно из названия, язык C. Т.к. на тот момент, в 1978 г., это был наиболее популярный язык программирования среди разработчиков и пользователей BSD UNIX. В настоящий момент более популярна свободная реализация csh — tcsh.

TENEX C Shell, исполняемый файл: tcsh. Именно в tcsh когда-то впервые появилось автодополнение. Является оболочкой по умолчанию в FreeBSD. Подробнее о ней почитать можно здесь.
Для того чтоб наглядно показать разницу в синтаксисе приведу несколько примеров скриптов делающих одно и то же для csh и sh-совместимого командного интерпретатора.

#!/bin/sh if [ $days -gt 365 ] then echo This is over a year. fi 
#!/bin/csh if ( $days > 365 ) then echo This is over a year. endif 
#!/bin/sh for i in d* do case $i in d?) echo $i is short ;; *) echo $i is long ;; esac done 
#!/bin/csh foreach i ( d* ) switch ( $i ) case d?: echo $i is short breaksw default: echo $i is long endsw end 
#!/bin/sh i=2 j=1 while [ $j -le 10 ]; do echo '2 **' $j = $i i=`expr $i '*' 2` j=`expr $j + 1` done 
#!/bin/csh set i = 2 set j = 1 while ( $j  

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

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

Perl Shell, исполняемый файл: psh. Оболочка сочетающая в себе функции вышеупомянутых оболочек и мощь языка Perl. Т.к. psh написана на perl она может запускаться даже на Windows. Несколько примеров использования psh:

 ls | s/y/k/ # Замена c помощью регулярных выражений ls | < print ++$i, ": $_"; >q # Быстрые фильтр. Внутри фигурных скобок выражение на perl, где $_ содержит одну строку вывода. netstat | < $_[1]>2; >g # grep-фильтры. Выводятся только те строки для которых выражение в скобках возвращает true command >[=FOO] # Перенаправление по дескриптору открытого файла command >[2] file # Эквивалентно command 2> file на bash. Перенаправляет в файл поток вывода и ошибок grep foo lib/**/*.pm # Использование **, что означает текущий каталог и все подкаталоги 

Scsh, исполняемый файл scsh. Командный интерпретатор с открытым кодом использующий в качестве скриптового языка Scheme 48. Не поддерживает стандартные для других оболочек функции (история команд, редактирование текста в командной строке, дополнение путей/команд). Рекомендуется написания скриптов, но не для интерактивной работы. Может прийтись по вкусу любителям функционального программирования. Ниже приведен пример скрипта, который выводит имена всех исполняемых файлов находящихся в каталогах из переменной окружения PATH

#!/usr/local/bin/scsh -s !# (define (executables dir) (with-cwd dir (filter file-executable? (directory-files dir #t)))) (define (writeln x) (display x) (newline)) (for-each writeln (append-map executables ((infix-splitter ":") (getenv "PATH")))) 

IPython. Это интерактивная оболочка для языка программирования Python, имеющая ряд дополнительных функций. IPython имеет специальный профиль для работы в качестве системной командной оболочки. Способ запуска этого режима зависит, как я понял, от версии, но на моей машине это выглядит так:
ipython3 --profile=pysh

  • Кросплатформенность. Есть даже версия под Windows
  • Python версий 2.x или 3.x в качестве скриптового языка, расширенные возможности интроспекции
  • Автодополнение кода Python а так же имен файлов и системных команд.
  • История команд и макросы на ее основе
  • Механизм ускоряющий навигацию по каталогам, закладки и многое другое
# Допустим нам захотелось посчитать сумарный размер файлов логов dpkg: In [58]: cd /var/log/ /var/log In [59]: log_files = !ls -l dpkg.log* In [60]: log_files[0] Out[60]: '-rw-r--r-- 1 root root 1824 нояб. 3 16:41 dpkg.log' In [61]: for line in log_files: . size += int(line.split()[4]) . In [62]: size Out[62]: 1330009 # . или последовательно пингануть десяток хостов In [67]: for i in range(100,110): . !ping -c 1 192.168.0.$i . 
Остальные

Конечно это не полный список даже популярных оболочек. Помимо вышеперечисленных категорий существуют ещё использующие собственный синтаксис, не совместимый с sh и не копирующий существующие ЯП . Примером может служить friendly interactive shell (fish). Но на последок хотел бы рассказать не о ней, а более специфической sleepshell.

Sleep Dummy Shell, исполняемый файл: sleepshell. Строго говоря командным процессором sleepshell назвать нельзя, т.к. он не умеет обрабатывать команды. И вообще не умеет ничего, кроме как периодически записывать в стандартный вывод звёздочки "*". Однако используется она именно в качестве командной оболочки и вот для чего: Допустим мы хотим предоставить кому-то возможность делать тоннели ssh через наш сервер под управлением Linux или Unix. Подробнее про ssh-туннелирование читаем тут. Но нам не нужно при этом, что этот кто-то получил доступ к командной строке и файловой системе нашего сервера. Для такого случая и предназначена sleepshell. Создаем на сервере аккаунт в качестве шела для него устанавливаем sleepshell. Владелец аккаунта сможет подключаться и пробрасывать порты, но не сможет выполнять команды.

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

Unix2019a/Командная оболочка

Командная оболочка UNIX (англ. Unix shell, часто просто «шелл») — командный интерпретатор, используемый в операционных системах семейства Unix, в котором пользователь может либо давать команды операционной системе по отдельности, либо запускать скрипты, состоящие из списка команд.

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

  • 1 Виды
  • 2 История
    • 2.1 Thompson shell
    • 2.2 Bourne shell
    • 2.3 C shell
    • 3.1 Оболочки в Ubuntu
    • 3.2 Узнать текущую оболочку
    • 5.1 Шебанг (shebang)
    • 5.2 Переменная окружения PATH
    • 5.3 /usr/bin/env
    • 5.4 Не используйте /bin/bash
    • 5.5 Создание сценариев командной оболочки (шелл-скриптов)

    Виды

    В первую очередь, под shell понимаются POSIX-совместимые оболочки, восходящие к Bourne shell (шелл Борна).

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

    • Клоны Bourne shell (bash, zsh)
    • C shell (csh, tcsh)
    • Базирующиеся на популярных языках программирования (psh, ipython, scsh)
    • Экзотические, специфические и все остальные

    История

    Thompson shell

    Первая оболочка Unix — Thompson shell, написанная Кеном Томпсоном в Bell Labs (1971–1975). По современным представлениям выглядит неразвитой, но уже поддерживала перенаправления ввода/вывода, метасимволы (wildcards) для имён файлов, простые управляющие выражения с if, goto (но они были сделаны через отдельные программы). Эта оболочка проектировалась под влиянием оболочки Multics, которая, в свою очередь, делалась на базе программы RUNCOM. Это название можно встретить на современных системах в суффиксе "rc" файлов конфигурации (например, .vimrc и .bashrc).

    Так, у Томпсона перенаправление выглядело следующим образом:

    command1 >command2>

    Такой синтаксис был затем заменён на привычный

    command1 | command2

    Затем появилась оболочка PWB shell (другое название — Mashey shell) (1975–1977). Там появились переменные (предшественники переменных окружения), доступ к ним через $, запуск скриптов, доработаны операторы if/then/else/endif, switch/breaksw/endsw и while/end/break/continue. Но она не стала особо популярной.

    Позже появились оболочки Bourne shell и C shell, которые оказали наибольшее влияние на развитие Unix-оболочек.

    Bourne shell

    Stephen R. Bourne

    Оболочка Bourne shell (часто называют sh по имени исполняемого файла) разработана с нуля Стивеном Борном (Stephen R. Bourne). Внедрена в ОС Unix в 1979 г (в седьмую версию ОС). Большая часть операторов была заимствована им из языка ALGOL 68. Например, наследие этого языка: перевёрнутое ключевое слово используется для завершения блока (iffi, caseesac). Приглашение командной строки отображается в виде доллара $.

    Оболочка Борна выполняла две основные задачи:

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

    Новая командная оболочка Bourne again shell (bash) разработана в 1987 году Брайаном Фоксом (Brian Fox) в рамках Free Software Foundation (Столлман). Фамилия Bourne (Борн) перекликается с английским словом born, означающим «родившийся», отсюда: рождённая-вновь-командная оболочка.

    Подавляющее большинство важных скриптов командного процессора Борна могут выполняться без изменения в bash.

    Командная оболочка Z shell (исполняемый файл zsh) — свободная современная sh-совместимая оболочка. Имеет ряд преимуществ перед bash, касающихся в основном работы в интерактивном режиме. Первая версия zsh была написана Паулем Фалстадом (Paul Falstad) в 1990 году.

    C shell

    Оболочка csh написана Биллом Джоем (Bill Joy) в университете Беркли в рамках проекта по реализации BSD Unix (1979). Билл также известен как автор текстового редактора vi.

    За основу для скриптового языка csh был взят, как понятно из названия, язык C. Т.к. на тот момент, в 1978 г., это был наиболее популярный язык программирования среди разработчиков и пользователей BSD UNIX.

    В настоящий момент более популярна свободная реализация csh — tcsh, или TENEX C Shell. Именно в tcsh когда-то впервые появилось автодополнение. Является оболочкой по умолчанию в FreeBSD.

    #!/bin/sh if [ $days -gt 365 ] then echo This is over a year. fi
    #!/bin/csh if ( $days > 365 ) then echo This is over a year. endif
    #!/bin/sh i=2 j=1 while [ $j -le 10 ] do echo '2 **' $j = $i i=`expr $i '*' 2` j=`expr $j + 1` done
    #!/bin/csh set i = 2 set j = 1 while ( $j = 10 ) echo '2 **' $j = $i @ i *= 2 @ j++ end

    Синтаксис csh на первый взгляд может показаться соблазнительным, потому что похож на C, но в общем использовать эту оболочку для написания скриптов не рекомендуется. Не хватает возможностей по работе с потоками (stdout и stderr) и поддержки функций. В самом интерпретаторе csh используется плохой примитивный парсер (в связи с тем, что в 70-е не была развита наука о компиляторах), из-за чего некоторые на вид корректные скрипты не работают так, как ожидается. Сообщения об ошибках парсинга очень неинформативные.

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

    Современное состояние

    Традиционно в Unix-системах шелл Борна называется sh и, согласно FHS, лежит в /bin/sh. На настоящих системах это часто символическая или жёсткая ссылка на один из альтернативных шеллов:

    • ash (Almquist shell, оболочка Альмквиста);
    • bash (Bourne-again shell, «ещё-одна-командная-оболочка-Борна»);
    • dash (Debian Almquist shell);
    • ksh (Korn shell);
    • zsh (Z shell, современная, имеет ряд преимуществ перед bash касающихся в основном работы в интерактивном режиме);
    • BusyBox — современная микро-версия, предназначенные для встраиваемых систем;
    • .

    Стандарт POSIX специфицирует стандартную оболочку как строгое подмножество Korn shell, расширенной версии оригинальной Bourne shell.

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

    Оболочки в Ubuntu

    Начиная с версии Ubuntu 6.10 (октябрь 2006 г.), ссылка /bin/sh изменена с bash на dash. Это привело к неработоспособности многочисленных скриптов.

    bash остаётся оболочкой для входа в систему по умолчанию.

    Главная причина — эффективность. Оболочка dash более легковесна, при загрузке ОС выполняется большое количество скриптов, в которых возможности bash избыточны.

    sobols@sobols-VirtualBox:~$ ls /bin/*sh -l -rwxr-xr-x 1 root root 1017016 Крс 24 2014 /bin/bash -rwxr-xr-x 1 root root 121272 Лют 19 2014 /bin/dash lrwxrwxrwx 1 root root 4 Врс 19 2014 /bin/rbash -> bash lrwxrwxrwx 1 root root 9 Врс 14 09:36 /bin/sh -> /bin/dash lrwxrwxrwx 1 root root 7 Врс 19 2014 /bin/static-sh -> busybox

    Узнать текущую оболочку

    echo $0 echo $SHELL

    Терминалы

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

    Терминалы могут быть:

    • аппаратными терминалами («tty», от «телетайп»),
    • псевдотерминалами («pty»).

    Аппаратные терминалы подключаются через некоторый интерфейс, такой как последовательный порт (ttyS0, . ) или USB (ttyUSB0, . ), или через экран ПК и клавиатуру (tty1, . ). Псевдотерминалы предоставляются терминальным эмулятором, который является приложением. Файлы в каталоге /dev/pts являются псевдотерминалами.

    Некоторые типы псевдотерминалов:

    • Приложения GUI, такие как xterm, gnome-terminal, konsole, . преобразуют клавиатуру и события мыши в текстовый ввод и вывод изображения графически некоторым шрифтом.
    • Мультиплексорные приложения, такие как screen и tmux, передают ввод и вывод на другой терминал, чтобы отделить приложения от фактического терминала.
    • Удаленные приложения оболочки, такие как sshd, telnetd, rlogind, . передают ввод и вывод между удалённым терминалом на клиенте и pty на сервере.

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

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

    Чтобы поэкспериментировать, запустите команду tty в терминале, чтобы узнать, какое терминальное устройство используется. Скажем, это /dev/pts/42. В шелле в другом терминале запустите echo

    echo hello> /dev/pts/42

    Приветствие hello будет отображаться на другом терминале. Теперь запустите

    cat /dev/pts/42

    и введите в другой терминал. Чтобы убить эту команду, нажмите Ctrl+C.

    Запись на другой терминал иногда бывает полезной для отображения уведомления; например, команда write делает это. Чтение с другого терминала обычно не выполняется, потому что не требуется.

    При нажатии клавиш Ctrl+Alt+F1, Ctrl+Alt+F2, из графической оболочки Linux-дистрибутива можно попасть в текстовый режим в терминалы tty1, tty2, . Для возврата обратно в графический режим обычно можно нажать Ctrl+Alt+F7.

    Запуск программ

    • бинарные исполняемые файлы (в формате ELF и пр.);
    • текстовые программы (скрипты) на интерпретируемых языках.

    И те, и те файлы в UNIX-системах имеют выставленные биты права на выполнение. Право на выполнение (x) означает, что вы можете загрузить файл в память и попытаться запустить его на выполнение как исполняемую программу. Загрузчик по первым байтам понимает, как запускать этот исполняемый файл.

    Шебанг (shebang)

    Последовательность из двух символов: решётки и восклицательного знака (#!) в начале файла скрипта.

    Когда скрипт с шебангом выполняется как программа в UNIX-подобных операционных системах, загрузчик программ рассматривает остаток строки после шебанга как имя файла программы-интерпретатора. Загрузчик запускает эту программу и передаёт ей в качестве параметра имя файла скрипта с шебангом.

    #!interpreter [optional-arg]

    interpreter должен быть абсолютным путём.

    Пример: в файле some/path/to/foo записано

    #!/bin/sh -x

    и он запускается как

    some/path/to/foo bar baz

    Это то же самое, что запустить

    /bin/sh -x some/path/to/foo bar baz

    Вопрос: что будет, если запустить

    #!/bin/cat Hello world!

    Ответ: напечатаются обе строки.

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

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

    На POSIX и Unix-подобных операционных системах переменная PATH задана как одно или несколько имён каталогов, разделённых двоеточиями (:).

    echo $PATH

    Согласно стандарту POSIX, использовать каталоги с двоеточием в имени не получится.

    Since is a separator in this context, directory names that might be used in PATH should not include a character.

    В основном в переменную PATH входят каталоги /bin, /usr/bin и /usr/local/bin.

    Текущий каталог (.) обычно в PATH не входит из соображений безопасности, чтобы избежать случайного исполнения скриптов из текущего каталога. Запуск такой программы требует написания (./) перед названием.

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

    /usr/bin/env

    Для переносимости, чтобы не указывать полный путь к интерпретатору, в шебанг прописывают программу /usr/bin/env. Например,

    /usr/bin/env python

    запустит первый python, который будет найден в PATH.

    Пусть есть следующий скрипт на Python:

    #!/usr/bin/env python import sys print sys.executable
    sobols@sobols-VirtualBox:~/unix/path$ ./main.py /usr/bin/python sobols@sobols-VirtualBox:~/unix/path$ virtualenv venv Running virtualenv with interpreter /usr/bin/python2 New python executable in /home/sobols/unix/path/venv/bin/python2 Also creating executable in /home/sobols/unix/path/venv/bin/python Installing setuptools, pkg_resources, pip, wheel. done. sobols@sobols-VirtualBox:~/unix/path$ source ./venv/bin/activate (venv) sobols@sobols-VirtualBox:~/unix/path$ ./main.py /home/sobols/unix/path/venv/bin/python

    Не используйте /bin/bash

    #!/bin/bash в качестве shebang использовать не стоит, т. к. место расположения bash не специфицируется FHS (в принципе, он может лежать в /usr/bin/bash, например – так обстоят дела по крайней мере в некоторых версиях FreeBSD).

    #!/bin/bash
    #!/usr/bin/env bash

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

    #!/bin/sh

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

    Создание сценариев командной оболочки (шелл-скриптов)

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

    • nano / mcedit (mc F4) / evim
    • gedit
    • Sublime Text
    • .

    Расширение файла значения не имеет. Часто используется .sh.

    2 какие типы командных оболочек вы знаете

    Программа командной оболочки Unix Shell интерпретирует команды пользователя, которые либо непосредственно вводятся пользователем, либо могут быть прочитаны из файла, представляющего собой скрипт командной оболочки shell или shell-программы. Скрипты командной оболочки интерпретируются, а не компилируются. Командная оболочка читает строка за строкой скрипт и обращается в систему за исполнением команд из скрипта (смотрите раздел "Преимущества командной оболочки Bourne Again Shell "), тогда как компилятор преобразует программу в машиночитаемую форму - исполняемый файл, который можно использовать в скрипте shell.

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

    Типы командных оболочек

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

    • sh или командная оболочка Bourne Shell: оригинальная командная оболочка, которая до сих пор используются в системах UNIX и в UNIX-подобных средах. Это основная командная оболочка - небольшая программа с небольшими возможностями. Хотя она не является стандартной командной оболочкой, она по-прежнему есть в любой системе Linux для обеспечения совместимости с программами UNIX.
    • bash или командная оболочка Bourne Again Shell: стандартная командная оболочка GNU, интуитивно понятная и гибкая. Вероятно, лучше всего подходит для начинающих пользователей и, в то же самое время, является мощным инструментом для опытного и профессионального пользователя. В Linux bash является стандартной командной оболочкой для обычных пользователей. Эта командная оболочка является так называемым расширением оболочки Bourne со множеством дополнений и плагинов. Это значит, что командная оболочка Bourne Again совместима с оболочкой Bourne: команды, которые работают в sh, также работают и в bash. Однако, обратное верно не всегда. Во всех примерах и упражнениях, приведенных в этой книге, используется bash.
    • csh или командная оболочка C: синтаксис этой оболочки напоминает язык программирования C. Иногда требуется программистам.
    • tcsh или командная оболочка TENEX C: расширение обычной командной оболочки C, она более быстрая и дружественная для пользователей. Вот почему некоторые из них также называют эту командную оболочку оболочкой Turbo C.
    • ksh или командная оболочка Korn: иногда ценится людьми, использующими UNIX. Расширение командной оболочки Bourne; стандартная конфигурация является кошмаром для начинающих пользователей.

    В файле /etc/shells содержится список известных системе Linux командных оболочек:

    mia:~> cat /etc/shells /bin/bash /bin/sh /bin/tcsh /bin/csh

    В файле /etc/passwd указывается оболочка, используемая по умолчанию, например, так, как в следующей строке для пользователя mia:

    mia:L2NOfqdlPrHwE:504:504:Mia Maya:/home/mia:/bin/bash

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

    mia:~> tcsh [mia@post21 ~]$
    Предыдущий раздел: Оглавление Следующий раздел:
    Глава 1. Содержание Преимущества Bash

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

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