Как запускать несколько команд в терминале 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в комбинации с командами, которые ожидаемо возвращают ненулевой код.
Мини-методология для безопасного объединения команд
- Протестируйте каждую команду отдельно.
- Решите, нужно ли выполнять следующий шаг при ошибке — используйте
&&или||соответственно. - Для групп шагов используйте
{}или()по необходимости. - В скриптах включайте
set -euo pipefailиtrapдля очистки. - Добавьте логирование и проверки (echo с кодом возврата) на ключевых шагах.
Ролевые чек-листы
Для системного администратора:
- Проверить пути и права доступа перед удалением.
- Запустить скрипт в тестовой среде.
- Использовать явные проверки (
[ -d ],[ -f ]).
Для разработчика / DevOps:
- Контролировать переменные окружения (
set -u). - Добавить unit- и integration-тесты для скриптов.
- Использовать CI для безопасного развёртывания.
Для новичка:
- Начинать с
;для простоты, затем перейти к&& - Всегда проверять текущую директорию (
pwd) передrm.
Ментальные модели и эвристики
- «Зависимые шаги» → используйте
&&. - «Действие при ошибке» → используйте
||. - «Последовательность без зависимости» → используйте
;. - «Изолировать побочные эффекты» → используйте
().
Примеры «когда это не сработает» (контрпримеры)
- Если первая команда — конвейер, и вы ожидаете код возврата одной её части, но не используете
pipefail, результат может отличаться. - В сложных логических выражениях без скобок порядок операций приведёт к неожиданной логике.
Критерии приёмки
- Скрипт корректно завершает выполнение при ошибке (если ожидается).
- Нет опасных безусловных операций удаления.
- Логи информативны и отображают ключевые шаги.
Риск-матрица (качественная)
- Высокий риск:
rm -Rf *после ненадёжногоcdбез проверки. Меры: всегда проверяйтеpwd, используйте абсолютные пути. - Средний риск: сложные цепочки без логирования. Меры: добавьте echo и проверку кодов возврата.
- Низкий риск: чтение файлов и вывод их содержимого.
Краткая сводка операторов
A ; B— всегда выполнить B после AA && B— B при успехе AA || 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, групповайте команды и добавляйте проверки — это минимизирует риск аварийных операций.
Похожие материалы
Отмена автоматических платежей в PayPal
Восстановление удалённых файлов на Linux с TestDisk
LocalSend — файлы по Wi‑Fi между устройствами
ImageFX от Google — быстрое руководство
Как исправить дрейф стика контроллера