Admin Future
239 subscribers
50 photos
1 video
4 files
87 links
Превращаем эникейщиков в System Architects.
🚀 Твой навигатор в мире IT-инфраструктуры:

▪️ Hard Skills: Linux, Windows, Network, Security
▪️ Tools: Лучший софт и скрытые фишки
▪️ Mindset: Как думать, чтобы платили много


Админ - @maksimshap
Download Telegram
🧠 Terminal: Вспоминаем, что делали в прошлом году (Ctrl+R + fzf)

После отпуска сложно вспомнить: "Какой там был длинный ключ у той команды для Docker?".
Обычный поиск в истории (Ctrl+R) неудобен — он показывает только одно совпадение.

Сделайте себе подарок на 2026 год — поставьте fzf (Fuzzy Finder).

Зачем: Он превращает поиск по истории (Ctrl+R) в интерактивный список.
Вы пишете "dock", и видите все команды с этим словом, можете выбрать стрелочками и запустить.

Установка (Linux/macOS):


git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

Использование: Просто нажмите Ctrl+R в терминале.
Ваша продуктивность вырастет в разы.
Вы перестанете набирать одни и те же команды вручную.

#tools #fzf #productivity #terminal #cli #bash #zsh
🕵️‍♂️ Linux: Кто ломился в дверь, пока мы спали?

Пока вы доедали оливье, боты продолжали брутфорсить ваши SSH-порты.
Работа у них такая.
Полезно узнать, с каких IP идет основная атака, чтобы забанить подсети целиком, а не по одному.

Обычный lastb показывает слишком много мусора. Вытащим только "Топ-10" негодяев одной строкой.

Команда (Магия AWK):


# Для Debian/Ubuntu
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -10

(Для CentOS/RHEL замените файл на /var/log/secure и поле $(NF-3) на $11, так как формат лога чуть другой).

Результат: Вы увидите четкий список: 5421 192.168.x.x 1200 10.0.x.x

Если видите тысячи попыток с одного IP — это не забывчивый коллега. Это ботнет. В бан его! 🚫

#linux #security #logs #awk #bash #hardening #defense
⌨️ Bash: Магия восклицательного знака (!)

Вы только что набрали длинную команду, но забыли sudo. Или создали папку и хотите сразу в неё зайти. Не нажимайте "Вверх" и не правьте курсором. Используйте History Expansion.

Это экономит тысячи нажатий клавиш в год.

🔹 Забыл sudo?
apt update
# Error: Permission denied
sudo !!
# Bash сам подставит последнюю команду: sudo apt update

🔹 Использовать аргумент из прошлой команды?
mkdir /var/www/html/project_x
cd !$
# Bash подставит последний аргумент: cd /var/www/html/project_x

🔹 Найти последнюю команду, начинающуюся на...
!vim
# Запустит последнюю команду, которая начиналась с "vim"

Маленькие трюки для большой скорости. 🏎

#linux #bash #cli #productivity #tips #shortcuts
🐧 Sed: Хирург для твоих конфигов

Вам нужно поменять порт в конфиге Nginx на 50 серверах. Заходить на каждый и открывать nano ? Нет. Используйте sed (Stream Editor). Он умеет находить и заменять текст прямо в файлах.

Синтаксис: s/что_искать/на_что_менять/g

Примеры из жизни:

1. Заменить слово во всем файле (безопасно):


# Создаст бэкап config.conf.bak перед изменением
sed -i.bak 's/DEBUG=true/DEBUG=false/g' config.conf

2. Раскомментировать строку (удалить # в начале):

sed -i 's/^#PermitRootLogin/PermitRootLogin/' /etc/ssh/sshd_config

3. Удалить пустые строки (чистка мусора):

sed -i '/^$/d' filename.txt

Освойте sed , и Ansible вам станет понятнее, а скрипты — мощнее.

#linux #sed #bash #automation #config #cli
🐚 Bash: Шаблон «Пуленепробиваемого» скрипта

90% админских скриптов падают молча.
Например, cd /wrong/path не сработал, а следующая команда rm -rf * удалила всё в корне (утрирую, но суть ясна). В 2026 году мы используем Bash Strict Mode и Traps.

Код для начала любого скрипта:

#!/bin/bash
set -euo pipefail
IFS=$'\n\t'

# Функция очистки при выходе (даже аварийном)
cleanup() {
echo "🧹 Убираем мусор..."
rm -f /tmp/temp_*.txt
}

# Trap ловит сигналы выхода (EXIT, ошибка, Ctrl+C)
trap cleanup EXIT

echo "🚀 Начинаем работу..."
# Ваш код

Разбор магии:

1. set -e: Скрипт умрет сразу, если любая команда вернет ошибку.
2. set -u: Запрещает использовать пустые переменные (спасает от rm -rf /$UNDEFINED_VAR).
3. set -o pipefail: Ловит ошибки даже в середине конвейера (grep | awk).
4. trap: Гарантированно выполнит функцию cleanup, даже если скрипт упадет с ошибкой.

Это база. Не пишите в прод без этого хедера.

#linux #bash #scripting #devops #bestpractices #automation
🧠 Skill: JSON — универсальный клей админа

Раньше мы грепали текст (grep | awk).
В 2026 году, когда вокруг Docker, Kubernetes и REST API, вывод почти всегда можно получить в JSON.
Парсить JSON как текст — это путь к ошибкам.

Учимся работать с объектами, а не строками:

🐧 Linux (jq): Не делайте grep "status", делайте:

curl -s https://api.site.com/health | jq '.services[] | select(.status=="down") | .name'

(Выведет имена только упавших сервисов).

🪟 PowerShell: Здесь JSON становится родным объектом .NET автоматически:

$data = curl https://api.site.com/health | ConvertFrom-Json $data.services | Where-Object { $_.status -eq 'down' } | Select-Object name

Совет: Если консольная утилита имеет флаг --json (как kubectl, aws cli, docker), всегда используйте его для скриптов. Это делает вашу автоматизацию неубиваемой при смене форматирования вывода разработчиками.

#skills #json #jq #powershell #bash #devops #api
👍2🔥2👏1
🐧 Bash: Умная очистка логов без риска убить систему

Частая ошибка админа — удалять логи командой rm. Если сервис продолжает писать в файл, место на диске не освободится (файл останется "призраком"), пока сервис не рестартанут. 👻 Правильный путь — обнуление через перенаправление.

Скрипт-однострочник для безопасной очистки:

#!/bin/bash
# Находим все логи больше 500Мб в /var/log и обнуляем их содержимое
find /var/log -type f -name "*.log" -size +500M -exec sh -c '> "{}"' \;

echo " Тяжелые логи обнулены, дескрипторы сохранены!"

Почему это OK:

1. > "{}" — очищает содержимое файла, но оставляет сам файл на месте.
2. Сервис (nginx, mysql) не теряет связь с файлом и продолжает писать в него без рестарта.
3. Система мгновенно видит свободное место. 📦

#linux #bash #sysadmin #automation #storage #server_cleanup 🛠️
1
🐧 Bash: Параллельный запуск задач без боли и GNU Parallel

Многие админы не знают, что для параллельного выполнения задач в скриптах не обязательно ставить тяжелые утилиты. В Bash есть встроенный механизм управления фоновыми процессами через wait. Это маст-хэв, когда нужно, например, одновременно проверить доступность 50 хостов или сжать 20 папок с логами. 📦

Пример «умного» скрипта:

#!/bin/bash

targets=("192.168.1.1" "192.168.1.2" "192.168.1.3") # и так далее

for ip in "${targets[@]}"; do
(
if ping -c 1 -W 1 "$ip" > /dev/null; then
echo " $ip доступен"
else
echo " $ip лежит"
fi
) & # Запуск в фоне
done

wait # Ждем завершения всех фоновых задач
echo "🎯 Все проверки завершены!"

Почему это OK:

1. Скорость: Скрипт выполняется за время самого долгого пинга, а не по очереди.
2. Простота: Никаких лишних зависимостей.
3. Контроль: Команда wait гарантирует, что скрипт не пойдет дальше, пока все «хвосты» не закроются.

#linux #bash #automation #sysadmin #performance #scripting 🛠️
🐧 Bash: Проверка SSL-сертификатов до того, как они «протухнут»

Пятница — идеальный день, чтобы проверить, не отвалится ли какой-нибудь домен в субботу утром. 📉 Вместо того чтобы заходить на сайты руками, напишем скрипт, который массово проверяет даты истечения через openssl.

Полезный скрипт для списка доменов:

#!/bin/bash
# Список доменов для проверки
DOMAINS=("google.com" "github.com" "my-company.ru")

echo " Проверка сертификатов..."
for domain in "${DOMAINS[@]}"; do
expiration_date=$(echo | openssl s_client -servername "$domain" -connect "$domain":443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)

# Переводим в формат timestamp для сравнения
exp_epoch=$(date -d "$expiration_date" +%s)
now_epoch=$(date +%s)
days_left=$(( ($exp_epoch - $now_epoch) / 86400 ))

if [ $days_left -lt 7 ]; then
echo "🚨 $domain: ОСТАЛОСЬ ВСЕГО $days_left ДНЕЙ!"
else
echo " $domain: еще $days_left дней"
fi
done

Почему это маст-хэв: Этот скрипт можно легко обернуть в телеграм-бота, чтобы получать алерты, если до истечения осталось меньше 10 дней. Безопасность — это когда всё работает тихо. 🤫

#linux #bash #ssl #security #automation #sysadmin #devops 🔐
🐧 Linux: Как оживить сервер, если /bin/bash случайно удален 😱

Классический кошмар: ты (или скрипт) случайно удалил bash или критическую библиотеку libc.so, и теперь ни одна команда не работает.
SSH-сессия еще жива, но на любое действие система отвечает:
```
command not found
```
Решение: Используй встроенные возможности самого SSH и командной оболочки, которая еще в памяти.

Если у тебя открыта сессия, ты можешь использовать Zsh или Dash (который часто является /bin/sh), чтобы восстановить файлы.
Если же нет ничего, помни: busybox — твой лучший друг.

Хак: Восстановление через копирование по сети без scp: Если на сервере нет ничего, но жив cat:

На своей машине:

cat /bin/bash | ssh user@server "cat > /tmp/bash"

На сервере (через вызов загрузчика):

/lib64/ld-linux-x86-64.so.2 /tmp/bash

Совет: Всегда держи установленным пакет busybox-static. Он содержит всё необходимое в одном бинарнике и не зависит от внешних библиотек.

#linux #troubleshooting #sysadmin #bash #recovery #server_rescue 🛠️
👏1