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

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

Регистрация в перечне РКН https://clck.ru/3EpL9L
Download Telegram
Команда patchelf

Предупреждение: с помощью команды легко внести изменения, которые могут привести к нестабильной работе программ, поэтому ее следует использовать осторожно!

patchelf — утилита для изменения динамических свойств исполняемых файлов и динамических библиотек в формате ELF.

Основные возможности patchelf:
1. Изменение RPATH: RPATH и RUNPATH — это поля в ELF-файлах, указывающие динамическому загрузчику, где искать динамические библиотеки.
patchelf --set-rpath /new/path/to/library myprogram

2. Установка интерпретатора: Интерпретатор — это программа, которая исполняется для запуска ELF-файлов.
patchelf --set-interpreter /new/path/to/interpreter myprogram

3. Изменение имени сонама: Сонам (soname) — это имя, которым динамическая библиотека идентифицируется при динамическом связывании.
patchelf --set-soname newsoname.so mylibrary.so
Пакет утилит pax-utils

pax-utils - набор различных утилит, предназначенных для работы с пакетами в Gentoo Linux и анализа файлов в формате ELF. Однако, они могут быть полезны не только в Gentoo, но и в других дистрибутивах. Вот некоторые из ключевых утилит:
1. lddtree - отображает дерево зависимостей динамических библиотек для заданного исполняемого файла или библиотеки.
2. scanelf - сканирует и анализирует ELF-файлы в указанных директориях.
3. elfgrep - позволяет выполнять поиск по символам в ELF-файлах, подобно команде grep, но специализированно для содержимого ELF.
4. paxtest - инструмент для тестирования системы на наличие различных уязвимостей, связанных с механизмами защиты памяти, таких как ASLR и NX.
5. pspax - выводит список процессов с информацией о том, какие PaX-флаги установлены для каждого из них (специфично для систем, использующих патчи PaX/Grsecurity).
Gentoo Linux

Gentoo Linux — это дистрибутив Linux. Отличается от большинства других дистрибутивов тем, что предлагает мета-дистрибутивную философию, сосредоточенную на исходном коде. В Gentoo пакеты собираются из исходного кода прямо на вашем компьютере, что позволяет оптимизировать их под конкретное аппаратное обеспечение и пользовательские предпочтения, используя специальные опции компилятора и настройки USE-флагов.

Основные особенности Gentoo:
1. Portage: Система управления пакетами Portage — сердце Gentoo. Она использует скрипты, называемые ebuilds, для автоматизации процесса сборки программ из исходного кода. Portage позволяет пользователям подробно настраивать, какие функции программного обеспечения будут включены или исключены, с помощью USE-флагов.

2. Оптимизация производительности: Благодаря компиляции программ из исходного кода с учетом конкретного оборудования и предпочтений пользователя, Gentoo может быть настроено для достижения максимальной производительности.

3. Гибкость и контроль: Gentoo предоставляет практически безграничные возможности для настройки. Пользователи могут контролировать все аспекты системы, от ядра до рабочего стола, и от выбора серверных программ до настроек безопасности.
Тестирование различных аспектов безопасности ОС

paxtest - инструмент для тестирования системы на наличие различных уязвимостей. Он был разработан для оценки эффективности механизмов защиты, таких как PaX.

PaX — это патч для ядра Linux, который включает в себя ряд механизмов защиты, направленных на усиление безопасности за счёт предотвращения выполнения кода в определённых областях памяти (например, предотвращение выполнения кода из стека) и рандомизации расположения областей памяти процессов.

Основные тесты, проводимые paxtest:
1. Randomization Test: Тесты на эффективность рандомизации адресного пространства (ASLR), которая затрудняет предсказание адресов специфических областей памяти, где может быть размещён вредоносный код.
2. Executable Stack Test: Проверка на возможность выполнения кода, размещённого в стеке. В безопасных системах выполнение кода из стека должно быть заблокировано.
3. Writable Text Segments Test: Проверка на возможность записи в сегменты памяти, содержащие исполняемый код. Это помогает предотвратить атаки типа "write-then-execute".
4. Return-to-Function Test: Тесты, направленные на выявление уязвимостей, связанных с переходом к выполнению кода из предсказуемых или контролируемых адресов функций.
Патчи для ядра Linux

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

Виды:
1. Исправления ошибок: Исправление обнаруженных проблем и уязвимостей в ядре для повышения его стабильности и безопасности.
2.Улучшения функциональности: Добавление новых возможностей или улучшение существующих функций ядра.
3. Поддержка нового аппаратного обеспечения: Добавление драйверов или модификация существующих для обеспечения совместимости с новыми устройствами или компонентами.
4. Оптимизация производительности: Изменения, направленные на повышение эффективности и производительности системы.
5. Экспериментальные функции: Внедрение нововведений, которые ещё находятся на стадии тестирования и оценки.
Основные сетевые команды Linux:

ping: Проверяет подключение к удаленному хосту, отправляя пакеты ICMP.
traceroute: Определяет путь, по которому пакеты проходят от вашего компьютера к удаленному хосту.
netstat: Отображает информацию о сетевых подключениях, маршрутах и статистике.
ifconfig: Отображает и настраивает сетевые интерфейсы.
route: Управляет таблицей маршрутизации.
nslookup: Выполняет поиск в системе доменных имен (DNS).
dig: Более продвинутый инструмент поиска DNS, предоставляющий подробную информацию.
arp: Отображает и управляет таблицей сопоставления IP-адресов и MAC-адресов.
tcpdump: Захватывает и анализирует сетевой трафик.
wireshark: Графический инструмент для захвата и анализа сетевого трафика.

Управление сетевыми интерфейсами:

ifup: Включает сетевой интерфейс.
ifdown: Выключает сетевой интерфейс.
dhclient: Получает IP-адрес и другую информацию о конфигурации от сервера DHCP.
ip: Управляет сетевыми интерфейсами и адресами с помощью командной строки.

Настройка сети:

• hostname: Устанавливает или отображает имя хоста компьютера.
resolv.conf: Настраивает параметры DNS-сервера.
/etc/network/interfaces: Основной файл конфигурации сети в большинстве дистрибутивов Linux.

Мониторинг сети:

vnstat: Мониторинг использования полосы пропускания в режиме реального времени.
iptraf: Графический инструмент для мониторинга сетевого трафика.
nethogs: Отображает процессы, использующие сетевое соединение.
Факторы, влияющие на производительность Bash-скриптов

• Оптимизация кода:
- Избегайте ненужных вызовов команд.
- Используйте конвейеры для объединения команд.
- Кэшируйте результаты команд, когда это возможно.

• Использование встроенных команд:

- Встроенные команды выполняются быстрее, чем внешние команды.

• Параллелизм:

- Используйте параллельные конструкции, такие как xargs -P и GNU Parallel, для одновременного выполнения задач.

• Оптимизация ввода-вывода:

- Используйте буферизацию ввода-вывода для уменьшения количества операций ввода-вывода.
- Сжимайте данные при передаче по сети.

• Оптимизация памяти:

- Используйте массивы вместо списков.
- Освобождайте память после ее использования.

Инструменты для профилирования Bash-скриптов:
time: измеряет время выполнения команд.
perf: предоставляет подробную информацию о производительности, включая использование ЦП, памяти и ввода-вывода.
strace: отслеживает системные вызовы, выполняемые скриптом.
ltrace: отслеживает вызовы библиотеки, выполняемые скриптом.

Примеры оптимизации:
Использование конвейеров:
find . -name "*.txt" | xargs grep "pattern"

Кэширование результатов:
RESULT=$(find . -name "*.txt")
grep "pattern" $RESULT

Использование встроенных команд:
echo "Hello world" # встроенная команда
printf "Hello world\n" # внешняя команда

Параллелизм:
find . -name "*.txt" | xargs -P 4 grep "pattern"


Дополнительные советы:
- set -e для выхода из скрипта при возникновении ошибки.
- set -u для вывода ошибки, если переменная не определена.
- set -x для печати выполняемых команд.
- Тестируйте и профилируйте свои скрипты на разных наборах данных и системах.
Набор патчей Grsecurity

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

Эти механизмы включают в себя:
1. Улучшенное управление доступом и аудит с использованием Role-Based Access Control (RBAC).
2. Предотвращение переполнения буфера и других распространенных атак на память.
3. Защита от подделки адресов возврата и других методов контроля исполнения кода.
4. Усиленная рандомизация адресного пространства процессов (ASLR), делающая предсказание адресов в памяти более сложным для атакующих.
Патч PaX

PaX является частью Grsecurity, фокусируясь на защите памяти и предотвращении выполнения кода в не предназначенных для этого областях памяти.

Основные функции PaX включают:
1. Невыполнимые части памяти, предотвращающие выполнение кода в стеке, куче и других сегментах памяти, где это не предусмотрено.
2. Улучшенную реализацию ASLR, рандомизирующую расположение ключевых структур данных в памяти для усложнения атак.
3. Ограничения на изменение прав доступа к страницам памяти, что затрудняет ряд эксплуатаций уязвимостей.
Патч Budget Fair Queueing

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

Основные характеристики:
1. Справедливость: BFQ гарантирует справедливое распределение пропускной способности I/O между всеми активными процессами, предотвращая доминирование одного процесса над другими.
2. Адаптивность: Алгоритм адаптируется к различным типам нагрузки, оптимизируя производительность как для случайного, так и для последовательного доступа к диску.
3. Минимизация задержек: разработан специально для сокращения времени отклика системы, что крайне важно для настольных систем, где важна быстрая отзывчивость приложений и пользовательского интерфейса.
4. Поддержка устройств с разной производительностью: BFQ хорошо работает как с традиционными жёсткими дисками (HDD), так и с твердотельными накопителями (SSD), адаптируясь к их характеристикам.
Общие системные переменные:

$SHELL: Оболочка, используемая текущим процессом.
$HOME: Домашний каталог текущего пользователя.
$PATH: Список каталогов, в которых оболочка ищет исполняемые файлы.
$USER: Имя текущего пользователя.
$UID: Идентификатор пользователя (UID) текущего пользователя.
$PWD: Текущий рабочий каталог.
$HOSTNAME: Имя хоста системы.
$TERM: Тип терминала, используемого текущим процессом.
$LANG: Языковые настройки системы.
$LC_ALL: Настройки локали для всех категорий.

Переменные окружения, связанные с оболочкой:

$PS1: Строка приглашения оболочки.
$PS2: Строка продолжения оболочки.
$IFS: Внутренний разделитель полей, используемый оболочкой для разделения слов в строке.
$CDPATH: Список каталогов, в которых оболочка выполняет команду cd.
$EDITOR: Редактор, используемый оболочкой по умолчанию.
$PAGER: Программа просмотра, используемая оболочкой по умолчанию.

Переменные окружения, связанные с командами:

$0: Имя текущей команды.
$1, $2, ...: Аргументы, переданные текущей команде.
$#: Количество аргументов, переданных текущей команде.
$?: Код выхода последней выполненной команды.

Переменные окружения, связанные с процессами:

$PPID: Идентификатор родительского процесса.
$PID: Идентификатор текущего процесса.
$PPWD: Текущий рабочий каталог родительского процесса.

Переменные окружения, связанные с системой:

$OSTYPE: Тип операционной системы.
$ARCH: Архитектура процессора.
$KERNELRELEASE: Версия ядра.
$VERSION: Версия дистрибутива Linux.

Пользовательские переменные окружения:

*Пользователи могут создавать свои собственные переменные окружения, используя команду export.
Например: export MY_VARIABLE=value
Pacman - менеджер пакетов, используемый в дистрибутивах Linux на основе Arch, таких как Arch Linux, Manjaro и EndeavourOS.

Устанавливаем:

Обновляем индекс пакетов:
sudo pacman -Sy

Устанавливаем Pacman:
sudo pacman -S pacman


Используем Pacman:

Установка пакета:
sudo pacman -S <имя_пакета>

Обновление пакета:
sudo pacman -Syu <имя_пакета>

Удаление пакета:
sudo pacman -R <имя_пакета>

Поиск пакета:
pacman -Ss <имя_пакета>

Просмотр информации о пакете:
pacman -Si <имя_пакета>


Советы:

- Для установки нескольких пакетов одновременно используйте команду pacman -S <имя_пакета1> <имя_пакета2> ....

- Чтобы обновить все пакеты в вашей системе, используйте команду sudo pacman -Syu.

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

- Репозиторий Arch User Repository (AUR) предоставляет доступ к дополнительным пакетам, которые не включены в официальные репозитории. Чтобы включить AUR, добавьте следующее в ваш файл /etc/pacman.conf:
[aur]
SigLevel = Optional TrustAll
Server = https://aur.archlinux.org/$repo
Принцип работы патча Budget Fair Queueing

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

BFQ вводит понятие "бюджета" для каждого процесса, выполняющего операции ввода/вывода. Бюджет определяет количество операций ввода/вывода или объём данных, который процесс может использовать, прежде чем управление будет передано другому процессу.

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

Их основные отличия:

Интерфейс
• top: Текстовый интерфейс с ограниченными возможностями навигации.
• htop: Интерактивный интерфейс с возможностью использования мыши, прокрутки и сортировки.

Информация о системе

• top: Отображает основную информацию о системе, такую как использование ЦП, памяти, своп и процессов.
• htop: Предоставляет более подробную информацию, включая использование диска, сетевой трафик, температуру ЦП и многое другое.

Управление процессами
• top: Позволяет убивать процессы, изменять их приоритет и просматривать подробную информацию о них.
• htop: Предлагает более расширенные возможности управления процессами, такие как древовидный вид, фильтрация и поиск.

Настраиваемость
• top: Имеет ограниченные возможности настройки.
• htop: Высоко настраиваемый, позволяет изменять цвета, столбцы и горячие клавиши.

Другие функции
• top: Может отображать графики использования ресурсов.
• htop: Имеет встроенный просмотрщик файлов, монитор сети и другие полезные функции.

Ресурсоемкость
• top: Более легкий и потребляет меньше ресурсов.
• htop: Более ресурсоемкий, но предлагает более богатый набор функций.
Настройка и использование патча Budget Fair Queueing

BFQ - алгоритм планирования ввода-вывода, направленный на улучшение производительности системы.

BFQ доступен в ядрах Linux начиная с версии 4.12. Для его использования необходимо выбрать BFQ как планировщик ввода/вывода для конкретного устройства хранения. Это можно сделать через файловую систему /sys или при помощи утилиты tuned в дистрибутивах, поддерживающих её.

Выбор планировщика может зависеть от конкретных задач, но особенно рекомендуется для настольных систем, где важна отзывчивость пользовательского интерфейса в условиях высокой нагрузки на систему ввода/вывода.

Также может быть полезен на серверах или в системах реального времени, где требуется гарантировать определённый уровень производительности для каждого процесса.
Набор патчей Preempt-RT (Real-Time Patch)

Preempt-RT - набор патчей для ядра Linux, предназначенный для улучшения его real-time характеристик. Цель этих патчей — сделать поведение Linux более предсказуемым и уменьшить задержки, что критически важно для приложений реального времени, требующих строгого соблюдения временных ограничений.

Основные аспекты:
1. Полное вытеснение ядра (Full Preemption): Ядро Linux становится полностью вытесняемым, что означает, что большинство задач ядра могут быть прерваны в любой момент времени для обработки более приоритетных задач. Это сокращает максимальные задержки, улучшая общую отзывчивость системы.
2. Высокая гранулярность блокировок (High-Resolution Timers): Улучшает точность таймеров, позволяя приложениям реального времени эффективнее управлять временем и событиями.
3. Приоритетные инверсии блокировок: Preempt-RT внедряет механизмы для борьбы с приоритетными инверсиями, когда низкоприоритетные задачи блокируют ресурсы, необходимые высокоприоритетным задачам, через использование протоколов наследования приоритетов.
Патчи для поддержки USB4

Поддержка USB4 в ядре Linux была значительно расширена благодаря ряду патчей, начиная примерно с версии ядра 5.6, выпущенной в марте 2020 года.


USB4 — это новейший стандарт интерфейса USB.

Его основные характеристики и возможности USB4:

1. Скорость передачи данных: USB4 поддерживает скорости до 40 Гбит/с, что позволяет быстро передавать большие объемы данных и эффективно работать с внешними устройствами хранения и видеоустройствами высокого разрешения.
2. Совместимость с Thunderbolt 3: USB4 основан на технологии Thunderbolt 3, что обеспечивает высокий уровень совместимости между устройствами и возможность использования высокоскоростных соединений и док-станций.
3. Поддержка нескольких протоколов: Стандарт позволяет одновременно использовать несколько типов данных и видеопротоколов через один и тот же кабель, что упрощает подключение и уменьшает количество необходимых кабелей.
4. Питание и зарядка: USB4 продолжает поддерживать стандарт USB Power Delivery (USB PD) для питания и зарядки устройств с высокой мощностью через USB.
Оптимизация производительности системы

Tuned — системная утилита, которая позволяет автоматически настраивать и оптимизировать системные параметры в зависимости от выбранного профиля. Каждый профиль оптимизирует системные параметры для максимальной эффективности в соответствующей области.

Чтобы активировать профиль в Tuned, можно использовать команду:
tuned-adm profile <имя_профиля>

Для просмотра списка доступных профилей:
tuned-adm list

Чтобы вернуться к профилю по умолчанию или отключить все текущие настройки:
tuned-adm off

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

btop++ является преемником популярного монитора системы htop, предоставляя более продвинутый и визуально привлекательный интерфейс для мониторинга ресурсов системы.

Основные характеристики:

1. Интерактивный пользовательский интерфейс: Графически богатый и интерактивный интерфейс в стиле консоли, который можно настраивать с помощью тем.

2. Мониторинг процессора:
Отображение загрузки каждого ядра, температур (если доступно), а также общей статистики использования процессора.

3. Мониторинг памяти и свопа:
Графики использования оперативной памяти и области подкачки (swap) с детализацией занятых и свободных объемов.

4. Мониторинг дисков:
Информация о чтении/записи данных на дисках, а также общее использование дискового пространства.

5. Мониторинг сети:
Статистика входящего и исходящего трафика, включая скорость передачи данных.

6. Управление процессами:
Возможность просмотра и управления процессами, включая завершение задач.

7. Настройки и темы:
Поддержка настраиваемых тем и конфигураций для персонализации внешнего вида и поведения монитора.
Анализ дискового пространства

dust — утилита командной строки, созданная как более интуитивная альтернатива традиционной команде du (disk usage). Она предназначена для анализа использования дискового пространства и помогает выявлять каталоги и файлы, занимающие наибольший объем на диске.

Установка: dust может быть не доступен напрямую через стандартные репозитории, но его можно установить через cargo:
cargo install du-dust

Использование:
Чтобы отобразить дерево каталогов с указанием размера каждого каталога и файла, начиная с самых "тяжелых":
dust

ограничить количество уровней дерева каталогов в выводе, используйте опцию -d (или --depth):
dust -d 2

Чтобы исключить один или несколько каталогов из анализа, используйте опцию -X (или --ignore-directory):
dust -X node_modules
Альтернатива классической команде find

Команда fd — это простой, быстрый и удобный инструмент для поиска файлов в файловой системе.

Примеры использования:
1. Базовый поиск файла по имени:
fd pattern
Это команда найдет все файлы в текущем каталоге и подкаталогах, имена которых соответствуют шаблону pattern.

2. Поиск с использованием регулярных выражений:
fd -e txt '^foo.*bar$'
Здесь fd будет искать файлы с расширением .txt, имена которых начинаются на foo и заканчиваются на bar.

3. Игнорирование файлов .gitignore:
По умолчанию fd игнорирует файлы, указанные в .gitignore. Чтобы отключить это поведение, используйте флаг --no-ignore:
fd pattern --no-ignore

4. Поиск в определённом каталоге:
fd pattern /path/to/directory
Эта команда заставит fd искать файлы, соответствующие шаблону pattern, в указанном каталоге и его подкаталогах.