98 lines
4.7 KiB
Go
Executable file
98 lines
4.7 KiB
Go
Executable file
package linuxmodules
|
||
|
||
import (
|
||
"fmt"
|
||
"rubric/utils"
|
||
"strings"
|
||
)
|
||
|
||
// Module описывает один раздел справочника Linux
|
||
type Module struct {
|
||
Key string
|
||
Aliases []string
|
||
Title string
|
||
Description string
|
||
Run func()
|
||
}
|
||
|
||
// All — список всех модулей в порядке меню
|
||
var All = []Module{
|
||
IntroModule,
|
||
FilesModule,
|
||
StreamsModule,
|
||
BashModule,
|
||
ProcessesModule,
|
||
UsersModule,
|
||
KernelModule,
|
||
DisksModule,
|
||
ScriptsModule,
|
||
BootModule,
|
||
LogsModule,
|
||
BackupModule,
|
||
NetworkModule,
|
||
SecurityModule,
|
||
PackagesModule,
|
||
PerformanceModule,
|
||
SysconfigModule,
|
||
NetfsModule,
|
||
ToolsModule,
|
||
}
|
||
|
||
// Find ищет модуль по ключу или алиасу
|
||
func Find(key string) (Module, bool) {
|
||
key = strings.ToLower(strings.TrimSpace(key))
|
||
for _, m := range All {
|
||
if m.Key == key {
|
||
return m, true
|
||
}
|
||
for _, a := range m.Aliases {
|
||
if a == key {
|
||
return m, true
|
||
}
|
||
}
|
||
}
|
||
return Module{}, false
|
||
}
|
||
|
||
// ListModules выводит краткий список модулей
|
||
func ListModules() {
|
||
fmt.Printf("\n%s%sРазделы справочника Linux:%s\n\n",
|
||
utils.ColorBold, utils.ColorCyan, utils.ColorReset)
|
||
for i, m := range All {
|
||
fmt.Printf(" %s%d.%s %-12s — %s\n",
|
||
utils.ColorDim, i+1, utils.ColorReset,
|
||
utils.ColorYellow+utils.ColorBold+m.Key+utils.ColorReset,
|
||
m.Title,
|
||
)
|
||
}
|
||
fmt.Println()
|
||
}
|
||
|
||
// Keywords возвращает ключевые слова для поиска по модулю
|
||
func Keywords(key string) []string {
|
||
kw := map[string][]string{
|
||
"intro": {"операционная система", "GNU", "Linux", "дистрибутив", "FHS", "файловая система", "терминал", "shell", "bash", "история"},
|
||
"files": {"файлы", "директории", "ls", "cp", "mv", "rm", "mkdir", "ln", "symlink", "жёсткая ссылка", "grep", "find", "cat", "head", "tail", "nano", "vim", "vi", "less", "chmod"},
|
||
"streams": {"stdin", "stdout", "stderr", "pipe", "перенаправление", "redirect", "tee", "xargs", "dev/null", "конвейер"},
|
||
"bash": {"bash", "alias", "history", "переменные", "PATH", "HOME", "bashrc", "completion", "type", "which", "окружение", "environment"},
|
||
"processes": {"процессы", "ps", "top", "htop", "kill", "signals", "сигналы", "PID", "nice", "renice", "jobs", "bg", "fg", "nohup", "watch"},
|
||
"users": {"пользователи", "группы", "sudo", "su", "chmod", "chown", "права", "permissions", "useradd", "usermod", "passwd", "visudo", "sudoers", "SUID", "SGID", "umask"},
|
||
"kernel": {"ядро", "kernel", "uname", "dmesg", "модули", "modules", "lsmod", "modprobe", "sysctl", "lscpu", "lspci"},
|
||
"disks": {"диски", "разделы", "fdisk", "parted", "mkfs", "mount", "fstab", "LVM", "RAID", "mdadm", "ext4", "xfs", "swap", "blkid", "df", "du"},
|
||
"scripts": {"скрипты", "bash scripting", "if", "for", "while", "функции", "массивы", "getopts", "trap", "set -e", "shebang"},
|
||
"boot": {"загрузка", "GRUB", "systemd", "systemctl", "journalctl", "сервисы", "юниты", "units", "target", "timer", "boot"},
|
||
"logs": {"логи", "логирование", "rsyslog", "syslog", "logrotate", "cron", "crontab", "at", "journald", "var/log"},
|
||
"backup": {"бэкап", "резервное копирование", "tar", "rsync", "инкрементальный", "VDO", "дедупликация"},
|
||
"network": {"сеть", "сети", "ip", "ifconfig", "ss", "netstat", "nmcli", "SSH", "ключи", "авторизация", "firewall", "ping", "traceroute", "curl", "wget", "порты"},
|
||
"security": {"безопасность", "SELinux", "firewalld", "firewall-cmd", "восстановление", "semanage", "chcon", "restorecon", "audit"},
|
||
"packages": {"пакеты", "dnf", "apt", "rpm", "dpkg", "репозиторий", "установка", "snap", "flatpak", "yum"},
|
||
"performance": {"производительность", "swap", "память", "RAM", "OOM", "планировщик", "nice", "tuned", "Stratis", "swappiness"},
|
||
"sysconfig": {"RHEL", "hostname", "время", "NTP", "chrony", "часовой пояс", "timedatectl", "localectl", "subscription-manager"},
|
||
"netfs": {"NFS", "SMB", "Samba", "CIFS", "autofs", "монтирование", "сетевые диски", "IPv6", "rsync", "SCP", "SFTP"},
|
||
"tools": {"Cockpit", "glob", "регулярные выражения", "regex", "grep", "sed", "awk", "глоббинг", "веб-интерфейс"},
|
||
}
|
||
if v, ok := kw[key]; ok {
|
||
return v
|
||
}
|
||
return []string{}
|
||
}
|