109 lines
5.5 KiB
Go
Executable file
109 lines
5.5 KiB
Go
Executable file
package linuxmodules
|
||
|
||
import (
|
||
"rubric/utils"
|
||
)
|
||
|
||
var KernelModule = Module{
|
||
Key: "kernel",
|
||
Aliases: []string{"k", "ядро"},
|
||
Title: "Ядро Linux",
|
||
Description: "Тема 21: ядро, модули, параметры, uname, dmesg",
|
||
Run: showKernel,
|
||
}
|
||
|
||
func showKernel() {
|
||
utils.Header("Linux — Ядро (Kernel)")
|
||
|
||
utils.Section("21. Ядро Linux")
|
||
|
||
utils.Println("Ядро (kernel) — центральная часть ОС. Управляет:")
|
||
utils.Println("• процессами и планировщиком CPU")
|
||
utils.Println("• памятью (виртуальная память, swap)")
|
||
utils.Println("• устройствами (через драйверы)")
|
||
utils.Println("• файловыми системами")
|
||
utils.Println("• сетью")
|
||
utils.Println("• системными вызовами (syscalls)")
|
||
|
||
utils.Println(utils.ColorBold + "\nИнформация о ядре:" + utils.ColorReset)
|
||
utils.Command("uname -r", "версия ядра")
|
||
utils.Command("uname -a", "полная информация (ядро, архитектура, дата)")
|
||
utils.Command("uname -m", "архитектура (x86_64, aarch64...)")
|
||
utils.Command("cat /proc/version", "подробная версия (компилятор, дата)")
|
||
utils.Command("cat /proc/sys/kernel/osrelease", "версия через /proc")
|
||
utils.Code(`# Пример uname -a:
|
||
Linux server01 5.15.0-91-generic #101-Ubuntu SMP Tue Nov 14 13:30:08 UTC 2023
|
||
x86_64 x86_64 x86_64 GNU/Linux
|
||
│ │ │ └ платформа
|
||
│ │ └── архитектура процессора
|
||
│ └── имя хоста
|
||
└── имя ядра
|
||
|
||
# Версия ядра: 5.15.0-91-generic
|
||
# 5.15 — основная версия
|
||
# 0 — патч-уровень
|
||
# 91 — номер пакета дистрибутива`)
|
||
|
||
utils.Println(utils.ColorBold + "dmesg — буфер сообщений ядра:" + utils.ColorReset)
|
||
utils.Command("dmesg", "все сообщения ядра")
|
||
utils.Command("dmesg | tail -20", "последние 20 сообщений")
|
||
utils.Command("dmesg -T", "с человекочитаемыми временными метками")
|
||
utils.Command("dmesg | grep -i error", "только ошибки")
|
||
utils.Command("dmesg | grep -i usb", "сообщения о USB-устройствах")
|
||
utils.Command("dmesg | grep -i sda", "сообщения о диске sda")
|
||
utils.Command("dmesg -w", "следить за новыми сообщениями (как tail -f)")
|
||
utils.Command("dmesg -l err,crit", "только критические ошибки")
|
||
|
||
utils.Println(utils.ColorBold + "\nМодули ядра:" + utils.ColorReset)
|
||
utils.Println("Модуль — расширение ядра, загружаемое динамически (драйверы, ФС...).")
|
||
utils.Code(`# Управление модулями:
|
||
lsmod # список загруженных модулей
|
||
lsmod | grep ext4 # есть ли модуль ext4?
|
||
modinfo ext4 # информация о модуле
|
||
modprobe ext4 # загрузить модуль (с зависимостями)
|
||
modprobe -r ext4 # выгрузить модуль
|
||
insmod /path/to/mod.ko # загрузить .ko файл напрямую
|
||
rmmod ext4 # выгрузить модуль
|
||
|
||
# Автоматическая загрузка при старте:
|
||
# /etc/modules (Debian/Ubuntu)
|
||
# /etc/modules-load.d/*.conf
|
||
echo "br_netfilter" > /etc/modules-load.d/k8s.conf
|
||
|
||
# Параметры модулей:
|
||
# /etc/modprobe.d/*.conf
|
||
echo "options kvm_intel nested=1" > /etc/modprobe.d/kvm.conf`)
|
||
|
||
utils.Println(utils.ColorBold + "Параметры ядра (sysctl):" + utils.ColorReset)
|
||
utils.Code(`# Просмотр параметров:
|
||
sysctl -a # все параметры
|
||
sysctl net.ipv4.ip_forward # конкретный параметр
|
||
cat /proc/sys/net/ipv4/ip_forward # то же через /proc/sys
|
||
|
||
# Изменить параметр (временно):
|
||
sysctl -w net.ipv4.ip_forward=1
|
||
|
||
# Постоянно — в /etc/sysctl.conf или /etc/sysctl.d/:
|
||
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.d/99-custom.conf
|
||
sysctl -p /etc/sysctl.d/99-custom.conf # применить
|
||
|
||
# Полезные параметры:
|
||
net.ipv4.ip_forward = 1 # маршрутизация (для Docker/Kubernetes)
|
||
net.ipv4.tcp_syncookies = 1 # защита от SYN flood
|
||
vm.swappiness = 10 # предпочитать RAM над swap
|
||
fs.file-max = 2097152 # максимум открытых файлов
|
||
kernel.dmesg_restrict = 0 # dmesg без root`)
|
||
|
||
utils.Println(utils.ColorBold + "Аппаратная информация:" + utils.ColorReset)
|
||
utils.Command("lscpu", "информация о процессоре")
|
||
utils.Command("lsmem", "информация о памяти")
|
||
utils.Command("lspci", "устройства на шине PCI")
|
||
utils.Command("lspci -v", "подробно")
|
||
utils.Command("lsusb", "USB-устройства")
|
||
utils.Command("lsblk", "блочные устройства (диски)")
|
||
utils.Command("lshw", "полная информация об оборудовании (нужен root)")
|
||
utils.Command("dmidecode", "данные BIOS/UEFI (тип памяти, серийный номер...)")
|
||
utils.Command("inxi -Fz", "обзор системы (нужно установить)")
|
||
|
||
utils.Footer()
|
||
}
|