rubric/modules/linuxmodules/linux_kernel.go
2026-04-06 11:02:36 +03:00

109 lines
5.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()
}