rubric/modules/linuxmodules/linux_tools.go
2026-07-21 14:52:55 +03:00

252 lines
12 KiB
Go
Executable file
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 (
"fmt"
"rubric/utils"
)
var ToolsModule = Module{
Key: "tools",
Aliases: []string{"t", "cockpit", "regex", "awk", "sed", "инструменты"},
Title: "Веб-интерфейс и текстовые инструменты",
Description: "Темы 6061: Cockpit, глоббинг, регулярные выражения, grep, sed, awk",
Run: showTools,
}
func showTools() {
utils.Header("Linux — Веб-интерфейс и текстовые инструменты")
// ─── 60. Cockpit ──────────────────────────────────────────────
utils.Section("60. Веб-интерфейс — Cockpit")
utils.Println("Cockpit — веб-консоль для администрирования Linux через браузер.")
utils.Println("Позволяет управлять сервисами, сетью, дисками, контейнерами и логами.")
fmt.Println()
utils.Println(utils.ColorBold + "Установка и запуск:" + utils.ColorReset)
utils.Code(`# RHEL/Fedora (обычно предустановлен):
dnf install cockpit
systemctl enable --now cockpit.socket
# Ubuntu/Debian:
apt install cockpit
systemctl enable --now cockpit.socket
# Открыть порт в firewalld:
firewall-cmd --permanent --add-service=cockpit
firewall-cmd --reload
# Доступ: https://hostname:9090
# Войти с логином/паролем системного пользователя`)
utils.Println(utils.ColorBold + "Расширения Cockpit:" + utils.ColorReset)
utils.Code(`# Управление виртуальными машинами:
dnf install cockpit-machines
# Управление Podman-контейнерами:
dnf install cockpit-podman
# Управление хранилищем (LVM, RAID, Stratis):
dnf install cockpit-storaged
# 389 DS (LDAP):
dnf install cockpit-389-ds
# Обновления пакетов:
dnf install cockpit-packagekit
# Применить все расширения:
systemctl restart cockpit.socket`)
utils.Println(utils.ColorBold + "Возможности Cockpit:" + utils.ColorReset)
utils.Code(`Dashboard — обзор системы: CPU, RAM, диски, сеть
Services — управление systemd-сервисами
Storage — диски, LVM, RAID, Stratis, NFS
Networking — интерфейсы, маршруты, firewall
Accounts — пользователи и группы
Software Updates — обновление пакетов
Terminal — встроенный терминал в браузере
Logs — journald логи с фильтрами
Podman — управление контейнерами
Machines — виртуальные машины (KVM/libvirt)`)
utils.Note("Cockpit работает в браузере, не требует постоянного подключения: сессия = одна вкладка.")
utils.Note("Порт 9090. Сертификат самоподписанный — нужно добавить исключение в браузере или подключить Let's Encrypt.")
// ─── 61. Глоббинг и регулярные выражения ─────────────────────
utils.Section("61. Глоббинг и регулярные выражения")
utils.Println(utils.ColorBold + "Глоббинг (Globbing) — шаблоны оболочки:" + utils.ColorReset)
utils.Code(`* — любое количество любых символов (кроме /)
? — ровно один любой символ
[abc] — один символ из набора
[a-z] — один символ из диапазона
[!abc] — один символ НЕ из набора
{a,b,c} — одно из перечисленных
# Примеры:
ls *.log # все файлы .log
ls file?.txt # file1.txt, fileA.txt...
ls [0-9]*.conf # начинающиеся с цифры
ls /etc/{nginx,apache}* # /etc/nginx* или /etc/apache*
rm backup_{2023,2024}*.tar # удалить бэкапы 2023 и 2024
cp /etc/*.{conf,cfg} /tmp/ # все .conf и .cfg
# Расширенный глоббинг (shopt -s extglob):
?(pattern) — 0 или 1 вхождение
*(pattern) — 0 или более
+(pattern) — 1 или более
@(pattern) — ровно 1
!(pattern) — всё кроме`)
utils.Println(utils.ColorBold + "Регулярные выражения — базовые (BRE):" + utils.ColorReset)
utils.Code(`. — любой символ
* — 0 или более предыдущего
^ — начало строки
$ — конец строки
[abc] — один символ из набора
[^abc] — один символ НЕ из набора
\(abc\) — группа
\{n,m\} — от n до m повторений
# Примеры:
grep '^root' /etc/passwd # строки начинающиеся с root
grep 'bash$' /etc/passwd # строки оканчивающиеся на bash
grep '^$' file.txt # пустые строки
grep '[0-9]\{3\}' file.txt # три цифры подряд`)
utils.Println(utils.ColorBold + "Регулярные выражения — расширенные (ERE):" + utils.ColorReset)
utils.Code(`+ — 1 или более предыдущего
? — 0 или 1 предыдущего
| — ИЛИ
(abc) — группа (без \)
{n,m} — от n до m повторений (без \)
# Использование ERE: grep -E, egrep, sed -E, awk
grep -E 'cat|dog' file.txt # cat или dog
grep -E '^[0-9]+\.' file.txt # строки начинающиеся с числа.
grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}' file.txt # IPv4-адрес
grep -E 'error|warning|critical' /var/log/syslog
# Полезные классы символов:
[[:alpha:]] — буквы (a-z, A-Z)
[[:digit:]] — цифры (0-9)
[[:alnum:]] — буквы и цифры
[[:space:]] — пробельные символы
[[:upper:]] — заглавные буквы
[[:lower:]] — строчные буквы
[[:punct:]] — знаки препинания`)
utils.Println(utils.ColorBold + "grep — поиск по шаблону:" + utils.ColorReset)
utils.Command("grep 'pattern' file", "базовый поиск")
utils.Command("grep -i 'pattern' file", "без учёта регистра")
utils.Command("grep -v 'pattern' file", "строки НЕ совпадающие")
utils.Command("grep -n 'pattern' file", "с номерами строк")
utils.Command("grep -c 'pattern' file", "количество совпадений")
utils.Command("grep -l 'pattern' *.conf", "только имена файлов")
utils.Command("grep -r 'pattern' /etc/", "рекурсивно в директории")
utils.Command("grep -A 3 'pattern' file", "3 строки ПОСЛЕ совпадения")
utils.Command("grep -B 2 'pattern' file", "2 строки ДО совпадения")
utils.Command("grep -C 2 'pattern' file", "2 строки до и после")
utils.Command("grep -E 'pat1|pat2' file", "расширенные регулярки")
utils.Command("grep -P '\\d+' file", "Perl-совместимые regex")
utils.Command("grep -o 'pattern' file", "только совпадающая часть")
utils.Command("grep -w 'word' file", "только целые слова")
fmt.Println()
utils.Println(utils.ColorBold + "sed — потоковый редактор:" + utils.ColorReset)
utils.Code(`# Синтаксис: sed 'команда' файл
# -i — изменить файл на месте
# -E — расширенные регулярки
# Замена (s — substitute):
sed 's/old/new/' file # первое вхождение в каждой строке
sed 's/old/new/g' file # все вхождения (global)
sed 's/old/new/gi' file # без учёта регистра
sed 's/old/new/2' file # второе вхождение
# Разделитель можно менять (удобно для путей):
sed 's|/old/path|/new/path|g' file
sed 's#/etc#/conf#g' file
# Изменить файл на месте:
sed -i 's/old/new/g' file.conf
sed -i.bak 's/old/new/g' file.conf # сохранить бэкап .bak
# Удаление строк:
sed '/pattern/d' file # удалить строки с паттерном
sed '5d' file # удалить 5-ю строку
sed '2,10d' file # удалить строки 2-10
sed '/^$/d' file # удалить пустые строки
sed '/^#/d' file # удалить комментарии
# Вставка и добавление:
sed '3a новая строка' file # добавить после строки 3
sed '3i новая строка' file # вставить перед строкой 3
sed '$a последняя' file # добавить в конец
# Вывод конкретных строк:
sed -n '5,10p' file # напечатать строки 5-10
sed -n '/start/,/end/p' file # между паттернами
# Несколько команд:
sed -e 's/foo/bar/' -e 's/baz/qux/' file
sed 's/foo/bar/; s/baz/qux/' file
# Практические примеры:
# Удалить комментарии и пустые строки:
sed '/^#/d; /^$/d' nginx.conf
# Заменить IP во всех конфигах:
sed -i 's/192\.168\.1\.100/10\.0\.0\.1/g' /etc/nginx/*.conf
# Добавить строку после первого совпадения:
sed '/\[global\]/a log level = 2' /etc/samba/smb.conf`)
utils.Println(utils.ColorBold + "awk — обработка текста по полям:" + utils.ColorReset)
utils.Code(`# awk обрабатывает текст построчно, разбивая на поля.
# По умолчанию разделитель — пробел/таб.
# Поля: $1 $2 $3 ... $NF (последнее), $0 (вся строка)
# NF — количество полей, NR — номер строки
# Вывод конкретного поля:
awk '{print $1}' file # первое поле
awk '{print $1, $3}' file # первое и третье
awk '{print NR, $0}' file # с номерами строк
# Другой разделитель (-F):
awk -F: '{print $1}' /etc/passwd # имена пользователей
awk -F: '{print $1, $6}' /etc/passwd # имя и домашняя директория
awk -F, '{print $2}' data.csv # второй столбец CSV
# Условия:
awk '$3 > 1000' file # строки где 3-е поле > 1000
awk '/pattern/ {print $0}' file # строки с паттерном
awk '$1 == "root"' /etc/passwd # строки где $1 = "root"
# Вычисления:
awk '{sum += $1} END {print sum}' file # сумма первого столбца
awk 'END {print NR}' file # количество строк (= wc -l)
# BEGIN и END блоки:
awk 'BEGIN {print "Начало"} {print $1} END {print "Конец"}' file
# Переменные и форматирование:
awk -F: '{printf "%-20s %s\n", $1, $6}' /etc/passwd
# Практические примеры:
# Топ процессов по CPU:
ps aux | awk 'NR>1 {print $3, $11}' | sort -rn | head -10
# Сумма размеров файлов (ls -l):
ls -l | awk '{sum += $5} END {print sum " bytes"}'
# Уникальные IP из лога nginx:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn
# Обработка CSV:
awk -F, 'NR>1 && $3 > 100 {print $1, $2}' report.csv`)
utils.Footer()
}