Изучение базового написания скриптов оболочки (Shell Scripting) и файловой системы Linux, устранение неполадок -- LFCS часть 10

Изучение базового написания скриптов оболочки (Shell Scripting) и файловой системы Linux, устранение неполадок — LFCS часть 10

Рубрики:

LFCS

Метки:

, , , , ,

Сегодня мы расскажем про Shell Scripting. Linux Foundation запустила сертификацию LFCS (Linux Foundation Certified Sysadmin), новую инициативу, цель которой — дать возможность людям, где бы они не находились, получить сертификацию по базовой операционной поддержке для Linux-систем.

Это 10 статья нашей серии, состоящей из 20 статей. В этой статье мы сфокусируемся на основных сценариях оболочки и устранении неполадок файловых систем Linux. Обе эти темы необходимы для прохождения экзамена LFCS.

Понимание терминалов и оболочек (Shell Scripting)

Давайте сначала разъясним несколько концепций.

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

Терминал — это программа, которая позволяет нам, как конечным пользователям, взаимодействовать с оболочкой (Shell Scripting). Одним из примеров терминала является терминал GNOME, как показано на рисунке ниже.

Изучение базового написания скриптов оболочки (Shell Scripting) и файловой системы Linux, устранение неполадок -- LFCS часть 10

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

Вы можете обратиться к другой статье этой серии (Как использовать команду «sed» GNU для создания, редактирования и манипулирования файлами в Linux — часть 1), чтобы вспомнить некоторые полезные команды.

Linux предоставляет ряд опций для оболочек (Shell Scripting), причем наиболее распространенными являются следующие:

 

Bash Shell

Bash означает Bourne Again SHell и является оболочкой по умолчанию для GNU Project. Она включает полезные функции из оболочки Korn (ksh) и оболочки C (csh), одновременно предлагая несколько улучшений. Это оболочка по умолчанию используется дистрибутивами, включенными в сертификацию LFCS, и также это оболочка, которую рассмотрим в этой статье.

 

Sh Shell

Bourne SHell — старейшая оболочка, поэтому на протяжении многих лет она была стандартной оболочкой многих UNIX-подобных операционных систем.

 

Ksh Shell

Korn SHell — это оболочка Unix, разработанная Дэвидом Корном в Bell Labs в начале 1980-х годов. Она совместима с оболочкой Bourne и включает в себя множество функций оболочки C.

 

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

 

Основные сценарии оболочки (Shell Scripting)

Как упоминалось ранее, сценарий оболочки создается как обычный текстовый файл. Таким образом, можно создавать и редактировать, используя любой текстовый редактор. Вы можете рассмотреть возможность использования vi/vim ( Как установить и использовать vi/vim в качестве полнотекстового редактора — часть 2). В нём также имеется подсветка синтаксиса для дополнительного удобства.

Введите следующую команду, чтобы создать файл с именем myscript.sh и нажмите Enter.

 

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

 

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

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

 

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

 

Перед запуском нашего скрипта нам нужно сказать несколько слов о переменной среды $PATH.

 

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

Когда мы вводим команду и нажимаем Enter, оболочка выполняет поиск во всех каталогах, перечисленных в переменной $PATH, и выполняет первый найденный экземпляр. Давайте рассмотрим пример:

Environment-Variables

Если есть два исполняемых файла с тем же именем, первый из /usr/local/bin и второй из /usr/bin, первый будет выполнен соответственно первым, тогда как второй будет проигнорирован.

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

 

Изучение базового написания скриптов оболочки (Shell Scripting) и файловой системы Linux, устранение неполадок -- LFCS часть 10

 

Условные выражения

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

 

Также CONDITION может принимать одно из следующих значений (здесь приводятся только самые популярные условия) и имеет значение true, тогда:

  • [-a file] → файл существует.
  • [-d file] → файл существует и является каталогом.
  • [-f file] → файл существует и является обычным файлом.
  • [-u file] → файл существует, и его бит SUID (устанавливает идентификатор пользователя) установлен.
  • [-g file] → существует и его бит SGID установлен.
  • [-k file] → файл существует, и его «sticky»  бит установлен.
  • [-r file] → файл существует и доступен для чтения.
  • [-s file] → файл существует и не пуст.
  • [-w file] → файл существует и доступен для записи.
  • [-x file] → файл является истинным, если файл существует и является исполняемым.
  • [String1 = string2] → строки равны.
  • [String1! = String2] → строки не равны.
[int1 op int2] должен быть частью предыдущего списка, в то время как следующие элементы (например,     -eq -> true, если int1 равно int2) должны быть «дочерними» [int1 op int2], где op является одним из следующих операторов сравнения:

 

  • -eq -> true, если int1 равно int2.
  • -ne -> true, если int1 не равно int2.
  • -lt -> true, если int1 меньше, чем int2.
  • -le -> true, если int1 меньше или равно int2.
  • -gt -> true, если int1 больше, чем int2.
  • -ge -> true, если int1 больше или равно int2.

 

Цикл for

Цикл for позволяет выполнить одну или несколько команд для каждого значения в списке значений. Его основной синтаксис:

 

Где item является общей переменной, которая представляет каждое значение в SEQUENCE во время каждой итерации.

 

Циклы While

Этот цикл позволяет выполнять ряд повторяющихся команд до тех пор, пока выполняется команда управления со статусом выхода, равным нулю (успешно). Его основной синтаксис:

 

Где EVALUATION_COMMAND может быть любой командой, которая может завершиться значением «0» или наоборот (при всех значениях, кроме 0), а EXECUTE_COMMANDS может быть любой программой, сценарием или оболочкой (Shell Scripting), включая другие вложенные циклы.

 

Соберём эти понятия воедино

Мы продемонстрируем использование конструкции if и цикла for в следующем примере.

 

Определение того, работает ли служба в дистрибутиве systemd

Давайте создадим файл со списком услуг, который мы хотим отслеживать:

 

Script-to-Monitor-Linux-Services

Наш сценарий оболочки должен выглядеть так.

 

Linux-Service-Monitoring-Script

Давайте объясним, как работает скрипт:

1) Цикл for считывает файл myservices.txt один элемент списка за раз. Этот элемент списка LIST обозначается общей переменной с именем service.

 

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

 

3) Для каждого элемента LIST (что означает каждый экземпляр служебной переменной) будет выполнена следующая команда.

 

На этот раз знак доллара должен предшествовать соответствующей переменной (которая представляет каждый элемент в LIST), чтобы обозначить, что это переменная, и поэтому ее значение на каждой итерации должно использоваться. Затем выход передается в grep.

Флаг —quiet используется, чтобы grep не отображала на экране строки, где появляется слово running. Когда это произойдет, указанная выше команда возвращает статус выхода 0, таким образом проверяя, что служба запущена.

Статус выхода, отличный от 0 (это означает, что слово running не было найдено в выводе systemctl status $ service) указывает, что служба не запущена.

Изучение базового написания скриптов оболочки (Shell Scripting) и файловой системы Linux, устранение неполадок -- LFCS часть 10

Мы можем пойти еще дальше и проверять наличие myservices.txt, прежде чем пытаться войти в цикл for.

 

Пингование серии сетевых или интернет-хостов для статистики

Вы можете сохранить список хостов в текстовом файле и использовать скрипт, чтобы определять время от времени, являются ли они доступные или нет (не стесняйтесь заменять содержимое myhosts и пытаться делать что-то самостоятельно).

Встроенная команда оболочки read сообщает циклу while считывать myhosts по строкам и назначает содержимое каждой строки переменной host, которая затем передается команде ping.

 

Script-to-Ping-Servers

 

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

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

Fsck не только проверит целостность файловых систем, но и попытается восстановить поврежденные файловые системы, если это возможно. После восстановления файловой системы, восстановленные части файлов помещаются в каталог lost + found, расположенный в корне каждой файловой системы.

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

Основной синтаксис fsck следующий:

 

Проверка файловой системы на ошибки и автоматическое восстановление

Чтобы проверить файловую систему с помощью fsck, мы сначала должны отключить её.

 

Check-Filesystem-Errors

 

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

 

Если нас интересуют только ошибки (без каких-либо попыток их исправить), мы можем запустить fsck с опцией -n, которая выведет информацию о проблемах файловой системы на стандартный вывод.

 

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

Итоги

Итак, мы дошли до половины серии, состоящей из 20 статей, где пытаемся рассказать об основных требованиях, необходимых для прохождения экзамена LFCS.

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

 

 

Спасибо за уделенное время на прочтение статьи!

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасностиполный курс по кибербезопасности от Академии Ciscoкурсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

 

Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!

Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.
Что Вы получите?
  • Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
  • Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проведем вечерние онлайн-лекции на нашей платформе.
  • Согласуем с вами удобное время для практик.
  • Если хотите индивидуальный график — обсудим и реализуем.
  • Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
А еще поможем Вам:
  • отредактировать или создать с нуля резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.

Рубрики:

LFCS

Метки:

, , , , ,

Больше похожих постов

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

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

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения


Поиск по сайту
Лучшее
Популярное
Рубрики
Меню