Linux Skill - Освой Linux c нуля до DevOps
11.2K subscribers
68 photos
103 videos
501 links
Освой Linux c нуля до DevOps
Подробный гайд по Linux и море других уроков для системных администраторов

📩 По всем вопросам: @chorapov

РКН https://vk.cc/cMUwm4
Download Telegram
💾 Потерял данные? Вот скрипт, который этого не допустит

Привет, хранитель данных!

Делаешь бэкапы вручную? Пора автоматизировать! Готовый bash-скрипт архивирует важные директории и отправляет на удалённый сервер. Настрой раз и спи спокойно.

Скрипт backup.sh

#!/bin/bash

backup_dirs=("/etc" "/home" "/boot")
dest_dir="/backup"
dest_server="server1"
backup_date=$(date +%b-%d-%y)

echo "Starting backup of: ${backup_dirs[@]}"

for i in "${backup_dirs[@]}"; do
sudo tar -Pczf /tmp/$i-$backup_date.tar.gz $i
if [ $? -eq 0 ]; then
echo "$i backup succeeded."
else
echo "$i backup failed."
fi
scp /tmp/$i-$backup_date.tar.gz $dest_server:$dest_dir
if [ $? -eq 0 ]; then
echo "$i transfer succeeded."
else
echo "$i transfer failed."
fi
done

sudo rm /tmp/*.gz
echo "Backup is done."


Как работает скрипт

Переменные:
- backup_dirs — массив директорий для бэкапа
- dest_dir — куда складывать на удалённом сервере
- dest_server — имя/IP целевого сервера
- backup_date — дата в имени архива

Процесс:
1. Архивирует каждую директорию в tar.gz
2. Отправляет по scp на удалённый сервер
3. Проверяет успешность каждого шага
4. Удаляет локальные временные архивы

Пример работы

kabary@handbook:~$ ./backup.sh
Starting backup of: /etc /home /boot
/etc backup succeeded.
etc-Aug-30-20.tar.gz 100% 1288KB 460.1KB/s 00:02
/etc transfer succeeded.
/home backup succeeded.
home-Aug-30-20.tar.gz 100% 2543KB 547.0KB/s 00:04
/home transfer succeeded.
/boot backup succeeded.
boot-Aug-30-20.tar.gz 100% 105MB 520.2KB/s 03:26
/boot transfer succeeded.
Backup is done.


Автоматизация через cron

Добавь в crontab для ежедневного запуска в 3 ночи:
0 3 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1


💡 Совет: настрой SSH-ключи для scp без пароля, иначе скрипт не сработает в cron.

Результат: автоматические бэкапы критически важных данных каждую ночь. Никакой рутины, полная автоматизация.
____________________

Дополнительный материал:
🧠 - От первого контейнера до мощного Swarm: Путешествие Docker в мире DevOps
🧠 - Углубляемся в безопасность Linux: Специальные режимы и их мощь!
🧠 - Разгадываем тайны команды "Apropos": Ваш ключ к миру Linux Man Pages

#Linux_Mastery #bash #backup #automation #sysadmin #scripts
👍18
🔧 20+ переменных Bash, которые ты точно не использовал

Привет, повелитель скриптов!

Видел скрипты, где пути и настройки вбиты намертво? А потом ломаешь голову, почему они не работают на другой машине. Bash уже всё придумал за тебя — используй зарезервированные переменные.

📂 Навигация и окружение
$DIRSTACK — Содержимое вершины стека каталогов
$OLDPWD — Прежний рабочий каталог
$PATH — Путь поиска программ
$HOME — Домашний каталог пользователя

👤 Информация о пользователе
$UID — Содержит реальный идентификатор, который устанавливается только при логине
$EUID — Эффективный UID. Если вы использовали программу su для выполнения команд от другого пользователя, то эта переменная содержит UID этого пользователя
$GROUPS — Массив групп к которым принадлежит текущий пользователь

🖥️ Информация о системе
$HOSTNAME — hostname машины
$HOSTTYPE — Архитектура машины
$OSTYPE — Тип ОС

⚙️ Работа со скриптами и функциями
$EDITOR — Текстовый редактор по-умолчанию
$FUNCNAME — Имя текущей функции в скрипте
$SECONDS — Время работы скрипта (в сек.)
$$ — PID самого скрипта
$PPID — Идентификатор родительского процесса
$! — PID последнего запущенного в фоне процесса
$? — Содержит код завершения последней команды

📝 Работа с параметрами
$# — Общее количество параметров переданных скрипту
$* — Все аргументы переданные скрипту (выводятся в строку)
$@ — Тоже самое, что и предыдущий, но параметры выводятся в столбик

🔍 Дополнительные переменные
$LC_CTYPE — Внутренняя переменная, которая определяет кодировку символов

🔖 Сохрани шпаргалку — пригодится в каждом скрипте!

#Linux_Mastery #bash #scripting #linux #automation #devops #sysadmin
👍9🔥3
🔑 Уязвимость: Почему добавление в группу Docker равносильно sudo su -

Привет, цифровой архитектор!

Ты, вероятно, сталкивался с советом, как избавиться от постоянного ввода sudo при работе с Docker. Решение простое: добавить своего пользователя в группу docker. Удобно? Да. Но это одна из самых критических ошибок безопасности в Linux!

В этом посте разберем, почему добавлять пользователя в группу docker равносильно вручению ему полных прав root на хост-машине.

📌 Ошибка: Запуск Docker без sudo

Для удобства многие инженеры выполняют всего одну команду:

# Не делай так, если не понимаешь рисков!
sudo usermod -aG docker $(whoami)


С этого момента любой член группы docker может выполнять команды Docker. Но проблема в том, что Docker-демон по умолчанию работает от имени root.

🚨 Почему это критическая уязвимость?

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

1. Смонтировать корневую файловую систему хост-машины (например, /) в контейнер.
2. Получить полный доступ к /etc/shadow (теневой файл паролей) и другим критическим системным файлам.
3. Выполнить любую команду от имени root на хосте.

В результате, член группы docker может легко повысить свои привилегии до суперпользователя, полностью обходя систему sudo.

💡 Вывод: Практика, которая ломает всё

Использование группы docker ломает фундаментальный принцип изоляции привилегий в Linux. Удобство не стоит безопасности.

Если ты используешь это решение, ты должен понимать, что любой злоумышленник, получивший доступ к этой учетной записи, получит безусловный доступ к хост-системе.

#Docker #Security #Linux #SysAdmin #DevOps
👍22👎1
Media is too big
VIEW IN TELEGRAM
⚙️ Установка Ubuntu Server и CasaOS Пошаговое руководство

Привет, системный инженер!
Устал от сложной настройки базового Linux-сервера, когда тебе нужна простая и красивая панель управления? В этом гайде мы покажем, как быстро развернуть CasaOS на надежной базе Ubuntu Server для создания домашнего облака или мини-сервера с веб-интерфейсом.

🌐 Источник: https://www.youtube.com/watch?v=eTjIXKtSV94
#Linux #Ubuntu #Server #CasaOS #CLI #Sysadmin #Минигайд #DevOps
👍12🔥1👀1
This media is not supported in your browser
VIEW IN TELEGRAM
🌐 Как настроить сеть в Ubuntu вручную за 6 минут

👋 Привет, мастер консоли!

Нужно настроить статический IP в Ubuntu через терминал? Показываю весь процесс от определения сетевого адаптера до настройки DNS. Всё просто и быстро.
🔗 Источник https://www.youtube.com/

#ubuntu #linux #сеть #статическийip #sysadmin #терминал #networking
👍14
Media is too big
VIEW IN TELEGRAM
🔐 SSH для сисадминов: безопасность и удобство за 17 минут

👋 Привет, защитник серверов!

Админ попросил SSH-ключ? Не знаешь, какой отправить? Разбираемся с созданием ключей, настройкой SSH-сервера, клиента и пробросом портов. Всё пошагово и с примерами.

Полезные ссылки из видео:

- Источник видео
- Пример sshd_config
- Пример ssh config
- Команды для прав на .ssh

#ssh #linux #безопасность #sysadmin #devops #туннелирование #ubuntu
👍15🔥1
📚 Где учить Zabbix бесплатно и эффективно?

👋 Эй, повелитель мониторинга!

Вот проверенные источники на русском языке:

1. Текстовый курс по Zabbix от практикующего специалиста
Подробные разборы от преподавателя с реальным опытом.
🔗 https://koobik.net/cources/zabbix

2. Демо курс Zabbix 6 на Stepik
Бесплатный урок из большого платного курса: установка, настройка сервера, подключение агентов.
🔗 https://stepik.org/course/226879/promo

3. Видеокурс "Zabbix с нуля до короля" на YouTube
Полный разбор: автообнаружение, мониторинг Mikrotik, интеграции и многое другое.
🔗 https://www.youtube.com/playlist?list=PLdQohrQ3OmqS2wo9MwFKJtnXcVH5SCOh8

4. Книга "Zabbix 7: мониторинг ИТ-инфраструктуры"
Издательство Packt при поддержке КРОК. Доступна в открытом доступе.

#zabbix #обучение #мониторинг #sysadmin #Linux_err24
🔥17👍5
Media is too big
VIEW IN TELEGRAM
🌐 Почему каждому IT-специалисту нужно знать сети

👋 Привет, повелитель трафика!

Сети — в каждой вакансии: разработчик, тестировщик, DevOps, сисадмин. Разбираем OSI/ISO, TCP/IP, MAC и IP-адреса, порты, NAT, TCP vs UDP, DNS и траблшутинг. Всё кратко и понятно.

🔗 Полезные ссылки:
- Источник видео
- Сети для самых маленьких
- Комикс про DNS
- Про приватные подсети

#сети #networking #tcp #udp #dns #nat #devops #sysadmin #osiiso #ip
👍18
🔥 Настройка проброса портов в Incus: проще, чем в Proxmox

👋 Эй, укротитель виртуалок!

Покажу, как добавить веб-интерфейс к Incus и настроить проброс портов. Всё просто и быстро — без танцев с бубном.

Установка веб-интерфейса Incus

Проблема: Нужен удобный GUI для управления виртуалками и контейнерами.

Решение: Установи официальный пакет из репозитория Zabbly.

Вариант 1: Скачать пакет напрямую

# Качаем готовый .deb пакет
wget https://pkgs.zabbly.com/incus/stable/pool/main/i/incus/incus-ui-canonical_6.17-debian11-202510101456_amd64.deb

# Устанавливаем
dpkg -i incus-ui-canonical_6.17-debian11-202510101456_amd64.deb


Вариант 2: Подключить репозиторий

# Добавляем ключ репозитория
curl -fsSL https://pkgs.zabbly.com/key.asc -o /etc/apt/keyrings/zabbly.asc

# Создаём источник пакетов
sh -c 'cat <<EOF > /etc/apt/sources.list.d/zabbly-incus-lts-6.0.sources
Enabled: yes
Types: deb
URIs: https://pkgs.zabbly.com/incus/lts-6.0
Suites: $(. /etc/os-release && echo ${VERSION_CODENAME})
Components: main
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/zabbly.asc
EOF'

# Обновляем и ставим UI
apt update
apt install incus-ui-canonical


Настраиваем systemd:

# Редактируем юнит
systemctl edit incus.service

# Добавляем переменную окружения
[Service]
Environment = INCUS_UI=/opt/incus/ui/

# Применяем изменения
systemctl daemon-reload
systemctl restart incus


Открываем доступ извне:

incus config set core.https_address :8443


Готово! Открывай браузер, заходи на порт 8443 и следуй простой инструкции по добавлению сертификата.


🌐 Проброс портов: в 10 раз проще Proxmox

Проблема: Нужно пробросить порт 80 с хоста в виртуалку, чтобы получить доступ к веб-сервису.

Решение: В Incus это делается за 3 клика или одной командой.

Пример: Пробросим порт 80 с хоста 192.168.137.14 в VM ubuntu24 с IP 10.253.116.184.

Через веб-интерфейс:
1. Иди в Networks → incusbr0 → Forwards
2. Жми "Add Forward"
3. Заполняй:
- Listen address: 192.168.137.14
- Listen port: 80, Protocol: TCP
- Target address: 10.253.116.184
- Target port: 80

Через CLI (одна команда):

incus network forward port add incusbr0 192.168.137.14 TCP 80 10.253.116.184 80


Вот и всё! В Proxmox тебе пришлось бы писать правила для iptables и разбираться с NAT вручную.

💡 Почему Incus удобнее для одиночного хоста?
IPAM из коробки — разбираешься за 2 минуты
NAT и DHCP работают сразу, ничего настраивать не нужно
Проброс портов через GUI за 3 клика или одну команду
Никаких iptables — всё просто и наглядно

Если у тебя есть виртуалка с nested virtualization (у многих хостеров она включена) — разворачивай Incus и запускай VM внутри. Получишь полноценный хост виртуализации.

🔗 Официальный репозиторий Incus:
https://github.com/lxc/incus

🔗 Репозиторий Zabbly с пакетами:
https://pkgs.zabbly.com/incus/stable/

#incus #виртуализация #linux #devops #proxmox #sysadmin #Linux_err24
👍7
Media is too big
VIEW IN TELEGRAM
🐧 Linux-администратор: с чего начать и куда расти

👋 Привет, покоритель пингвинов!

Анатолий, ведущий системный администратор с 10-летним опытом, отвечает на главные вопросы: как войти в профессию, нужно ли программировать, стоит ли ставить Linux дома и почему самообразование в IT — это навсегда.

🔗 Источник: https://www.youtube.com/
#linux #sysadmin #карьера #ansible #python #bash #devops
🔍 Откуда Linux берет пользователей: загляни в /etc/passwd

👋 Привет, покоритель Linux!

Знаешь, где Linux хранит информацию о пользователях? Правильный ответ — /etc/passwd. Разберём, что это за файл и почему он так важен.

📂 Что такое /etc/passwd?

Проблема: Системе нужно знать, какие пользователи существуют, какие у них UID, домашние директории и оболочки.

Решение: Файл /etc/passwd содержит базовую информацию о каждой локальной учетной записи в системе.

Структура записи:


username:x:UID:GID:comment:home_directory:shell


Пример:


root:x:0:0:root:/root:/bin/bash
user1:x:1000:1000:User One:/home/user1:/bin/bash
nginx:x:33:33:nginx:/var/www:/usr/sbin/nologin


Разбор полей:

1. username — имя пользователя
2. x — раньше здесь хранился хеш пароля, теперь он в /etc/shadow
3. UID — уникальный идентификатор пользователя (0 = root)
4. GID — идентификатор основной группы
5. comment — комментарий (обычно полное имя)
6. home_directory — путь к домашней директории
7. shell — оболочка для входа (например, /bin/bash или /usr/sbin/nologin для системных пользователей)

🔎 Как посмотреть содержимое?


# Полный список пользователей
cat /etc/passwd

# Только имена пользователей
cut -d: -f1 /etc/passwd

# Информация о конкретном пользователе
grep "^user1:" /etc/passwd

# Пользователи с оболочкой bash
grep "/bin/bash$" /etc/passwd


🛡️ Почему пароли больше не в /etc/passwd?

Раньше хеши паролей хранились прямо в /etc/passwd, но этот файл доступен всем пользователям для чтения. Это создавало угрозу безопасности.

Решение: Хеши паролей перенесли в /etc/shadow, который доступен только root.

💡 Полезные команды для работы с пользователями


# Добавить пользователя
useradd newuser

# Изменить оболочку пользователя
usermod -s /bin/zsh user1

# Удалить пользователя
userdel user1

# Посмотреть информацию о текущем пользователе
id

# Посмотреть всех пользователей с UID >= 1000 (обычные пользователи)
awk -F: '$3 >= 1000 {print $1}' /etc/passwd


Быстрая шпаргалка

/etc/passwd — основной файл учетных записей
/etc/shadow — хранит хеши паролей (только root)
/etc/group — информация о группах
UID 0 = root, UID 1-999 = системные пользователи, UID >= 1000 = обычные пользователи

🔗 Полезные ссылки:
Документация: https://man7.org/linux/man-pages/man5/passwd.5.html

#linux #sysadmin #passwd #безопасность #Linux_err24
👍12🔥1
🏎️ Почему твой Linux грузится вечность? Находим и обезвреживаем

Эй, линуксоид! 👋

Знакома ситуация: отправил сервер в reboot, и можно идти варить кофе, потому что он поднимается мучительно долго? 😤 Часто виноват один-единственный «зависший» сервис, который тянет время всей системы.

В systemd есть встроенный инструмент-детектив, который покажет, кто именно крадет твои секунды.

📌 1. Оцениваем общий масштаб бедствия
Сначала посмотрим, сколько времени ушло на загрузку в целом (ядро + userspace).

$ systemd-analyze
Startup finished in 253ms (kernel) + 933ms (initrd) + 6.873s (userspace) = 8.060s

Это дает общее понимание: если userspace занимает слишком много времени, значит, проблема в службах.

📌 2. Ищем виновника (команда blame)
Эта команда выводит список всех запущенных юнитов, отсортированных по времени инициализации — от самых медленных к самым быстрым.

$ systemd-analyze blame
3.811s NetworkManager-wait-online.service
806ms tuned.service
680ms postfix.service
490ms lvm2-monitor.service
...

В данном примере видно, что NetworkManager-wait-online.service задерживает запуск почти на 4 секунды.

📌 3. Анализируем критический путь
Иногда сервис запускается долго, но не тормозит остальных. Чтобы увидеть дерево зависимостей и понять, какой процесс реально блокирует финиш загрузки, используйте:

$ systemd-analyze critical-chain
graphical.target @9.663s
└─multi-user.target @9.661s
└─snapd.seeded.service @9.062s +62ms
└─basic.target @6.336s
└─sockets.target @6.334s
└─snapd.socket @6.316s +16ms
└─sysinit.target @6.281s
└─cloud-init.service @5.361s +905ms
└─systemd-networkd-wait-online.service @3.498s +1.860s

Здесь видно, что systemd-networkd-wait-online.service является узким местом в цепочке,.

💡 Совет:
Если вы нашли «тормоза», которые вам не нужны (например, postfix на рабочей станции или ожидание сети там, где это не критично), их можно отключить (systemctl disable) или оптимизировать.

#Linux #Systemd #DevOps #SysAdmin #Performance
👍10🔥3
🔥 Компактный IP: Смотрим сеть без боли в глазах

EHLO, коллега! 👋

Признайся, сколько раз ты вводил ip addr и тонул в потоке информации о MTU, qdisc и broadcast-адресах, пытаясь найти заветные цифры IP? 😵 Или по старой привычке ставил net-tools, чтобы вернуть любимый, но устаревший ifconfig,?

В современном пакете iproute2 есть скрытая жемчужина — флаг -br (brief), который превращает вывод в аккуратную таблицу. Больше не нужно писать длинные пайплайны с grep и awk.

📌 Команда для читаемого вывода:

ip -br a


Что она делает:
-br (brief) — включает режим краткого вывода.
a (addr) — показывает адреса.

Результат будет выглядеть примерно так:

lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0 UP 192.168.1.10/24 fe80::a00:27ff:fe0d:d90c/64


💡 Почему это круто:
1. Ты сразу видишь статус (UP/DOWN), имя интерфейса и IP.
2. Это работает «из коробки» в большинстве современных дистрибутивов (CentOS 8+, Ubuntu 18.04+ и др.).
3. Идеально для твоих скриптов и беглого просмотра состояния сети.

#Linux #Networking #CLI #SysAdmin #DevOps
👍25
💾 UUID или /dev/sda? Почему твой сервер не грузится

Привет, суперпользователь! 👋

Знакомая ситуация: подключил новый диск, перезагрузил сервер, а он «встал»? Скорее всего, имена устройств сместились (например, sda стал sdb), и система не нашла корневой раздел по старому пути,.

Чтобы спать спокойно, используй в /etc/fstab не имена устройств, а UUID (универсальный уникальный идентификатор). Он остается неизменным, даже если ты переставишь диски местами,.

📌 Как узнать UUID всех разделов?
Используй команду blkid (Block ID). Она покажет атрибуты всех блочных устройств.

# blkid
/dev/sdf2: UUID="b600fe63-d2e9-461c-a5cd-d3b373a5e1d2" TYPE="ext4"
/dev/sda1: UUID="17f12d53-c3d7-4ab3-943e-a0a72366c9fa" TYPE="ext4" PARTUUID="c9a5ebb0-01"
/dev/sda5: UUID="b600fe63-d2e9-461c-a5cd-d3b373a5e1d2" TYPE="swap" PARTUUID="c9a5ebb0-05"
/dev/sde1: UUID="4859-EFEA" TYPE="vfat"


Что мы видим:
UUID="..." — тот самый идентификатор, который нужно копировать в fstab.
TYPE="..." — тип файловой системы (ext4, swap, vfat).

💡 Лайфхак:
Если нужно узнать данные только для конкретного диска, просто укажи его имя: blkid /dev/sda1.

#Linux #SysAdmin #Storage #CLI #Fstab
👍17
🔥 Забудь про vim: Добавляем источники apt в одну строку

root@localhost:~#

Часто нужно добавить новый репозиторий в систему (например, при начальной настройке сервера), но открывать текстовый редактор долго и неудобно для скриптов. Обычное перенаправление вывода через sudo может вызвать ошибку «Permission denied».

Есть элегантный способ добавлять строки текста в файл, например, имя репозитория ПО в файл источников, не открывая его для редактирования. Используй синтаксис с командой tee.

📌 Команда для добавления репозитория (на примере Nginx):

echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list


Разбор полетов:
echo — передает строку текста в канал (pipe).
lsb_release -cs — автоматически подставляет кодовое имя твоего дистрибутива.
sudo tee — принимает вывод и записывает его в файл с правами суперпользователя, обходя ограничения оболочки.

💡 Совет:
Используй флаг -a с командой tee (например, sudo tee -a), если хочешь добавить строку в конец файла, а не перезаписать его полностью.

#Linux #CLI #SysAdmin #DevOps #Apt
👍8
🔥 Забудь про 500 ошибку: Тест конфига Nginx перед запуском

echo "Привет, инженер!"

Знакомая ситуация: поправил конфиг, перезапустил службу, а сервер «лежит» из-за пропущенной точки с запятой? Чтобы избежать страданий и простоя продакшна, всегда проверяй исправность конфигурационных файлов перед перезапуском.

У многих популярных программ есть встроенные средства для такой проверки.

📌 Команда для проверки конфигурации Nginx:

nginx -t


Что происходит:
Если в файле нет синтаксических ошибок, команда просто завершится или выведет сообщение об успехе. Если ошибки есть, она сообщит о них, указав строку с проблемой,.

💡 Совет:
Используй systemctl reload вместо restart, когда это возможно. Reload (перезагрузка конфигурации) обычно безопаснее, так как процесс перезапускается только после успешной проверки конфигурации,.

Проверяй конфиг до того, как это сделают пользователи! 😉

#Nginx #Linux #SysAdmin #DevOps #CLI
👍14👀3👎1
📊 Вот как настоящие админы видят, что происходит на сервере

Сервер зависает, CPU зашкаливает, память утекает — а ты не знаешь, в чём проблема.

Проблема: top, htop, df разбросаны по разным окнам. Решение: один bash-скрипт, который покажет всё сразу.

🔹 System Monitor
https://github.com/elliotsecops/System-Monitor

Bash-скрипт для мониторинга Linux:
• Отображает CPU, память и диск в реальном времени (обновляется каждые 5 сек)
• Поддерживает несколько точек монтирования диска
• Настраивается через конфиг или аргументы командной строки
• Graceful shutdown (Ctrl+C) без зависания

Запусти на своём сервере — увидишь, что там реально происходит.

#linux #мониторинг #bash #sysadmin #devops
👍6
💾 Данные пропадут завтра — два скрипта спасут их сегодня

Диск упадёт когда угодно. У тебя есть backup?

Два скрипта, которые админы используют для автоматического резервного копирования.

🔹 rsync-backup (Python)
https://github.com/hkbakke/rsync-backup

Умный backup через rsync:
• Жёсткие ссылки — неизменённые файлы не дублируются
• Автоматическая проверка MD5
• Снимки: daily, weekly, monthly, yearly
• Email отчёты о статусе
• Централизованный backup с серверов

🔹 RSync Backup Script v1 (Bash)
https://github.com/Aman7123/RSync-Backup-Script-v1

Простой backup в cron:
• Автоматические weekly и monthly папки
• Удаление старых backup'ов
• Логирование каждого backup'а
• Настраивается через config-файл
• Идеален для daily cron

Запусти один из них сегодня — спаси свои данные.

#linux #backup #rsync #devops #sysadmin #безопасность
👍6👀1
🔤 Регулярки мозг не атрофируют

ChatGPT решает задачи → когнитивный спад. Освой regex самостоятельно!

🔹 RegexLearn (RU)
https://regexlearn.com/ru
• Теория + практика
• Русский перевод
• Шпаргалка

Изучал Asterisk? Без regex никуда. База для extensions.conf.

#linux #regex #bash #sysadmin