Библиотека девопса | DevOps, SRE, Sysadmin
10.2K subscribers
1.64K photos
75 videos
4 files
2.91K links
Все самое полезное для девопсера в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/25874ec4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/6798b4e4509aba56522d1787
Download Telegram
😊 Как быстро найти самые большие файлы

Для поиска 20 самых больших файлов в каталоге выполните команду:
find . -type f -printf '%s %p\n' | sort -nr | head -n 20


find . -type f -printf '%s %p\n' выводит список всех файлов с их размерами в байтах и путями

sort -nr сортирует строки по размеру в обратном порядке — от большего к меньшему

head -n 20 берёт только первые 20 строк — самые крупные файлы

Пример использования

Перейдите в нужный каталог, например /var, и выполните команду:
cd /var
find . -type f -printf '%s %p\n' | sort -nr | head -n 20


Если нужно выводить размер в удобном формате (КБ, МБ, ГБ), добавьте numfmt:
find . -type f -printf '%s %p\n' | sort -nr | head -n 20 | numfmt --to=iec


Подход не запускает для каждого файла отдельную команду du. Вместо этого find напрямую получает размер файла и передает их для дальнейшей обработки сортировки.

🔸 Программирование на языке Python
🔸 Получить консультацию менеджера
🔸 Сайт Академии 🔸 Сайт Proglib

🐸 Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Объединяем apt-get update и install

В Dockerfile часто делают ошибку — разделяют команды обновления пакетов и их установки на несколько слоёв, что приводит к устаревшему кэшу и сломанным билдам.

Плохой пример:
RUN apt-get update
RUN apt-get install -y curl


Правильный подход:
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*


Обновление и установка должны выполняться в одном слое, а потом нужно очистить кэш apt, удалив /var/lib/apt/lists/*, чтобы уменьшить размер образа.

🔸 Программирование на языке Python
🔸 Получить консультацию менеджера
🔸 Сайт Академии 🔸 Сайт Proglib

🐸 Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
💻 Как удалить файлы старше N дней и не ошибиться

Если нужно удалить файлы, которые лежат больше определенного времени, сначала всегда стоит посмотреть, что именно будет удалено.

Например, чтобы показать все файлы старше 30 дней в каталоге /data/backups, используйте:
find /data/backups -type f -mtime +30 -print


Этот вариант только выведет список файлов для проверки. После того как вы убедитесь, что там те файлы, которые нужно удалить, запустите команду удаления:
find /data/backups -type f -mtime +30 -delete


Флаг -delete удаляет найденные файлы. Важно сначала проверить список, иначе можно потерять нужные данные. Если у вас система, где -delete работает некорректно, можно заменить на более портативный, но медленный вариант с -exec rm {}:
find /data/backups -type f -mtime +30 -exec rm {} \;


🐸 Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻 Создаем архив с сегодняшней датой без временных файлов

Чтобы быстро упаковать набор файлов в gzip-архив с сегодняшней датой, возьмите такую команду:
tar -czf backup-$(date +%Y%m%d).tar.gz /var/log/*.log


Она создаст файл вида backup-20251115.tar.gz из всех .log в папке /var/log.

Если файлов много и простой wildcard не подходит, можно использовать опцию --null --files-from или архивировать всю директорию целиком.

🔹 Практический интенсив «Архитектуры и шаблоны проектирования»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

🐸 Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻 Безопасное копирование каталога на удаленный хост через SSH

Используйте такую команду для копирования локальной директории на удаленный сервер:
rsync -avz -e ssh /local/dir/ user@remote:/remote/dir/


-a — архивный режим, сохраняет все атрибуты файлов;

-v — подробный вывод процесса;

-z — сжатие данных по сети для ускорения передачи;

-e ssh — использовать ssh для безопасного соединения.

Чтобы не копировать ничего на самом деле, а только проверить, что будет передано, добавьте --dry-run.

Флаг --delete удалит на удаленном сервере файлы, которых нет локально, использовать его стоит только если вы уверены.

🔸 Практический интенсив «Архитектуры и шаблоны проектирования»
🔸 Получить консультацию менеджера
🔸 Сайт Академии 🔸 Сайт Proglib

🐸 Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2
📂 Синхронизируем две папки как зеркало

Простая команда для зеркалирования директорий:
rsync -av --delete /source/ /destination/


Она удаляет из конечной папки лишние файлы, которых нет в исходной. Будьте осторожны — если указать неправильный путь, можно потерять данные.

Для безопасности добавьте сначала --dry-run и проверьте список:
rsync -av --delete --dry-run /source/ /destination/


🔹 Алгоритмы и структуры данных
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib

🐸 Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
💻 Когда старый корпус роняет все USB разом

У старых корпусов слабое место передняя панель с USB. Со временем там разбалтываются разъемы, окисляются контакты, где то перетирается изоляция, появляется плавающая утечка питания на корпус или землю.

Когда утечка усиливается до уровня близкого к короткому замыканию, срабатывает защита контроллера USB. Чип видит КЗ и гасит сразу всю группу портов USB 2.0, которые висят на этом контроллере, чтобы не спалить себя и плату. Отсюда и эффект все USB 2.0 умерли разом, особенно если нагрузка идет именно через передние порты.

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

Выдергиваете этот кабель, включаете ПК и проверяете работу задних USB портов. Если после этого все стабильно, источник проблем почти наверняка в передней панели.

🤌 Бонусы для подписчиков:
Скидка 40% на все курсы Академии
Розыгрыш Apple MacBook
Бесплатный тест на знание математики

🐸 Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Быстрый старт с Ansible

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

Например:
- name: Provision a new server
hosts: all
become: yes
tasks:
- name: Install basic utilities
apt:
name: "{{ item }}"
state: present
loop:
- curl
- vim
- git
- unzip


Его удобно использовать для универсальной подготовки серверов к работе, минимизируя ручной труд и ошибки.

🤌 Бонусы для подписчиков:
Скидка 40% на все курсы Академии
Розыгрыш Apple MacBook
Бесплатный тест на знание математики

🐸 Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
🖇 Ловим ошибки в логах по мере их появления

Когда на сервере что-то ломается, первое, что хочется сделать — открыть лог и посмотреть, что произошло. Но обычное чтение лога — это история. Нужно видеть ошибки в момент их возникновения.

Как ловить ошибки:
tail -f /var/log/syslog | grep --line-buffered "error"


tail -f — это как живая лента. Она подключается к логу и показывает новые строки по мере их добавления. Не закрывается, не переходит в историю.

grep --line-buffered "error" — выбирает из этого потока только строки, в которых есть слово error. Флаг --line-buffered важен: он говорит grep не накапливать вывод, а показывать каждую найденную строку сразу.

Вместе это работает так: лог добавляет новую строку — tail видит её — grep проверяет, нужна ли нам — если да, показывает на экран.

🤌 Бонусы для подписчиков:
Скидка 40% на все курсы Академии
Розыгрыш Apple MacBook
Бесплатный тест на знание математики

🐸 Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
⌨️ Раздаём SSH-ключи на все серверы автоматически

Представьте: у вас 50 серверов и новый разработчик в компании. Чтобы он мог подключиться ко всем серверам, нужно на каждый сервер залезть и добавить его публичный ключ в файл authorized_keys. Минут 20 монотонной работы.

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

Будем использовать Ansible. Вы описываете, что нужно сделать, и Ansible делает это на всех серверах сразу:
- name: Deploy SSH keys
hosts: all
become: yes
tasks:
- name: Add authorized key for user
authorized_key:
user: devops
key: "{{ lookup('file', 'devops.pub') }}"
state: present


Разберём по строкам:

hosts: all — команда выполнится на всех серверах, которые указаны в вашем инвентаре.

become: yes — нужны права администратора для добавления ключей. Ansible подключится с правами root или через sudo.

authorized_key — это модуль Ansible для работы с SSH-ключами. Он знает, где находится файл authorized_keys, как его редактировать, и не сломает формат.

user: devops — добавляем ключ именно для пользователя devops.

key: "{{ lookup('file', 'devops.pub') }}" — берём содержимое файла devops.pub (публичный ключ) и добавляем его. Переменная в двойных скобках — это синтаксис Ansible, он подставит содержимое файла.

state: present — значит, ключ должен быть в файле. Если его там нет, добавит. Если есть, оставит как есть.

Когда сотрудник уйдёт:
- name: Remove authorized key
authorized_key:
user: devops
key: "{{ lookup('file', 'devops.pub') }}"
state: absent


🤌 Бонусы для подписчиков:
Скидка 40% на все курсы Академии
Розыгрыш Apple MacBook
Бесплатный тест на знание математики

🐸 Библиотека devops'a

#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM