PDSH: Параллельное выполнение команд на нескольких Linux-серверах

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

Команды Linux для навигации в терминале

  1. &&. Строго говоря, это не команда. Если вы хотите выполнить сразу несколько команд, поставьте между ними двойной амперсанд вот так: первая_команда && вторая_команда. Терминал выполнит команды по порядку. Вы можете ввести столько команд, сколько захотите.
  2. alias. Присваивает созданные вами названия длинным командам, которые вы не можете запомнить. Введите alias длинная_команда короткая_команда.
  3. cd. Изменяет текущую терминальную папку. Когда вы запускаете терминал, он использует вашу домашнюю папку. Введите cd адрес_папки, и терминал будет работать с файлами, которые там находятся.
  4. clear. Очищает окно терминала от всех сообщений.
  5. history. Отображает все недавно введённые вами команды. Кроме того, вы можете переключаться между недавними командами с помощью клавиш «Вверх» и «Вниз». Если вы не хотите, чтобы введённая вами команда была записана, поставьте перед ней пробел так: ваша_команда.
  6. man. Отображает руководство по программам и командам Linux. Введите man имя_пакетаили man ваша_команда.
  7. whatis. Отображает краткое описание какой-либо программы. Введите команду и название программы whatis имя_пакета.
Команды Linux для навигации в терминале

Установка PDSH и дополнительных модулей

Сначала нужно установить утилиту pdsh и нужные модули. В CentOS установка выполняется через менеджер пакетов yum:

yum install epel-release -y – подключаем репозиторий Epel

Установка PDSH и дополнительных модулей

yum install pdsh pdsh-mod-genders -y — устанавливаем pdsh и модуль genders для него.

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

Виртуальные консоли

Характерный для Linux способ организации параллельной работы пользователей — виртуальные консоли.

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

Читайте также:  Кунг-фу стиля Linux: запуск команд

Welcome to Some Linux / tty2 localhost login: methody Password: [[email protected] methody]$Пример 7. Вторая виртуальная консоль

Мефодий ввёл свой новый пароль и получил приглашение командной строки, аналогичное тому, которое мы уже видели в предыдущих примерах. Нажав комбинацию клавиш Alt+F1, Мефодий вернётся к только что покинутой им командной строке, в которой он выполнял команду passwd для смены пароля. Приглашение в обоих случаях выглядит одинаково, и это не случайно — обе командные строки предоставляют совершенно эквивалентный доступ к системе, в любой из них можно выполнять любые доступные команды.

Наблюдательный Мефодий обратил внимание, что в последнем примере (tty2) первая строка приглашения оканчивается словом «tty2». «tty2» — это обозначение второйвиртуальной консоли. Можно переключаться между виртуальными консолями так, как если бы Вы переходили от одного монитора с клавиатурой к другому, подавая время от времени команды и следя за выполняющимися там программами. По умолчанию в Linux доступно не менее 6-ти виртуальных консолей, переключаться между которыми можно при помощи сочетания клавиши Alt с одной из функциональных клавиш (F1–F6), с каждым сочетанием связана соответствующая по номеру виртуальная консоль. Виртуальные консоли обозначаются «ttyN», где «N» — номер виртуальной консоли.

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

Во многих дистрибутивах Linux одна из виртуальных консолей по умолчанию не может быть использована для регистрации пользователя, однако она не менее, если не более полезна. Если Мефодий нажмёт Alt+F12, он увидит консоль, заполненную множеством сообщений системы о происходящих событиях. В частности, там он может обнаружить две записи о том, что в системе зарегистрирован пользователь «methody». На эту консоль выводятся сообщения обо всех важных событиях в системе: регистрации пользователей, выполнении действий от имени администратора (root), подключении устройств и подгрузке драйверов к ним и многое другое.

Пример двенадцатой виртуальной консоли показывает, что виртуальные консоли — довольно гибкий механизм, поддерживаемый Linux, при помощи которого можно решать разные задачи, а не только организацию одновременного доступа к системе. Для того, чтобы на виртуальной консоли появилось приглашение login: после загрузки системы, для каждой такой консоли должна быть запущена программа getty. Попробуйте нажать Alt+F10 — с большой вероятностью Вы увидите просто чёрный экран. Десятая виртуальная консоль поддерживается системой, однако чёрный экран означает, что для этой консоли не запущена никакая программа, поэтому воспользоваться её существованием не получится. Для каких именно консолей будет запущена программа getty — определяется настройкой конкретной системы. Впоследствии эта настройка может быть изменена пользователем. О том, как это может быть сделано, речь пойдёт в лекции Этапы загрузки системы.

Читайте также:  Windows, Mac и Linux: В чем между ними разница и как выбрать ОС

Команды работают одновременно и выводят информацию в терминал

Можно комбинировать две команды группируя их с помощью символов { } :

{ КОМАНДА1 & КОМАНДА2; }

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

{ КОМАНДА1 & КОМАНДА2; } > НОВЫЙ_ФАЙЛ

Если вы хотите разделить STDOUT (стандартный вывод) и STDERR (стандартный вывод ошибок) по двум файлам:

{ КОМАНДА1 & КОМАНДА2; } > STDOUT_file 2> STDERR_file

Данная конструкция работает, в том числе, и более чем для двух команд. Помните, что Ctrl+с закроет только одну из команд, поскольку остальные будут запущены в фоне — их нужно закрыть вручную.

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

Ещё один вариант использования сабшелла или группировки команд и перенаправления вывода всей группы за раз:

( КОМАНДА1 ; КОМАНДА2 ; КОМАНДА3 ) | cat { КОМАНДА1 ; КОМАНДА2 ; КОМАНДА3 ; } >

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

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

Установка, удаление и обновление пакетов

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

Debian/Ubuntu

  • sudo apt-get install название пакета — устанавливает программу на выбор. Главное знать, как она называется.
  • sudo apt remove название пакета — стирает с жесткого диска имеющийся в системе пакет.
  • sudo apt-get update — обновляет информацию о пакетах, имеющихся в системе, и тех, что хранятся в подключенных репозиториях.
  • sudo apt-upgrade — обновляет установленные пакеты до самых свежих версий, доступных в подключенных репозиториях.
Читайте также:  Что нового в iOS 12 получили владельцы Apple iPad

Red Hat Linux/CentOS

  • sudo dnf install название пакета — устанавливает программу на выбор.
  • sudo dnf upgrade — обновляет установленные пакеты до самых свежих версий.
  • sudo dnf remove название пакета — стирает с жесткого диска имеющийся в системе пакет.

Оператор OR (||)

Оператор OR (||) очень похож на оператор «else» в программировании. Вышеуказанный оператор позволяет вам выполнять вторую команду только в случае сбоя при выполнении первой команды, то есть состояние выхода первой команды равно «1» — программа выполнена НЕ успешно».

Например, я хочу выполнить «apt-get update» из учетной записи без полномочий root, и если первая команда не будет выполнена, тогда будет выполнена вторая команда «links ».

sudo apt update || links

В приведенной выше команде, поскольку пользователю не было разрешено обновить систему, это означает, что состояние выхода первой команды равно «1» и, следовательно, выполняется последняя команда «links ».

Что, если первая команда выполнена успешно, со статусом выхода ««? Очевидно! Вторая команда не будет выполнена.

mkdir test || links

Здесь пользователь создает папку «test» в своем домашнем каталоге, где ему это разрешено. Команда выполнена успешно, что дает статус выхода ««, и, следовательно, последняя часть команды не выполняется.

Управление сетью

  1. ip

    (Internet Protocol). Утилита выводит полный список параметров для настройки работы с сетью. Среди них:

  • link — сетевое устройство;
  • address — IP-адрес сетевого устройства;
  • monitor — мониторинг устройства;
  • route — маршрутизация;
  • tunnel — туннелированные. Каждый из выводимых объектов можно изменять при помощи дополнительных команд: add, change, del, save и т.д.
  1. ping

    Команда проверяет наличие и качество интернет-подключения.

  2. nethogs

    Утилита мониторинга сетевой активности устройств в системе. Чтобы задать сетевой интерфейс, введите:

    nethogs -i

  3. traceroute

    Утилита отслеживания интернет-подключения, отслеживая маршруты следования пакетов данных в сетях TCP/IP. Более совершенный инструмент для отслеживания проблем с подключением к Сети, чем упомянутая выше команда ping. Запускается только с правами суперпользователя.