Linux для чайника
20K subscribers
87 photos
4 files
78 links
Linux
- Разбор утилит / инструментов
- Новости / факты
- Опросы для проверки знаний, навыков
и многое другое.

Только по вопросам сотрудничества: @altmainf

Регистрация в перечне РКН https://clck.ru/3EpL9L
Download Telegram
Очищаем дисковый кэш в Linux

Linux кэширует файлы в свободной RAM — это ускоряет всё. Но иногда нужно сбросить кэш. Полезно. когда нужен честный бенчмарк скорости диска диагностика памяти либо тесты в VM/контейнерах

Не делай это регулярно — кэш заполнится заново, а производительность упадёт.

Главная команда:
sudo sync
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'

Цифры:
• 1 — только данные файлов
• 2 — метаданные
• 3 — всё


Проверка:

free -h | grep Mem
buff/cache резко упадёт → больше free.

Альтернатива:
sudo sysctl -w vm.drop_caches=3

Готовый one-liner для теста диска:
sudo sync; echo 3 > /proc/sys/vm/drop_caches; dd if=/bigfile of=/dev/null bs=1M status=progress

Мини-скрипт:
#!/bin/bash
free -h | grep Mem
sudo sync; echo 3 > /proc/sys/vm/drop_caches
free -h | grep Mem
echo "Кэш сброшен"

Не ставь в cron — хуже будет. Linux сам управляет кэшем лучше нас.
GNU Autotools - классический набор инструментов для автоматизации сборки ПО под Unix-подобные системы. Появился в 1990-х и до сих пор используется в тысячах open-source проектов.

Главная цель Autotools — сделать исходный код портативным: один и тот же тарбол должен собираться на разных дистрибутивах, архитектурах, с разными версиями компилятора и библиотек, без ручной правки Makefile под каждую систему.

Основные компоненты Autotools:

Autoconf
Генерирует скрипт configure из файла configure.ac (или configure.in).
configure — это shell-скрипт, который при запуске проверяет систему:
• есть ли нужные заголовки, библиотеки, функции
• какой компилятор, какие флаги
• где лежат зависимости (например, pkg-config)
На выходе — настроенный Makefile и config.h.

Automake
Из файла Makefile.am генерирует Makefile.in - шаблон Makefile, который потом подставляется в Autoconf.
Позволяет писать простые декларативные правила вместо огромных ручных Makefile.

Libtool
Упрощает сборку и использование shared-библиотек на разных платформах (особенно где .so, .dylib, .dll отличаются).

M4
Макро-процессор, на котором построены Autoconf и Automake. В configure.ac вы пишете макросы M4.

Дополнительно: gettext (для интернационализации), aclocal и т.д.

Как это работает на практике:
Разработчик проекта:
1. Пишет configure.ac и Makefile.am.
2. Запускает autoreconf -i (или старый autotools набор команд: aclocal → autoconf → automake).
3. Коммитит только эти файлы + вспомогательные (NEWS, README, AUTHORS).

Пользователь (или дистрибутив):
./configure # проверяет систему, генерирует Makefile
make # сборка
sudo make install # установка


Пример простого configure.ac:
mAC_INIT([myprog], [1.0], [bug@example.com])
AM_INIT_AUTOMAKE
AC_PROG_CC
AC_CONFIG_FILES([Makefile src/Makefile])
AC_OUTPUT
iconv: превращаем «????????» обратно в нормальный русский текст

В старых файлах, при копировании с Windows, в логах или при парсинге данных из разных источников часто появляется классика: вместо «Привет, мир» вы видите «ÐŸÑ€Ð¸Ð²ÐµÑ‚, мир» или полные кракозябры.

Проблема кодировки. И лучший инструмент для её решения в Linux — утилита iconv.
iconv — часть GNU libc, конвертирует текст из одной кодировки в другую. Поддерживает сотни encoding’ов: UTF-8, CP1251, KOI8-R, ISO-8859-1, CP866 и т.д.

Установка (если вдруг нет):
sudo apt install iconv
# на Debian/Ubuntu уже есть в libc6
# или просто проверьте: iconv --version


Основные опции:
-f — from (исходная кодировка)
-t — to (целевая кодировка)
-o — файл вывода
--list — показать все поддерживаемые кодировки (их > 1000!)

Примеры:

1. Конвертация файла на месте
Файл text.txt в CP1251, нужно в UTF-8:
iconv -f CP1251 -t UTF-8 text.txt -o text_utf8.txt

Потом можно перезаписать оригинал:
iconv -f CP1251 -t UTF-8 text.txt > text.txt.tmp && mv text.txt.tmp text.txt


2. Через stdin/stdout (в пайплайне)
cat old_file.txt | iconv -f KOI8-R -t UTF-8

Или с curl:
curl -s http://old-site.ru/page | iconv -f CP1251 -t UTF-8


3. Автоопределение кодировки + конвертация
iconv не угадывает сам, но комбинируем с file или uchardet:
# Сначала узнаём кодировку
file -i old_file.txt
# или
uchardet old_file.txt

# Потом конвертируем
iconv -f $(uchardet old_file.txt) -t UTF-8 old_file.txt -o new_file.txt


4. Массовое конвертирование всех файлов в директории
for file in *.txt; do
iconv -f CP1251 -t UTF-8 "$$ file" -o " $${file%.txt}_utf8.txt"
done

____________________
если iconv ругается «
illegal input sequence» — добавьте //IGNORE или //TRANSLIT:
iconv -f CP1251 -t UTF-8//TRANSLIT//IGNORE bad_file.txt

TRANSLIT — заменит неизвестные символы на похожие, IGNORE — просто пропустит.
Preload — это фоновая служба, которая анализирует, какие программы вы чаще всего запускаете, и предзагружает их библиотеки (.so), бинарники и зависимости в кэш страниц памяти.

При следующем запуске система берёт всё из RAM, а не читает с диска.

После установки ( sudo apt install preload ) автоматически стартует как systemd-сервис.

Настройка (по желанию):
Конфиг в /etc/preload.conf. Основные параметры:

# Количество процессов для отслеживания (по умолчанию 150–200)
model.cachesize = 200

# Какие директории сканировать (добавьте свои)
map.minimum = /usr/bin:/usr/local/bin:/usr/games:/bin:/sbin:/usr/sbin

# Исключить ненужное (например, редко используемые)
exclude = /usr/bin/rare_app /usr/lib/firefox/firefox-bin

# Частота обновления модели (в секундах)
cycle = 3600


После правки:
sudo systemctl restart preload

Проверяем, что работает:
# статус службы
sudo systemctl status preload
# лог предзагрузок
cat /var/log/preload.log
# вручную обновить модель
sudo preload-predict
Обработка артефактов сканирований. Сканирование запустили — а что дальше

Запустить security-сканер — лишь половина дела. Гораздо сложнее превратить результаты сканирования в рабочий процесс, который действительно приводит к исправлению уязвимостей, а не к накоплению отчётов «на складе».

На открытом уроке разберём, как выстраивать работу с артефактами сканирований в GitLab CI/CD. Поговорим о хранении результатов, передаче их разработчикам и настройке security gates, которые автоматически влияют на сборку и релиз. Обсудим, как встроить безопасность в пайплайн так, чтобы она работала системно и не превращалась в формальность.

Урок будет полезен DevSecOps и AppSec-специалистам, DevOps/SRE-инженерам и тимлидам, которые хотят наладить управляемый поток обработки результатов security-сканирований.

→ Вебинар проходит в формате открытого урока курса «Внедрение и работа в DevSecOps»: https://otus.pw/vk3e/

Реклама. ООО «Отус онлайн‑образование», ОГРН 1177746618576
Замена стандартной команды cat

Команда bat — это утилита командной строки, предназначенная для замены стандартной команды cat - чтение данных из файла или стандартного ввода.

Основное отличие bat от cat заключается в добавлении подсветки синтаксиса, интеграции с Git, а также в возможности отображения номеров строк и вывода в формате "paging".

Примеры использования:
1. Просмотр файла с подсветкой синтаксиса и номерами строк:
bat file.txt

2. Сравнение файла с его версией в Git:
bat --diff file.txt

3. Сочетание с другими командами через pipe:
Чтобы найти определенный текст в файле и вывести результат с подсветкой синтаксиса, вы можете использовать grep совместно с bat:
grep -n 'search_term' file.txt | bat

Установка bat зависит от дистрибутива. Пример для Debian:
sudo apt install bat
В некоторых дистрибутивах команда может быть доступна как batcat из-за конфликта имен.
Разница между CHMOD и CHOWN

Говоря простыми словами, chown определяет, кому принадлежит файл, а chmod определяет, кто что может делать этим файлом.

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

Стандартный способ — использовать утилиту basename, который отрезает весь путь слева, а если указать дополнительный параметр, то дополнительно отрежет справа и суффикс.

Например пишем file.txt и суффикс .txt
basename file.txt .txt
Получаем: file

Но можно обойтись внутренними преобразованиями в bash 
filename=file.txt; echo ${filename%.*}
Получаем: file

Или наоборот, отрезать имя файла и оставить только расширение:
filename=file.txt; echo ${filename##*.}
Получаем: txt
Чтобы каждый раз не мониторить завершение какого-либо долгого процесса, к примеру, бэкапа или сборки пакетов, можно применить звуковой сигнал по его завершении.

Пример псевдокода:
some_long_command; echo $'\a'

; - отделяет команды друг от друга.
echo $'\a' - подаст звуковой сигнал.
Сочетание команд find и grep

Комбинация этих команд позволяет искать файлы с помощью find, а затем искать определенное содержимое в этих файлах с помощью grep.

Найти определенный текстовый шаблон в файлах в каталоге и его подкаталогах:
find /path/to/search -type f -exec grep -H "pattern" {} +

Найдите файлы, измененные в пределах временного диапазона, а затем выполните поиск внутри них:
find /path/to/search -type f -mtime -7 -exec grep -H "pattern" {} +

Найти файлы с расширением .txt и затем найти в них шаблон:
find /path/to/search -type f -name "*.txt" -exec grep -H "pattern" {} +
Анализ логов с агрегацией и сортировкой

Условие:
Есть лог веб-сервера access.log в формате:
IP - - [date] "METHOD URL HTTP/1.1" STATUS SIZE
Пример:
192.168.1.10 - - [01/Feb/2026:10:12:34] "GET /api/users HTTP/1.1" 200 1234

Задача:
Вывести топ-5 IP, которые сделали больше всего запросов с кодом 500.

Решение:
awk '$9 == 500 {print $1}' access.log \
| sort \
| uniq -c \
| sort -nr \
| head -5


awk '$9 == 500 {print $1}'
• • $9 — HTTP-код
• • $1 — IP-адрес
sort — обязательная подготовка для uniq
uniq -c — считаем количество повторений
sort -nr — числовая сортировка по убыванию
head -5 — топ-5