This media is not supported in your browser
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥3😁1
Что означает 2>&1?
Это про стандартные потоки вывода. Они имеют файловые дескрипторы:
stdout — 1 (общий поток вывода)
stderr — 2 (поток с ошибками)
Получается (2>&1) = stderr > stdout — направляем поток с ошибками, в стандартный поток вывода. Ошибки будут выводиться на экран в терминале.
Логичным было бы сделать конструкцию: 2>1. Но увы, эта схема отработает другую логическую операцию. Поток с ошибками stderr будет писать все данные в файл, у которого название будет 1.
Для этого и требуется указать символ & (амперсанд) перед stdout. Это будет интерпретировано как файловый дескриптор, а не обычный файл.
А почему тогда не &2>&1 ?
Символ & интерпретируется как файловый дескриптор только в контексте перенаправления.
Операция command &2>&1 анализируется так: command & 2>&1 — команда command будет выполнятся в фоновом режиме. А затем начнет выполнятся команда 2 с перенаправлением на стандартный вывод stdout.
Есть альтернатива с оператором |&.
|& это сокращенный вариант от 2>&1 |
Пример:
Все что
В официальной документации можно подробнее изучить эту штуку.
👉 DevOps Portal
Это про стандартные потоки вывода. Они имеют файловые дескрипторы:
stdout — 1 (общий поток вывода)
stderr — 2 (поток с ошибками)
Получается (2>&1) = stderr > stdout — направляем поток с ошибками, в стандартный поток вывода. Ошибки будут выводиться на экран в терминале.
Логичным было бы сделать конструкцию: 2>1. Но увы, эта схема отработает другую логическую операцию. Поток с ошибками stderr будет писать все данные в файл, у которого название будет 1.
Для этого и требуется указать символ & (амперсанд) перед stdout. Это будет интерпретировано как файловый дескриптор, а не обычный файл.
А почему тогда не &2>&1 ?
Символ & интерпретируется как файловый дескриптор только в контексте перенаправления.
Операция command &2>&1 анализируется так: command & 2>&1 — команда command будет выполнятся в фоновом режиме. А затем начнет выполнятся команда 2 с перенаправлением на стандартный вывод stdout.
Есть альтернатива с оператором |&.
|& это сокращенный вариант от 2>&1 |
Пример:
script.sh |& tee -a /var/log/script.log
Все что
script.sh выведет в потоки stdout и stderr, будет перенаправлено в файл script.log.В официальной документации можно подробнее изучить эту штуку.
Please open Telegram to view this post
VIEW IN TELEGRAM
www.gnu.org
Bash Features ¶
Next: Introduction, Previous: (dir), Up: (dir) [Contents][Index]
👍32
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍34❤8
Рассмотрим ситуацию, когда случайно/специально 😱 удалился исполняющийся bash скрипт.
Чтобы не попадать в такие ситуации, всегда храните исходники в git — это избыточно, но бекапы никто не отменял.
Скрипт удалён с диска, но продолжает работать в фоне, значит его можно как-нибудь восстановить.
Создадим подопытный скрипт: touch /tmp/script.sh:
#!/bin/bash
sleep 1000
exit
Делаем исполняемым chmod +x /tmp/script.sh и запускаем в фоне /tmp/script.sh &
Символ & может служить разделителем между командами command & command, две команды выполнятся параллельно.
Скрипт запустили, он крутится в фоне. Удалим сам файл:
rm -f /tmp/script.sh ключ -f удалит без лишних вопросов.
Восстанавливаем:
lsof -c 'script.sh'
На экран выведется простыня, нам нужна строка где в конце указан путь до скрипта, который был удален:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
script.sh 261899 root 255r REG 8,1 51 130773 /tmp/script.sh
Берем PID = 261899, берем FD = 255 и делаем так:
cat /proc/261899/fd/255
А вот и исходник скрипта:
File: /proc/261899/fd/255
#!/bin/bash
sleep 1000
exit
Вот полезная инфа, которая была использована в гайде:
man 5 proc # /proc/[pid]/fd/
man lsof
👉 DevOps Portal
Чтобы не попадать в такие ситуации, всегда храните исходники в git — это избыточно, но бекапы никто не отменял.
Скрипт удалён с диска, но продолжает работать в фоне, значит его можно как-нибудь восстановить.
Создадим подопытный скрипт: touch /tmp/script.sh:
#!/bin/bash
sleep 1000
exit
Делаем исполняемым chmod +x /tmp/script.sh и запускаем в фоне /tmp/script.sh &
Символ & может служить разделителем между командами command & command, две команды выполнятся параллельно.
Скрипт запустили, он крутится в фоне. Удалим сам файл:
rm -f /tmp/script.sh ключ -f удалит без лишних вопросов.
Восстанавливаем:
lsof -c 'script.sh'
На экран выведется простыня, нам нужна строка где в конце указан путь до скрипта, который был удален:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
script.sh 261899 root 255r REG 8,1 51 130773 /tmp/script.sh
Берем PID = 261899, берем FD = 255 и делаем так:
cat /proc/261899/fd/255
А вот и исходник скрипта:
File: /proc/261899/fd/255
#!/bin/bash
sleep 1000
exit
Вот полезная инфа, которая была использована в гайде:
man 5 proc # /proc/[pid]/fd/
man lsof
Please open Telegram to view this post
VIEW IN TELEGRAM
👍39❤14🔥1
GoReplay
Это опенсорсный инструмент мониторинга сети, который может записывать ваш трафик в реальном времени и использовать его для отслеживания, нагрузочного тестирования, мониторинга и детального анализа.
⏩ Установка
Загрузите последнюю версию бинарника и соберите
⏩ Как оно работает
Самый простейший вариант: sudo ./gor --input-raw :8000 --output-stdout который действует как tcpdump. Если у вас уже есть тестовая среда, вы можете сделать так: sudo ./gor --input-raw :8000 --output-http http://staging.env
Дополнительная информация: FAQ, Troubleshooting, Issues
👉 DevOps Portal | #ресурсы
Это опенсорсный инструмент мониторинга сети, который может записывать ваш трафик в реальном времени и использовать его для отслеживания, нагрузочного тестирования, мониторинга и детального анализа.
Загрузите последнюю версию бинарника и соберите
Самый простейший вариант: sudo ./gor --input-raw :8000 --output-stdout который действует как tcpdump. Если у вас уже есть тестовая среда, вы можете сделать так: sudo ./gor --input-raw :8000 --output-http http://staging.env
Дополнительная информация: FAQ, Troubleshooting, Issues
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Цель этого материала — задокументировать методы выполнения различных задач с использованием только встроенных функций bash.
Использование фрагментов из этой библии может помочь удалить ненужные зависимости из скриптов и в большинстве случаев ускорить их выполнение
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤1
Справочник сисадмина. Все, что нужно, под рукой
Автор: Левицкий Н.Д., Матвеев М.Д.
Год: 2024
📂 Скачать книгу
👉 DevOps Portal | #книги
Автор: Левицкий Н.Д., Матвеев М.Д.
Год: 2024
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤5
modinfo zfs | head -n 9 — узнать версию ZFS и другие подробностиИнформация о пулах / файловых системах (ФС) на пулах
zpool list — статус пулов zpool status -v — статус пулов подробныйzfs list — список ФС, так называются монтируемые разделы в пулахzfs get all — вся информация по пуламУправление пулами / дисками
ls -lha /dev/disk/by-id/ — выяснить id дисков чтобы потом на них создать пул (не юзайте имя диска типа sda — они динамически меняются)zpool create zfspool disk-id-1 disk-id-2 — может быть сколько угодно дисковzpool create -m /mnt/backups zfspool disk-id-1 — создать пул с указанием папки zpool destroy zfspool — уничтожить пулmkfile 100m disk1 disk2 — создать файлы дисковzpool create backups /disk1 /disk2- создать пул backups на созданных файлахzpool create zfspool mirror /disk1 /disk2 — создать пул zfspool с зеркалированием на 2 дискаzpool add zfspool /disk3 — добавить диск в пулzpool attach zfspool /disk3 — добавить устройство в пул, если он в зеркале — добавится в зеркало, если простой — пул расширитсяzpool detach zfspool /disk3 — исключить устройство из пулаzpool remove zfspool /disk3 — удаление устройства из пулаzpool add zfspool spare /disk3 — добавление диска горячей замены в пулzpool remove zfspool spare /disk3 — удаление диска горячей замены из пулаzpool offline zfspool /disk1 — отключить устройство, на него не будет чтения/записи, если добавить ключ -t, то после ребута станет онлайнzpool online zfspool /disk1 — включить disk1zpool replace zfspool /disk1 /disk3 — заменить disk 1, на disk3zpool upgrade -v — увидеть версию, и фичи текущего ZFS, -a обновит все пулы до новейшей версииСоздание и свойства ФС
zfs create zfspool/data — создать ФС datazfs create zfspool/backups создать ФС backups, обе ФС будут бесконтрольно расти, пока не выставлены квоты
zfs destroy -fr zfspool/backups/old — уничтожит ФС old, ключ -r — рекурсивно, если внутри ещё несколько ФС, -f — форситьzfs set reservation=1G zfspool/data — зарезервировать 1 Гигабайт, который ФС гарантированно получит, а другие не займутzfs list -o quota zfspool/backups — выяснить квоту в пуле на ФС backupszfs set quota=1G zfspool/backups — установить квоту в 1 Гигабайт на ФС backupszfs list -o compression — проверить включена компрессия или нетzfs set compression=on zfspool/backups — включить компрессию на ФС backups в пуле zfspool
zfs set sharesmb=on zfspool/backups — расшарить по SMB ФС backups средствами ZFSzfs set sharenfs=on zfspool/backups — расшарить по NFS ФС backups средствами ZFSМонтирование
zfs mount — показать все примонтированные ФСzfs mount zfspool/backups — примонтировать backupszfs umount zfspool/backups — размонтировать ФС backupszfs mount -a — смонтировать все ФСzfs umount -a Umount — размонтировать все ФССнапшоты
zfs list -t snapshot — отобразить все снапшотыzfs list -o space — сколько занимают места снапшотыzfs snapshot zfspool/backups@test — создать снапшот ФС backups с названием testzfs rollback zfspool/backups@test — вернуться к снапшоту backups с названием test, с ключом -r рекурсивно уничтожит промежуточные снапшоты, с ключом -f форсит анмаунт и ремаунтzfs destroy zfspool/backups@test — уничтожить снапшот backups с названием testzfs send zfspool/backups@march2021 > /home/backups/march2021.bak — сделать локальный бекап снапшота march2021zfs receive zfspool2/backups2 < /home/backups/march2021.bak — восстановить из локального снапшота ФС на другом пулеzfs send zfspool/backups@march2021 | ssh COMP02 «zfs receive testpool/testfs» — отправить снапшот по SSH на хост COMP02zfs clone zfspool/backups@march2021 /clones/backups — клонировать существующий снапшотzfs destroy zfspool/backups@march2021 — уничтожить клонPlease open Telegram to view this post
VIEW IN TELEGRAM
👍14
Шпаргалка по Расширенным параметрам в Bash
Что такое расширенные параметры? Допустим у вас есть переменная ${var%}, что такое знак %?
${var%} удалит короткий суффикс
$(var%%} удалит длинный суффикс
${var#} & ${var##} удалит короткий и длинный префикс
На экран выведется слово hello. То есть произошло удаление короткого суффикса. Вот еще пример:
🔜 PDF можно забрать отсюда
👉 DevOps Portal
Что такое расширенные параметры? Допустим у вас есть переменная ${var%}, что такое знак %?
${var%} удалит короткий суффикс
$(var%%} удалит длинный суффикс
${var#} & ${var##} удалит короткий и длинный префикс
var='hello world'
echo ${var%world}
На экран выведется слово hello. То есть произошло удаление короткого суффикса. Вот еще пример:
var='hello world'
echo ${var%o*} # hello w
echo ${var%%o*} # hell
Более подробно про расширенные параметры можно почитать на официальной странице.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Самоучитель системного администратора, 7-е издание
Автор: Кенин А.М.
Год: 2024
📂 Скачать книгу
👉 DevOps Portal | #книги
Автор: Кенин А.М.
Год: 2024
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Бывает, что выполнение удаленно запущенной команды может затянуться, а необходимо дождаться ее выполнения (кстати, в этом случае весьма полезным может стать использование screen), или пришлось отвлечься, а сессия SSH в это время отвалилась.
На сервере в конфигурационном файле /etc/ssh/sshd_config прописываем:
TCPKeepAlive yes
ClientAliveInterval 300
ClientAliveCountMax 60
TCPKeepAlive — установлен в «yes», значит сервер будет периодически пинговать клиента, проверяя жив ли он.
ClientAliveInterval — задает интервал пинга для проверки состояния клиента (в секундах). Параметр работает только для протокола версии 2 (Protocol 2).
ClientAliveCountMax — количество пингов клиента.
Таким образом в примере таймаут сессии будет равен 60*300/60 = 300 минут = 5 часов.
После изменения настроек не забудьте перезапустить сервис ssh.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
Unix и Linux. Руководство системного администратора, 5-е издание
Автор: Дэн Макин
Год: 2021
📂 Скачать книгу
👉 DevOps Portal | #книги
Автор: Дэн Макин
Год: 2021
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤1
Держите полезные сочетания клавиш для повышения эффективности работы в bash
⏩ Навигация
⏩ Редактирование
⏩ Bash History
⏩ Общие хоткеи
👉 DevOps Portal
Ctrl+A переместить курсор в начало строки
Ctrl+E переместить курсор в конец строки
Ctrl+F переместить курсор на один символ вправо
Ctrl+B переместить курсор на один символ влево
Alt+B / Esc+B переместить курсор влево на одно слово
Ctrl+U удалить все и вернуться в начала строки
Ctrl+K удалить все после курсора
Ctrl+W удалить слово перед курсором
Alt+D удалить слово после курсора
Ctrl+Y вернуть удаленное
Ctrl+D удалить символ под курсором
Ctrl+H аналогично backspace
Alt+T смена позиции текущего слова на предыдущее
Ctrl+T замена местами двух символа перед курсором
Alt+U перевод слова в заглавные после курсора
Alt+L перевод слова в строчные после курсора
Ctrl+_ отмена последнего ввода
Ctrl+R режим обратного поиска
Ctrl+P переход к предыдущей команде
Ctrl+N переход к следующей команде
Ctrl+O выполнить найденную команду
Ctrl+G выход из режима поиска
!! выполнить предыдущую команду
!vim выполнить последнюю команду, которая начиналась на vim
!vim:p вывести последнюю команду, которая начиналась на vim
!n запустить n команду из history
Ctrl+C завершить команду
Ctrl+L очистить экран
Ctrl+S приостановить вывод, остановить прокрутку
Ctrl+Q возобновить прокрутку
Ctrl+D закрыть оболочку
Ctrl+Z приостановить процесс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🔥7
Что такое docker и какие инструменты linux лежат в основе? Для чего он используется?
Docker базируется на технологиях:
⏩
⏩ ⏩ ⏩
А вот докер — это уже штука, которая всеми этими технологиями рулит, удобным для нас образом.
Компоненты докера:
⏩
⏩
⏩
⏩
⏩
⏩
На
Docker daemon (демон) — это серверная часть, работающая на хост-машине: скачивает образы и запускает из них контейнеры, создаёт сеть между контейнерами, собирает логи. Когда мы говорим «создай образ», этим тоже занимается демон.
Docker CLI — клиентская часть Docker, консольная утилита для работы с демоном. Может работать не только локально, но и по сети.
👉 DevOps Portal | #собес
Docker базируется на технологиях:
namespaces — обеспечивает изоляцию (например, можно айдишники процессов разместить в разных контейнерах) cgroups — позволяет управлять группой процессов, и управлять их ресурсами
capabilities — позволяет дать некоторые рут привелегии процессам или исполняемым файлам. Например, изменить UID процесса на 0, или дать возможность монтировать файловые системы.
overlay namespaces — (overlayFS, overlay2-драйвер) - файловая система, которая умеет работать "слоями". Не сохранять каждый раз новые файлы, а наслаивать один слой на другой, тем самым экономя место на диске и время создания контейнера.А вот докер — это уже штука, которая всеми этими технологиями рулит, удобным для нас образом.
Компоненты докера:
Docker Daemon — тот самый Container Engine; запускает контейнеры. Docker CLI — утилита по управлению Docker. Dockerfile — инструкция по тому, как собирать образ. Image — образ, из которого раскатывается контейнер. Container Docker registry — хранилище образов.На
Docker_host работает Docker daemon и запускает контейнеры. Client — передаёт команды: собери образ, скачай образ, запусти контейнер. Docker daemon ходит в registry и выполняет их. Docker-клиент может обращаться и локально (к юникс-сокету), и по TCP с удалённого хоста.Docker daemon (демон) — это серверная часть, работающая на хост-машине: скачивает образы и запускает из них контейнеры, создаёт сеть между контейнерами, собирает логи. Когда мы говорим «создай образ», этим тоже занимается демон.
Docker CLI — клиентская часть Docker, консольная утилита для работы с демоном. Может работать не только локально, но и по сети.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤1
Стратегии развертывания Kubernetes
🔜 Сине-зеленое развертывание (Blue/Green)
Эта стратегия базируется на двух продуктивных средах: «синяя» — там, где живут старые версии приложения, и «зеленая» — зона, где мы запускаем новую версию приложения.
🔜 Shadow
Теневое развертывание заключается в выпуске версии 1.1 наряду с версией 1.0, перехвате входящих запросов с первой версии и отправке на вторую без влияния на трафик. Это особенно полезно для тестирования production нагрузки на новую функцию.
🔜 Постепенное развертывание (Rolling)
Все инстансы приложения будут последовательно обновляться до новой версии.
🔜 A/B testing
Обычно это стратегия принятия бизнес-решений на основе статистики. Она может быть реализована путем добавления к Canary дополнительной функциональности при определенных условиях. Например, куки браузера, язык или параметры запроса. Вместо того, чтобы открыть доступ к новой функции всем пользователям, ее предлагают лишь ограниченной их части.
🔜 Повторное создание (Recreate)
Сперва удаление текущей версии приложения, затем развертывание новой версии.
🔜 Канареечное развертывание (Canary)
«Канареечный» деплой схож с зелено-синей стратегией. Часть текущих инстансов приложения заменяется новой версией, на которую переключается часть трафика.
Каждая стратегия предлагает свой подход к управлению обновлениями
👉 DevOps Portal
Эта стратегия базируется на двух продуктивных средах: «синяя» — там, где живут старые версии приложения, и «зеленая» — зона, где мы запускаем новую версию приложения.
Теневое развертывание заключается в выпуске версии 1.1 наряду с версией 1.0, перехвате входящих запросов с первой версии и отправке на вторую без влияния на трафик. Это особенно полезно для тестирования production нагрузки на новую функцию.
Все инстансы приложения будут последовательно обновляться до новой версии.
Обычно это стратегия принятия бизнес-решений на основе статистики. Она может быть реализована путем добавления к Canary дополнительной функциональности при определенных условиях. Например, куки браузера, язык или параметры запроса. Вместо того, чтобы открыть доступ к новой функции всем пользователям, ее предлагают лишь ограниченной их части.
Сперва удаление текущей версии приложения, затем развертывание новой версии.
«Канареечный» деплой схож с зелено-синей стратегией. Часть текущих инстансов приложения заменяется новой версией, на которую переключается часть трафика.
Каждая стратегия предлагает свой подход к управлению обновлениями
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥3❤1