Bash
Bourne Again Shell — командная оболочка и язык сценариев, стандартная точка входа на большинстве Linux-серверов.
Что такое Bash
Bash (Bourne Again Shell) — командная оболочка Unix-систем и одновременно язык сценариев. Это программа, которая принимает набранные вами строки, разбирает их, запускает нужные утилиты и показывает результат. Именно её вы видите, подключившись к серверу по SSH.
Имя — каламбур: Bash написан для проекта GNU как замена старой оболочки Bourne shell (sh), отсюда «рождённый заново». Он остаётся оболочкой по умолчанию в Debian, Ubuntu и RHEL; в macOS по умолчанию с некоторых пор стоит zsh, но Bash там тоже есть.
Что означает #!/bin/bash
Эта строка называется shebang (шебанг) и обязана быть первой строкой файла. Она говорит ядру, какой программой выполнять этот файл.
#!/bin/bash
echo "Скрипт выполняется интерпретатором Bash"
Без шебанга файл — просто текст, и результат зависит от того, кто его запустил. С шебангом достаточно сделать файл исполняемым, и он запускается как обычная команда:
chmod +x deploy.sh
./deploy.sh
Частая путаница: #!/bin/bash и #!/bin/sh — не одно и то же. /bin/sh в Debian и Ubuntu указывает на dash — минимальную оболочку без массивов, [[ ]] и подстановок Bash, поэтому скрипт с #!/bin/sh упадёт на bash-специфичном синтаксисе. Вариант #!/usr/bin/env bash берёт первый bash из PATH — надёжнее на macOS и BSD, где Bash лежит в другом месте.
Скрипт, который не выстрелит в ногу
#!/usr/bin/env bash
set -euo pipefail
BACKUP_DIR="/var/backups/db"
STAMP=$(date +%F_%H-%M)
mkdir -p "$BACKUP_DIR"
pg_dump -U app mydb | gzip > "$BACKUP_DIR/mydb_$STAMP.sql.gz"
find "$BACKUP_DIR" -name '*.sql.gz' -mtime +7 -delete # чистка старше 7 дней
echo "Бэкап готов: $BACKUP_DIR/mydb_$STAMP.sql.gz"
set -euo pipefail — три строчки, которые стоит писать в каждом скрипте:
-e— прервать выполнение при первой же ошибке, а не бодро идти дальше-u— падать при обращении к необъявленной переменной (спасает отrm -rf "$DIR/"с пустымDIR)-o pipefail— считать конвейер упавшим, если упало любое его звено, а не только последнее
Кавычки вокруг "$BACKUP_DIR" — не украшение: без них путь с пробелом развалится на два аргумента.
Конвейеры и перенаправления
Философия Unix: маленькие утилиты, соединённые в цепочку. Вывод одной идёт на вход следующей.
# Топ-10 IP по числу запросов в логе nginx
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
# Ошибки за сегодня — в файл
journalctl -u myapp --since today | grep -i error > /tmp/errors.txt
| Оператор | Что делает |
|---|---|
| |
вывод команды слева на вход команде справа |
> |
перенаправить вывод в файл (перезаписать) |
>> |
дописать в конец файла |
2> |
перенаправить поток ошибок |
&& |
выполнить следующую команду, только если предыдущая успешна |
|| |
выполнить, только если предыдущая упала |
Где Bash встречается ежедневно
Он не только в терминале: строки RUN в Dockerfile, шаги CI/CD-пайплайнов, ExecStart в юнитах systemd, задачи по расписанию — всё это команды Bash. Один и тот же навык окупается везде.
Связанные термины
- CLI — интерфейс, оболочкой которого служит Bash
- Linux — среда обитания Bash
- Утилиты Linux — то, что вызывают из скриптов
- grep — постоянный участник конвейеров
- SSH — как попасть в Bash на сервере
- PowerShell — аналог из мира Windows
Готовы запустить GPU-задачу?
Запустить GPU-сервер