Гид по технологиям

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

7 min read Linux Обновлено 24 Dec 2025
Запуск нескольких команд в Linux — ; && ||
Запуск нескольких команд в Linux — ; && ||

Быстрые ссылки

  • Опция одна: оператор точка с запятой (;)
  • Опция два: логический И (&&)
  • Опция три: логический ИЛИ (||)
  • Комбинирование нескольких операторов

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

Если вы используете Linux, командная строка часто оказывается самым быстрым инструментом для работы с файлами, установки программ и запуска утилит. Но ещё эффективнее — запускать несколько команд подряд в одной строке.

Объединение команд в командной строке часто называют «цепочкой команд». Ниже — подробные варианты, рекомендации и безопасные практики.

Опция 1: Оператор точка с запятой ;

Оператор точка с запятой (;) выполняет команды последовательно, не проверяя успешность предыдущей. Это самый простой способ запускать несколько команд подряд.

Пример: откройте терминал (Ctrl+Alt+T в Ubuntu и Linux Mint), введите три команды через точку с запятой и нажмите Enter. Это выведет список текущего каталога, покажет текущую директорию и имя пользователя.

ls ; pwd ; whoami

Пробелы вокруг точек с запятой не обязательны (ls;pwd;whoami работает), но делают команду более читаемой. В скриптах читаемость особенно важна.

Команды, объединённые оператором точка с запятой

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

Опция 2: Логический И &&

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

Пример: создать каталог MyFolder и перейти в него, только если он создан успешно.

mkdir MyFolder && cd MyFolder

Рекомендуется чаще использовать &&, чем ;, чтобы избежать нежелательных действий при ошибках. Представьте: вы попытались перейти в каталог и затем запустили rm -Rf *. Если cd не выполнился, rm может сработать не там, где вы ожидали.

Команды, объединённые оператором логического И

Когда использовать: при зависимых шагах — создание ресурса, затем работа с ним.

Опция 3: Логический ИЛИ ||

Иногда нужно выполнить вторую команду только при неуспехе первой. Для этого служит логический оператор ИЛИ — две вертикальные черты ||.

Пример: проверить, существует ли директория MyFolder, и создать её, если нет.

[ -d ~/MyFolder ] || mkdir ~/MyFolder

Важно: между скобками и содержимым должны быть пробелы — [ -d ~/MyFolder ] иначе проверка не сработает.

Команды, объединённые оператором логического ИЛИ

Когда использовать: когда команда дополняет поведение при ошибке (например, создать резервную копию, если основная команда не удалась).

Комбинирование нескольких операторов

Вы можете комбинировать && и || в одной строке. Например: сначала проверить наличие файла, затем вывести сообщение или создать файл.

[ -f ~/sample.txt ] && echo "File exists." || touch ~/sample.txt

Логика здесь читается как: если файл существует — вывести сообщение; если проверка вернула ложь — создать файл.

Комбинирование разных операторов

Короткое резюме операторов:

  • A ; B — выполнить A, затем B в любом случае
  • A && B — выполнить B только если A успешно завершилась (код возврата 0)
  • A || B — выполнить B только если A завершилась с ошибкой (ненулевой код возврата)

Эти приёмы работают как в интерактивной оболочке, так и в shell-скриптах (bash, sh и др.).

Группировка команд и подпроцессы

Иногда нужно сгруппировать несколько команд как единое выражение или выполнить их в подпроцессе:

  • ( commands ) — выполнить команды в подпроцессе (subshell). Любые изменения окружения (например, cd) внутри группы не повлияют на текущую оболочку.
  • { commands; } — сгруппировать команды в текущей оболочке. Требуется ставить точку с запятой перед закрывающей фигурной скобкой.

Примеры:

( cd /tmp && ls )   # выполнится в подпроцессе, текущая директория не изменится
{ cd /tmp; ls; }    # выполнится в текущей оболочке, cd изменит директорию

Используйте подпроцессы, когда хотите изолировать побочные эффекты.

set -e и безопасные скрипты

В скриптах часто применяют set -e (или #!/bin/bash -e) чтобы аварийно прерывать выполнение при первой ошибке. Это делает поведение похожим на && между шагами, но важно понимать нюансы: команды в условных выражениях или в цепочках с || могут вести себя иначе.

Пример безопасного скрипта:

#!/bin/bash
set -euo pipefail

mkdir -p /var/myapp/data
cd /var/myapp/data
# последующие команды выполнятся только если предыдущие успешны

Советы:

  • set -u предотвратит использование неинициализированных переменных.
  • set -o pipefail обеспечит ненулевой код возврата для конвейеров при ошибке в любой части.
  • Добавляйте обработчики trap '...' EXIT для очистки.

Важно: set -e не заменяет осознанных проверок кодов возврата; в сложных сценариях лучше явно проверять статусы.

Частые ошибки и когда это не работает

  • Отсутствие пробелов внутри тест-выражений: [ -d~/dir ] — неверно. Правильно: [ -d ~/dir ].
  • Ожидание, что A && B || C всегда соответствует «if A then B else C». В сложных выражениях скобки и приоритеты могут менять логику.
  • Использование ; в опасных командах без проверки: cd /path ; rm -Rf * — рискованно.
  • Неправильное использование set -e в комбинации с командами, которые ожидаемо возвращают ненулевой код.

Мини-методология для безопасного объединения команд

  1. Протестируйте каждую команду отдельно.
  2. Решите, нужно ли выполнять следующий шаг при ошибке — используйте && или || соответственно.
  3. Для групп шагов используйте {} или () по необходимости.
  4. В скриптах включайте set -euo pipefail и trap для очистки.
  5. Добавьте логирование и проверки (echo с кодом возврата) на ключевых шагах.

Ролевые чек-листы

Для системного администратора:

  • Проверить пути и права доступа перед удалением.
  • Запустить скрипт в тестовой среде.
  • Использовать явные проверки ([ -d ], [ -f ]).

Для разработчика / DevOps:

  • Контролировать переменные окружения (set -u).
  • Добавить unit- и integration-тесты для скриптов.
  • Использовать CI для безопасного развёртывания.

Для новичка:

  • Начинать с ; для простоты, затем перейти к &&
  • Всегда проверять текущую директорию (pwd) перед rm.

Ментальные модели и эвристики

  • «Зависимые шаги» → используйте &&.
  • «Действие при ошибке» → используйте ||.
  • «Последовательность без зависимости» → используйте ;.
  • «Изолировать побочные эффекты» → используйте ().

Примеры «когда это не сработает» (контрпримеры)

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

Критерии приёмки

  • Скрипт корректно завершает выполнение при ошибке (если ожидается).
  • Нет опасных безусловных операций удаления.
  • Логи информативны и отображают ключевые шаги.

Риск-матрица (качественная)

  • Высокий риск: rm -Rf * после ненадёжного cd без проверки. Меры: всегда проверяйте pwd, используйте абсолютные пути.
  • Средний риск: сложные цепочки без логирования. Меры: добавьте echo и проверку кодов возврата.
  • Низкий риск: чтение файлов и вывод их содержимого.

Краткая сводка операторов

  • A ; B — всегда выполнить B после A
  • A && B — B при успехе A
  • A || B — B при неуспехе A

Mermaid: как выбирать оператор

flowchart TD
  A[Начало] --> B{Шаг B должен
выполниться при успехе A?}
  B -- Да --> C[Используйте &&]
  B -- Нет --> D{Шаг B должен
выполниться при неудаче A?}
  D -- Да --> E[Используйте ||]
  D -- Нет --> F[Используйте ;]

1-строчный глоссарий

  • Код возврата: целое число, возвращаемое процессом; 0 = успех.
  • Subshell (подпроцесс): выполнение команд в отдельной оболочке ( ... ).
  • Группировка: { ... } выполняется в текущей оболочке.

Таблица команд Linux

| | Команды Linux | | Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc · tr | | | Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | | | Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld | |

СВЯЗАННО: Лучшие ноутбуки с Linux для разработчиков и энтузиастов

Итог: для безопасного и предсказуемого объединения команд используйте && для зависимых шагов, || для действий при ошибке, ; для простых последовательностей. В скриптах применяйте set -euo pipefail, групповайте команды и добавляйте проверки — это минимизирует риск аварийных операций.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Отмена автоматических платежей в PayPal
Финансы

Отмена автоматических платежей в PayPal

Восстановление удалённых файлов на Linux с TestDisk
Восстановление данных

Восстановление удалённых файлов на Linux с TestDisk

LocalSend — файлы по Wi‑Fi между устройствами
Инструменты

LocalSend — файлы по Wi‑Fi между устройствами

ImageFX от Google — быстрое руководство
Инструменты ИИ

ImageFX от Google — быстрое руководство

Как исправить дрейф стика контроллера
Гайды

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

Как увеличить хранилище iCloud — инструкция
Руководство

Как увеличить хранилище iCloud — инструкция