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

238 lines
10 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 (
"fmt"
"rubric/utils"
)
var BashModule = Module{
Key: "bash",
Aliases: []string{"sh", "shell", "баш"},
Title: "Bash: основы и переменные",
Description: "Темы 1213: bash-completion, alias, type, переменные окружения",
Run: showBash,
}
func showBash() {
utils.Header("Linux — Bash: основы и переменные")
// ─── 12. Bash #1 ──────────────────────────────────────────────
utils.Section("12. Bash #1: bash-completion, alias, type")
utils.Println(utils.ColorBold + "bash-completion — автодополнение Tab:" + utils.ColorReset)
utils.Code(`Tab — дополнить команду / путь / аргумент
Tab Tab — показать все варианты
# Примеры:
git che<Tab> → git checkout
ls /etc/sy<Tab> → ls /etc/systemd/
ssh us<Tab> → ssh user@hostname (из ~/.ssh/config)
systemctl st<Tab> → systemctl start/status/stop
# Установить расширенный bash-completion:
# Debian/Ubuntu: apt install bash-completion
# RHEL/Fedora: dnf install bash-completion
# Активировать в ~/.bashrc:
[ -f /etc/bash_completion ] && . /etc/bash_completion`)
utils.Println(utils.ColorBold + "alias — псевдонимы команд:" + utils.ColorReset)
utils.Code(`# Посмотреть все алиасы:
alias
# Создать алиас (действует до конца сессии):
alias ll='ls -la'
alias la='ls -la'
alias ..='cd ..'
alias ...='cd ../..'
alias grep='grep --color=auto'
alias rm='rm -i' # защита от случайного удаления
alias df='df -h'
alias free='free -h'
alias update='sudo apt update && sudo apt upgrade'
# Использование алиаса:
ll /etc
# Удалить алиас:
unalias ll
# Посмотреть что делает алиас:
alias ll`)
utils.Println(utils.ColorBold + "Постоянные алиасы — добавить в ~/.bashrc:" + utils.ColorReset)
utils.Code(`# ~/.bashrc
alias ll='ls -la --color=auto'
alias la='ls -la'
alias l='ls -CF'
alias ..='cd ..'
alias grep='grep --color=auto'
alias h='history'
alias c='clear'
# Применить без перезапуска терминала:
source ~/.bashrc
# или:
. ~/.bashrc`)
utils.Println(utils.ColorBold + "type — определить тип команды:" + utils.ColorReset)
utils.Code(`type ls
# ls is aliased to 'ls --color=auto'
type cd
# cd is a shell builtin
type python3
# python3 is /usr/bin/python3
type ll
# ll is aliased to 'ls -la'
type if
# if is a shell keyword
# Опции:
type -a ls # все варианты (алиас + файл)
type -t ls # только тип: alias/builtin/file/keyword`)
utils.Println(utils.ColorBold + "which и whereis:" + utils.ColorReset)
utils.Command("which python3", "полный путь к исполняемому файлу")
utils.Command("which -a python", "все версии python в PATH")
utils.Command("whereis nginx", "бинарник, исходники, man-страница")
utils.Command("command -v git", "путь или алиас (POSIX-совместимо)")
fmt.Println()
utils.Println(utils.ColorBold + "Работа с историей команд:" + utils.ColorReset)
utils.Command("history", "полная история")
utils.Command("history 20", "последние 20 команд")
utils.Command("!42", "выполнить команду №42")
utils.Command("!!", "повторить последнюю команду")
utils.Command("!ls", "последняя команда начинающаяся с ls")
utils.Command("Ctrl+R", "интерактивный поиск по истории")
utils.Command("history -c", "очистить историю")
fmt.Println()
utils.Code(`# Файл истории: ~/.bash_history
# Управление историей через переменные в ~/.bashrc:
HISTSIZE=10000 # размер в памяти
HISTFILESIZE=20000 # размер файла
HISTCONTROL=ignoredups # не сохранять дубли
HISTCONTROL=ignorespace # команды с пробелом впереди не сохраняются
# Временные метки в истории:
HISTTIMEFORMAT="%F %T "`)
// ─── 13. Bash #2: переменные ──────────────────────────────────
utils.Section("13. Bash #2: переменные")
utils.Println(utils.ColorBold + "Переменные оболочки:" + utils.ColorReset)
utils.Code(`# Создать переменную:
name="Alice" # без пробелов вокруг =
count=42
PATH_BACKUP=$PATH # использовать значение другой переменной
# Использовать переменную ($ перед именем):
echo $name # Alice
echo "Привет, $name!" # Привет, Alice!
echo "Привет, ${name}!" # фигурные скобки — явное обозначение
# Удалить переменную:
unset name`)
utils.Println(utils.ColorBold + "Переменные окружения (Environment Variables):" + utils.ColorReset)
utils.Code(`# Переменные оболочки vs переменные окружения:
# - переменная оболочки видна только в текущем shell
# - переменная окружения (export) передаётся дочерним процессам
# Экспортировать:
export name="Alice"
export PATH="$PATH:/opt/myapp/bin"
# Или сразу:
export count=42
# Посмотреть все переменные окружения:
env
printenv
printenv PATH # конкретная переменная
echo $PATH # то же`)
utils.Println(utils.ColorBold + "Важные системные переменные:" + utils.ColorReset)
utils.Code(`PATH — список директорий для поиска команд (: разделитель)
/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin
HOME — домашняя директория (~) /home/alice
USER — имя пользователя alice
LOGNAME — логин пользователя alice
SHELL — оболочка пользователя /bin/bash
TERM — тип терминала xterm-256color
LANG — язык/локаль en_US.UTF-8
LC_ALL — переопределить все локали
PWD — текущая директория /home/alice/docs
OLDPWD — предыдущая директория
PS1 — приглашение командной строки
PS2 — вторичное приглашение (>)
EDITOR — редактор по умолчанию vim
VISUAL — визуальный редактор vim
PAGER — пагинатор less
HISTSIZE — размер истории в памяти
RANDOM — случайное число 0-32767`)
utils.Println(utils.ColorBold + "Специальные переменные bash:" + utils.ColorReset)
utils.Code(`$0 — имя скрипта / оболочки
$1..$9 — позиционные параметры (аргументы скрипта)
$@ — все аргументы как отдельные строки
$* — все аргументы как одна строка
$# — количество аргументов
$? — код возврата последней команды (0 = успех)
$$ — PID текущего процесса
$! — PID последнего фонового процесса
$_ — последний аргумент предыдущей команды`)
utils.Code(`# Примеры:
echo $? # 0 если последняя команда успешна
ls /nonexistent
echo $? # 2 (или другой ненулевой) — ошибка
echo $$ # PID bash
echo $RANDOM # случайное число`)
utils.Println(utils.ColorBold + "Работа со строками переменных:" + utils.ColorReset)
utils.Code(`name="alice"
${name} → alice
${name^} → Alice (первая буква заглавная)
${name^^} → ALICE (все заглавные)
${name,,} → alice (все строчные)
str="hello world"
${#str} → 11 (длина строки)
${str:0:5} → hello (подстрока с 0, длиной 5)
${str:6} → world (с позиции 6 до конца)
path="/home/user/file.txt"
${path##*/} → file.txt (удалить до последнего /)
${path%/*} → /home/user (удалить от последнего /)
${path%.*} → /home/user/file (удалить расширение)
${path##*.} → txt (только расширение)
# Значения по умолчанию:
${var:-default} → default если var не задана или пустая
${var:=default} → присвоить и вернуть default если пустая
${var:?ошибка} → вывести ошибку если пустая`)
utils.Println(utils.ColorBold + "Настройка ~/.bashrc и ~/.bash_profile:" + utils.ColorReset)
utils.Code(`~/.bashrc — выполняется при каждом запуске интерактивного bash
~/.bash_profile — выполняется при входе в систему (login shell)
~/.profile — POSIX-совместимый аналог .bash_profile
~/.bash_logout — выполняется при выходе
# Типичный ~/.bashrc:
export PATH="$HOME/.local/bin:$PATH"
export EDITOR=vim
alias ll='ls -la'
alias ..='cd ..'
# ~/.bash_profile обычно вызывает ~/.bashrc:
[[ -f ~/.bashrc ]] && . ~/.bashrc
# Применить изменения без перезапуска:
source ~/.bashrc`)
utils.Footer()
}