Для поиска 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
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
В 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
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
💻 Как удалить файлы старше N дней и не ошибиться
Если нужно удалить файлы, которые лежат больше определенного времени, сначала всегда стоит посмотреть, что именно будет удалено.
Например, чтобы показать все файлы старше 30 дней в каталоге /data/backups, используйте:
Этот вариант только выведет список файлов для проверки. После того как вы убедитесь, что там те файлы, которые нужно удалить, запустите команду удаления:
Флаг
🐸 Библиотека devops'a
#root@prompt
Если нужно удалить файлы, которые лежат больше определенного времени, сначала всегда стоит посмотреть, что именно будет удалено.
Например, чтобы показать все файлы старше 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 {} \;#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
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
Используйте такую команду для копирования локальной директории на удаленный сервер:
rsync -avz -e ssh /local/dir/ user@remote:/remote/dir/
-a — архивный режим, сохраняет все атрибуты файлов;-v — подробный вывод процесса;-z — сжатие данных по сети для ускорения передачи;-e ssh — использовать ssh для безопасного соединения.Чтобы не копировать ничего на самом деле, а только проверить, что будет передано, добавьте
--dry-run.Флаг
--delete удалит на удаленном сервере файлы, которых нет локально, использовать его стоит только если вы уверены.🔸 Практический интенсив «Архитектуры и шаблоны проектирования»
🔸 Получить консультацию менеджера
🔸 Сайт Академии 🔸 Сайт Proglib
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2
📂 Синхронизируем две папки как зеркало
Простая команда для зеркалирования директорий:
Она удаляет из конечной папки лишние файлы, которых нет в исходной. Будьте осторожны — если указать неправильный путь, можно потерять данные.
Для безопасности добавьте сначала
🔹 Алгоритмы и структуры данных
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🐸 Библиотека devops'a
#root@prompt
Простая команда для зеркалирования директорий:
rsync -av --delete /source/ /destination/
Она удаляет из конечной папки лишние файлы, которых нет в исходной. Будьте осторожны — если указать неправильный путь, можно потерять данные.
Для безопасности добавьте сначала
--dry-run и проверьте список:rsync -av --delete --dry-run /source/ /destination/
🔹 Алгоритмы и структуры данных
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#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
У старых корпусов слабое место передняя панель с USB. Со временем там разбалтываются разъемы, окисляются контакты, где то перетирается изоляция, появляется плавающая утечка питания на корпус или землю.
Когда утечка усиливается до уровня близкого к короткому замыканию, срабатывает защита контроллера USB. Чип видит КЗ и гасит сразу всю группу портов USB 2.0, которые висят на этом контроллере, чтобы не спалить себя и плату. Отсюда и эффект все USB 2.0 умерли разом, особенно если нагрузка идет именно через передние порты.
Можно физически отключить фронтальные USB от материнской платы. На плате это обычно один или два внутренних USB 2.0 коннектора, к которым приходит шлейф от передней панели корпуса.
Выдергиваете этот кабель, включаете ПК и проверяете работу задних USB портов. Если после этого все стабильно, источник проблем почти наверняка в передней панели.
🤌 Бонусы для подписчиков:
— Скидка 40% на все курсы Академии
— Розыгрыш Apple MacBook
— Бесплатный тест на знание математики
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
Для типовой настройки серверов достаточно одного плейбука, где нужно указать нужные пакеты.
Например:
- 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
— Бесплатный тест на знание математики
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
🖇 Ловим ошибки в логах по мере их появления
Когда на сервере что-то ломается, первое, что хочется сделать — открыть лог и посмотреть, что произошло. Но обычное чтение лога — это история. Нужно видеть ошибки в момент их возникновения.
Как ловить ошибки:
Вместе это работает так: лог добавляет новую строку — tail видит её — grep проверяет, нужна ли нам — если да, показывает на экран.
🤌 Бонусы для подписчиков:
— Скидка 40% на все курсы Академии
— Розыгрыш Apple MacBook
— Бесплатный тест на знание математики
🐸 Библиотека devops'a
#root@prompt
Когда на сервере что-то ломается, первое, что хочется сделать — открыть лог и посмотреть, что произошло. Но обычное чтение лога — это история. Нужно видеть ошибки в момент их возникновения.
Как ловить ошибки:
tail -f /var/log/syslog | grep --line-buffered "error"
tail -f — это как живая лента. Она подключается к логу и показывает новые строки по мере их добавления. Не закрывается, не переходит в историю.grep --line-buffered "error" — выбирает из этого потока только строки, в которых есть слово error. Флаг --line-buffered важен: он говорит grep не накапливать вывод, а показывать каждую найденную строку сразу.Вместе это работает так: лог добавляет новую строку — tail видит её — grep проверяет, нужна ли нам — если да, показывает на экран.
🤌 Бонусы для подписчиков:
— Скидка 40% на все курсы Академии
— Розыгрыш Apple MacBook
— Бесплатный тест на знание математики
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Представьте: у вас 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
— Бесплатный тест на знание математики
#root@prompt
Please open Telegram to view this post
VIEW IN TELEGRAM