Типичный Сисадмин
1.25K subscribers
363 photos
43 videos
201 links
⚙️Информация для системного администратора

По всем вопросам : @Sofiia_artamonova
Download Telegram
Как отлаживать bash-script-ы по шагам

Мне всегда хотелось иметь возможность отлаживать bash-scripts так же, как и любой другой код, т.е. по шагам, и bash такую возможность предусмотрел, но о ней не все знают. Несмотря на довольно большой опыт использования Linux, я дошёл до неё только недавно.

Волшебная строчка, которую нужно добавить после #!/bin/bash, чтоб скрипт можно было отлаживать по шагам

#!/bin/bash

trap 'echo "# $BASH_COMMAND";read' DEBUG

echo line1
echo line2

echo line3



Процесс отладки
Запускаем скрипт, перед выполнением каждой команды выводится то, что будет исполняться, затем интерпретатор начинает ожидать нажатия клавиши <ENTER>.

Если понимаем, что что-то пошло не так, нажимаем Ctrl+C и выходим из отладки.

Ингредиенты
команда trap, которая умеет перехватывать разные сигналы и в нашем случае она перехватывает сигнал DEBUG, посылаемый перед выполнением команды

команда read, которая умеет ожидать ввода чего-нибудь с клавиатуры (в данном случае нам нужно только либо ENTER либо Ctrl+C

переменная окружения $BASH_COMMAND, валидная внутри обработчика команды trap.

# Online Bash Shell.
# Code, Compile, Run and Debug Bash script online.
# Write your code in this editor and press "Run" button to execute it.

trap 'echo "# $BASH_COMMAND";read' DEBUG

echo line1
echo line2

echo line3

echo "Hello World";
👍21👎1
Cамые нужные команд SSH

Запускай команды быстро
Чтобы выполнить всего одну удаленную команду, совсем не обязательно подключаться к SSH, вводить команду, а затем отключаться. Можно сделать это сразу. Например, так можно посмотреть заполненность ФС удаленной машины:
$ ssh user@host df -h
А так — перезагрузить ее:
$ ssh user@host sudo reboot

Составляй списки команд и запускай их разом
Если у тебя есть целый список команд, которые следует выполнить, их можно записать в файл и скормить этот файл SSH:
$ ssh user@host "`cat file.txt`"

Редактируй удаленные файлы локальным редактором
Чтобы отредактировать файл на удаленной машине, не требуется заходить на нее и использовать консольный редактор. На самом деле файл можно открыть в твоем любимом текстовом редакторе на локальной машине (gvim заменяем на свой редактор):
$ gvim scp://user@host//путь/к/файлу

Копируй содержимое удаленного файла в буфер обмена
Если необходимо скопировать содержимое удаленного файла или вывод команды в буфер обмена, не обязательно выводить его на экран или открывать в текстовом редакторе и копировать вручную. Можно использовать следующую команду:
$ ssh user@host cat /путь/к/файлу | xclip
А так можно скопировать вывод команды:
$ ssh user@host uname -a | xclip

Сравнивай удаленный и локальный файл без копирования
Похожий прием можно использовать для сравнения двух файлов:
$ ssh user@host cat /путь/к/удаленному/файлу | diff /путь/к/лoкальному/файлу -

Работай с удаленными файлами с помощью локального файлового менеджера
Не всегда удобно работать с большим количеством файлов с помощью консольных команд или mc, запущенного на удаленной машине. Но всегда можно подключить любой каталог удаленной машины как сетевой диск. Для этого достаточно установить sshfs:
$ sudo apt-get install sshfs
Создать каталог для подключения «сетевого диска»:
$ mkdir remote_files
И подключить его:
$ sshfs user@host:/home/user ~/remote_files/
Теперь все файлы удаленного каталога /home/user будут видны в каталоге ~/remote_files/ и с ними можно работать, как с обычными.

Копируй ключи быстро
Хоть и копирование публичного ключа на удаленный сервер — задача простая, но она требует выполнения нескольких действий вручную. Если тебя это напpягает, скопировать ключ можно в автоматическом режиме:
$ ssh-copy-id user@host
При этом не обязательно копировать основной ключ, с помощью флага -i можно указать любой другой:
$ ssh-copy-id -i ~/my_key.pub user@host

Создай постоянное соединение с машиной
Если в течение дня ты часто подключаешься к одной машине, в том числе на несколько минут или секунд (чтобы просто запустить одну команду, например), есть смысл создать с ней постоянное соединение. Твой комп будет держать соединение открытым и использовать его для каждого подключения к машине. Это намного быстрее и экономичнее с точки зрения трафика и нагрузки на процессор.
Добавь следующие строки в ~/.ssh/config:
Host host
ControlPath ~/.ssh/master-%r@%h:%p
ControlMaster no

А затем создай соединение:
$ ssh -MNf user@host
👍3
Подборка шпаргалок по Linux
2👍1
Kubernetes: эффективные команды

Расшировать параметр секрета.
kubectl get secret/db -o yaml | grep DB_PASSWORD | sed 's/.*DB_PASSWORD:\s//' | base64 --decode
где db - имя секрета, DB_PASSWORD - один из параметров секрета.

Удалить все поды используя helm.
helm ls --all --short | xargs -L1 helm delete

Удалить все поды в состоянии Evicted.
kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pod

Скрипт для просмотра занятого пространства образами docker.
#!/usr/bin/env bash
for container in `kubectl get pods --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'`
do
echo -e "$container\t\t $(docker image ls
параметр секрета.
kubectl get secret/db -o yaml | grep DB_PASSWORD | se--format='{{println .Size}}')"
done


Скрипт для для установления соответствия между задеплоеными подами, нодами, где они находятся и зоной в которой располагаются.
#!/usr/bin/env bash

set -euo pipefail

PODZONES=()
for POD in $(kubectl get pods -o custom-columns=NAME:.metadata.name --no-headers)
do
NODE=$(kubectl get pod ${POD} -o=jsonpath='{.spec.nodeName}')
ZONE=$(kubectl get nodes -o json | jq -r --arg NODE "${NODE}" '.items[].metadata | {name, labels} | select(.name==$NODE) | .labels."topology.kubernetes.io/zone"')
PODZONES+=(${ZONE})
echo -e "${POD}\t${NODE}\t${ZONE}"
done

CPODS=$(kubectl get pods -o custom-columns=NAME:.metadata.name --no-headers | wc -l)
CNODES=$(kubectl get nodes -o custom-columns=NAME:.metadata.name --no-headers | wc -l)
CZONES=$(kubectl get nodes -o json | jq -r '.items[].metadata.labels."topology.kubernetes.io/zone"' | sort | uniq -c)
echo "----------ИТОГО:----------"
echo -e "Всего подов:\t${CPODS}"
echo -e "Всего нод:\t${CNODES}"
echo -e "Количество зон нод:\n${CZONES}"
echo "Количество подов в зонах:"
printf "%s\n" "${PODZONES[@]}" | sort | uniq -c
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Понимание DHCP: Упрощение управления сетью

DHCP (Dynamic Host Configuration Protocol) — это сетевой протокол, который автоматизирует процесс назначения IP-адресов и других параметров конфигурации устройств в сети. Вместо того чтобы вручную задавать каждому устройству IP-адрес, DHCP позволяет делать это автоматически, что значительно упрощает управление сетью.

Как работает DHCP?
1. Запрос клиента (DHCP Discover): Когда устройство подключается к сети, оно отправляет широковещательное сообщение с запросом IP-адреса.
2. Ответ сервера (DHCP Offer): DHCP-сервер получает запрос и предлагает доступный IP-адрес из своего пула.
3. Запрос IP-адреса (DHCP Request): Устройство принимает предложенный адрес и отправляет запрос на его закрепление.
4. Подтверждение (DHCP Acknowledgment): Сервер подтверждает назначение адреса и отправляет дополнительные параметры, такие как маска подсети, шлюз и DNS-серверы.

Преимущества использования DHCP
- Упрощенное управление: Автоматическое распределение IP-адресов исключает вероятность ошибок, связанных с ручной конфигурацией.
- Гибкость: Легко подключать и отключать устройства без необходимости их настройки.
- Эффективное использование адресов: Сервер перераспределяет адреса, которые больше не используются.
- Масштабируемость: DHCP подходит как для небольших домашних сетей, так и для крупных корпоративных сетей.

Дополнительные функции DHCP
- Резервирование адресов: Возможность назначать фиксированные IP-адреса определенным устройствам (например, серверам или принтерам).
- Период аренды: Сервер устанавливает временные рамки использования IP-адреса, после чего клиент должен обновить его.

Заключение
DHCP значительно упрощает управление сетями, минимизируя ручную работу администратора. Этот протокол стал стандартом в большинстве современных сетей, благодаря своей надежности, гибкости и удобству.
👍4
Утилиты на PowerShell для системных администраторов

Работая на первой линии тех.поддержки, я часто сталкивался с рутиной, особенно очень хотелось минимизировать подключение к рабочему столу пользователей для сбора информации и как-то автоматизировать этот процесс, что привело меня к осваиванию языка PowerShell и написанию скриптов, которые в последствии оформились в самостоятельные программы. Некоторые из них я решил выложить на GitHub, возможно для кого-то они будут полезны.

https://habr.com/ru/articles/799463/

https://github.com/Sync1er/ChernigovEugeniyUtilities
Подборка из 4 альтернативых SSH клиентов

1. Mosh

Mosh - это замена интерактивных терминалов SSH. Он более надежен и отзывчив, особенно при работе через Wi-Fi, сотовую связь и на дальних расстояниях.
Mosh - это свободное программное обеспечение, доступное для GNU/Linux, BSD, macOS, Solaris, Android, Chrome и iOS.


2. Teleport

Teleport с открытым исходным кодом был разработан для обеспечения доступа к необходимой инфраструктуре без замедления работы. С помощью одного инструмента инженеры получают унифицированный доступ к серверам Linux и Windows, кластерам Kubernetes, базам данных и приложениям DevOps, таким как AWS Management Console, CI/CD, контроль версий и панели мониторинга во всех средах.


3. Eternal Terminal

Удаленный терминал для занятых и нетерпеливых
Eternal Terminal (ET) - это удаленная оболочка, которая автоматически переподключается, не прерывая сеанса.

4. tmux

tmux - это терминальный мультиплексор: он позволяет создавать несколько терминалов, получать к ним доступ и управлять ими с одного экрана. tmux может работать в фоновом режиме.

Работает на OpenBSD, FreeBSD, NetBSD, Linux, macOS и Solaris.
👍3
Шпаргалка по PowerShell / Краткий справочник

https://gist.github.com/pcgeek86/336e08d1a09e3dd1a8f0a30a9fe61c8a
Шпаргалка по файловой системе linux
3
Шпаргалка по работе с Tmux (терминальный мультиплексор)

1. Установка

CentOS (нужен подключенный репо EPEL)
# yum install tmux
Fedora
# dnf install tmux
Ubuntu/Debian
# apt-get install tmux


2. Конфигурационные файлы

(пользователя, системный):
~/.tmux.conf
/etc/tmux.conf


До версии 2.1
set -g mouse-resize-pane on
set -g mouse-select-pane on
set -g mouse-select-window on
set -g mode-mouse on



3. Работа с Tmux

Старт
# tmux //без параметров будет создана сессия 0
# tmux new -s session1 //новая сессия session1. Название отображается снизу-слева в квадратных скобках в статус строке. Далее идет перечисление окон. Текущее окно помечается звездочкой.

Префикс (с него начинаются команды)
<C-b> (CTRL + b)

Новое окно (нажать CTRL+b, затем нажать с)
<C-b c>

Список окон
<C-b w> // переключиться курсором вверх-вниз

Переключение
<C-b n> // следующее окно
<C-b p> // предыдущее окно
<C-b 0> // переключиться на номер окна

Окна можно делить на панели (Panes)
Как в тайловых (мозаичных) оконных менеджерах.

Деление окна горизонтально
<C-b ">
либо команда
# tmux split-window -h

Деление окна вертикально
<C-b %>
либо команда
# tmux split-window -v

Переход между панелей
<C-b стрелки курсора> // либо режим мыши

Изменение размеров панелей
<C-b c-стрелки> // либо режим мыши

Закрытие окон
<C-b x> // нужно подтвердить y
либо
# exit

Отключение от сессии
<C-b d>
либо
# tmux detach

Список сессий
# tmux ls

Подключиться к работающей сессии
# tmux attach //подключение к сессии, либо к единственной, либо последней созданной
# tmux attach -t session1 // подключение к сессии session1

Выбрать сессию
<C-b s>

Завершение сессии
# tmux kill-session -t session1

Завершить все сессии
# tmux kill-server

Список поддерживаемых комманд
# tmux list-commands

Дополнительная информация
# man tmux
Шпаргалка по awk для Linux
👍2
Чем отличается команда rm от unlink?

Обе эти команды умеют удалять, но в 99% используется именно rm, потому что про unlink вы либо не слышали, либо rm с головой хватает.

Есть ошибочное мнение, что unlink предназначен для удаления лишь ссылок — команда вполне может удалять обычные файлы. А если углубиться, то весь процесс удаления в Linux, это удаление ссылок.

У unlink есть всего лишь два ключа запуска help и version. Очень ограниченный инструмент, но чем инструмент проще, тем проще его синтаксис.

# unlink /tmp/hardlink
# unlink /tmp/file


Софт очень молчаливый — после удаления, он промолчит и ничего не выведет на экран.

Команда unlink использует системную команду unlink, в то время как команда rm использует системный вызов unlinkat. Оба системных вызова практически одинаковы.

Unlink не умеет работать с wildcard и globbing шаблонами. Так же вы не сможете с помощью нее удалить каталог.

Запустим команду и пытаемся насильно удалить файл которого нет в каталоге:

rm -f test.txt

И получаем - НИЧЕГО. То есть rm -f не вернул ошибку, что файл отсутствует. А если сделать так:

unlink test.txt

получим ошибку:

unlink: cannot unlink 'test.txt': No such file or directory

То есть если нужно будет обработать результат выполнения команды rm -f, то будет непонятно, существовал ли вообще файл.

С unlink можно гибче обрабатывать эксепшены в скриптах. А еще при использовании команды unlink отсутствует проверка безопасности. Она удалит файл, защищенный от записи. Хотя современная версия rm теперь тоже так умеет.

Небольшой секрет: если нужно, чтобы файл никто не смог удалить, включая root:

chattr +i test.txt

chattr позволяет устанавливать и отключать атрибуты файлов, на уровне файловой системы не зависимо от стандартных (чтение, запись, выполнение).

Ключ i - сделает файл неизменяемым. Чтобы снять с файла этот аттрибут, в команде которая выше, замените знак «+» на «-».
👍3
Основные команды Linux: Управление пользователями и группами

last – Показывает, какие пользователи последними входили в систему (и покидали ее), выполняя для этого поиск в файле /var/log/wtmp в обратном порядке; также показывает информацию о загрузках системы, ее остановках и изменениях ее уровней запуска
lastb – Показывает неудачные попытки входа в систему, которые записаны в файле /var/log/btmp
w – показать пользователей онлайн
whoami – имя, под которым вы залогинены.
finger user@host – показать информацию о user (без указания пользователя – выведет список пользователей, залогиненых в системе) на хосте host, утилита не чувствительна к регистру символов
write user [terminal] – начать сеанс общения с пользователем user на терминале terminal
talk user@host – чат с пользователем user на компьютере host
wall message – разместить сообщение message на всех терминалах.
mesg y/n – включение – y и выключение – n возможности принимать сообщения на консоли
su user – создание оболочки (подоболочки текущей оболочки) с правами пользователя user (без указания пользователя – вызывается оболочка root)
-, -l, –login – все 3 параметра имеют одно значение – загрузить окружение вызываемого пользователя (выполняются все стартовые сценарии и подгружаются переменные окружения вызываемого пользователя)
-с command – выполнить команду command с правами суперпользователя и “понизить” права в исходные после завершения команды.
useradd user – добавление нового регистрационного имени пользователя user в системе
-g group – задает основную группу (primary group) для нового пользователя. По умолчанию используется стандартная группа, указанная в файле /etc/default/useradd.
-d dir – доманий каталог (home directory) нового пользователя. По умолчанию используется $ HOMEDIR/user
-s shell – полный путь к программе (шеллу), используемой в качестве начального командного интерпретатора для пользователя
-m – Создает начальный каталог нового пользователя, если он еще не существует. Копирует скелетные файлы и другие каталоги из /etc/skel в домашний каталог.
👍2
kcp - это прототип сервера API Kubernetes, который не является кластером Kubernetes. Если вас интересуют API-интерфейсы, подобные Kubernetes, но для других инструментов, возможно, будет интересно посмотреть.

https://github.com/kcp-dev/kcp
Rufus: надежная утилита форматирования USB

Форматирование USB, флэш-карт и виртуальных дисков в FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3
Создание загрузочных USB-накопителей DOS, используя FreeDOS или MS-DOS (Windows 8.1 или более ранние версии)
Создание загрузочных дисков BIOS или UEFI, включая загрузочные диски UEFI NTFS
Создание загрузочных дисков из загрузочных ISO (Windows, Linux и т.д.)
Создание загрузочных дисков из загрузочных образов дисков, включая сжатые.
Создание установочных дисков Windows 11 для ПК, не оснащенных TPM или Secure Boot
Создание дисков Windows To Go
Создание постоянных разделов Linux
Создание образов дисков VHD/DD
Вычисление контрольных сумм MD5, SHA-1, SHA-256 и SHA-512 выбранного образа
Улучшение процесса установки Windows путем автоматической настройки параметров OOBE (локальная учетная запись, параметры конфиденциальности и т.д.)
Выполняйте проверку плохих блоков, включая обнаружение "поддельных" флеш-накопителей
Загрузка официальных розничных ISO-образов Microsoft Windows 7, Windows 8, Windows 10 или Windows 11
Загружать ISO-файлы UEFI Shell
Современный и привычный пользовательский интерфейс, встроенная поддержка 38 языков
Малая занимаемая площадь. Не требует установки.
Портативный. Совместимость с Secure Boot.
100% свободное программное обеспечение (GPL v3)

https://github.com/pbatard/rufus
👍1🔥1