Меню Рубрики

Linux консоль несколько команд в одной строке

Как запустить несколько команд Linux из одной строки

Практически для каждого администратора Linux командная строка становится основным инструментом для работы вместо любого графического интерфейса.

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

Возьмем, к примеру, возможность запуска нескольких последовательных команд из bash. Лучший пример этого — апдейт и апгрейд Ubuntu Linux. В командной строке bash вы можете сделать это, выполнив сначала команду sudo apt-get update, а затем команду sudo apt-get upgrade -y.

Но что, если бы вы могли объединить эти две команды в одну? Таким образом, вам не нужно сидеть сложа руки и ждать первой команды, прежде чем вводить вторую. К счастью, это на самом деле довольно просто. Есть два способа сделать это. Первый использует точку с запятой примерно так:

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

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

Это очень важно, когда вы делаете такие вещи, как установка программного обеспечения из исходного кода. И вы можете сделать это с более чем двумя командами. Допустим, вы хотите обновить, обновить и автоматически удалить с помощью apt. Сделайте это с:

И вот как вы можете легко запустить последовательно несколько команд из bash.

Источник

Выполнение сразу нескольких команд в командной строке

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

Выполнение команд последовательно

Например, мы хотим выполнить сначала одну команду. Затем, когда она отработает (вернет управление в командную строку), нам нужно запустить вторую команду. Для этого служит символ точка с запятой ;. Таким образом, если вы выполните в терминале:

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

Для теста попробуйте выполнить (в Ubuntu):

Это называется последовательным выполнением команд. Вне зависимости от того, как выполнилась предыдущая команда, вторая команда должна будет запуститься. Можно выполнять команды в зависимости от того, как отработала предыдущая для этого служат символы && и ||.

Зависимое выполнение команд

Символы && и || означают не что иное, как логическое И и ИЛИ. Поэтому когда мы пишем:

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

Если выполнить конструкцию:

то команда mycommand2 будет выполнена только, если mycommand1 вернула ошибку. Каждая следующая команда запускается только если предыдущая вернула ошибку.

Источник

4 мин для чтения Как запустить одновременно несколько команд в Linux

Главное меню » Операционная система Linux » Как запустить одновременно несколько команд в Linux

Как запустить несколько команд в Linux в одно и тоже время?

Есть несколько операторов, доступных для запуска несколько команд в Linux в одно и тоже время, такие как «точка с запятой или ;», оператор «логический AND» и оператор «логический OR».

Используйте оператор точку с запятой «;»

Оператор точка с запятой или «;» позволяет запускать несколько команд одновременно в Linux, когда команда отделяются символом «;».

Базовый синтаксис для оператора с запятой:

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

Использование логического оператора «&&»

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

Базовый синтаксис логического оператора:

Пример логического оператора.

В приведенном выше примере мы создали папку или каталог с именем «data» в разделе каталога «/tmp». Так как мы успешно создали каталог /tmp/data, мы можем в состоянии перейдите в каталог «/tmp/data».

Для того, чтобы перепроверить это условие, выполните одну и ту же команду еще раз, как показано ниже:

В приведенном выше вывода команды «mkdir /tmp/data» не удалась, так как уже существует. Система не позволяет запускать вторую команду.

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

  1. Перейдите в директорию /tmp/data1
  2. Удалите все файлы в нем.

Здесь, в приведенных выше примере выполнение команды “cd /tmp/data1;rm -rf *” параллельно привело к катастрофе, так как на системном каталоге /tmp/ data1 не существует, и поэтому вместо того, чтобы удалять файлы в /tmp/ data1/, будут удалены все наши файлы в текущем рабочем каталоге, которые находятся в /tmp/data. Чтобы избежать такой ситуации используйте ниже команды с логическим оператором “cd /tmp/data1 && rm -rf *”.

Здесь вторая команда не удалось, так как первая команда тоже не удалось.

Использование логического оператора OR «||»

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

Основной синтаксис для логического оператора OR:

Пример логического оператора OR.

Здесь мы только создали каталог «/tmp/data1″ во второй команде, только если она не существует, которая проверяется в первой команде»[-d /tmp/ data1]».

Объединение нескольких оператор для выполнения нескольких команд в Linux

Мы можем также объединить несколько операторов для запуска нескольких команд в Linux.

В приведенной выше команде мы использовали несколько операторов. В случае, если файл существует, мы получим сообщение, наподобие этого «успешно открыл файл» иначе мы получим сообщение об ошибке «Не удалось открыть файл». Так мы можем объединить несколько операторов в один раз, чтобы запустить несколько команд в Linux.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

4 инструмента для одновременного выполнения команд на нескольких Linux-серверах

Статья, перевод которой мы сегодня публикуем, посвящена технологиям одновременного выполнения команд на нескольких Linux-серверах. Речь здесь пойдёт о нескольких широко известных инструментах, реализующих подобный функционал. Этот материал пригодится системным администраторам, которым, например, регулярно приходится проверять состояние множества удалённых систем. Предполагается, что у читателя уже имеется несколько серверов, к которым организован доступ по SSH. Кроме того, при одновременной работе с несколькими машинами весьма полезно настроить SSH-доступ к ним по ключу, без пароля. Такой подход, с одной стороны, повышает безопасность сервера, а с другой — облегчает работу с ним.

1. PSSH — Parallel SSH

PSSH — это опенсорсный набор инструментов командной строки, написанный на Python и предназначенный для параллельного выполнения SSH-команд на множестве Linux-систем. Он быстро работает и лёгок в освоении. PSSH включает в себя такие средства, как parallel-ssh , parallel-scp, parallel-rsync , parallel-slurp и parallel-nuke (подробности об этих средствах можно посмотреть в man).

Перед установкой parallel-ssh в Linux-системе сначала надо установить pip . Вот как это делается в разных дистрибутивах:

Затем parallel-ssh устанавливают с использованием pip :

Далее, нужно внести имена хостов или IP-адреса удалённых Linux-серверов и сведения о портах в файл hosts (на самом деле, назвать его можно как угодно). Тут нам пригодится такая команда:

Вот пример содержимого такого файла:

После того, как в файл будет внесено всё необходимое, пришло время запустить parallel-ssh , передав этой утилите имя файла с использованием опции -h , а также — команды, которые нужно выполнить на всех серверах, адреса которых имеются в файле hosts . Флаг -i утилиты используется для того, чтобы вывести на экран то, что попадёт в стандартные потоки вывода и ошибок после завершения выполнения команд на серверах.

Команда запуска parallel-ssh может выглядеть так:

На следующем рисунке показано использование утилиты при работе с тремя серверами.

Утилита parallel-ssh выполняет команды на нескольких серверах

2. Pdsh — Parallel Remote Shell Utility

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

Вот как установить pdsh в различных дистрибутивах:

Для того чтобы выполнять команды на нескольких серверах, адреса этих серверов, как и при использовании parallel-ssh , надо добавить в файл, который тоже можно назвать hosts . Затем нужно запустить pdsh в следующем виде:

Здесь флаг -w используется для указания файла со списком серверов, флаг -R применяется для указания модуля удалённых команд (среди доступных модулей удалённых команд имеются ssh , rsh , exec ; по умолчанию используется rsh ). Обратите внимание на значок ^ перед именем файла со списком серверов.

Вот как выглядит работа с этой командой.

Выполнение команд на нескольких серверах с использованием pdsh

Если вы, при вызове pdsh , не указали список команд, которые надо выполнить на серверах, эта утилита запустится в интерактивном режиме. Подробности о pdsh можно узнать на соответствующей странице man.

3. ClusterSSH

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

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

Можно воспользоваться и такой конструкцией:

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

Работа с несколькими серверами с помощью clusterssh

Команды, введённые в консоли администратора, выполняются на всех серверах. Для выполнения команд на отдельном сервере нужно вводить их в окне, открытом для него.

4. Ansible

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

После этого надо добавить адреса серверов в файл /etc/ansible/hosts .

Вот пример фрагмента подобного файла с несколькими системами, объединёнными в группу webservers :

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

Здесь опция -a используется для указания аргументов, передаваемых модулю, а флаг -u позволяет задать имя пользователя по умолчанию, применяемое для подключения к удалённым серверам по SSH.

Обратите внимание на то, что интерфейс командной строки ansible позволяет выполнять команды лишь по одной.

Взаимодействие с несколькими серверами средствами ansible

Итоги

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

Уважаемые читатели! Знаете ли вы о каких-нибудь полезных утилитах, упрощающих администрирование большого количества серверов?

Похожие публикации

Kali Linux: виды проверок информационных систем

Пять шагов к спасению Linux-сервера, который рухнул

Простой, надёжный и удобный мониторинг серверов на Linux

Комментарии 29

А как же знаменитый в узких кругах paexec?

Если есть анчибле то почему бы не добавить соль папки и иже с ними.

Ради интереса проверил простенький скрипт

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

Как бы разница налицо. И это было всего лишь 15 хостов. На 500+ разница будет очень заметной.

Интересно. У меня на долгих операциях разница между -f и без форка весьма заметна. Решил проверить ещё раз.

Итак, эталон с последовательным выполнением:
$ for HOST in `cat hosts.txt`; do ssh $HOST “sleep 5s; date”; done
19 октября 2018 г., 10:51:58 CEST
19 октября 2018 г., 10:52:06 CEST
19 октября 2018 г., 10:52:11 CEST
19 октября 2018 г., 10:52:17 CEST
19 октября 2018 г., 10:52:23 CEST
19 октября 2018 г., 10:52:29 CEST
19 октября 2018 г., 10:52:35 CEST
19 октября 2018 г., 10:52:40 CEST
19 октября 2018 г., 10:52:47 CEST
19 октября 2018 г., 10:52:53 CEST
19 октября 2018 г., 10:52:59 CEST
19 октября 2018 г., 10:53:04 CEST
19 октября 2018 г., 10:53:10 CEST
19 октября 2018 г., 10:53:16 CEST
19 октября 2018 г., 10:53:22 CEST
19 октября 2018 г., 10:53:27 CEST
19 октября 2018 г., 10:53:33 CEST
19 октября 2018 г., 10:53:39 CEST
19 октября 2018 г., 10:53:45 CEST
19 октября 2018 г., 10:53:50 CEST
19 октября 2018 г., 10:53:56 CEST

Теперь с форком:
$ for HOST in `cat hosts.txt`; do ssh -f $HOST “sleep 5s; date”; done
19 октября 2018 г., 10:55:58 CEST
19 октября 2018 г., 10:55:58 CEST
19 октября 2018 г., 10:55:59 CEST
19 октября 2018 г., 10:55:59 CEST
19 октября 2018 г., 10:56:00 CEST
19 октября 2018 г., 10:56:01 CEST
19 октября 2018 г., 10:56:01 CEST
19 октября 2018 г., 10:56:02 CEST
19 октября 2018 г., 10:56:02 CEST
19 октября 2018 г., 10:56:03 CEST
19 октября 2018 г., 10:56:03 CEST
19 октября 2018 г., 10:56:04 CEST
19 октября 2018 г., 10:56:04 CEST
19 октября 2018 г., 10:56:05 CEST
19 октября 2018 г., 10:56:06 CEST
19 октября 2018 г., 10:56:06 CEST
19 октября 2018 г., 10:56:07 CEST
19 октября 2018 г., 10:56:07 CEST
19 октября 2018 г., 10:56:08 CEST
19 октября 2018 г., 10:56:08 CEST
19 октября 2018 г., 10:56:09 CEST

Как видим, есть примерно секундная задержка на запуск нового фонового процесса. На пяти сотнях хостов это, возможно, будет критично. Таки да, согласен. Посыпаю голову пеплом.
Но теперь сделаем финт ушами:

$ for HOST in `cat hosts.txt`; do ssh -f $HOST “sleep 5s; date”& done
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST
19 октября 2018 г., 10:58:43 CEST

Спасибо за наводку. До сих пор мне хватало просто -f, но теперь буду знать как сделать реально ОДНОВРЕМЕННО на всех хостах.

Источник

Популярные записи

Сброс пароля windows 7 kali linux
Установка comodo в linux mint
Linux pcscd smartcard list
Офф сайт linux mint
Как изменить курсор в linux mint
Google gadgets for linux

Adblock
detector