Статья также доступна на украинском (перейти к просмотру).
Оглавление
- Bash – основные понятия
- Работа с командной строчкой Bash
- Получение информации о текущей оболочке и ее настройке
- Получение справочной и другой информации о bash-процессоре
- Скрипты и их использование
Командная оболочка bash обеспечивает удобный интерфейс управления *nix-системами и позволяет автоматизировать процесс работы с помощью скриптов. Это значительно сокращает временные затраты и уменьшает количество ошибок, что отражается на стабильности работы системы. Рассмотрим основные принципы построения и использования bash на примере применения базовых команд и создания простейшего bash-скрипта.
Bash – основные понятия
Bash (Bourne again shell) является усовершенствованным вариантом известной командной оболочки sh sh (Bourne shell). Ее основное предназначение – обеспечить взаимодействие между пользователем и ядром операционной системы. Такое взаимодействие может происходить двумя путями. Во-первых, с помощью набранных в терминале команд (интерфейс командной строчки). Во-вторых, путем запуска на исполнение заранее подготовленных файлов сценариев (shell-скриптов).
Для обеспечения указанных возможностей у bashпредусмотрено наличие собственной системы команд и языковых конструкций. Внутренние или интегрированные в оболочку команды во время работы находятся в оперативной памяти компьютера, а внешние хранятся в виде файлов в системном каталоге обычно в /usr/bin или /bin.
Внутренние команды, в частности, позволяют выполнять следующие действия:
- Выполнение операций над файловой системой;
- Работа с переменными;
- Управление сценариями;
- Управление запущенными процессами;
- Обеспечение ввода-вывода из периферийных устройств.
Bash-сценарии или shell-скрипты позволяют автоматизировать процесс управления системой, начиная с автоматизации процесса обновления пакетов и заканчивая почти полным контролем за работой операционной системы. Их преимуществами над некоторыми из своих «конкурентов» в частности, являются::
- «Прозрачность»пользовательского кода, поскольку команды сохраняются в текстовом формате;
- Структурированность сценария, то есть возможность указать последовательность выполнения команд;
- Совместимость с большинством *nix-систем.
Можно выделить несколько условно конкурирующих аналогов Bash. Это, например, следующие командные процессоры:
- sh – «устаревший» стандарт для *nix-систем;
- ksh и zsh – расширенные варианты sh;
- csh и tcsh – основаны на языке С и имеют соответствующий синтаксис;
- mksh – ориентированная на создание сценариев;
- fish – имеет упрощенный состав команд и делает упор на удобство работы;
- dash – более «легкое» программное средство с ограниченной функциональностью.
Работа с командной строчкой Bash
Для облегчения изучения материала разобьем наше рассмотрение команд на несколько логических блоков, каждый из которых включает в себя команды определенной ориентированности.
Получение информации о текущей оболочке и ее настройке
Для полноценной работы с оболочкой необходимо ориентироваться в программной среде и уметь выполнить элементарные действия, чтобы получить нужную информацию.
Сначала выясним, какая оболочка активна для нашей системы Ubuntu 20.04.Для этого обратимся к переменной программной среде SHELL. Введем в терминале:
$ echo $SHELL
Мы получили путь к местонахождению файлов активной оболочки – /bin/bash. Итак, это действительно bash. Ее характерным признаком является специфический формат приглашения в командной строчке, который выглядит так:
имя текущего пользователя@имя хоста:текущий каталог #($)
Символом в конце строчки обозначаются привилегии текущего пользователя: # – для пользователей с правами суперпользователя (root), $ – для обычных пользователей. Итак, в нашем случае пользователем является администратор, а хост имеет имя dedicated. Знак тельды (~) после имени хоста указывает на то, что мы находимся в домашней директории суперпользователя root.
Для просмотра всех доступных в системе shell-оболочек введем в терминале:
$ cat /etc/shells
Мы видим достаточно значительный перечень доступных командных процессоров, и в случае чего всегда можем выбрать любой из них. Для этого существует команда chsh (change shell) с параметром s. Например, изменим текущий процессор на dash:
$ chsh -s /bin/dash root
После выхода из системы и повторной авторизации под тем же именем, мы видим активную оболочку dash вместо предыдущей:
Вид приглашения в командной строчке стал другим. В нем остался только признак привилегии текущего пользователя – «#». Возвратим предыдущий процессор с помощью следующей команды:
$ chsh -s /bin/bash root
После выхода из системы и повторной авторизации мы снова вернулись к предварительной настройке среды:
Для того чтобы увидеть путь к размещению файлов текущей оболочки можно использовать следующую команду:
$ which bash
Можно убедиться, что команда which «работает».
Еще одним способом для выяснения того, какой командный процессор активен в настоящее время, является использование команды ps которая возвращает информацию о запущенном процессе с заданным идентификатором. Идентификатором для оболочки всегда являются символы «$$». Введем в терминале:
$ ps –p$$
Следовательно, это также реальный путь для определения активной оболочки системы.
Получение справочной и другой информации о bash-процессоре
Для получения справочной информации о командном процессоре, параметрах запуска и другой информации, введем в терминале:
$ man bash
После нажатия на клавишу «h» получим дополнительную пояснительную информацию:
Нажмем «q» и выйдем из справки.
Для выяснения типа используемых команд, то есть, являются ли они внутренними или внешними, существует следующая конструкция:
type <ім'я_команди>
Например, определим тип команды cd. Введем в терминале:
$ type cd
Таким образом, cd относится к внутренним командам. Теперь проверим таким же образом команду whereis:
$ type whereis
Мы видим, что указанная команда является внешней, поскольку она хранится в файле, к которому выведен полный путь доступа: /usr/bin/whereis.
Можно даже определить список внутренних команд процессора:
$ help
То есть, мы получили полный список команд вместе с параметрами их запуска, что очень удобно.
Скрипты и их использование
Как мы убедились из результатов предварительного рассмотрения, возможности командного интерфейса bash достаточно мощные, но наибольший выигрыш с точки зрения управления системой дает использование групп команд, или shell-скриптов. Такие файлы обычно имеют расширение .sh и могут вызываться интерпретатором несколькими способами, о чем мы поговорим чуть позже.
К примеру, создадим самый простой скрипт с именем one_lesson, в составе которого будет только одна команда echo. Введем в терминале:
$ nano one_lesson.sh
В результате откроется окно редактора nano, где мы введем следующий текст:
#!/bin/bash #Це наш перший скрипт echo “One lesson!”
Разберем каждую строчку сценария.
Первые два символа первой строчки (#!) дают указание интерпретатору оболочки на выполнение команд, указанных в файле, иначе он воспринимал бы их как текст и не выполнял. Остальные символы этой же строчки указывают путь к размещению файлов интерпретатора. В данном случае это bash.
Вторая строчка начинается с символа «#», являющегося признаком комментария, и поэтому интерпретатор будет воспринимать текст, указанный после указанного символа только как текст и, соответственно, не будет выполнять команды из него, даже если бы они там были.
Третья строчка является непосредственно командой, выводящей результаты на устройство вывода.
Сохраним введенные данные (ctrl+O) и выйдем из редактора (ctrl+X).
Запустим подготовленный скрипт во исполнение. Для этого наберем в терминале следующую команду:
$ bash one_lesson.sh
Как видим, результатом выполнения скрипта будет вывод на терминал слов «One lesson!».
Если файл скрипта находится в другой директории, необходимо непосредственно в команде указать к нему путь. Путь можно определить с помощью внутренней команды для вывода текущего каталога pwd. Пример:
$ bash ttt/bash/newscript.sh
Это был первый способ запуска скриптов. Другой способ заключается в присвоении файлу сценарию атрибута «исполнительный» и использованию символов «./»для его запуска.
Чтобы изменить статус нашего файла, введем в терминале:
$ chmod +x one_lesson.sh
Теперь запустим скрипт:
$ ./one_lesson.sh
То есть, указанный способ запуска сценариев является работоспособным.
Такие скрипты могут быть достаточно сложными, образованными из большого количества связанных между собой команд, каждая из которых имеет свой синтаксис. Это значит, что начинать нужно с базы – языковых конструкций bash-процессора. Об этом и поговорим в следующей статье, о чем будет уведомлено в нашем телеграмм-канале. Итак, подписывайтесь, чтобы не упустить.
Смотрите наш канал Youtube на https://www.youtube.com/freehostua.
Ми в чем то ошиблись или что то пропустили?
Напишите об этом в комментариях, мы с удовольствием ответим и обговорим Ваши замечания и предложения
Дата: 24.03.2023 Автор: Александр Ровник
|
|
Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:
comments powered by Disqus