База знаний (цифровой суверенитет)
  • Bash - пути и переменные окружения

    Команды BASH
    1 2 4

    A
    951
    0

    Пути в Linux


    Вот актуальный и полный список самых важных путей в Linux (2025 год, Debian/Ubuntu/Mint + производные). Всё проверено на реальных системах.

    Что хранится Путь Примечание / полезные команды
    Основные репозитории APT /etc/apt/sources.list Главный файл репозиториев
    Дополнительные репозитории /etc/apt/sources.list.d/ Все *.list файлы от PPA, Docker, VS Code и т.д.
    Ключи репозиториев /etc/apt/trusted.gpg.d/ GPG-ключи в новых системах
    Кеш установленных deb-пакетов /var/cache/apt/archives/ Удалить: sudo apt clean
    Частично скачанные пакеты /var/cache/apt/archives/partial/
    Списки пакетов (метаданные) /var/lib/apt/lists/ Обновляются через apt update
    Файл hosts /etc/hosts Блокировка сайтов, локальные имена
    Альтернативы (выбор версий команд) /etc/alternatives/ update-alternatives --config editor
    Docker — всё /var/lib/docker/ Основная папка Docker
    Docker — образы, контейнеры, volumes /var/lib/docker/overlay2/ Самая тяжёлая часть (обычно 80–90 % места)
    Docker — volumes (данные) /var/lib/docker/volumes/
    Docker — конфиги /etc/docker/daemon.json Настройки демона
    Snap-пакеты /var/lib/snapd/snaps/ Каждый снап — два файла *.snap (текущий + предыдущий)
    Flatpak /var/lib/flatpak/
    AppImage (если запускаешь часто) ~/.local/bin/ или где сам положил
    Логи системы /var/log/ journalctl (systemd) хранит в /var/log/journal/
    Временные файлы /tmp/ и /var/tmp/ Очищаются при перезагрузке или вручную
    Конфиги пользователя ~/.* (скрытые папки в домашней директории) ~/.config/, ~/.cache/, ~/.local/share/
    Кэш пользователя ~/.cache/ Можно смело чистить
    Конфиги пользователя (новый стандарт) ~/.config/
    Локальные данные приложений ~/.local/share/
    Wine (если ставил Windows-программы) ~/.wine/
    OpenVPN конфиги /etc/openvpn/ или ~/.config/openvpn/
    SSH-ключи пользователя ~/.ssh/
    SSH-ключи системы /etc/ssh/
    Crontab пользователя crontab -l > file (хранится в /var/spool/cron/crontabs/)
    Автозагрузка (systemd) ~/.config/autostart/ и /etc/xdg/autostart/
    Монтирование дисков (fstab) /etc/fstab
    Автомонтирование (udev/rules) /etc/udev/rules.d/
    Grub конфиг /etc/default/grub и /boot/grub/grub.cfg

    Полезные однострочники для очистки места

    # Сколько жрёт Docker
    sudo du -sh /var/lib/docker/
    
    # Очистить старые образы/контейнеры
    sudo docker system prune -af
    
    # Очистить кэш APT
    sudo apt autoremove && sudo apt clean
    
    # Очистить snap-кэш (очень помогает)
    sudo snap list --all | awk '/disabled/{print $1" "$3}' | xargs -n2 sudo snap remove
    
    # Очистить кэш пользователя
    rm -rf ~/.cache/*
    
    # Показать топ-10 самых тяжёлых папок
    sudo du -h / --max-depth=1 | sort -hr | head -10
    
  • A
    951
    0

    Ручная проверка, содержит ли переменная PATH каталог /sbin


    Вот актуальные на 2025 год самые быстрые и надёжные способы проверить и исправить отсутствие /sbin, /usr/sbin, /usr/local/sbin в $PATH — именно эти три каталога почти всегда отсутствуют у обычных пользователей в Ubuntu/Debian/Mint/Pop!_OS и производных.

    1. Проверка одной командой (2025 стандарт)

    echo "$PATH" | tr ':' '\n' | grep -E '^(/(usr/)?s?bin)$'
    # или ещё короче и красивее:
     (echo "$PATH"; echo) | tr ':' '\n' | nl | grep -E '/s?bin'
    

    Если ничего не вывелось — /sbin и /usr/sbin действительно отсутствуют.

    2. Самые удобные однострочники

    # Есть ли вообще хоть один *bin?
    [[ :$PATH: == *:/sbin:* || :$PATH: == *:/usr/sbin:* ]] && echo "OK" || echo "Отсутствует"
    
    # Точная проверка всех трёх нужных каталогов
    missing=()
    for dir in /sbin /usr/sbin /usr/local/sbin; do
        [[ ":$PATH:" != *":$dir:"* ]] && missing+=("$dir")
    done
    ((${#missing[@]} == 0)) && echo "Всё в порядке" || echo "Отсутствуют: ${missing[*]}"
    

    3. Правильное исправление навсегда (2025)

    # Добавь эту строку в конец ~/.bashrc или ~/.zshrc
    echo 'export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:$PATH"' >> ~/.bashrc
    
    # Или одной командой (если файла ещё нет)
    cat <<'EOF' >> ~/.bashrc
    
    # Добавляем системные административные каталоги в PATH (2025)
    export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:$PATH"
    EOF
    

    После этого:

    source ~/.bashrc    # или перезайди в терминал
    

    Теперь reboot, ifconfig, iptables, fdisk, systemctl и т.д. будут работать без /sbin/ и без sudo в командах типа sudo reboot.

    4. Мой личный «идеальный» вариант (ставлю на всех серверах и рабочих машинах)

    # В ~/.bashrc или ~/.profile
    if [[ $UID -ne 0 && ":$PATH:" != *":/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:"* ]]; then
        export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:$PATH"
    fi
    

    Защищает от дублирования при повторном source и не трогает root.

    5. Проверка после исправления

    which reboot && echo "reboot теперь доступен без пути!"
    which iptables && echo "iptables тоже!"
    

    Итог: запомни всего две команды на всю жизнь

    # Проверить
    [[ ":$PATH:" == *":/sbin:"* ]] && echo "OK" || echo "Нет /sbin"
    
    # Исправить навсегда
    echo 'export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:$PATH"' >> ~/.bashrc && source ~/.bashrc
    

    Больше никогда не будешь писать /sbin/ip, /sbin/reboot или получать ошибку command not found на только что установленной Ubuntu/Mint.