Debian и Ubuntu
Команды Linux в Debian и Ubuntu: полное руководство от новичка до системного и сетевого администратора
Большой практический учебник по терминалу Debian и Ubuntu. Команды объясняются по задачам: от навигации и установки программ до systemd, дисков, SSH, Netplan, firewall, сетевой диагностики и автоматизации.
Перед началом. Невозможно перечислить буквально все команды Linux: каждая установленная программа добавляет собственные утилиты. Руководство охватывает основной набор для Debian, Ubuntu, серверов, рабочих станций и сетей. Перед командами с sudo, удалением, форматированием дисков, изменением SSH, маршрутизации или firewall сначала создайте резервную копию и подготовьте откат.
Debian и Ubuntu: что общего, чем отличаются и какую систему выбрать
Debian и Ubuntu относятся к одному семейству дистрибутивов. Ubuntu основана на Debian и использует тот же формат пакетов DEB, APT, dpkg, systemd, ядро Linux, GNU Coreutils и стандартную структуру каталогов. Поэтому большая часть команд в этой статье работает в обеих системах одинаково.
Текущая стабильная ветка на дату обновления статьи. Debian Stable выбирают для серверов, рабочих станций, виртуальных машин и систем, где особенно важны предсказуемость и длительный жизненный цикл.
Актуальный выпуск с длительной поддержкой. Ubuntu LTS удобна для серверов, облачных систем, рабочих станций и инфраструктуры, где нужны Netplan, cloud-init, Snap и готовые интеграции.
Продолжает получать поддержку. Переход с одной LTS на следующую обычно предлагают после выхода первого point release новой LTS.
Что одинаково
- Команды
ls,cp,mv,rm,find,grep,sed,awk. - Пользователи, группы, права, ACL,
sudoиsu. - APT, dpkg и пакеты DEB.
- systemd,
systemctlиjournalctl. - SSH, OpenSSH, rsync, tar и стандартные средства резервного копирования.
- iproute2,
ip,ss,ping,dig,tcpdumpи nftables.
Главные различия
Debian
- Стабильная ветка обновляется консервативно.
- На минимальной установке
sudoможет отсутствовать, если при установке задан пароль root. - Сеть может управляться NetworkManager, ifupdown, systemd-networkd или Netplan в облачной конфигурации.
- Репозитории Debian и backports подключаются отдельно и не смешиваются с Ubuntu.
Ubuntu
- Для производственных систем обычно выбирают LTS.
- Первый созданный пользователь обычно получает право выполнять команды через
sudo. - Ubuntu Server обычно использует Netplan с backend systemd-networkd, Ubuntu Desktop часто использует Netplan с NetworkManager.
- Дополнительно применяются Snap, UFW,
do-release-upgrade,ubuntu-driversи cloud-init.
Не смешивайте репозитории. Пакеты Debian и Ubuntu имеют общую основу, но собираются для разных выпусков, зависимостей и политик. Подключение репозиториев Ubuntu в Debian или Debian в Ubuntu может привести к конфликту библиотек и неработоспособной системе.
Что означает приглашение командной строки
ivan@server:~$ command
root@server:/etc# command
ivanилиroot- текущий пользователь.server- имя компьютера.~- домашний каталог текущего пользователя.$- оболочка обычного пользователя.#- оболочка root. Этот символ не вводят вручную.
Как устроен терминал и синтаксис команд
Терминал показывает текстовый интерфейс, а командная оболочка shell разбирает введенную строку и запускает программы. В Debian и Ubuntu обычно используется Bash. Пользователь может установить Zsh, Fish или другую оболочку, но базовые команды Linux от этого не меняются.
Общая форма:
команда [параметры] [аргументы]
| Элемент | Для чего нужен | Пример |
|---|---|---|
command |
Имя программы или встроенной команды оболочки | ls |
-h, --help |
Короткий или длинный параметр | ls -lah |
| аргумент | Файл, каталог, адрес или имя пользователя | ls /var/log |
sudo |
Запуск одной команды с повышенными полномочиями | sudo systemctl restart ssh |
Регистр имеет значение
File.txt, file.txt и FILE.TXT являются разными именами.
Абсолютные и относительные пути
cd /var/log
cd ../log
cd ~/Downloads
/var/log- абсолютный путь от корня/.../log- относительный путь от текущего каталога.~/Downloads- путь от домашнего каталога.
Специальные обозначения
| Обозначение | Значение | Пример |
|---|---|---|
. |
Текущий каталог | ./script.sh |
.. |
Родительский каталог | cd .. |
~ |
Домашний каталог | cd ~ |
/ |
Корень файловой системы | ls / |
- |
Предыдущий каталог для cd |
cd - |
* |
Любая последовательность символов | ls *.log |
? |
Один любой символ | ls file?.txt |
[123] |
Один символ из набора | ls file[123].txt |
Кавычки
echo "Домашний каталог: $HOME"
echo 'Домашний каталог: $HOME'
touch "Новый файл.txt"
В двойных кавычках переменные раскрываются. В одинарных кавычках содержимое обычно передается буквально. Кавычки также защищают пробелы в именах файлов.
Полезные сочетания клавиш
| Клавиши | Действие |
|---|---|
Tab |
Автодополнение команды, пути или имени |
Ctrl+C |
Прервать текущую команду |
Ctrl+D |
Конец ввода или выход из оболочки |
Ctrl+L |
Очистить экран |
Ctrl+R |
Поиск по истории |
Ctrl+A, Ctrl+E |
Начало или конец строки |
Ctrl+U, Ctrl+K |
Удалить текст до курсора или после него |
История, переменные и псевдонимы
| Команда | Назначение | Пример |
|---|---|---|
history |
Показать историю | history \| tail -20 |
!! |
Повторить предыдущую команду | sudo !! |
!123 |
Повторить команду с номером 123 | !123 |
env |
Показать переменные окружения | env |
printenv |
Показать одну или все переменные | printenv PATH |
export |
Создать переменную окружения | export EDITOR=nano |
alias |
Создать короткое имя | alias ll='ls -lah' |
unalias |
Удалить alias | unalias ll |
source |
Перечитать файл в текущей оболочке | source ~/.bashrc |
echo |
Вывести текст или переменную | echo "$HOME" |
printf |
Форматированный вывод | printf '%s\n' "$USER" |
Как получать справку и находить команды
Администратор не обязан помнить все параметры. Важно быстро открыть правильную документацию.
| Команда | Для чего нужна | Пример |
|---|---|---|
man |
Полная локальная документация | man systemctl |
--help |
Краткая справка | ip --help |
help |
Справка по встроенным командам Bash | help cd |
apropos |
Поиск по описаниям man-страниц | apropos "copy files" |
whatis |
Краткое описание | whatis rsync |
type |
Показать alias, builtin или внешний файл | type cd |
command -v |
Путь к фактически запускаемой команде | command -v python3 |
whereis |
Бинарный файл и man-страницы | whereis ssh |
which |
Поиск в PATH |
which curl |
info |
Документация GNU Info | info coreutils |
В man поиск выполняется клавишей /, следующий результат - n, предыдущий - N, выход - q.
Одинаковое имя может встречаться в разных разделах. Например, passwd(1) - команда смены пароля, а passwd(5) - формат файла /etc/passwd.
man 1 passwd
man 5 passwd
Файловая система Linux и основные каталоги
Linux использует единое дерево каталогов с корнем /. Отдельный диск, сетевой ресурс или флешка подключаются в точку этого дерева.
| Каталог | Назначение |
|---|---|
/ |
Корень всей файловой системы |
/home |
Домашние каталоги обычных пользователей |
/root |
Домашний каталог root |
/etc |
Системные конфигурационные файлы |
/var |
Изменяемые данные, журналы, очереди и кэши |
/var/log |
Текстовые журналы программ |
/usr |
Основная часть программ, библиотек и общих данных |
/bin, /sbin |
Ключевые команды, часто ссылки внутрь /usr |
/tmp |
Временные файлы |
/run |
Runtime-данные после загрузки |
/dev |
Файлы устройств |
/proc |
Виртуальная информация о ядре и процессах |
/sys |
Устройства и параметры ядра |
/boot |
Ядра, initramfs и загрузчик |
/mnt |
Временное ручное монтирование |
/media |
Съемные носители |
/opt |
Сторонние приложения |
/srv |
Данные серверных служб |
Перед изменением системной конфигурации создавайте копию, проверяйте синтаксис штатной командой сервиса и держите открытой вторую SSH-сессию. Особенно это важно для сети, SSH и firewall.
Навигация, файлы и каталоги
| Команда | Для чего нужна | Пример |
|---|---|---|
pwd |
Показать текущий путь | pwd |
ls |
Показать содержимое | ls |
ls -lah |
Подробно, включая скрытые файлы | ls -lah /var/log |
cd |
Перейти в каталог | cd /etc |
cd ~ |
Домашний каталог | cd ~ |
cd - |
Предыдущий каталог | cd - |
tree |
Дерево каталогов | tree -L 2 /etc |
mkdir |
Создать каталог | mkdir project |
mkdir -p |
Создать цепочку каталогов | mkdir -p project/logs/archive |
touch |
Создать пустой файл | touch notes.txt |
cp |
Копировать файл | cp config.conf config.conf.bak |
cp -a |
Копировать с атрибутами | cp -a /etc/ssh /root/ssh-backup |
cp -i |
Спросить перед перезаписью | cp -i file /tmp/ |
mv |
Переместить или переименовать | mv old.txt new.txt |
rm |
Удалить файл | rm file.txt |
rm -r |
Рекурсивно удалить каталог | rm -r old-directory |
rm -i |
Удалять с подтверждением | rm -i important.txt |
rmdir |
Удалить пустой каталог | rmdir empty-dir |
ln |
Создать жесткую ссылку | ln file hardlink |
ln -s |
Создать символическую ссылку | ln -s /var/log/app app-logs |
stat |
Размер, права, inode и время | stat file.txt |
file |
Определить тип содержимого | file download.bin |
realpath |
Получить абсолютный путь | realpath ../config |
basename |
Последняя часть пути | basename /etc/ssh/sshd_config |
dirname |
Каталог из пути | dirname /etc/ssh/sshd_config |
Безопасное удаление:
rm -- file-with-strange-name
rm -i important-file
find /tmp/cache -type f -mtime +30 -print
# После проверки списка:
find /tmp/cache -type f -mtime +30 -delete
Двойной дефис -- завершает список параметров и защищает от имени файла, начинающегося с дефиса.
Просмотр и редактирование файлов
| Команда | Для чего нужна | Пример |
|---|---|---|
cat |
Вывести небольшой файл | cat /etc/os-release |
tac |
Вывести строки в обратном порядке | tac events.log |
less |
Читать длинный файл постранично | less /var/log/syslog |
head |
Начало файла | head -n 20 file.txt |
tail |
Конец файла | tail -n 50 app.log |
tail -f |
Следить за дописыванием | tail -f app.log |
nl |
Строки с номерами | nl -ba config.conf |
wc |
Строки, слова и байты | wc -l access.log |
nano |
Простой редактор | sudo nano /etc/hosts |
vim |
Мощный модальный редактор | vim script.sh |
editor |
Системный редактор | sudo editor /etc/fstab |
hexdump |
Шестнадцатеричный вид | hexdump -C file.bin \| head |
strings |
Печатные строки из бинарного файла | strings program \| less |
Минимум для Nano:
Ctrl+O- сохранить.Ctrl+X- выйти.Ctrl+W- поиск.Alt+U- отменить.
Минимум для Vim:
i- режим ввода.Esc- командный режим.:w- сохранить.:q- выйти.:wq- сохранить и выйти.:q!- выйти без сохранения.
Потоки, перенаправления и конвейеры
У команды обычно есть стандартный ввод stdin, обычный вывод stdout и поток ошибок stderr.
| Оператор | Действие | Пример |
|---|---|---|
| > | Записать stdout с перезаписью | ip route > routes.txt |
| >> | Добавить stdout в конец | date >> events.log |
| < | Передать файл во вход | sort < names.txt |
| 2> | Записать stderr | find / -name test 2> errors.log |
| 2>&1 | stderr туда же, куда stdout | command > all.log 2>&1 |
| | | Передать вывод следующей программе | ps aux \| grep nginx |
| tee | Показать и записать | ip -br a \| tee network.txt |
| && | Следующая команда только при успехе | apt update && apt upgrade |
| || | Следующая команда только при ошибке | ping -c 1 host || echo fail |
| ; | Последовательное выполнение | date; uptime |
| $() | Подставить вывод команды | echo "$(uname -r)" |
| () | Группа в подоболочке | (cd /tmp && ls) |
| {} | Группа в текущей оболочке | { date; uptime; } > report.txt |
Почему это не работает:
sudo echo "value" > /etc/example.conf
Перенаправление выполняет оболочка обычного пользователя. Правильный вариант:
echo "value" | sudo tee /etc/example.conf
echo "next line" | sudo tee -a /etc/example.conf
Поиск и обработка текста
| Команда | Назначение | Пример |
|---|---|---|
| find | Поиск по имени, типу, размеру и времени | find /var/log -type f -name '*.log' |
| locate | Быстрый поиск по базе | locate sshd_config |
| updatedb | Обновить базу locate | sudo updatedb |
| grep | Поиск строк | grep 'error' app.log |
| grep -R | Рекурсивный поиск | grep -Rni 'ListenAddress' /etc/ssh |
| grep -E | Расширенные регулярные выражения | grep -E 'error|warning' app.log |
| cut | Выбрать поля | cut -d: -f1 /etc/passwd |
| sort | Сортировать строки | sort names.txt |
| sort -n | Числовая сортировка | sort -n values.txt |
| uniq | Убрать или посчитать соседние повторы | sort names \| uniq -c |
| tr | Заменить или удалить символы | tr '[:lower:]' '[:upper:]' |
| paste | Объединить файлы по столбцам | paste users.txt shells.txt |
| sed | Потоковая замена и выбор строк | sed 's/old/new/g' file.txt |
| awk | Обработка строк и столбцов | awk -F: '{print $1,$7}' /etc/passwd |
| xargs | Превратить ввод в аргументы | find . -print0 \| xargs -0 command |
| diff | Различия файлов | diff -u old.conf new.conf |
| comm | Сравнить два отсортированных файла | comm -3 a b |
| jq | Обработка JSON | curl -s URL \| jq '.' |
Практические примеры find:
find /etc -type f -name '*.conf'
find /var/log -type f -size +100M -print
find ~/Downloads -type f -mtime +30 -print
find . -type f -perm /o+w -print
find . -type f -name '*.tmp' -print0 | xargs -0 rm -f
Перед автоматическим удалением замените действие на
-deleteилиxargs rm.
Примеры grep, sed, awk:
grep -Rni --exclude-dir=.git 'password' .
journalctl -u ssh | grep -i 'failed'
sed -n '10,30p' file.txt
sed 's/[[:space:]]\+$//' file.txt
awk '{sum += $1} END {print sum}' numbers.txt
ss -lntp | awk 'NR==1 || /:22|:80|:443/'
Права, владельцы, пользователи и sudo
Каждый файл имеет владельца, группу и права для владельца, группы и остальных.
-rwxr-x--- 1 ivan admins 2048 Jul 15 12:00 script.sh
r- чтение.w- запись.x- выполнение для файла или вход в каталог.
| Команда | Для чего нужна | Пример |
|---|---|---|
whoami |
Эффективное имя пользователя | whoami |
id |
UID, GID и группы | id ivan |
groups |
Группы пользователя | groups ivan |
who |
Вошедшие пользователи | who |
w |
Пользователи и процессы | w |
last |
История входов | last -a \| head |
sudo |
Одна команда с повышенными правами | sudo systemctl status ssh |
sudo -i |
Login-shell root | sudo -i |
su - |
Переключиться на пользователя | su - admin |
adduser |
Создать пользователя в Debian | sudo adduser operator |
deluser |
Удалить пользователя | sudo deluser operator |
usermod |
Изменить группы или учетную запись | sudo usermod -aG sudo operator |
passwd |
Сменить пароль | sudo passwd operator |
chage |
Срок действия пароля | sudo chage -l operator |
groupadd |
Создать группу | sudo groupadd support |
groupdel |
Удалить группу | sudo groupdel support |
chown |
Изменить владельца и группу | chown user:group file |
chgrp |
Изменить группу | chgrp admins file |
chmod |
Изменить права | chmod 640 config.conf |
umask |
Маска прав новых файлов | umask 027 |
getfacl |
Показать ACL | getfacl shared |
setfacl |
Назначить ACL | setfacl -m u:operator:rw file |
visudo |
Безопасно изменить sudoers | sudo visudo |
Числовая запись chmod
4- чтение.2- запись.1- выполнение.
chmod 600 private.key
chmod 640 config.conf
chmod 644 public.txt
chmod 750 script.sh
chmod 755 directory
Символьная запись:
chmod u+x script.sh
chmod g-w file.txt
chmod o-rwx private-directory
chmod u=rw,g=r,o= config.conf
Не используйте
chmod 777как универсальное решение. Права 777 разрешают всем читать, изменять и выполнять объект. Обычно это скрывает неправильного владельца или группу и создает риск подмены данных.
Права на каталог:
rпозволяет увидеть список имен.wпозволяет создавать и удалять записи при наличииx.xпозволяет проходить через каталог и обращаться к известным именам.
Для поиска проблемы Permission denied:
id
ls -ld /path /path/to /path/to/file
namei -l /path/to/file
getfacl /path/to/file
findmnt -T /path/to/file
APT, dpkg и управление пакетами в Debian и Ubuntu
APT работает с репозиториями, версиями и зависимостями. dpkg является низкоуровневым инструментом для локальной базы пакетов и файлов DEB. Для обычной работы удобнее apt, для автоматизации чаще используют стабильные интерфейсы apt-get и apt-cache.
| Команда | Для чего нужна | Пример |
|---|---|---|
apt update | Обновить локальный индекс доступных пакетов. Установленные программы не обновляются. | sudo apt update |
apt upgrade | Установить доступные обновления без удаления установленных пакетов. | sudo apt upgrade |
apt full-upgrade | Полностью согласовать зависимости. При необходимости может удалить пакеты. | sudo apt full-upgrade |
apt install | Установить один или несколько пакетов. | sudo apt install curl rsync |
apt reinstall | Переустановить пакет и восстановить его файлы. | sudo apt reinstall openssh-client |
apt remove | Удалить пакет, обычно сохранив системные конфигурационные файлы. | sudo apt remove package |
apt purge | Удалить пакет вместе с системными конфигурационными файлами. | sudo apt purge package |
apt autoremove | Удалить больше не нужные автоматически установленные зависимости. | sudo apt autoremove |
apt search | Найти пакет по имени и описанию. | apt search tcpdump |
apt show | Показать описание, размер, зависимости и раздел репозитория. | apt show nftables |
apt list --installed | Показать установленные пакеты. | apt list --installed |
apt list --upgradable | Показать пакеты, для которых доступны обновления. | apt list --upgradable |
apt policy | Показать установленную и доступные версии, источник и приоритет. | apt policy openssh-server |
apt-cache depends | Показать зависимости пакета. | apt-cache depends nginx |
apt-cache rdepends | Показать обратные зависимости. | apt-cache rdepends libssl3 |
apt-mark hold | Запретить автоматическое обновление конкретного пакета. | sudo apt-mark hold package |
apt-mark unhold | Снять блокировку версии. | sudo apt-mark unhold package |
dpkg -l | Показать состояние пакетов из базы dpkg. | dpkg -l | grep openssh |
dpkg -L | Показать файлы установленного пакета. | dpkg -L openssh-client |
dpkg -S | Определить, какому пакету принадлежит файл. | dpkg -S /usr/bin/ssh |
dpkg -V | Проверить установленные файлы пакета по метаданным dpkg. | sudo dpkg -V openssh-client |
dpkg --audit | Найти пакеты с незавершенной установкой или настройкой. | sudo dpkg --audit |
dpkg -i | Установить локальный DEB без полноценного разрешения зависимостей. | sudo dpkg -i package.deb |
apt install ./file.deb | Установить локальный DEB с разрешением зависимостей. | sudo apt install ./package.deb |
apt-file search | Найти пакет, содержащий файл, даже если пакет не установлен. | apt-file search bin/example |
Безопасное ежедневное обновление
sudo apt update
apt list --upgradable
sudo apt upgrade
sudo apt autoremove
Команда apt autoremove сначала показывает список. Не подтверждайте удаление автоматически, пока не убедитесь, что среди пакетов нет нужного ядра, драйвера, metapackage или библиотеки, на которую опирается вручную установленное приложение.
Когда применять full-upgrade
apt full-upgrade разрешает APT удалить установленный пакет, если это необходимо для обновления системы в целом. Такой режим полезен при крупных изменениях зависимостей, переходах ядра и обновлении выпуска, но список удаления нужно проверить особенно внимательно.
sudo apt update
sudo apt -s full-upgrade
sudo apt full-upgrade
Параметр -s запускает симуляцию без изменения системы.
Если установка пакетов была прервана
sudo dpkg --audit
sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt update
Очистка кэша APT
| Команда | Для чего нужна | Пример |
|---|---|---|
apt clean | Удалить весь локальный кэш скачанных DEB. | sudo apt clean |
apt autoclean | Удалить только устаревшие DEB, которые больше нельзя скачать. | sudo apt autoclean |
du -sh /var/cache/apt | Проверить размер кэша перед очисткой. | du -sh /var/cache/apt |
Проверка репозиториев и происхождения пакета
grep -RhsE '^(deb|Types:|URIs:|Suites:|Components:|Signed-By:)' /etc/apt/sources.list /etc/apt/sources.list.d/ 2>/dev/null
apt-cache policy
apt policy package-name
apt для человека, apt-get для скрипта. Вывод apt рассчитан на интерактивный терминал. В автоматизированных сценариях используйте apt-get, проверяйте коды возврата и не добавляйте -y ко всем операциям без контроля списка изменений.
Репозитории Debian, DEB822, firmware и backports
Современный APT понимает традиционный формат sources.list и формат DEB822 с расширением .sources. На новой системе сначала посмотрите, какой формат уже используется, и продолжайте работать в нем.
Проверка версии и кодового имени Debian
cat /etc/os-release
cat /etc/debian_version
lsb_release -a 2>/dev/null || true
Пример Debian Stable в формате DEB822
Types: deb deb-src
URIs: https://deb.debian.org/debian
Suites: trixie trixie-updates
Components: main contrib non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb deb-src
URIs: https://security.debian.org/debian-security
Suites: trixie-security
Components: main contrib non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Компоненты подключайте только при необходимости. main содержит свободные пакеты Debian, contrib зависит от компонентов вне main, non-free-firmware нужен для части прошивок оборудования.
Debian Backports
Backports предоставляет более новые версии отдельных пакетов, перенесенные из следующей ветки и пересобранные для Stable. Не нужно обновлять всю систему из backports.
Types: deb
URIs: https://deb.debian.org/debian
Suites: trixie-backports
Components: main contrib non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
sudo apt update
apt policy package-name
sudo apt install -t trixie-backports package-name
Проверка pinning и приоритетов
apt-cache policy
grep -Rhs . /etc/apt/preferences /etc/apt/preferences.d/ 2>/dev/null
Не заменяйте trixie на testing или unstable ради одного пакета. Такой переход меняет модель всей системы. Для единичного нового пакета сначала рассмотрите backports, контейнер, Flatpak, Snap, официальный vendor-репозиторий или сборку в изолированной среде.
Ubuntu: APT, PPA, Snap и источники программ
Ubuntu использует APT и dpkg так же, как Debian, но имеет собственные репозитории, компоненты, PPA и систему пакетов Snap. Необходимо понимать, из какого источника установлена программа и кто отвечает за ее обновления.
Проверка выпуска Ubuntu
cat /etc/os-release
lsb_release -a
uname -r
Компоненты репозитория Ubuntu
main- основной набор пакетов с поддержкой Canonical.restricted- важное программное обеспечение с ограничениями лицензии, включая часть драйверов.universe- большой набор пакетов, поддерживаемый сообществом.multiverse- пакеты с юридическими или лицензионными ограничениями.
PPA и сторонние репозитории
| Команда | Для чего нужна | Пример |
|---|---|---|
add-apt-repository | Добавить поддерживаемый источник, включая PPA. | sudo add-apt-repository ppa:owner/name |
add-apt-repository --remove | Удалить запись PPA. | sudo add-apt-repository --remove ppa:owner/name |
apt policy | Проверить, какая версия и из какого источника будет установлена. | apt policy package-name |
grep -R | Найти подключенные сторонние источники. | grep -RhsE '^(deb|URIs:)' /etc/apt/sources.list.d/ |
PPA не является частью официального архива Ubuntu. Перед подключением проверьте владельца, поддерживаемые выпуски, подпись, частоту обновлений и последствия удаления. Старый PPA часто мешает обновлению Ubuntu на следующий выпуск.
Основные команды Snap
| Команда | Для чего нужна | Пример |
|---|---|---|
snap list | Показать установленные snap-пакеты и отслеживаемые каналы. | snap list |
snap find | Найти пакет в Snap Store. | snap find code |
snap info | Показать издателя, каналы и доступные версии. | snap info package |
snap install | Установить snap из выбранного канала. | sudo snap install package |
snap refresh | Обновить все snap-пакеты. | sudo snap refresh |
snap refresh name | Обновить один пакет. | sudo snap refresh package |
snap remove | Удалить пакет. | sudo snap remove package |
snap revert | Вернуться к предыдущей локально сохраненной ревизии. | sudo snap revert package |
snap changes | Показать операции snapd. | snap changes |
snap tasks | Показать этапы конкретной операции. | snap tasks CHANGE_ID |
snap connections | Показать интерфейсы и разрешения snap. | snap connections package |
snap services | Показать сервисы snap-пакетов. | snap services |
Каналы Snap
snap info package
sudo snap refresh package --channel=latest/stable
sudo snap refresh package --channel=latest/candidate
Для рабочей системы обычно выбирают канал stable. Каналы candidate, beta и edge предназначены для тестирования.
Временная приостановка обновления Snap
sudo snap refresh --hold=24h package
sudo snap refresh --unhold package
snap refresh --time
APT и Snap обновляются независимо. Команда apt upgrade не обновляет snap-пакеты. Snapd выполняет refresh по собственному расписанию. При диагностике версии программы сначала определите способ установки через command -v, snap list и dpkg -S.
Обновление Debian и Ubuntu на новый выпуск
Обновление пакетов внутри текущего выпуска и переход на новый выпуск являются разными операциями. Перед major upgrade требуется актуальная резервная копия, проверка свободного места, сторонних репозиториев, дисков, SSH-доступа и release notes.
Debian: переход между стабильными выпусками
Для Debian нельзя ограничиваться заменой кодового имени в источниках и запуском одной команды. Порядок и известные проблемы меняются от выпуска к выпуску, поэтому основным документом являются Release Notes конкретной версии.
cat /etc/debian_version
cat /etc/os-release
sudo apt update
sudo apt full-upgrade
sudo dpkg --audit
systemctl --failed
df -hT
Ubuntu: do-release-upgrade
| Команда | Для чего нужна | Пример |
|---|---|---|
do-release-upgrade -c | Проверить наличие доступного следующего выпуска. | sudo do-release-upgrade -c |
do-release-upgrade | Запустить штатное обновление Ubuntu. | sudo do-release-upgrade |
update-manager-core | Пакет с инструментами release upgrade на сервере. | sudo apt install update-manager-core |
Prompt=lts | Разрешать только переходы между LTS. | grep '^Prompt=' /etc/update-manager/release-upgrades |
Подготовка Ubuntu к обновлению выпуска
sudo apt update
sudo apt full-upgrade
sudo apt autoremove
sudo dpkg --audit
systemctl --failed
df -hT
sudo do-release-upgrade -c
- Проверьте восстановление из резервной копии, а не только наличие backup.
- Отключите или документируйте сторонние PPA и vendor-репозитории.
- Проверьте свободное место в
/,/bootи/var. - На удаленном сервере выполняйте работу в tmux и держите консоль провайдера.
- Проверьте, не используется ли неподдерживаемый interim release.
LTS-to-LTS открывается не сразу. Ubuntu обычно предлагает обновление с одной LTS на следующую после выхода первого point release новой LTS. Параметр -d может обойти часть ограничений, но не рекомендуется для производственной системы.
Архивы, копирование и резервные копии
| Команда | Назначение | Пример |
|---|---|---|
tar -cf |
Создать tar без сжатия | tar -cf backup.tar directory/ |
tar -czf |
Создать tar.gz | tar -czf backup.tar.gz directory/ |
tar -cJf |
Создать tar.xz | tar -cJf backup.tar.xz directory/ |
tar -tf |
Показать содержимое | tar -tf backup.tar.gz |
tar -xf |
Распаковать | tar -xf backup.tar.gz |
gzip, gunzip |
Сжатие gzip | gzip access.log |
xz, unxz |
Сжатие xz | xz disk.img |
zstd, unzstd |
Быстрое сжатие zstd | zstd large.log |
zip, unzip |
Работа с ZIP | zip -r archive.zip directory |
rsync |
Инкрементальная синхронизация | rsync -aHAX src/ dst/ |
scp |
Копирование через SSH | scp file user@server:/tmp/ |
sftp |
Интерактивная передача через SSH | sftp user@server |
dd |
Поблочное копирование | dd if=image of=/dev/sdX |
sha256sum |
Контрольная сумма | sha256sum image.iso |
sync |
Сбросить буфер записи | sync |
Правило слеша в rsync:
rsync -a source/ destination/ # содержимое source
rsync -a source destination/ # каталог destination/source
Резервная копия через SSH:
rsync -aHAX --numeric-ids --delete \
-e ssh /srv/data/ backup@backup-server:/backups/data/
Сначала выполнить проверку:
rsync -aHAX --numeric-ids --delete --dry-run \
-e ssh /srv/data/ backup@backup-server:/backups/data/
--deleteудаляет на приемнике файлы, которых больше нет в источнике. Всегда начинайте с--dry-run.
Запись ISO на флешку:
lsblk -o NAME,SIZE,MODEL,TRAN,MOUNTPOINTS
sudo umount /dev/sdX1
sudo dd if=debian.iso of=/dev/sdX bs=4M status=progress conv=fsync
sync
ddне спрашивает подтверждения. Ошибка в имени устройства может перезаписать системный диск.
Процессы, задания и завершение программ
| Команда | Назначение | Пример |
|---|---|---|
ps aux |
Снимок всех процессов | ps aux |
ps -ef |
Полный POSIX-подобный формат | ps -ef |
ps -eo |
Свои столбцы и сортировка | ps -eo pid,user,%cpu,%mem,cmd --sort=-%cpu |
pgrep |
Найти PID по имени | pgrep -a sshd |
pidof |
PID программы | pidof nginx |
pstree |
Дерево процессов | pstree -ap |
top |
Интерактивный монитор | top |
htop |
Более удобный монитор | htop |
jobs |
Задания текущей оболочки | jobs -l |
bg |
Продолжить в фоне | bg %1 |
fg |
Вернуть на передний план | fg %1 |
& |
Запустить в фоне | long-command & |
nohup |
Продолжить после закрытия терминала | nohup command > app.log 2>&1 & |
disown |
Убрать задание из оболочки | disown %1 |
kill |
Отправить сигнал по PID | kill 1234 |
pkill |
Сигнал по имени или условию | pkill -TERM -x program |
killall |
Процессы с точным именем | killall program |
nice |
Запустить с другим приоритетом | nice -n 10 command |
renice |
Изменить приоритет процесса | sudo renice 5 -p 1234 |
timeout |
Ограничить время | timeout 30s command |
watch |
Периодически повторять | watch -n 2 'ss -s' |
lsof |
Открытые файлы и сокеты | sudo lsof -p 1234 |
fuser |
Кто использует файл или mount | sudo fuser -vm /mnt/data |
Сигналы:
| Сигнал | Значение |
|---|---|
SIGHUP (1) |
Перечитать конфигурацию или закрытие терминала |
SIGINT (2) |
Интерактивное прерывание, обычно Ctrl+C |
SIGTERM (15) |
Корректное завершение, kill по умолчанию |
SIGKILL (9) |
Немедленное завершение ядром |
SIGSTOP (19) |
Безусловная остановка |
SIGCONT (18) |
Продолжить остановленный процесс |
Сначала:
kill -TERM 1234
Только если процесс не реагирует:
kill -KILL 1234
SIGKILL не дает процессу сохранить состояние и закрыть файлы.
Информация о системе и оборудовании
| Команда | Назначение | Пример |
|---|---|---|
uname -a |
Ядро и архитектура | uname -a |
cat /etc/os-release |
Дистрибутив и версия | cat /etc/os-release |
hostnamectl |
Хост, ОС, ядро | hostnamectl |
uptime |
Время работы и load average | uptime |
date |
Дата и время | date --iso-8601=seconds |
timedatectl |
Часовой пояс и синхронизация | timedatectl |
free -h |
RAM и swap | free -h |
vmstat |
Память, CPU и ввод-вывод | vmstat 1 |
lscpu |
Процессор | lscpu |
nproc |
Логические CPU | nproc |
lsmem |
Блоки памяти | lsmem |
lspci |
PCI-устройства | lspci -nnk |
lsusb |
USB-устройства | lsusb -t |
dmidecode |
DMI/SMBIOS | sudo dmidecode -t system |
dmesg |
Сообщения ядра | sudo dmesg -T \| less |
sensors |
Температуры | sensors |
systemd-analyze |
Время загрузки | systemd-analyze |
systemd-analyze blame |
Медленные units | systemd-analyze blame |
Три числа load average отражают среднюю нагрузку примерно за 1, 5 и 15 минут. Их сравнивают с количеством логических CPU, но высокая нагрузка может быть вызвана не только вычислениями, а также ожиданием непрерываемого ввода-вывода.
Диски, разделы, файловые системы и место
| Команда | Назначение | Пример |
|---|---|---|
lsblk |
Диски, разделы, точки монтирования | lsblk -f |
blkid |
UUID и тип файловой системы | sudo blkid |
findmnt |
Смонтированные файловые системы | findmnt |
mount |
Подключить файловую систему | sudo mount /dev/sdb1 /mnt/data |
umount |
Отключить файловую систему | sudo umount /mnt/data |
df -h |
Свободное место | df -hT |
df -i |
Свободные inode | df -i |
du |
Размер каталогов и файлов | du -xhd1 /var |
ncdu |
Интерактивный анализ места | sudo ncdu -x / |
fdisk |
Таблицы разделов | sudo fdisk -l |
parted |
Разделы, включая GPT | sudo parted -l |
mkfs.ext4 |
Создать ext4 | sudo mkfs.ext4 /dev/sdX1 |
fsck |
Проверить файловую систему | sudo fsck -f /dev/sdX1 |
e2fsck |
Проверить ext2/3/4 | sudo e2fsck -f /dev/sdX1 |
resize2fs |
Изменить размер ext | sudo resize2fs DEVICE |
swapon |
Показать или включить swap | swapon --show |
swapoff |
Отключить swap | sudo swapoff /swapfile |
smartctl |
SMART накопителя | sudo smartctl -a /dev/sda |
Поиск крупных данных:
df -hT
df -i
sudo du -xhd1 / | sort -h
sudo du -xhd1 /var | sort -h
sudo find /var -xdev -type f -size +500M -printf '%s %p\n' | sort -n
sudo lsof +L1
lsof +L1 показывает удаленные файлы, которые продолжают занимать место, пока процесс держит их открытыми.
Монтирование по UUID:
sudo blkid /dev/sdb1
sudo mkdir -p /mnt/data
sudo mount UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/data
findmnt /mnt/data
Пример /etc/fstab:
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /srv/data ext4 defaults,nofail 0 2
Проверка до перезагрузки:
sudo findmnt --verify
sudo mount -a
Ошибка в
/etc/fstabможет задержать загрузку или перевести систему в аварийный режим.
Службы systemd и автозагрузка
systemd управляет загрузкой, службами, сокетами, таймерами, mount-объектами и другими unit-файлами.
| Команда | Назначение | Пример |
|---|---|---|
systemctl status |
Состояние службы | systemctl status ssh |
systemctl start |
Запустить сейчас | sudo systemctl start ssh |
systemctl stop |
Остановить сейчас | sudo systemctl stop ssh |
systemctl restart |
Полностью перезапустить | sudo systemctl restart nginx |
systemctl reload |
Перечитать конфигурацию | sudo systemctl reload nginx |
reload-or-restart |
Reload или restart | sudo systemctl reload-or-restart nginx |
systemctl enable |
Включить автозапуск | sudo systemctl enable ssh |
systemctl disable |
Отключить автозапуск | sudo systemctl disable service |
enable --now |
Автозапуск и запуск сейчас | sudo systemctl enable --now nftables |
is-active |
Проверить запуск | systemctl is-active ssh |
is-enabled |
Проверить автозапуск | systemctl is-enabled ssh |
list-units |
Загруженные units | systemctl list-units --type=service |
list-unit-files |
Доступные unit-файлы | systemctl list-unit-files --type=service |
--failed |
Units с ошибкой | systemctl --failed |
systemctl cat |
Итоговый unit и drop-ins | systemctl cat ssh |
systemctl edit |
Создать drop-in | sudo systemctl edit service |
daemon-reload |
Перечитать unit-файлы | sudo systemctl daemon-reload |
systemctl show |
Свойства unit | systemctl show ssh -p ActiveState |
systemctl mask |
Полностью запретить запуск | sudo systemctl mask service |
systemctl unmask |
Снять запрет | sudo systemctl unmask service |
systemctl reboot |
Перезагрузить | sudo systemctl reboot |
systemctl poweroff |
Выключить | sudo systemctl poweroff |
Правильное изменение готовой службы:
sudo systemctl edit myservice.service
[Service]
Environment="APP_MODE=production"
Restart=on-failure
RestartSec=5s
sudo systemctl daemon-reload
sudo systemctl restart myservice
systemctl status myservice
Пример собственной службы:
[Unit]
Description=Example application
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=appuser
Group=appuser
WorkingDirectory=/srv/example
ExecStart=/usr/bin/python3 /srv/example/app.py
Restart=on-failure
RestartSec=5
NoNewPrivileges=yes
PrivateTmp=yes
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now example.service
systemctl status example.service
journalctl -u example.service -f
Не запускайте сервис от root без причины. Создайте отдельного пользователя и выдайте только нужные права.
Журналы и диагностика через journalctl
| Команда | Назначение | Пример |
|---|---|---|
journalctl |
Весь доступный journal | sudo journalctl |
journalctl -b |
Текущая загрузка | sudo journalctl -b |
journalctl -b -1 |
Предыдущая загрузка | sudo journalctl -b -1 |
journalctl -u |
Журнал службы | sudo journalctl -u ssh |
journalctl -f |
Следить за новыми сообщениями | sudo journalctl -f |
journalctl -p |
Фильтр по приоритету | journalctl -p warning..alert -b |
--since |
Нижняя граница времени | journalctl --since '-30 min' |
--until |
Верхняя граница времени | journalctl --until '12:00' |
journalctl -k |
Сообщения ядра | journalctl -k -b |
_PID= |
Сообщения PID | journalctl _PID=1234 |
-o json-pretty |
Структурированный JSON | journalctl -n 1 -o json-pretty |
--disk-usage |
Размер journal | journalctl --disk-usage |
--vacuum-time |
Удалить старые архивы | journalctl --vacuum-time=30d |
--vacuum-size |
Ограничить размер | journalctl --vacuum-size=1G |
logger |
Записать свое сообщение | logger -t myscript 'Backup completed' |
Диагностика службы:
systemctl status service-name --no-pager -l
sudo journalctl -u service-name -b --no-pager
sudo journalctl -u service-name --since '-30 min'
systemctl cat service-name
sudo ss -lntup
Не очищайте активные журналы командой rm. Удаленный открытый файл может продолжать занимать место. Используйте logrotate, настройки приложения или journalctl --vacuum-*.
cron и systemd timers
cron
| Команда | Назначение | Пример |
|---|---|---|
crontab -e |
Редактировать задания пользователя | crontab -e |
sudo crontab -e |
Редактировать задания root | sudo crontab -e |
crontab -l |
Показать задания | crontab -l |
crontab -r |
Удалить весь crontab | crontab -r |
Формат:
# минута час день_месяца месяц день_недели команда
15 3 * * * /usr/local/sbin/backup.sh >> /var/log/backup.log 2>&1
@reboot /usr/local/bin/start-task.sh
В cron окружение минимальное. Используйте абсолютные пути, явно задавайте PATH и записывайте вывод в журнал.
systemd timer
/etc/systemd/system/backup.service:
[Unit]
Description=Daily backup
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/backup.sh
/etc/systemd/system/backup.timer:
[Unit]
Description=Run daily backup
[Timer]
OnCalendar=*-*-* 03:15:00
Persistent=true
RandomizedDelaySec=10m
[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers --all
systemctl status backup.timer
journalctl -u backup.service
Persistent=true позволяет выполнить пропущенный запуск после включения. Таймеры systemd удобны, когда нужны зависимости, журналирование и ограничения ресурсов.
Базовые сетевые команды
| Команда | Назначение | Пример |
|---|---|---|
ip -br address |
Кратко интерфейсы и IP | ip -br a |
ip link |
Состояние интерфейсов | ip link show |
ip address |
Адреса интерфейса | ip addr show dev eth0 |
ip route |
Маршруты IPv4 | ip route |
ip -6 route |
Маршруты IPv6 | ip -6 route |
ip neigh |
Соседи ARP/NDP | ip neigh |
ip monitor |
Следить за изменениями | ip monitor all |
hostname -I |
IP-адреса хоста | hostname -I |
ping |
Достижимость и задержка | ping -c 4 192.168.1.1 |
ping -6 |
Проверка IPv6 | ping -6 -c 4 HOST |
tracepath |
Маршрут и возможный MTU | tracepath example.com |
traceroute |
Трассировка маршрута | traceroute example.com |
ss |
Сокеты и порты | sudo ss -lntup |
ss -s |
Сводка по сокетам | ss -s |
lsof -i |
Процессы с сетевыми сокетами | lsof -nP -iTCP:443 |
ethtool |
Скорость, duplex и драйвер | sudo ethtool eth0 |
iw |
Wi-Fi интерфейсы | iw dev |
rfkill |
Блокировки радио | rfkill list |
curl |
HTTP, API и TLS | curl -I https://example.com |
wget |
Скачивание файлов | wget -O file.iso URL |
nc |
Проверка TCP/UDP | nc -vz server.example 443 |
mtr |
Потери и задержка по маршруту | mtr -rwzc 20 example.com |
Четыре ключевые проверки:
ip -br a
ip route
ping -c 4 192.168.1.1
sudo ss -lntup
Временная настройка:
sudo ip link set dev eth0 up
sudo ip addr add 192.168.10.20/24 dev eth0
sudo ip route add default via 192.168.10.1
Команды ip обычно не сохраняются после перезагрузки. Для постоянной конфигурации используйте менеджер сети конкретной системы.
Проверка локальных портов:
sudo ss -lntup
sudo ss -lntp '( sport = :22 or sport = :80 or sport = :443 )'
sudo lsof -nP -iTCP -sTCP:LISTEN
NetworkManager, Wi-Fi и статический IP в Debian и Ubuntu Desktop
На настольных установках Debian и Ubuntu сеть часто управляется NetworkManager. Ubuntu Desktop при этом обычно получает декларативную конфигурацию через Netplan с renderer NetworkManager.
systemctl is-active NetworkManager
nmcli general status
nmcli device status
| Команда | Назначение |
|---|---|
nmcli general status |
Общее состояние |
nmcli device status |
Интерфейсы |
nmcli connection show |
Профили |
nmcli connection show --active |
Активные профили |
nmcli device wifi list |
Wi-Fi сети |
nmcli radio wifi |
Состояние Wi-Fi |
nmcli networking |
Сетевое управление |
nmtui |
Текстовое меню |
Подключение к Wi-Fi:
nmcli device wifi list
nmcli --ask device wifi connect "SSID"
nmcli connection show --active
Параметр --ask не оставляет пароль прямо в истории команд.
Ethernet с DHCP:
sudo nmcli connection add type ethernet ifname eth0 con-name lan-dhcp \
ipv4.method auto ipv6.method auto
sudo nmcli connection up lan-dhcp
Статический IPv4:
sudo nmcli connection add type ethernet ifname eth0 con-name lan-static \
ipv4.method manual \
ipv4.addresses 192.168.10.20/24 \
ipv4.gateway 192.168.10.1 \
ipv4.dns "192.168.10.1 1.1.1.1" \
ipv6.method disabled
sudo nmcli connection up lan-static
nmcli -p connection show lan-static
ip -br a
ip route
Изменение профиля:
sudo nmcli connection modify "Wired connection 1" \
ipv4.method manual \
ipv4.addresses 192.168.10.20/24 \
ipv4.gateway 192.168.10.1 \
ipv4.dns "192.168.10.1 1.1.1.1"
sudo nmcli connection down "Wired connection 1"
sudo nmcli connection up "Wired connection 1"
Изменение адреса, шлюза или профиля через SSH может немедленно оборвать соединение. Подготовьте консольный доступ или автоматический откат.
VLAN через NetworkManager:
sudo nmcli connection add type vlan con-name vlan100 \
ifname eth0.100 dev eth0 id 100 \
ipv4.method manual ipv4.addresses 192.168.100.2/24 \
ipv6.method disabled
sudo nmcli connection up vlan100
Не настраивайте один интерфейс двумя системами. Если интерфейс одновременно описан в /etc/network/interfaces, Netplan, NetworkManager и systemd-networkd, возможны гонки, пропадание адреса и неожиданные маршруты. Сначала определите реального владельца интерфейса через systemctl, nmcli и networkctl.
Netplan, systemd-networkd и ifupdown: постоянная настройка сети
Низкоуровневые команды ip меняют состояние ядра временно. Постоянная конфигурация зависит от сетевого менеджера. В Ubuntu основным декларативным слоем является Netplan. В Debian могут применяться NetworkManager, ifupdown, systemd-networkd или Netplan в облачной среде.
Как определить, кто управляет сетью
systemctl is-active NetworkManager
systemctl is-active systemd-networkd
systemctl is-active networking
networkctl status 2>/dev/null
nmcli device status 2>/dev/null
ls -la /etc/netplan /etc/systemd/network /etc/network/interfaces 2>/dev/null
Ubuntu Netplan: основные команды
| Команда | Для чего нужна | Пример |
|---|---|---|
netplan get | Показать объединенную конфигурацию Netplan. | sudo netplan get |
netplan generate | Проверить YAML и сгенерировать backend-конфигурацию. | sudo netplan generate |
netplan try | Временно применить конфигурацию с автоматическим откатом. | sudo netplan try |
netplan apply | Применить конфигурацию. | sudo netplan apply |
netplan status | Показать состояние интерфейсов и backend. | netplan status --all |
netplan status --diff | Сравнить желаемое и фактическое состояние. | netplan status --diff |
DHCP в Ubuntu Server
network:
version: 2
renderer: networkd
ethernets:
enp1s0:
dhcp4: true
dhcp6: true
Статический IPv4, DNS и маршрут по умолчанию
network:
version: 2
renderer: networkd
ethernets:
enp1s0:
dhcp4: false
addresses:
- 192.168.10.20/24
nameservers:
addresses:
- 192.168.10.1
- 1.1.1.1
search:
- home.lan
routes:
- to: default
via: 192.168.10.1
sudo cp -a /etc/netplan /root/netplan-backup
sudo netplan generate
sudo netplan try
sudo netplan apply
ip -br address
ip route
resolvectl status
VLAN через Netplan
network:
version: 2
renderer: networkd
ethernets:
enp1s0: {}
vlans:
vlan100:
id: 100
link: enp1s0
addresses:
- 192.168.100.2/24
Bridge через Netplan
network:
version: 2
renderer: networkd
ethernets:
enp1s0: {}
bridges:
br0:
interfaces:
- enp1s0
dhcp4: true
parameters:
stp: true
forward-delay: 4
Debian с systemd-networkd
# /etc/systemd/network/20-wired.network
[Match]
Name=enp1s0
[Network]
Address=192.168.10.30/24
Gateway=192.168.10.1
DNS=192.168.10.1
DNS=1.1.1.1
sudo systemctl enable --now systemd-networkd
networkctl status enp1s0
ip -br a
ip route
Debian с ifupdown
# /etc/network/interfaces
auto lo
iface lo inet loopback
auto enp1s0
iface enp1s0 inet static
address 192.168.10.30/24
gateway 192.168.10.1
dns-nameservers 192.168.10.1 1.1.1.1
Удаленная смена IP. Netplan try снижает риск, но не заменяет консольный доступ. Ошибка в имени интерфейса, VLAN, gateway или firewall может немедленно оборвать SSH.
DNS и поиск проблем с именами
| Команда | Назначение | Пример |
|---|---|---|
resolvectl status |
DNS по интерфейсам | resolvectl status |
resolvectl query |
Разрешить имя или адрес | resolvectl query example.com |
resolvectl flush-caches |
Очистить кэш | sudo resolvectl flush-caches |
dig |
Подробный DNS-запрос | dig example.com A |
dig @server |
Запрос к конкретному DNS | dig @1.1.1.1 example.com A |
dig +trace |
Пройти делегирование от корня | dig +trace example.com |
host |
Краткий запрос | host example.com |
nslookup |
Старый DNS-клиент | nslookup example.com |
getent hosts |
Разрешение через системный NSS | getent hosts example.com |
Как отличить DNS от маршрута:
ping -c 3 1.1.1.1
getent hosts example.com
resolvectl status
dig example.com
curl -I https://example.com
- IP доступен, имя нет - вероятна проблема DNS.
- Не доступен шлюз - интерфейс, VLAN, кабель, Wi-Fi или локальный маршрут.
- Шлюз доступен, внешний IP нет - маршрут, NAT, провайдер или firewall.
- DNS работает, HTTPS нет - время, TLS, proxy, MTU, firewall или сервис.
/etc/hosts:
127.0.0.1 localhost
192.168.10.10 nas.home.lan nas
Не делайте /etc/resolv.conf неизменяемым без понимания схемы. Сначала:
readlink -f /etc/resolv.conf
resolvectl status
nmcli connection show --active
Проверка, кто управляет /etc/resolv.conf
readlink -f /etc/resolv.conf
ls -l /etc/resolv.conf
systemctl is-active systemd-resolved
resolvectl status
nmcli dev show | grep -i dns
В Ubuntu systemd-resolved обычно является частью стандартной схемы. В Debian он может быть установлен и включен, но это зависит от выбранной конфигурации. Не заменяйте символическую ссылку /etc/resolv.conf обычным файлом, пока не понимаете, кто должен обновлять DNS.
SSH, ключи и безопасное удаленное управление
SSH обеспечивает зашифрованный вход, выполнение команд, передачу файлов и туннелирование.
| Команда | Назначение | Пример |
|---|---|---|
ssh |
Подключиться к серверу | ssh user@server |
ssh -p |
Нестандартный порт | ssh -p 2222 user@server |
ssh -i |
Конкретный ключ | ssh -i ~/.ssh/id_ed25519 user@server |
ssh-keygen |
Создать ключ | ssh-keygen -t ed25519 -a 100 |
ssh-copy-id |
Установить открытый ключ | ssh-copy-id user@server |
ssh-agent |
Агент ключей | eval "$(ssh-agent -s)" |
ssh-add |
Добавить ключ в агент | ssh-add ~/.ssh/id_ed25519 |
scp |
Копирование через SSH | scp file user@server:/tmp/ |
sftp |
Передача файлов | sftp user@server |
ssh -L |
Локальный туннель | ssh -L 8080:127.0.0.1:80 user@server |
ssh -R |
Удаленный туннель | ssh -R 9000:127.0.0.1:9000 user@server |
ssh -D |
SOCKS-прокси | ssh -D 1080 user@server |
Создание Ed25519:
ssh-keygen -t ed25519 -a 100 -C "admin@workstation"
ssh-copy-id user@server
ssh user@server
Закрытый ключ остается на клиенте. Файл .pub можно копировать на сервер. Закрытый ключ защищайте passphrase.
~/.ssh/config:
Host web-prod
HostName 203.0.113.10
User admin
Port 22
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
ServerAliveInterval 30
ServerAliveCountMax 3
ssh web-prod
scp backup.tar.gz web-prod:/tmp/
Установка сервера:
sudo apt update
sudo apt install openssh-server
sudo systemctl enable --now ssh
systemctl status ssh
sudo ss -lntp | grep ':22'
Безопасное изменение:
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo editor /etc/ssh/sshd_config
sudo sshd -t
sudo systemctl reload ssh
Базовые параметры усиления:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 4
X11Forwarding no
Сначала проверьте вход по ключу во второй независимой сессии. Только затем отключайте пароль. На удаленном сервере нужен резервный способ доступа.
При первом входе сверяйте отпечаток host key через доверенный канал. Не удаляйте запись known_hosts только ради исчезновения предупреждения.
Firewall: nftables в Debian и UFW в Ubuntu
nft управляет правилами Netfilter для фильтрации, NAT и классификации пакетов.
| Команда | Назначение | Пример |
|---|---|---|
nft list ruleset |
Полный набор правил | sudo nft list ruleset |
nft list tables |
Список таблиц | sudo nft list tables |
nft -a list ruleset |
Правила с handle | sudo nft -a list ruleset |
nft -c -f |
Проверить файл без применения | sudo nft -c -f /etc/nftables.conf |
nft -f |
Загрузить файл | sudo nft -f /etc/nftables.conf |
nft monitor |
Наблюдать изменения | sudo nft monitor |
Минимальный firewall для одиночного сервера:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0;
policy drop;
iifname "lo" accept
ct state established,related accept
ct state invalid drop
ip protocol icmp accept
ip6 nexthdr icmpv6 accept
tcp dport 22 accept
}
chain forward {
type filter hook forward priority 0;
policy drop;
}
chain output {
type filter hook output priority 0;
policy accept;
}
}
sudo cp -a /etc/nftables.conf /etc/nftables.conf.bak
sudo editor /etc/nftables.conf
sudo nft -c -f /etc/nftables.conf
sudo nft -f /etc/nftables.conf
sudo nft list ruleset
sudo systemctl enable --now nftables
До применения разрешите фактический SSH-порт и management-сеть. Firewall способен немедленно отрезать удаленный доступ.
Ограничение SSH подсетью:
ip saddr 192.168.10.0/24 tcp dport 22 accept
Пример NAT:
table ip nat {
chain postrouting {
type nat hook postrouting priority srcnat;
oifname "wan0" ip saddr 192.168.50.0/24 masquerade
}
}
Включение маршрутизации:
sudo sysctl -w net.ipv4.ip_forward=1
printf '%s\n' 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-router.conf
sudo sysctl --system
Для полноценного маршрутизатора также нужны корректные правила forward.
UFW в Ubuntu
UFW является удобным frontend для host-based firewall. Он упрощает типовые правила, но администратор все равно должен понимать входящий, исходящий и транзитный трафик.
| Команда | Для чего нужна | Пример |
|---|---|---|
ufw status verbose | Показать состояние, политики и активные правила. | sudo ufw status verbose |
ufw status numbered | Показать правила с номерами. | sudo ufw status numbered |
ufw default deny incoming | Запретить новые входящие соединения по умолчанию. | sudo ufw default deny incoming |
ufw default allow outgoing | Разрешить исходящий трафик по умолчанию. | sudo ufw default allow outgoing |
ufw allow OpenSSH | Разрешить профиль OpenSSH. | sudo ufw allow OpenSSH |
ufw allow from | Разрешить подсети доступ к порту. | sudo ufw allow from 192.168.10.0/24 to any port 22 proto tcp |
ufw limit | Ограничить частоту новых подключений. | sudo ufw limit 22/tcp |
ufw delete | Удалить правило по номеру. | sudo ufw delete 3 |
ufw enable | Включить firewall. | sudo ufw enable |
ufw disable | Отключить UFW. | sudo ufw disable |
ufw reset | Удалить пользовательские правила. | sudo ufw reset |
Безопасное включение UFW на удаленном сервере
sudo ufw status verbose
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status numbered
Сначала разрешите реальный SSH-порт. Профиль OpenSSH обычно разрешает порт 22. Если sshd слушает другой порт, создайте правило для него до ufw enable. Держите вторую SSH-сессию и консоль провайдера.
Можно ли одновременно редактировать UFW и nftables вручную
Технически правила могут сосуществовать, но ручные изменения способны конфликтовать с тем, что генерирует UFW. Выберите один основной способ управления firewall, документируйте исключения и после каждого изменения проверяйте итоговый ruleset.
sudo ufw status verbose
sudo nft list ruleset
sudo ss -lntup
Команды сетевого администратора
tcpdump
| Команда | Назначение | Пример |
|---|---|---|
tcpdump -D |
Интерфейсы захвата | sudo tcpdump -D |
tcpdump -i |
Конкретный интерфейс | sudo tcpdump -i eth0 |
tcpdump -nn |
Без DNS и имен портов | sudo tcpdump -i any -nn |
host |
Фильтр по узлу | tcpdump host 192.168.1.10 |
port |
Фильтр по порту | tcpdump port 53 |
-w |
Записать PCAP | tcpdump -w capture.pcap |
-r |
Прочитать PCAP | tcpdump -r capture.pcap |
sudo tcpdump -i any -nn 'tcp port 443'
sudo tcpdump -i eth0 -nn 'udp port 53'
sudo tcpdump -i eth0 -nn 'host 192.168.10.25 and not port 22'
sudo tcpdump -i eth0 -nn -s 0 -c 500 -w problem.pcap
Nmap для инвентаризации своей сети
nmap -sn 192.168.10.0/24
nmap -sT -p 22,80,443 192.168.10.20
sudo nmap -sS -sV -p 1-1000 192.168.10.20
nmap --reason 192.168.10.20
Используйте Nmap, tcpdump и сетевые и диагностические инструменты только в собственной инфраструктуре или по явно оформленному разрешению.
netcat
nc -vz 192.168.10.20 22
nc -vz example.com 443
printf 'GET / HTTP/1.0\r\nHost: example.com\r\n\r\n' | nc example.com 80
Маршрутизация и policy routing
ip route get 8.8.8.8
ip rule show
ip route show table all
ip -s link show dev eth0
ip -s neigh show
VLAN и bridge через ip
sudo ip link add link eth0 name eth0.100 type vlan id 100
sudo ip link set eth0.100 up
sudo ip addr add 192.168.100.2/24 dev eth0.100
sudo ip link add br0 type bridge
sudo ip link set eth1 master br0
sudo ip link set br0 up
sudo bridge link
Эти изменения временные и обычно исчезают после перезагрузки.
Полезные счетчики:
ip -s link
ss -s
nstat
ethtool -S eth0
cat /proc/net/dev
Основы Bash-скриптов
Bash-скрипт автоматизирует последовательность команд. Начинайте с небольших сценариев, логируйте действия и проверяйте коды возврата.
#!/usr/bin/env bash
set -Eeuo pipefail
readonly BACKUP_DIR="/srv/backups"
readonly SOURCE_DIR="/srv/data"
log() {
printf '%s %s\n' "$(date --iso-8601=seconds)" "$*"
}
cleanup() {
log "Завершение скрипта"
}
trap cleanup EXIT
mkdir -p "$BACKUP_DIR"
archive="$BACKUP_DIR/data-$(date +%F-%H%M%S).tar.gz"
tar -czf "$archive" -C "$SOURCE_DIR" .
log "Создан архив: $archive"
-e- завершиться при необработанной ошибке.-u- неизвестная переменная является ошибкой.pipefail- ошибка любой команды в конвейере важна.trap- обработчик выхода или сигнала.
Аргументы:
#!/usr/bin/env bash
if [[ $# -ne 1 ]]; then
echo "Использование: $0 <имя-службы>" >&2
exit 2
fi
service_name="$1"
if systemctl is-active --quiet "$service_name"; then
echo "$service_name работает"
exit 0
else
echo "$service_name не работает" >&2
exit 1
fi
Условия и циклы:
if [[ -f /etc/os-release ]]; then
source /etc/os-release
echo "$PRETTY_NAME"
fi
for file in /var/log/*.log; do
[[ -e "$file" ]] || continue
echo "$file"
done
while read -r user shell; do
printf '%-20s %s\n' "$user" "$shell"
done < <(awk -F: '{print $1, $7}' /etc/passwd)
Проверка:
bash -n script.sh
shellcheck script.sh
chmod +x script.sh
./script.sh
Почти всегда пишите "$variable". Без кавычек пробелы, * и пустые значения способны изменить аргументы.
Особенности Ubuntu: драйверы, cloud-init, Pro, Desktop и Server
Ubuntu добавляет к общей базе Debian несколько собственных административных инструментов. Они особенно заметны на серверах, облачных образах и рабочих станциях с проприетарными драйверами.
ubuntu-drivers и драйверы оборудования
| Команда | Для чего нужна | Пример |
|---|---|---|
ubuntu-drivers devices | Показать обнаруженное оборудование и рекомендованные драйверы. | ubuntu-drivers devices |
ubuntu-drivers list | Показать доступные пакеты драйверов. | ubuntu-drivers list |
ubuntu-drivers install | Установить рекомендованные драйверы. | sudo ubuntu-drivers install |
lspci -nnk | Показать устройство, используемый драйвер и доступные модули. | lspci -nnk |
modinfo | Показать информацию о модуле ядра. | modinfo nvidia |
mokutil --sb-state | Проверить состояние Secure Boot. | mokutil --sb-state |
После установки драйвера проверьте сообщения ядра, загруженный модуль и необходимость перезагрузки.
sudo ubuntu-drivers devices
sudo ubuntu-drivers install
sudo reboot
lspci -nnk
sudo journalctl -k -b | grep -iE 'nvidia|amdgpu|firmware|error'
Не устанавливайте драйвер с сайта производителя поверх пакетов Ubuntu без причины. Ручной installer может конфликтовать с DKMS, Secure Boot, обновлениями ядра и пакетным менеджером. Для большинства систем сначала используйте ubuntu-drivers и официальные пакеты репозитория.
Cloud-init
Облачные образы Ubuntu часто получают пользователей, SSH-ключи, hostname, сеть и пакеты через cloud-init. Ручная правка файла может быть перезаписана источником данных при следующей загрузке.
| Команда | Для чего нужна | Пример |
|---|---|---|
cloud-init status | Показать состояние и завершение этапов. | cloud-init status --long |
cloud-init query | Прочитать данные instance metadata. | cloud-init query --all |
cloud-init analyze blame | Показать, какие этапы задержали загрузку. | cloud-init analyze blame |
cloud-init clean | Очистить состояние для повторной инициализации. Опасно на рабочей VM. | sudo cloud-init clean |
cloud-init status --long
sudo journalctl -u cloud-init -u cloud-config -u cloud-final -b
sudo cat /var/log/cloud-init.log
sudo cat /var/log/cloud-init-output.log
Ubuntu Pro и состояние поддержки
pro status
pro security-status
apt list --upgradable
Наличие Ubuntu Pro зависит от выпуска, подписки и политики организации. Перед включением дополнительных сервисов определите, какие репозитории и обязательства по сопровождению нужны конкретной системе.
Ubuntu Desktop и Ubuntu Server
Ubuntu Desktop
- Обычно присутствуют GNOME, NetworkManager и графические настройки.
- Может использовать Snap для части настольных приложений.
- Драйверы удобно проверять через
ubuntu-drivers.
Ubuntu Server
- Обычно отсутствует графическая среда.
- Сеть чаще описана в Netplan с renderer networkd.
- Большинство задач выполняется через SSH, systemd и конфигурационные файлы.
Команды, которые особенно часто встречаются в Ubuntu
| Команда | Для чего нужна | Пример |
|---|---|---|
do-release-upgrade | Переход на следующий поддерживаемый выпуск Ubuntu. | sudo do-release-upgrade |
netplan try | Проверить новую сеть с таймером отката. | sudo netplan try |
ufw | Управлять host-based firewall. | sudo ufw status verbose |
snap | Управлять snap-пакетами. | snap list |
ubuntu-drivers | Подобрать и установить драйверы. | sudo ubuntu-drivers install |
pro | Проверить сервисы Ubuntu Pro. | pro status |
cloud-init | Проверить первичную настройку облачного образа. | cloud-init status --long |
AppArmor в Debian и Ubuntu
AppArmor дополняет обычные права Unix обязательным контролем доступа по профилям приложений. В Ubuntu AppArmor обычно установлен и загружен по умолчанию. В Debian его также можно применять, но фактический набор включенных профилей зависит от установки.
| Команда | Для чего нужна | Пример |
|---|---|---|
aa-status | Показать загруженные профили и их режимы. | sudo aa-status |
apparmor_status | Альтернативная команда состояния. | sudo apparmor_status |
aa-complain | Перевести профиль в режим регистрации без блокировки. | sudo aa-complain /path/to/program |
aa-enforce | Перевести профиль в принудительный режим. | sudo aa-enforce /path/to/program |
apparmor_parser -r | Перезагрузить измененный профиль. | sudo apparmor_parser -r /etc/apparmor.d/profile |
aa-logprof | Проанализировать отказы и предложить изменения профиля. | sudo aa-logprof |
aa-genprof | Интерактивно создать новый профиль. | sudo aa-genprof /path/to/program |
Диагностика отказа AppArmor
sudo aa-status
sudo journalctl -k -g apparmor --since '-30 min'
sudo journalctl | grep -i 'apparmor="DENIED"'
sudo aa-logprof
Права файла и AppArmor проверяются отдельно
Даже если chmod и chown разрешают доступ, AppArmor может его заблокировать. И наоборот, разрешение в профиле AppArmor не отменяет обычные права пользователя, ACL и read-only mount.
Не отключайте AppArmor ради быстрого исправления. Сначала найдите конкретный DENIED, проверьте путь, режим и профиль. Отключение всего LSM убирает дополнительный уровень защиты и обычно не устраняет ошибку конфигурации приложения.
Готовые алгоритмы диагностики
Нет доступа в интернет
ip -br a
ip link
ip route
ip route get 1.1.1.1
ping -c 3 <адрес_шлюза>
ping -c 3 1.1.1.1
getent hosts example.com
resolvectl status
curl -I --connect-timeout 10 https://example.com
sudo nft list ruleset
Порядок рассуждения:
- Нет link или интерфейс
DOWN- кабель, Wi-Fi, драйвер,rfkill, порт коммутатора. - Нет адреса - DHCP или профиль NetworkManager.
- Нет default route - шлюз или policy routing.
- Шлюз не отвечает - локальная сеть, VLAN, маска, ARP/NDP.
- Внешний IP работает, имя нет - DNS.
- DNS работает, TCP 443 нет - firewall, proxy, MTU, провайдер или сервис.
Служба не запускается
systemctl status service --no-pager -l
sudo journalctl -u service -b --no-pager
systemctl cat service
systemctl show service -p User -p Group -p ExecStart -p Environment
sudo ss -lntup
sudo name-of-daemon --test-config
sudo systemctl restart service
Команда проверки зависит от программы:
sudo sshd -t
sudo nginx -t
sudo apache2ctl configtest
sudo nft -c -f /etc/nftables.conf
Закончилось место
df -hT
df -i
sudo du -xhd1 / | sort -h
sudo du -xhd1 /var | sort -h
sudo journalctl --disk-usage
sudo lsof +L1
sudo find /var -xdev -type f -size +1G -printf '%s %p\n' | sort -n
Не удаляйте незнакомые файлы. Сначала определите владельца пакета через dpkg -S, процесс через lsof и штатный способ очистки.
Высокая нагрузка
uptime
top
ps -eo pid,ppid,user,stat,%cpu,%mem,etimes,cmd --sort=-%cpu | head -20
ps -eo pid,ppid,user,stat,%cpu,%mem,etimes,cmd --sort=-%mem | head -20
vmstat 1
free -h
sudo pidstat 1
sudo iostat -xz 1
pidstat и iostat входят в пакет sysstat. Отделяйте CPU, память, swap, дисковый ввод-вывод и сетевое ожидание.
Порт должен слушать, но подключения нет
systemctl status service
sudo ss -lntup
sudo ss -lntp 'sport = :443'
curl -vk https://127.0.0.1/
ip -br a
sudo nft list ruleset
nc -vz server-ip 443
sudo tcpdump -i any -nn 'tcp port 443'
- Порт не слушает - приложение не запущено или ошиблась конфигурация.
- Слушает только
127.0.0.1- удаленные клиенты не подключатся. - SYN приходит, ответа нет - локальный firewall или приложение.
- SYN не приходит - маршрут, внешний firewall, NAT, ACL или неверный адрес.
После изменения конфигурации пропал SSH
- Использовать консоль провайдера, KVM, IPMI или локальный доступ.
- Проверить
ip -br a,ip routeиss -lntp. - Выполнить
sshd -t. - Проверить
journalctl -u ssh -b. - Проверить nftables и фактический порт.
- Вернуть резервную копию и выполнить
systemctl reload ssh.
Система долго загружается
systemd-analyze
systemd-analyze critical-chain
systemd-analyze blame
systemctl --failed
sudo journalctl -b -p warning..alert
sudo dmesg -T | grep -iE 'error|fail|timeout'
Не создаются файлы, хотя df показывает свободное место
df -hT
df -i
findmnt -T /path
mount | grep ' /path '
dmesg -T | tail -100
Возможные причины: закончились inode, файловая система стала read-only, исчерпана quota, нет прав или повреждена файловая система.
Не монтируется диск
lsblk -f
sudo blkid
sudo dmesg -T | tail -100
sudo fsck -N /dev/sdX1
sudo mount -v /dev/sdX1 /mnt/test
fsck -N показывает, что было бы запущено, но не выполняет проверку. Настоящий fsck обычно запускают на размонтированном разделе.
Опасные команды и типовые ошибки
rm -rf и широкие шаблоны
Рекурсивное удаление не имеет корзины. Опасны пустые переменные, неправильный текущий каталог и пробел в пути.
Плохо:
rm -rf "$DIR"/*
Если DIR неожиданно пуст, последствия могут быть критичными. До удаления проверяйте значение:
: "${DIR:?DIR is not set}"
realpath "$DIR"
find "$DIR" -mindepth 1 -maxdepth 1 -print
dd of=/dev/...
Перезаписывает блочное устройство без диалога. Всегда сверяйте lsblk, модель, размер и транспорт.
mkfs, fdisk, parted
Могут уничтожить структуру раздела. Перед изменением сохраните схему:
sudo sfdisk --dump /dev/sda > sda-partitions.txt
lsblk -f > lsblk-before.txt
sudo blkid > blkid-before.txt
chmod -R 777
Не исправляет архитектуру прав, а открывает запись всем пользователям.
chown -R не на тот каталог
Перед рекурсивным изменением:
pwd
realpath /target
find /target -maxdepth 2 -printf '%u:%g %m %p\n' | head -100
Правка SSH или firewall в единственной сессии
Нужны вторая сессия, проверка синтаксиса и резервный доступ.
curl URL | sh
Запускает удаленный код без предварительной проверки. Безопаснее:
curl -fL URL -o installer.sh
less installer.sh
sha256sum installer.sh
bash installer.sh
Контрольная сумма имеет смысл только при получении эталонного значения по доверенному каналу.
Безусловный apt autoremove -y
Сначала просмотрите список. Нужный пакет мог быть установлен как зависимость. При необходимости:
sudo apt-mark manual package-name
Постоянная работа в root
Одна ошибка в пути или переменной затронет всю систему. Используйте обычную учетную запись и sudo для конкретных действий.
Копирование команд без понимания
Проверяйте:
type command
command -v command
man command
command --help
Краткая шпаргалка
| Команда | Для чего |
|---|---|
pwd |
Текущий каталог |
ls -lah |
Все файлы подробно |
cd /path |
Перейти в каталог |
cp -a src dst |
Копировать с атрибутами |
mv old new |
Переместить или переименовать |
rm -i file |
Удалить с подтверждением |
find /path ... |
Найти файлы |
grep -Rni text /path |
Найти текст |
less file |
Прочитать длинный файл |
tail -f log |
Следить за журналом |
chmod 640 file |
Изменить права |
chown user:group file |
Изменить владельца |
sudo command |
Повысить права одной команды |
sudo apt update |
Обновить индекс пакетов |
sudo apt install package |
Установить пакет |
sudo apt full-upgrade |
Полное обновление |
ps aux |
Процессы |
top |
Монитор процессов |
kill PID |
Корректно завершить процесс |
systemctl status service |
Состояние службы |
journalctl -u service |
Журнал службы |
lsblk -f |
Диски и файловые системы |
df -hT |
Свободное место |
du -xhd1 /var |
Размер каталогов |
ip -br a |
Интерфейсы и адреса |
ip route |
Маршруты |
sudo ss -lntup |
Слушающие порты |
resolvectl status |
DNS |
dig example.com |
DNS-запрос |
curl -I URL |
Проверить HTTP |
ssh user@server |
Удаленный вход |
rsync -a src/ dst/ |
Синхронизация |
sudo nft list ruleset |
Правила firewall |
sudo tcpdump -i any -nn |
Захват трафика |
nmap -sn NETWORK |
Инвентаризация разрешенной сети |
Частые вопросы о Debian, Ubuntu и командах Linux
Команды Debian и Ubuntu сильно отличаются?
Нет. Большинство базовых команд, systemd, APT, SSH, права и сетевые утилиты совпадают. Отличия чаще находятся в репозиториях, сетевой конфигурации, release upgrade и дополнительных инструментах Ubuntu.
Что лучше для сервера: Debian или Ubuntu Server?
Debian выбирают за консервативную стабильную базу и минимализм. Ubuntu Server удобна в облаках, имеет LTS, Netplan, cloud-init и большую экосистему Canonical. Правильный выбор зависит от требований приложения, поддержки и компетенций администратора.
Чем apt update отличается от apt upgrade?
apt update обновляет локальные сведения о пакетах. apt upgrade устанавливает доступные обновления. Выполнение только apt update не обновляет установленные программы.
Когда использовать apt full-upgrade?
Когда нужно полное согласование зависимостей и допускается удаление установленного пакета. Перед подтверждением необходимо проверить список устанавливаемых и удаляемых пакетов.
Можно ли подключить PPA Ubuntu в Debian?
Нет. PPA собирается для конкретных выпусков Ubuntu. Подключение его в Debian может привести к конфликту зависимостей и частичному смешиванию дистрибутивов.
Чем Netplan отличается от NetworkManager?
Netplan хранит декларативную конфигурацию YAML и генерирует настройки для backend. Backend может быть NetworkManager или systemd-networkd. NetworkManager непосредственно управляет интерфейсами и профилями подключения.
Как безопасно применить статический IP в Ubuntu Server?
Создайте резервную копию /etc/netplan, выполните netplan generate, затем netplan try. На удаленном сервере держите консольный доступ, потому что ошибка адреса, маршрута или VLAN может оборвать SSH.
Что использовать в Ubuntu: UFW или nftables?
Для простого host-based firewall удобен UFW. Для сложной маршрутизации, NAT и детального контроля применяют nftables. Не следует одновременно менять один ruleset несколькими несогласованными инструментами.
Как безопасно обновить Ubuntu на следующую LTS?
Обновите текущий выпуск, проверьте backup, свободное место, сторонние репозитории и release notes. Используйте do-release-upgrade. Переход LTS-to-LTS обычно открывается после первого point release новой LTS.
Почему появляется Permission denied, хотя права chmod выглядят правильно?
Проверьте права всех каталогов пути, владельца, ACL, read-only mount, AppArmor, capabilities и пользователя службы. Полезны id, namei -l, getfacl, findmnt и журнал AppArmor.
Как увидеть открытые порты и процесс?
Используйте sudo ss -lntup. Дополнительно подходят sudo lsof -nP -i и systemctl status нужной службы.
Какие команды особенно опасны?
rm -rf, dd, mkfs, fdisk, parted, lvreduce, рекурсивные chmod и chown, изменение fstab, Netplan, SSH, UFW и nftables. Перед выполнением нужен backup, dry-run или проверка синтаксиса и путь отката.
Как изучать Debian и Ubuntu на практике
Не пытайтесь запомнить все команды сразу. Создайте две тестовые виртуальные машины: минимальную Debian и Ubuntu Server LTS. Сделайте snapshots и повторяйте одни и те же задачи в обеих системах. Так различия станут понятны без риска для рабочего компьютера или сервера.
pwd, ls, cd, cp, mv, rm, less, nano, man.
id, chmod, chown, sudo, apt, dpkg.
systemctl, journalctl, процессы и загрузка.
lsblk, findmnt, df, du, rsync, tar.
ip, ss, DNS, NetworkManager, Netplan, SSH.
firewall, мониторинг, AppArmor и Bash.
Проверочный алгоритм перед любой системной правкой
- Определить текущую версию, службу, интерфейс или устройство.
- Прочитать
man,--helpи комментарии конфигурации. - Создать резервную копию с сохранением владельца и прав.
- Проверить синтаксис штатной командой.
- Применить минимальное изменение.
- Проверить статус, журнал, порт, маршрут или фактический результат.
- Зафиксировать изменение и способ отката.
Настройка Linux, сети, VPN, NAS и удаленного доступа
Компьютерная помощь в Петровском и Туле
Диагностика Debian и Ubuntu, настройка локальной сети, Wi-Fi, VPN, NAS, домашнего сервера, видеонаблюдения и безопасного удаленного доступа.