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

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

РКН https://vk.cc/cMUwm4
Download Telegram
🔥 Load Average: Когда «цифра» значит «Срочно чини!»

Привет, системный траблшутер!

Как понять, когда Load Average (LA) реально опасен?.
Критическая нагрузка — это число ядер твоего ЦПУ. Если LA > NCPU, то пора чинить!

# 1. Узнай свой лимит: Количество логических процессоров (ядер)
# Информация берется из системного псевдофайла
NCPU=$(grep -c '^processor' /proc/cpuinfo)
echo "Твой лимит (NCPU): $NCPU"

# 2. Проверь текущую среднюю загрузку (за 1, 5, 15 минут)
uptime
# Load Average включает процессы, ожидающие ЦПУ ИЛИ Disk I/O

# 3. Пример сравнения: если LA за 1 мин выше лимита NCPU
CURRENT_LOAD=$(cat /proc/loadavg | cut -d ' ' -f1)
if (( $(echo "$CURRENT_LOAD > $NCPU" | bc -l) )); then
echo "🚨 СЕРВЕР ПЕРЕГРУЖЕН: $CURRENT_LOAD > $NCPU"
fi

Вывод: Если LA стабильно выше числа ядер, система насыщена.

#Мониторинг #CLI #LoadAverage #Кейс
👍10
Какой символ используется для обозначения начала комментария в Bash-скрипте (кроме первой строки shebang)?
Anonymous Quiz
11%
//
4%
;
82%
#
2%
--
👍14
Какая конструкция позволяет использовать значение по умолчанию, если переменная не установлена или пуста?
Anonymous Quiz
37%
${parameter*=default}
13%
${parameter??default}
25%
${parameter$$default}
25%
${parameter:-default}
🔧 Multipass: Запусти Ubuntu VM 3 командами (CLI-гайд)

Привет, мастер командной строки!

Тебе нужна быстрая песочница Ubuntu для тестов?
Multipass позволяет тебе запустить VM с предустановленным Docker за минуту.

1. Запуск виртуалки с Docker

Используй образ docker и задай имя (например, node1).

# Создаем и запускаем VM с Docker pre-installed
multipass launch docker --name node1


2. Проверка и подключение

Убедись, что она запущена, и подключись.

# Проверить статус, имя и IP-адрес VM
multipass ls

# Подключиться к виртуальной машине (ты войдёшь в неё)
multipass shell node1

# Выход из сеанса оболочки (без выключения машины)
exit


Вывод: Используя всего три команды (launch, ls, shell), ты можешь получить готовую среду для работы.

#Утилиты #CLI #Виртуализация #Multipass
🤯 CLI-гайд: 6 команд, которые делают "грязную" работу за тебя

Привет, гуру Linux-оболочки!

Ты тратишь время на рутину: многострочный поиск, управление ресурсами и сбор метаданных.
Эти утилиты позволяют тебе быстро решать сложные задачи, избегая написания длинных скриптов.

1. ⚙️ stat: Вся информация о файле

stat выдает подробную и многословную статистику о заданном файле, каталоге или устройстве. Сюда входит тип файла, права доступа, inode, размер и время.

# Получить детальные метаданные о файле
stat /etc/passwd

# Извлечь конкретные данные (например, inode и тип файла)
# -c%i - inode number, -c%F - file type
stat -c%i,%F /etc/passwd

stat используется, чтобы быстро получить всю информацию, включая время последнего доступа (atime), модификации (mtime) или изменения статуса (ctime).

2. 🚀 xargs: Параллельное выполнение команд

Используй xargs для передачи аргументов команде из потока ввода (stdin), что особенно полезно, когда список аргументов слишком длинный для обычной подстановки.

# Найти все файлы *.log и удалить их, даже если их миллион
find /var/log/ -name "*.log" -print0 | xargs -0 rm -f

# Найти все .mp3-файлы и вывести их размер (с использованием xargs)
find ~/ -name "*.mp3" -print0 | xargs -0 du -h

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

3. 💾 mktemp: Создание безопасного временного файла

Всегда создавай временные файлы с помощью mktemp для обеспечения "уникального" имени файла. Это предотвращает атаки, связанные с гонкой (race condition).

# Создать временный файл в /tmp с уникальным именем
TMP_FILE=$(mktemp)
echo "Рабочие данные" > $TMP_FILE

# После использования, не забудь удалить
rm $TMP_FILE

Когда mktemp вызывается без аргументов, он создает файл нулевой длины в /tmp.

4. 🔗 lsof: Найди, что держит ресурс

Если ты не можешь размонтировать файловую систему (umount fails), lsof показывает все открытые файлы и связанные с ними процессы.

# Узнать, какие процессы используют директорию /mnt/data
lsof /mnt/data

# Показать, какие процессы открыли файл /usr/bin/vim
fuser -u /usr/bin/vim

lsof помогает тебе определить, какие файлы все еще открыты, чтобы ты мог безопасно убить соответствующие процессы.

5. 🔑 which, whereis, whatis: Быстрый поиск документации

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

# Показать полный путь к исполняемому файлу (только bin)
which rm
# Вывод: /usr/bin/rm

# Показать путь к bin, исходникам И man-странице
whereis rm
# Вывод: rm: /bin/rm /usr/share/man/man1/rm.1.bz2

# Получить краткое описание команды из базы данных whatis
whatis whatis
# Вывод: whatis (1) - search the whatis database for complete words


6. 📊 Комбинирование: cut, sort, uniq

Используй эти три фильтра вместе для анализа структурированных текстовых файлов или вывода команд (например, /etc/passwd).

# Найти 5 самых популярных оболочек в системе
cut -d':' -f7 /etc/passwd | sort | uniq -c | sort -rn | head -5
# cut -d':' -f7: извлекает поле 7 (оболочку).
# sort: сортирует, чтобы uniq работал.
# uniq -c: подсчитывает последовательные дубликаты.
# sort -rn: сортирует в обратном порядке по числам (самые популярные сверху).


💡 Вывод

Эти хаки и утилиты — настоящий золотой фонд командной строки. Используя xargs, stat и связку фильтров (cut, sort, uniq), ты сможешь превратить рутинные задачи в быстрые однострочники.

#Шпаргалка #Хаки #CLI #Bash #Скрипт #Утилиты
🔥9👍3👎1
Linux Skill - Освой Linux c нуля до DevOps pinned «🚨 Взломали сервер? 10 команд для поиска следов хакера Привет, кибер-детектив! Подозреваешь, что сервер скомпрометирован? Держи шпаргалку из топового выступления по Linux Forensics. Это реальные команды, которые используют профи при расследовании инцидентов.…»
🔑 Секрет Satisfy: IP-доступ без пароля для админов

Эй, Bash-архитектор!

Тебе нужна гибкая аутентификация (IP ИЛИ пароль)?
Директива Satisfy any позволяет тебе обходить Basic Auth для внутренних IP, не требуя пароля.

# Конфигурация Nginx/Angie (Location Block)
# Внимание: Basic Auth небезопасна без HTTPS
location /admin/ {
# 1. Настройка аутентификации
auth_basic "Restricted Zone";
auth_basic_user_file /etc/nginx/.htpasswd;

# 2. Правила доступа по IP
allow 192.168.1.10; # Разрешить админу
deny all;

# 3. Ключевой хак: достаточно одного условия
satisfy any;
}


Вывод: Если IP совпадает, сервер не спросит пароль.

#Nginx #Хаки #Security #CLI #МиниГайд
👍4
🔥 3 метрики в SSH-баннере: Скрипт для Production

Привет, повелитель терминала!
Тратить время на ввод uptime и free при каждом SSH-входе, чтобы оценить состояние сервера.
Добавь этот динамический скрипт в свой ~/.bashrc (или /etc/profile), и ты получишь мгновенную оценку Load Average, RAM и IP-адреса, используя встроенный документ (here document).

⚙️ Скрипт: Динамический MOTD (Message of the Day)

Скрипт использует подстановку команд $(...) (предпочтительная нотация вместо обратных кавычек ` ``) для сбора метрик и форматированный встроенный документ для их вывода.

#!/bin/bash
# -------------------------------------------------------------
# 1. Сбор системных метрик
# -------------------------------------------------------------

# Получаем локальный IP-адрес сервера (первый в списке)
SERVER_IP=$(hostname -I | awk '{print $1}')

# Получаем Load Average за 1 минуту.
# Средняя загрузка (Load Average) — это количество процессов,
# ожидающих ЦПУ или дискового ввода/вывода.
# Мы считываем метрики из псевдофайла /proc/loadavg,
# извлекая первое поле (1-минутное значение).
LOAD_AVG=$(cut -d " " -f1 /proc/loadavg)

# Получаем использованную/общую RAM в "человекочитаемом" виде.
# Используем команду `free` для статистики виртуальной памяти.
# AWK используется для извлечения 3-го и 2-го столбцов строки "Mem:"
RAM_USED_TOTAL=$(free -h | awk '/Mem:/ {print $3 "/" $2}')

# -------------------------------------------------------------
# 2. Вывод баннера с помощью Встроенного Документа (Here Document)
# -------------------------------------------------------------

# Конструкция 'cat << EOF' создает встроенный документ.
# Встроенные документы поддерживают подстановку параметров, если
# ограничитель (EOF) не экранирован.

cat << EOF

=============================================
🛡️ SYSTEM HEALTH CHECK | USER: $(whoami)
=============================================
🚀 Локальный IP: $SERVER_IP
⏱️ Load Average 1m: $LOAD_AVG
💾 RAM (Used/Total): $RAM_USED_TOTAL
---------------------------------------------

EOF


Вывод:

Вставь этот код в конец своего файла ~/.bashrc. Таким образом, ты увидишь здоровье сервера сразу после подключения, не используя команды вроде top или vmstat. Помни, что stat также может давать подробную информацию о файле или каталоге, включая размер, права доступа, и временные метки (доступ, модификация, изменение статуса).

#Bash #Скрипты #SSH #CLI #Мониторинг
🔥9👍5
💡 select + dialog: Создаём админ-меню прямо в консоли

Хей, гуру Linux-оболочки!

Ты тратишь время на медленный Web-GUI для рутинных задач (например, перезапуск служб)?
Используй команду select для создания интерактивного TUI-меню.

# 1. Задаем приглашение к вводу (PS3)
PS3='Выберите действие: '

# 2. Создаем TUI-меню с помощью select
select ACTION in 'Restart Proxy' 'Check Load' 'Exit'
do
# Выполняем команду, соответствующую выбору
case $ACTION in
'Restart Proxy')
# Перезапускаем службу proxy
systemctl restart proxy.service ;;
'Check Load')
# Проверяем загрузку системы (Load Average)
uptime ;;
'Exit')
# Выход из цикла
break ;;
esac
done


Вывод: select позволяет тебе быстро выбрать и выполнить команду прямо в консоли.

#TUI #CLI #Bash #Утилиты
Какая переменная хранит код возврата (exit status) последней выполненной команды?
Anonymous Quiz
25%
$$
26%
$!
17%
$#
33%
$?
Как получить длину строковой переменной ${string}?
Anonymous Quiz
21%
${string.length}
42%
length($string)
18%
${string:-len}
👍3
🔥 DevOps-стек: Запусти 3 контейнера одной командой (YAML)

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

Тратить время на ручное развертывание тестовых сервисов.
Docker Compose позволяет тебе развернуть весь DevOps-стек (приложение, БД, мониторинг) одной командой.

# docker-compose.yml (версия 3.8)
version: '3.8'
services:
app:
# Пример: веб-приложение Flask
image: custom/app:1.0
ports: ["8080:8080"]
# Переменные среды для подключения к БД (The Twelve-Factor App)
environment:
DB_HOST: db
db:
# Официальный образ БД
image: postgres:15
# Сохраняем данные на томе (volume)
volumes:
- db_data:/var/lib/postgresql/data
monitor:
# Пример дашборда
image: grafana/grafana:latest
ports: ["3000:3000"]
volumes:
db_data: # Объявление тома


Вывод: Запусти стек командой docker-compose up -d.

#Docker #DevOps #Мониторинг #YAML
👎1
⚠️ Никогда не используй [ ] в Bash, пока не прочитаешь это

Привет, инженер! 👋

Сколько раз ты ловил binary operator expected или забывал экранировать > в условии? В Bash скобки — это не просто стиль, это разные инструменты с разной логикой.

Давай разложим всё по полочкам, чтобы твои скрипты работали предсказуемо.

📌 1. Одинарные квадратные [ ... ] — Классика (test)
Это синоним команды test. Она старая, POSIX-совместимая, но капризная.

Нюанс: Переменные нужно брать в кавычки "$var", иначе при пустом значении скрипт упадет.
Минус: Знаки > и < нужно экранировать (\>), иначе Bash решит, что это перенаправление ввода/вывода.

if [ "$a" = "root" ]; then echo "Hi root"; fi


📌 2. Двойные квадратные [[ ... ]] — Расширенная проверка
Это ключевое слово самого Bash. Оно мощнее и безопаснее.

Плюс: Не нужно экранировать > и <.
Поддерживает логические && и || прямо внутри скобок.
Киллер-фича: Поддерживает регулярные выражения через оператор =~.

# Проверка регуляркой (без кавычек!)
if [[ "$ver" =~ ^3\. ]]; then echo "Version 3.x"; fi


📌 3. Одинарные круглые ( ... ) — Подоболочка (Subshell)
Команды внутри запускаются в отдельном процессе.

Суть: Переменные, измененные внутри (), не меняются в основном скрипте.
Пример: (cd /tmp; rm *.log) — вы перейдете в папку только внутри скобок, основной скрипт останется в текущей директории.

📌 4. Двойные круглые (( ... )) — Арифметика
Специальная конструкция для математики в стиле Си.

Плюс: Можно не писать $ перед переменными.
Поддерживает инкременты var++ и тернарные операторы.

(( a++ ))       # Увеличить a на 1
b=$(( a + 5 )) # Записать результат в b


💡 Итог:
Пишешь на Bash? Всегда используй [[ ]] для условий и (( )) для математики. Оставь [ ] для совместимости со старым sh.

#Linux #Bash #DevOps #Scripting #Shell
👍16
🏎️ Почему твой 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
👍22
🛡 Твой новый стандарт: Генерируем SSH Ed25519

С возвращением! 👋

Всё еще генерируешь ключи через rsa -b 4096? Это надежно, но ключи получаются длинными, а генерация — медленной. В современном мире стандартом де-факто становится Ed25519. Это алгоритм на эллиптических кривых: он безопаснее, быстрее и создает очень компактные ключи, которые удобно копировать.

Давай обновим твои доступы за одну минуту.

📌 Команда для генерации:

ssh-keygen -t ed25519 -C "admin@myserver"


Разбор флагов:
-t ed25519 — указываем тип ключа. Он обеспечивает превосходную безопасность и высокую производительность.
-C "комментарий" — метка (обычно email), чтобы ты не запутался в authorized_keys, когда ключей станет много.

💡 Что делать дальше?

1. Закинь ключ на сервер:
Используй утилиту ssh-copy-id, она сама разложит всё по полочкам:

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote-host

Если ssh-copy-id нет под рукой, можно сделать это вручную (но это дольше):

cat ~/.ssh/id_ed25519.pub | ssh user@remote-host "cat >> ~/.ssh/authorized_keys"

2. Проверь права (на локальной машине):
Приватный ключ должен быть доступен только тебе (права 600), иначе SSH-клиент может отказаться работать или это создаст дыру в безопасности.

chmod 600 ~/.ssh/id_ed25519

Переходи на Ed25519 — это быстрее, короче и безопаснее. Сохрани шпаргалку, чтобы не гуглить флаги! 🔥

#SSH #Linux #Security #DevOps #CLI
👍11🔥1
Как выполнить арифметическую операцию 5 + 3 в Bash?
Anonymous Quiz
38%
val = 5 + 3
28%
(( val = 5 + 3 ))
6%
let "val = 5 + 3
28%
варианты B и C верны
💾 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
👍15
📉 Ubuntu весит 100МБ, а Alpine — 5МБ. Почувствуй разницу

Привет, $(whoami)! 👋

Твои Docker-образы занимают сотни мегабайт, а деплой длится вечность? Часто проблема в том, что ты используешь «тяжелые» базовые образы, в которых куча ненужного софта (6 разных оболочек, 3 пакетных менеджера и т.д.).

Для продакшена и микросервисов идеально подходит Alpine Linux. Это минималистичный дистрибутив, который весит всего около 5 МБ. Меньше размер — быстрее скачивание, меньше уязвимостей и выше скорость запуска.

📌 Пример минимального Dockerfile:

FROM alpine:latest
# copy all of the files in this project into the Docker image
RUN mkdir public-app/
ADD . public-app/
WORKDIR public-app


Что здесь происходит:
FROM alpine:latest — берем легкую базу.
Создаем папку и копируем туда проект.
Назначаем рабочую директорию.

💡 Совет:
Используй Alpine, когда тебе нужно запустить одно конкретное приложение или сервис. Если в образе нет лишних утилит, их не смогут использовать злоумышленники, что уменьшает поверхность атаки.

#Docker #DevOps #Alpine #Containers #Optimization
👍8👎2
🔥 Забудь про UptimeRobot: Свой мониторинг на коленке

printf "Hello\n"

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

Можно написать простой скрипт, который будет проверять доступность хоста и сообщать статус. Это база, которая работает на любом утюге с Linux.

📌 Скрипт проверки доступности узла:

HNAME=news-15.net  # Пресловутый спамер.
# HNAME=$HOST # Отладка: проверка локальной сети.
count=2 # Отсылаются только два пинга.

if [[ `ping -c $count "$HNAME"` ]]
then
echo ""$HNAME" все еще работает и рассылает спам."
else
echo ""$HNAME" Кажется выключен. Жаль."
fi


Разбор полетов:
Переменная HNAME хранит адрес цели.
ping -c 2 отправляет ровно два пакета (чтобы не ждать вечно).
Конструкция if [[ ... ]] проверяет код возврата команды ping. Если 0 (успех) — узел жив.

💡 Почему это круто:

Ты не зависишь от стороннего софта.
Работает даже на встраиваемых системах и роутерах.
Легко добавить отправку уведомления на почту или в Telegram прямо в блок else.

#Linux #Bash #DevOps #Scripting #Monitoring
👍5