10 трюков Bash, которые я хотел бы знать на своей первой работе в DevOps
Это перевод оригинальной статьи 10 Bash Tricks I Wish I Knew in My First DevOps Job
Подписывайтесь на телеграм-канал usr_bin, где я публикую много полезного по Linux, в том числе ссылки на статьи в этом блоге.
Потому что тратить три часа на отладку пропущенной точки с запятой — это не воспитание характера
Я до сих пор помню свою первую работу в DevOps. Свежий, полный оптимизма, со шпаргалкой, которая, как я думал, поможет мне справиться.
Bash? Насколько это сложно? Всего лишь немногоcd,lsможет, один или дваgrep. Верно? Неверно.
Реальность: Bash — это не просто оболочка. Это инструмент, который определяет, выглядите ли вы волшебником или тем, кто копирует скрипты Stack Overflow, не понимая их.
Я усвоил этот урок на собственном горьком опыте — корпя над сломанными скриптами в 16:00 в пятницу. И я здесь, чтобы избавить вас хотя бы от части этой боли.
Вот 10 трюков в Bash, о которых я бы хотел узнать раньше. Это не какие-то там «секреты гуру», а настоящие навыки выживания.
1. Прекрати писать бесполезные циклы for: используй раскрытие фигурных скобок
Вам не нужно писать цикл для создания файлов file1.txt до file10.txt. Просто:
touch file{1..10}.txtВот и всё. Готово. Ваш старший инженер подумает, что вы гений. Или, по крайней мере, не полный новичок.
2. Используй set -euo pipefail
Скрипты дают сбой. В чём проблема? Они часто падают молча. По умолчанию Bash — это тот самый друг, который никогда не скажет вам, что что-то не так, пока не станет слишком поздно.
Поместите это в начало ваших скриптов:
set -euo pipefail
-e: выход при ошибке-u: сбой при неопределенных переменных -o pipefail: не позволяйте пайплайнам принимать ошибки на входЭто как пристегнуть ремень безопасности к сценарию. Вы скажете мне спасибо, когда ваш конвейер не будет выдавать неисправный код.
3. Используй xargs как профи
cat servers.txt | while read s; do ssh $s uptime; done
xargs -n1 -I{} ssh {} uptime < servers.txtЧище. Быстрее. Кажется, что жульничаешь, но это просто Bash, сделанный как надо.
4. Освой grep -r и сэкономьте часы
Перестаньте это делать find . -name "*.log" | xargs grep "ERROR". Это крик о помощи.
grep -r "ERROR" .
Рекурсивный поиск. Меньше ввода текста. Больше производительности. Ваши запястья будут вам благодарны.
5. Используй алиасы или умри
Если вы печатаете kubectl 50 раз в день, зачем страдать?
alias k=kubectl
А теперь печатай k get pods как нормальный человек. Добавь это в свой ~/.bashrc и живи дальше.
6. Используй history как машину времени
История Bash — это не просто журнал. Это архив вашего выживания.
history | grep docker → найдите команду, которую забыли!42→ повторите 42-ю команду!!→ повторить последнюю команду (совет профессионала: с помощьюsudo→sudo !!)
Это как Ctrl+Z для вашего мозга.
7. Лови ошибки с помощью trap, а не гоняйся за ними
Скрипты не работают. Логи врут. Добавьте трап:
trap 'echo "Error at line $LINENO"; exit 1' ERR
Теперь, вместо того, чтобы смотреть на 200-строчный скрипт и гадать, что же взорвалось, Bash вам подскажет. Какое облегчение.
8. tee — ваш лучший друг по отладке
Хотели когда-нибудь логировать вывод и одновременно видеть его? Не перенаправляйте поток дважды, как дикарь.
your_command | tee logfile.txt
Отлаживайте быстрее. Отправляйте быстрее. Спите крепче.
9. Знай разницу между &&, ;, ||
cmd1 && cmd2: запускаетcmd2только в случае, еслиcmd1завершилась успешно
cmd1 || cmd2: выполняетcmd2только еслиcmd1завершилась с ошибкой
cmd1 ; cmd2: обе команды выполняются всегда, независимо от результата первойЕсли вы этого не знаете, ваши скрипты будут вести себя как маленький ребёнок — непредсказуемо и хаотично.
10. Изучи подшеллы прежде, чем они не начнут вас преследовать
На этом я когда-то обжёгся. Круглые скобки () создают подшелл. Фигурные скобки {} — нет.
(cd /tmp && ls) # runs in subshell, doesn’t change your current dir
{ cd /tmp && ls; } # runs in current shell, changes your dirПочувствуйте разницу. Иначе вам придётся полдня ломать голову над вопросом «почему мой скрипт не сменил каталоги?».
Последняя проверка реальностью
Bash не крут. Это не Kubernetes. Он не поместит вас на первую полосу Hacker News.
Но это тот самый клей, который держит весь ваш мир DevOps. Если вы справитесь с этим плохо, всё остальное тоже будет хромать.
Освойте эти приёмы, и вы перестанете выглядеть как новичок, который просто гуглит «пример цикла bash». Вы начнёте выглядеть как человек, который действительно разбирается в этом.
На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал usr_bin, где будет еще больше полезной информации.