Основы линукс: Введение в bash. Оболочка Bash: введение. Изучение команд командного интерпретатора bash в ос linux

В большинстве операционных систем Linux, bash является принятым по умолчанию интерпретатором командной строки. Для определения текущего интерпретатора введите следующую команду:

$ echo $SHELL
/bin/bash

В этом примере используется интерпретатор командной строки bash. Существует множество других командных интерпретаторов. Для активизации другого интерпретатора можно ввести его имя в командной строке (ksh, tcsh, csh, sh, bash и т.д.).

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

Проверка доступности интересующего интерпретатора командной строки

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

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

  • Привычка работать в системах UNIX System V (во многих из них по умолчанию применяются интерпретатор ksh) или в системах компании Sun Microsystems и других системах на базе Berkeley UNIX (в них часто используется csh). В таком случае применение этих интерпретаторов командной строки окажется более удобным.
  • Необходимость запуска сценариев, которые создавались для определенного командного интерпретатора.
  • Возможности альтернативного командного интерпретатора могут оказаться более предпочтительными. Например, один из членов группы пользователей Linux предпочитает применять ksh, так как его не устраивает способ создания псевдонимов в bash.

Хотя большинство пользователей предпочитает работать в одном командном интерпретаторе, полученные навыки помогают научиться работать и в других интерпретаторах командной строки , изредка заглядывая в справочное руководство (например, с помощью команды manbash). Большинство используют bash, так как нет причин переходить на другой интерпретатор.

Использование Bash и ch

Название bash является аббревиатурой от Bourne Again SHell. Эта аббревиатура указывает на то, что bash наследует интерпретатор Bourneshell (команда sh), созданный Стивом Борном (Steve Bourne) из AT&TBell Labs. Брайан Фокс (Brian Fox) из Free Software Foundation создал bash в составе проекта GNU. В дальнейшем разработка перешла в руки Чета Рами (Chet Ramey) в Case Western Reserve University.

Интерпретатор bash содержит возможности, которые разрабатывались для интерпретаторов sh и ksh во времена ранних версий UNIX, а также ряд возможностей интерпретатора csh.

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

Большинство примеров в этой статье рассчитано на использование bash.

Интерпретатор bash может запускаться в различных режимах совместимости, имитируя поведение других командных интерпретаторов. Он может имитировать поведение Bourne shell (sh) или командного интерпретатора, совместимого со стандартами POSK (bash — posix).

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

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

Использование tcsh (и более раннего интерпретатора csh)

Командный интерпретатор tcsh является реализацией интерпретатора Сshell (csh) с открытым исходным кодом. Интерпретатор csh был создан Биллом Джоем (Bill Joy) и используется по умолчанию практически во всех системах Berkeley UNIX (такие системы распространялись компанией Sun Microsystems).

Многие возможности csh, например редактирование командной строки и методы управления историей команд, были реализованы в интерпретаторе tcsh и в других командных интерпретаторах. Так же как команда sh запускает интерпретатор bash в режиме совместимости с интерпретатором sh, команда csh запускает интерпретатор tcsh в режиме совместимости с интерпретатором csh.

Использование интерпретатора ash

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

Интерпретатор ash хорошо подходит для применения во встраиваемых системах с ограниченными системными ресурсами. В операционной системе FedoraCore 4 интерпретатор ash на порядок меньше интерпретатора bash.

Использование zsh

Интерпретатор zsh является еще одним клоном интерпретатора sh. Он соответствует требованиям стандарта POSIX (как и bash), но обладает другими возможностями, включая проверку орфографии и иной подход к редактированию командной строки. Интерпретатор zsh использовался по умолчанию в первых операционных системах MacOS X, но в современных системах по умолчанию применяется интерпретатор bash.

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

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

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

1. source

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

source /etc/profile

2. alias

Команда alias позволяет создавать псевдонимы для других команд. Например, вы можете настроить так, чтобы когда вы вводите update, выполнялась команда sudo apt update && sudo apt upgrade. Если вызвать команду без параметров, то она выведет список уже заданных псевдонимов. Смотрите подробнее о том как создавать в отдельной статье.

3. bind

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

bind ""\e

Параметры

-c string Если данный параметр присутствует, то команда будет считана из строки string . Если в передаваемой команде есть дополнительные аргументы, они считаются позиционными и начинаются с $0. (Раздел Аргументы )
-i Интерактивная работа интерпретатора
-l Смотреть INVOCATION ниже
-r Ограничения в работе оболочки. Смотреть RESTRICTED SHELL
-s Если указан данный параметр и нет всех необходимых аргументов, то они считываются из стандартного ввода
-D Список всех строк заключенных в двойные кавычки с $ в начале выводятся на стандартный вывод. Необходимо для выполнения перевода. Никакие команды выполняться не будут
[-+]0[shopt_option ]

shopt_option - дополнительные параметры оболочки. Читать подраздел SHELL BUILTIN COMMANDS. Если данный параметр присутствует6 тогда -0 перед ним устанавливает указанный параметр, а +0 отменяет его. Если параметр shopt_option не указан, то +0 выводит перечень установленных параметров на стандартный вывод в формате позволяющем повторное использование в качестве входных данных.

-- Сигнализирует об окончании установки параметров. Любые параметры после него рассматриваются как имена файлов и аргументы для скрипта. Параметр "-" эквивалентен "--".

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

--debugger Запускает профайл отладчика перед запуском скрипта. Включает расширенный режим отладки (подробнее в описании extdebug ) и запускает функцию трассировки
(смотреть описание параметра -o ).
--dump-po-string Эквивалентно -D, но вывод производится формат файла локализаций.po
--dump-strings Полностью аналогично -D
--help Подсказка
--init-file file
--rcfile file Если интерпретатор запускается в интерактивном режиме, то выполняет команды инициализации и указанного файла file , а не из стандартного файла инициализации ~/.bashrc .
--login Аналогично -l
--noediting
--noprofile Не читать при запуске оболочки интерпретатора общесистемные файлы настроек /etc/profile и любые локальные файлы настроек, такие как ~/.bash_profile , ~/.bash_login или ~/.profile . По умолчанию bash их использует при запуске в режиме входа (подробнее в параметре INVOCATION).
--norc Не читать и не исполнять файл персональных настроек ~/.bashrc при интерактивном запуске. По умолчанию данный параметр установлен при запуске оболочки командой sh .
--posix Изменение поведения по умолчанию bash, когда встречается команда отличающаяся от стандарта POSIX (для обеспечения совместимости)
--restricted Действия оболочки ограниченны (читать ниже о параметре RESTRICTED SHELL)
--verbose Аналогично -v (подробный вывод)
--version Вывести информацию о текущей версии интерпретатора на стандартный вывод

Аргументы

Если после обработки параметров остаются аргументы не связанные с параметрами -с или -s, то первый аргумент считается именем файла содержащий скрипт с командами. В $0 записывается имя файла и остальные аргументы записываются попозиционно. Bash считывает команды скрипта, выполняет их и затем выходит. Статус завершения будет равен статусу завершения последней выполненной команды скрипта. Если не выполнялось ни одной команды, возвращаемое значение будет "0". Сначала производится попытка открыть скрип из текущей папки, в случае если его там нет, буде произведен поиск указанного файла согласно переменной PATH для скриптов.

Вызов bash

login shell - если первый символ после -- 0 или запуск выполнен с параметром -login.

interactive shell -интерактивная работа. Если запуск произведен без аргументов и без параметра -c со стандартным устройством ввода вывода в виде terminal.app или запуск с параметром -i.

Обработка файлов инициализации. Если какой-либо из файлов с параметрами инициализации существует, но его невозможно прочесть, bash в Mac сообщает об ошибке.

Когда баш запускается в интерактивном режиме или login режиме, в первую очередь считываются и выполняются команды из файла /etc/profile (если он имеется), после этого проверяется наличие файлов ~/.bash_profile , ~/.bash_login , and ~/.profile и если они в наличии и доступны, то команды из них выполняются в том же порядке как они причислены. Чтобы пропустить процесс обработки вышеперечисленных файлом можно использовать параметр --noprofile

Если bash был запущен в режиме login, проверяется и в случае наличия исполняется файл ~/.bash_logout .

В случае запуска в интерактивном режиме, без режима login то во время запуска дополнительно исполняется файл ~/.bashrc . Для отключения данного файла используется параметр --norc или --rcfile file для замены исполняемого файла на другой (file ).

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

Когда bash вызывается командой sh, он пытается использовать наиболее старую версию для обеспечения совместимости с POSIX стандартом. Когда вызывается в интерактивном режиме или в режиме --login в первую очередь считываются и исполняются последовательно файлы /etc/profile и ~/.profile , для запрета использования этих файлов предназначен параметр --noprofile . Также в интерактивном режиме считывается значение переменной ENV для использования его в качестве пути для поиска исполняемого файла. При запуске командой sh параметр запуска --rcfile игнорируется и не может быть использован. При запуске в стандартном режиме никакие файлы конфигурации не используются, работа интерпретатора идет в POSIX режиме.

Когда bash запущен в режиме posix с помощью параметра в командной строке --posix интерпретатор будет придерживаться стандарта POSIX для файлов инициализации. В этом случае интерактивный режим использует значение переменной ENV, в которой должно быть записано имя файла инициализации, никакие другие файлы инициализации не будут выполняться.