Ошибка → решение
Ошибок и симптомов: 952. Найди свою и перейди к решению в статье.
Сообщения в терминале
-
nginx не принимает конфигурацию
nginx: configuration file … test failed
Полный текст ошибки печатает
nginx -t— там будет файл и номер строки. -
Нет прав на файл или каталог
permission denied
Смотри владельца и права
ls -l, при необходимости выполняй от root черезsudo. -
systemd не знает такой юнит
could not be found
Проверь имя
systemctl list-units --type=service; после правки файла нуженdaemon-reload. -
Команда не найдена
command not found
Проверь опечатку и путь
which,type. Пакета может просто не быть на машине. -
Файла или каталога нет
no such file or directory
Проверь путь
ls,pwd. Относительный путь считается от текущего каталога. -
Служба не запустилась
job for … failed because
Причина — в
systemctl status <служба>и вjournalctl -u <служба> -n 50. -
Порт уже занят
address already in use
Кто держит порт, покажет
ss -tlnp. Либо останови того, либо возьми другой порт. -
Место на диске кончилось
no space left on device
Свободное место покажет
df -h, крупные каталоги —du -xh --max-depth=1 /. -
mount не узнал файловую систему
wrong fs type
Чаще всего на устройстве ещё нет файловой системы —
lsblk -fпокажет пустой FSTYPE. Монтируют раздел, а не весь диск. -
На диске нет таблицы разделов
unrecognised disk label
Так выглядит новый диск. Таблицу создаёт
parted mklabelи стирает прежнюю — имя диска сверь сlsblk. -
Файл не подключился как loop-устройство
failed to set … loop device
Подключать loop-устройства может только root — запусти через
sudo. Что уже подключено, покажетlosetup -a. -
Нет доступа к службе Docker
permission denied while trying to connect to the docker
Сокет Docker доступен root и группе docker. Запусти команду через
sudo docker …. -
Служба Docker не запущена
cannot connect to the docker daemon
Запусти её —
sudo systemctl enable --now docker; состояние покажетsystemctl status docker. -
Порт хоста уже занят
port is already allocated
Кто держит порт, покажет
sudo ss -tlnp. Контейнер уже создан — удали егоdocker rmи запусти с другим портом слева в-p. - Сборку ведёт старый сборщик Docker legacy builder is deprecated Это предупреждение, сборка идёт дальше. Ошибка, если она есть, — в последних строках вывода.
-
В образе нет программы для запуска
executable file not found in $path
Частая причина —
CMDв форме exec одной строкой. Раздели слова —["httpd", "-f"]— и проверь, что программа есть в образе. -
Буфер ядра закрыт для обычного пользователя
read kernel buffer failed
В Ubuntu
kernel.dmesg_restrict = 1— читайsudo dmesg -Tилиsudo journalctl -k. -
Процесс упёрся в лимит открытых файлов
too many open files
Сравни
Max open filesв/proc/<PID>/limitsс числом файлов в/proc/<PID>/fd; службе лимит поднимаютLimitNOFILEв drop-in. -
Параметр ядра не изменён — нужны права root
permission denied on key
Строка с новым значением напечатана, но значение прежнее. Повтори с
sudoи проверьsysctl <имя>. -
Swap-файл может прочитать любой пользователь
insecure permissions
Swap включится, но права нужно сузить —
sudo chmod 600 <файл>. -
strace не может подключиться к процессу
attach: ptrace
В Ubuntu без root трассируют только своих потомков —
sudo strace -p <PID>. -
systemd пропустил строку юнита
unknown key name
Ключ стоит не в своей секции или с опечаткой — проверь
systemd-analyze verify <юнит>. -
Новый пароль не прошёл проверку качества
bad password:
Причина — после двоеточия (длина, классы символов, словарь); подобрать пароль заранее можно
pwscore. -
Пароль не сменён — попытки кончились
have exhausted maximum number of retries
Все варианты отвергла проверка качества (
retry=3). Посмотри причиныBAD PASSWORDвыше и проверь парольpwscore. -
Учётная запись заблокирована после неудачных входов
the account is locked due to
Счётчик —
sudo faillock --user <имя>, снять блокировку —sudo faillock --user <имя> --resetили ждатьunlock_time. -
pam-auth-update не трогает файлы, правленные руками
local modifications to /etc/pam.d
Профиль не включён.
--forceпересоберётcommon-*и сотрёт ручные строки — их придётся вписать заново. -
sudo не работает внутри службы с NoNewPrivileges
"no new privileges" flag is set
Флаг
no_new_privsзапрещает повышать права. Дай службе нужное право черезUser=, группу или capability. -
Служба не запустилась — нет пользователя из User=
status=217/user
Заведи пользователя
useradd --systemили поставьDynamicUser=yes. -
setcap запущен без root
unable to set cap_setfcap
Выдавать capabilities файлам может только root — повтори с
sudo. -
Этот вид скана требует root
scan type which requires root
SYN-скан, UDP и определение ОС шлют сырые пакеты — запусти с
sudoили оставь обычный скан без ключа-sS. -
nmap считает узел выключенным
host seems down
Узел не ответил на пробы обнаружения. Сверь адрес и повтори с
-Pn— тогда порты сканируются без проверки. -
AppArmor запретил программе доступ
apparmor="denied"
В строке — профиль (
profile), путь (name) и чего не хватило (denied_mask). Правило добавляют в local-файл профиля. -
Параметр PostgreSQL применится только после перезапуска
cannot be changed without restarting the server
После
reloadзначение прежнее (pending_restart = t). Нуженsudo systemctl restart postgresql. -
Чужой crontab — только от root
must be privileged to use -u
crontab -u <пользователь>работает только сsudo:sudo crontab -l -u <пользователь>. -
apt ждёт, пока закончится плановое обновление
(unattended-upgr)
Блокировку dpkg держит unattended-upgrade. Дождись его (
systemctl status apt-daily-upgrade), процесс не убивай. -
Загрузка ещё не закончилась
bootup is not yet finished
Какое-то задание загрузки ещё идёт —
systemctl list-jobsпокажет какое. -
Юниты ждут друг друга по кругу
transaction order is cyclic
Два юнита с
After=друг на друга — в журналеFound ordering cycle; убери лишнийAfter=. -
Машина загрузилась в аварийный режим
you are in emergency mode
Чаще всего — строка
/etc/fstabс устройством, которого нет. Причина — вjournalctl -xb. -
chronyc не достучался до chronyd
506 cannot talk to daemon
Служба не запущена —
systemctl status chrony. -
Команда chronyc — только от root
501 not authorised
makestep,burst,reload sourcesменяют службу — запусти черезsudo. -
Время не задать руками, пока включена синхронизация
automatic time synchronization is enabled
Сначала
sudo timedatectl set-ntp false, после опыта —set-ntp true. -
systemd-timesyncd не работает
org.freedesktop.timesync1
Если стоит chrony, timesyncd удалён — состояние показывает
chronyc tracking. -
Репозиторий принадлежит другому пользователю
detected dubious ownership
Репозиторий root'а — через
sudo git. -
У git нет имени и почты автора
author identity unknown
Задай их в репозитории —
git config user.nameиgit config user.email(сsudo, если репозиторий root'а). -
pull отказался из-за локальной правки
would be overwritten by merge
Закоммить правку или отложи её
git stash, потомgit pullиgit stash pop. -
push отклонён — в удалённом есть чужие коммиты
(fetch first) … [rejected]
Сначала
git pull, потом сноваgit push. -
Ветки разошлись, git не знает, как их свести
reconcile divergent branches
Слить коммитом слияния —
git pull --no-rebase. -
Конфликт — обе стороны поменяли одни строки
conflict (content)
Оставь нужное между метками
<<<<<<</>>>>>>>, убери метки и сделайgit add <файл>. -
В инвентаре нет таких машин
could not match supplied host pattern
Инвентарь не прочитан или в нём нет группы из
hosts:— проверь путь в-iи--list-hosts. -
Ansible не нашёл модуль
couldn't resolve module/action
Опечатка в имени модуля —
ansible-doc <модуль>покажет, есть ли такой. -
notify зовёт обработчик, которого нет
the requested handler … was not found
Имя в
notifyдолжно совпасть сnameобработчика буква в букву. -
В шаблоне или задаче переменная, которой нет
ansibleundefinedvariable
Задай её в
vars:, инвентаре или-e, или поставь| default(...). -
Ansible не подключился к машине по SSH
unreachable! … failed to connect to the host via ssh
Причина — текст ssh в
msg; проверь вручнуюssh <машина> trueтем же пользователем. -
Модулю не хватает прав
destination … not writable
Модуль работает не от root — добавь
-bилиbecome: true. -
systemd выбросил задание, чтобы разорвать цикл
deleted to break ordering cycle
Два юнита ждут друг друга через
After=— одна служба не стартует. Задания — вsystemctl list-jobs.
Базовые команды
- Псевдоним пропал после перезахода Ты создал его в строке, но не сохранил в ~/.bashrc.
- alias не работает в скрипте / по sudo Это норма:
- Нужно временно запустить настоящую команду Префикс \ (\rm file) или command rm file — выполнит оригинал без alias.
- Задание не выполнилось Демон atd должен работать (systemctl status atd).
- Команда «не нашлась» в at Как и cron, at имеет скудное окружение (но at сохраняет текущее env на момент постановки — at -c ID покажет).
- Нужно отменить atq (найти id) → atrm <id>.
- at: command not found / нет atd Пакет at не установлен или демон не запущен:
- Разовое vs регулярное vs службой Разово — at; по расписанию — cron/systemd-таймеры; постоянный сервис — systemd-юнит.
- command not found {#missing-command} Проверь написание и поиск команды.
- Настройка есть в файле, но не действует {#settings-missing} Уточни тип сессии и выбранный файл запуска.
- История пуста или отличается между окнами {#history-empty} История связана с конкретной оболочкой и её настройками.
- Permission denied {#permission-denied} bash:
- command not found {#command-not-found} backup.sh:
- cannot execute: required file not found {#crlf} bash:
- [[: not found, Syntax error: "(" unexpected {#sh-vs-bash} Bash-скрипт выполнил sh (dash):
- name: command not found в строке с = {#assignment-spaces} Пробелы вокруг =:
- unbound variable {#unbound-variable} backup.sh:
- syntax error: unexpected end of file {#unexpected-eof} Не закрыт блок или кавычка:
- Скрипт ломается на имени с пробелом {#spaces-in-names} Переменная без кавычек:
- Руками работает, по расписанию — нет {#schedule} У cron и служб systemd другое окружение:
-
cd: too many argumentscd принимает один путь. -
cd: not a directoryЦелевой путь — файл, а не каталог. -
cd: permission deniedНет прав x (вход) на каталог. - «Перешёл в скрипте, а после него снова старый каталог» Каждый процесс/скрипт имеет свой рабочий каталог.
- В имени файла оказались пробелы/двоеточия date по умолчанию печатает с пробелами/:
- Время не то / не та зона date берёт системную зону.
- Месяц/день словами на английском, а нужен русский Зависит от локали (LC_TIME).
- Нужна дата в логах скрипта printf '%s %s\n' "$(date -Iseconds)" "сообщение" или используй журнал systemd (journalctl сам ставит таймстампы).
-
-eнапечаталось как текст Оболочка не bash (в sh/dash поведение иное) или echo внешний. - Звёздочка превратилась в список файлов echo * без кавычек попадает под globbing.
- Перенос строки не там, где надо echo всегда добавляет \n; чтобы без него — -n; чтобы вставить внутри — -e "...\n..." или printf.
- cannot open lock file: Permission denied {#permission-denied} Файл блокировки нельзя открыть.
- Второй запуск молча пропал {#silent-skip} Так работает -n:
- failed to execute: No such file or directory {#failed-to-execute} flock не нашёл команду (код 69).
- Блокировка не работает, запуски идут параллельно {#no-effect} Запуски берут блокировку на разных файлах или один из них идёт мимо flock.
- Короткое имя есть, FQDN не определяется {#fqdn-fails} Проверь запись текущего имени в системном резолвере.
- hostname -I вернула несколько адресов {#many-addresses} У машины может быть несколько интерфейсов и адресов.
- После перезагрузки имя вернулось {#name-reverts} Временная установка не заменяет постоянную конфигурацию.
-
mc: command not foundНе установлен: - Кракозябры вместо рамок Терминал не в UTF-8 или нет нужного шрифта.
-
Ctrl+Oничего не делает / shell пуст Ctrl+O показывает subshell. - Мышь выделяет текст вместо панелей Зажми Shift при выделении мышью — это отдаст выделение терминалу, а не mc.
- Сохранил, но изменения не применились к службе Редактор только пишет файл.
- Нет прав сохранить Открывал не под sudo.
- Перенос длинных строк путает (конфиги) nano -w file (или set nowrap) — отключить мягкий перенос, чтобы длинные строки конфигов не «ломались» визуально.
- Вставка мышью ломает / дублирует Терминальная вставка может тормозить на больших объёмах; для конфигов это обычно ок.
- Привычнее vim Для серверов знай минимум vim — он есть всегда; nano иногда не установлен (sudo apt install nano).
- echo съел/изменил строку с дефисом или бэкслешем echo "-n" или строки с \ ведут себя непредсказуемо между оболочками.
- printf обрезал/повторил вывод printf применяет формат ко всем аргументам по кругу.
- Нужно собрать строку из переменных printf -v var '%s-%s' "$a" "$b" — записать в переменную без вывода.
-
%d: invalid numberВ %d пришла не-цифра. - pwd: --: invalid option {#invalid-option} Такое сообщение есть в снимке при pwd --version:
- Путь отличается от ожидаемого {#unexpected-path} Причиной может быть симлинк, а не переход в другой объект.
- Текущий каталог удалён {#deleted-directory} Если путь невозможно восстановить, перейди в существующий каталог и проверь заново.
- screen -r: There is no screen to be resumed Сессии нет (закрылась/ребут).
- Attached, не отключиться («There is a screen on ... Attached») Сессия «прилипла» к другому терминалу:
- Кракозябры/сломанное отображение Ctrl+a затем C (очистить) или переподключись.
- Прокрутка мышью не работает screen по умолчанию прокручивается через copy-mode (Ctrl+a [).
- SC2148: Tips depend on target shell {#sc2148} В файле нет строки #!, и shellcheck не знает, какой оболочкой его читать.
- openBinaryFile: does not exist {#no-file} Файла по этому пути нет:
- Замечание не по делу {#false-positive} shellcheck не знает замысла:
- shellcheck молчит, а скрипт падает {#silent} shellcheck проверяет только текст.
- [: =: unary operator expected {#unary-operator} Переменная пустая и стоит без кавычек:
- [: too many arguments {#too-many-arguments} В значении пробел:
- [: a: integer expression expected {#integer-expected} -eq, -gt и соседям досталось не число:
- [-f: command not found и missing `]' {#spaces} Нет пробела после [ или перед ].
- [: a: unexpected operator {#unexpected-operator} Так sh (dash) отвечает на == внутри [ ].
- [ -n $x ] верно для пустой переменной {#n-unquoted} Без кавычек пустое значение исчезает, остаётся [ -n ] — проверка непустой строки -n, и она верна.
- value too great for base {#octal} [[ 08 -eq 8 ]] и (( 08 )) читают число с нулём впереди как восьмеричное, а 8 и 9 в нём нет.
- Ссылка есть, а -e говорит «нет» {#dangling-link} -e и -f смотрят на файл, куда ведёт ссылка.
- Не могу выйти / всё «перехватывается» Это префикс Ctrl+b.
- sessions should be nested with care Запустил tmux внутри tmux.
- После ребута сессии пропали tmux держит сессии в памяти — перезагрузка их убивает.
- Скролл мышью не работает Включи set -g mouse on в ~/.tmux.conf и tmux source ~/.tmux.conf (или новая сессия).
- Вместо процессора напечатано unknown {#unknown} Реализация не предоставила это поле.
- В выводе нет номера Ubuntu {#not-ubuntu} uname не является источником версии дистрибутива.
- После обновления перестал разбираться uname -a {#summary-parsing} Не считай слова в общей сводке.
- Сервер «тормозит» — с чего начать uptime → если load ≫ ядер, ищи виновника:
-
lastпусто или странно Логи входов ротируются (wtmp/btmp); старое — в wtmp.1. - Кто-то ещё правит конфиг w покажет чужие сессии и их WHAT.
- Застрял, всё ломается при наборе Ты в Normal, буквы — команды.
- Не сохранить: «E212: Can't open file for writing» Нет прав (открыл не под sudo).
- Вставка мышью «лесенкой» ломает отступы :set paste перед вставкой (в Insert auto-indent добавляет лишнее), затем :set nopaste.
- Случайно наделал правок u отменяет по шагам; :q!
- Нужен редактор попроще nano file — внизу подсказки (см.
- Конвейер/grep «не работает» в watch Заверни всю команду в кавычки:
- Цвета пропали По умолчанию watch убирает ANSI-цвет.
- Нужно следить за логом построчно Для логов лучше tail -f (см.
- Хочу остановиться при изменении / готовности watch -g cmd завершится, когда вывод изменится (удобно как «жди готовности»); watch -e cmd — остановится при ошибке команды.
-
whichнашёл, а команда «not found» (или наоборот) which не знает про alias/builtin/функции и читает свой $PATH, который может отличаться от текущего. - Запускается «не та» версия type -a имя покажет все совпадения по PATH в порядке поиска — первое и выполнится.
-
command not foundхотя пакет установлен Бинарь не в $PATH (часто /usr/local/sbin, ~/.local/bin). - После установки новой версии запускается старая Bash кэширует найденный путь к команде в таблице хэшей на время сессии.
- Передал имя — получил ошибку {#extra-name} whoami не принимает имя цели.
- Ожидал student, получил root {#wrong-identity} Проверь, не находишься ли в привилегированной оболочке.
- UID есть, имя не определяется {#missing-name} Числовая учётная запись может не иметь доступного соответствия в базе пользователей.
- Имена с пробелами разрезаются find ...
- xargs запустился на пустом вводе и наделал бед Добавь -r (--no-run-if-empty) — не запускать команду без аргументов.
- «Argument list too long» / один вызов с тьмой аргументов xargs сам бьёт на партии (лимит системы); для контроля — -n N.
- Нужно вставить аргумент не в конец xargs -I{} cmd ...
- Параллельный вывод перемешивается При -P строки разных процессов чередуются.
- invalid option -- 'z' / unrecognized option '--foo' У команды нет такого ключа.
- missing operand Команде не хватило аргумента:
- No such file or directory для половины имени Имя с пробелом без кавычек оболочка разделила на два аргумента.
- command not found Первое слово — не команда, которую знает оболочка:
- Кавычки не закрыты — приглашение сменилось на > Оболочка ждёт закрывающую кавычку.
- Скрипт пишет OK, а служба лежит {#ok-but-down} Проверка смотрит на код не той команды:
- Строка в середине упала, а скрипт вернул 0 {#last-command} Код скрипта — код последней команды.
- Скрипт всё сделал, а вернул 1 {#last-test} Та же причина с другой стороны.
- Код 127 {#code-127} command not found:
- Код 126 {#code-126} Файл найден, но не запускается:
- Код 130, 137 или 143 {#signal-codes} Команду прервал сигнал:
- grep обрывает скрипт с set -e {#grep-no-match} grep без совпадений возвращает 1.
- Кракозябры вместо кириллицы/символов Не UTF-8 локаль или терминал.
- warning: setlocale: LC_*: cannot change locale Запрошенная локаль не сгенерирована.
- Скрипт по-разному сортирует/парсит на разных машинах Локаль влияет на sort, числа, даты.
- Дата/числа в «неожиданном» формате LC_TIME/LC_NUMERIC.
- perl: warning setting locale failed Часто безвредно, но раздражает:
- command not found, хотя бинарник есть Его каталог не в $PATH.
- export сработал, но в новом терминале пропал export живёт только в текущей сессии.
- Переменная есть в терминале, но не по SSH (или наоборот) Разные файлы для login/non-login (см.
- Скрипт/cron/systemd не видит переменную cron и systemd-юниты не читают твой ~/.bashrc.
- sudo «теряет» переменные sudo очищает окружение (env_reset).
- Permission denied при sudo … > файл Файл открывает твоя оболочка, а не sudo.
- bash: $F: ambiguous redirect В имени файла из переменной пробел, или переменная пуста.
- bash: out.txt: cannot overwrite existing file Включён режим noclobber (set -o noclobber), он запрещает > поверх файла.
- Ошибки не попали в файл > перенаправляет только stdout.
- grep в конвейере не находит текст ошибки Ошибка ушла в stderr, а конвейер передаёт только stdout.
- После sort file > file файл пуст Оболочка обнулила file для записи до того, как sort его прочитал.
- man: команда есть, страницы нет Возможно встроенная команда bash — help cmd.
- apropos/man -k: «nothing appropriate» Не построен индекс.
- Слишком длинный man, нужен один флаг man cmd, затем /-X (поиск флага, n — следующее).
- Не помню имя команды, помню задачу apropos <тема> / man -k <тема> — поиск по описаниям всех страниц.
- Хочу справку по синтаксису bash (if/for/test) Это встроенные конструкции оболочки:
- Шаблон не нашёл файлов — команда получила сам шаблон По умолчанию bash оставляет нераскрытый glob как есть (ls *.xyz → «нет *.xyz»).
- Скрытые файлы не попали в * * не включает файлы на ..
- Пробелы/спецсимволы в именах ломают Кавычь переменные; для массовой обработки — find -print0 | xargs -0 (см.
-
{a,b}не раскрылось Внутри не должно быть пробелов:
Файлы и каталоги
- cp: -r not specified; omitting directory Источник — каталог, а -r не указан.
- cp: cannot stat 'x': No such file or directory Источника нет по этому пути.
- cp: cannot create regular file: Permission denied Нет права записи в каталог назначения.
- Копия принадлежит root, а не пользователю sudo cp создаёт новые файлы от root.
- Права или время у копии другие Без -p или -a копия получает текущее время и права по маске umask.
- No space left on device Место кончилось на разделе назначения.
- «Скрипт не запускается: cannot execute binary file» file script покажет реальный тип.
- Кодировка текста под вопросом file -i file покажет charset (utf-8 / iso-8859-1).
- Определить тип ФС на разделе file -s /dev/sdXN (от root) — быстрый способ без монтирования; для разметки см.
- file говорит «data» вместо конкретного типа Сигнатура не найдена в базе /etc/magic — либо файл повреждён, либо это неизвестный/сырой формат (например, зашифрованные данные выглядят как случайный набор…
- Permission denied засоряет вывод Отбрось ошибки:
- Ищет слишком глубоко / на других ФС -maxdepth N ограничит глубину (ставь ДО условий), -xdev не пересекать монтирования (см.
-
Случайно удалил не то с
-deleteВсегда сперва прогоняй без действия (только вывод), убедись в списке, потом -delete/-exec rm. - find с -name ничего не находит Шаблон должен быть в кавычках ("*.log"), иначе его раскроет шелл до find.
- -exec медленный {} \; запускает команду на каждый файл.
- detected dubious ownership {#dubious-ownership} Репозиторий принадлежит другому пользователю (здесь root), и git не работает в нём от твоего имени:
- Author identity unknown {#identity} У пользователя, от которого идёт коммит, нет имени и почты.
- Your local changes … would be overwritten by merge {#local-changes} В рабочей копии есть незакоммиченная правка файла, который меняют пришедшие коммиты.
- Need to specify how to reconcile divergent branches {#divergent} И у тебя, и в origin есть коммиты, которых нет у другой стороны (git status:
- rejected … (fetch first) {#push-rejected} В origin есть чужие коммиты.
- refusing to update checked out branch {#non-bare-push} push в обычный репозиторий с рабочими файлами:
- Permission denied (publickey) при push SSH-ключ не настроен или не добавлен на сервер — см.
- Случайно сделал reset --hard git reflog помнит, где был HEAD, — можно вернуться:
- Битый (висячий) симлинк Цель переместили/удалили.
- Относительный симлинк «сломался» после перемещения Относительный путь считается от каталога ссылки, не от текущего.
-
ln -sв существующий каталог создал ссылку ВНУТРИ него Если ИМЯ — существующий каталог, ln -s цель dir положит ссылку в dir/цель. - ls: cannot access 'x': No such file or directory Такого пути нет относительно текущего каталога.
- ls: cannot open directory: Permission denied Чтобы прочитать список, нужно право r на каталог, чтобы войти — x.
- Файла нет в списке, хотя он точно есть Имя начинается с точки — добавь -a.
- У каталога размер 4096, а внутри гигабайты ls -l показывает размер записи каталога, а не его содержимого.
- Имя напечатано в кавычках: 'my file' Так ls показывает имена с пробелами и спецсимволами, чтобы их можно было скопировать в команду.
- Вывод ls разбирают в скрипте, и он ломается на пробелах Вывод ls предназначен человеку.
-
mkdir: cannot create directory 'x': File existsКаталог уже есть. -
mkdir: cannot create directory 'a/b/c': No such file or directoryНет промежуточных каталогов (a, a/b). -
Permission deniedНет прав w+x на родительский каталог. -
Права получились не те, что в
-m-m задаёт права итоговому каталогу напрямую (umask не применяется к нему), но к промежуточным каталогам из -p применяется обычный umask. - mv: cannot stat 'x': No such file or directory Источника нет по этому пути.
- mv: cannot move 'src' to 'dst/src': Directory not empty В dst уже есть непустой каталог с тем же именем.
- Permission denied Для mv нужно право записи в оба каталога — откуда и куда, права самого файла не важны.
- Файл пропал после mv Назначение было не каталогом, а файлом с тем же именем:
- mv: invalid option -- 'l' на имени -file.txt Имя с минусом в начале mv принимает за набор ключей -f -i -l … и спотыкается на первой незнакомой букве.
- Забыл RESTIC_PASSWORD Репозиторий зашифрован — без пароля данные не восстановить.
- Бэкап медленный/большой первый раз Первый снимок — полный, дальше только изменения (дедуп).
- Репозиторий распух restic forget --keep-* --prune применяет политику хранения и реально удаляет неиспользуемые блоки (--prune).
- locked repository Прерванная операция оставила блокировку:
- Проверка бэкапа restic check (+ периодически --read-data) и тестовый restore — бэкап без проверенного восстановления не бэкап.
- rm: cannot remove 'dir': Is a directory Аргумент — каталог.
- rm: cannot remove: Permission denied Нет права записи в каталог, где лежит файл.
- rm: remove write-protected regular file? У файла нет права w.
- rm: cannot remove: Operation not permitted На файле стоит атрибут «неизменяемый» (lsattr файл покажет i) или это чужой файл в каталоге с битом t, как /tmp.
- Место на диске не освободилось Файл ещё открыт процессом:
- Argument list too long Под шаблон попало слишком много файлов для одной команды.
- --delete снёс нужное --delete делает dst точной копией src.
- Скопировалось не туда / задвоился каталог Хвостовой слэш у источника (см.
- Каждый раз копирует всё заново Сравнение по mtime+размеру; если время «плавает» (разные ФС/часовые пояса) — добавь -c (по контрольной сумме) или --modify-window=1.
- Права/владельцы не сохранились Нужен -a (или -o/-g/-p по отдельности); для чужих владельцев — права root на приёмнике.
- Долго на множестве мелких файлов Нормально (rsync сверяет каждый).
- «Я не менял файл, а mtime свежий» Файл перезаписали (редактор сохраняет заново) или процесс дописал.
-
Размер в
ls -lбольшой, а место не занято Разрежённый файл (sparse). - Права симлинка не совпадают с ожидаемыми Симлинки в Linux почти всегда показывают 777 — эти права не влияют на доступ к цели, права проверяются у файла назначения.
- tar: Removing leading '/' Норма:
- Распаковал и засыпал текущий каталог («tar-бомба») Архив без верхнего каталога.
- Permission denied / потерялись владельцы Системные бэкапы распаковывай под root и с -p (права) / --same-owner (владельцы, у root по умолчанию).
- Очень медленно / большой архив xz (J) жмёт сильнее, но медленно; gzip (z) — баланс; для многоядерных — pigz (tar -c dir | pigz > a.tgz).
- Не перезаписывать существующее при извлечении --keep-old-files (ошибка, если есть) или --skip-old-files (пропустить).
- rm удалил не то Восстановления нет:
- No such file or directory, хотя файл виден Чаще всего дело в пути:
- Permission denied при копировании Нет прав на чтение источника или на запись в каталог назначения.
- cp скопировал каталог не целиком Каталог копируется рекурсивно:
- Файл занят, место не освободилось после удаления Пока процесс держит открытым удалённый файл, место не возвращается.
- Путь с пробелами «разъехался» Всегда в кавычках:
-
realpath: No such file or directoryПо умолчанию realpath требует существования пути. - Нужен путь без раскрытия симлинков realpath идёт по симлинкам.
- Битый symlink (ведёт «в никуда») Цель удалили/переместили.
- Скопировал, а получил саму ссылку (или наоборот) cp по умолчанию идёт по symlink (копирует цель).
- du/df расходятся из-за hard link Жёсткие ссылки делят одни блоки — du считает их один раз (что путает).
- rsync «раздул» бэкап Без -H rsync не сохраняет жёсткие ссылки (копирует данные повторно).
Текст и поиск
- cat: /etc/shadow: Permission denied Файл читает только root или группа.
- Permission denied при sudo cat > /etc/файл Перенаправление > выполняет твоя оболочка, без прав root, ещё до запуска sudo.
- cat: /etc: Is a directory Аргумент — каталог.
- После cat терминал печатает мусор Ты вывел двоичный файл, и управляющие байты переключили терминал.
- Файл пролетел, видно только конец cat не останавливается на каждом экране.
- Пустой вывод при разделителе-пробеле Между словами больше одного пробела, и нужная колонка пустая.
- cut печатает всю строку В строке нет разделителя из -d, и cut выводит её как есть.
- cut: you must specify a list of bytes, characters, or fields Не указано, что вырезать.
- cut: the delimiter must be a single character После -d стоит больше одного символа.
- cut: fields are numbered from 1 Колонки нумеруются с единицы:
- cut: only one type of list may be specified В одной команде и -f, и -c.
- Русские буквы разрезаны пополам cut -c в Ubuntu считает байты, как -b, а русская буква в UTF-8 занимает два байта.
- patch: Hunk FAILED / .rej файлы Контекст в целевом файле уже изменился.
- Не знаю, какой -p уровень git-патчи обычно patch -p1 (срезает a/, b/).
- Слишком шумный diff (пробелы/CRLF/регистр) diff -w (игнор пробелов), -i (регистр), -B (пустые).
- Сравнить вывод команд, а не файлы diff <(cmd1) <(cmd2) — process substitution (bash).
-
grep сам попадает в вывод
ps aux | grepКлассика. - Спецсимволы шаблона ловятся как регулярка Точка, скобки, + — это regex.
-
\d,\w, lookahead не работают Базовый/extended grep их не знает — нужен -P (PCRE): - Хочу совпадения, но grep молчит Проверь регистр (-i), нужный файл, что данные реально приходят.
- Слишком медленно по большому дереву Исключай каталоги (--exclude-dir), или используй ripgrep (rg) — заметно быстрее.
- После очистки запускается неожиданная команда {#other-definition} Имя может обозначать функцию или псевдоним.
- Таблица пустая {#empty-table} Это допустимое состояние, например после очистки.
- В другом терминале поведение не изменилось {#other-shell} У другой оболочки свой контекст.
- head: cannot open 'x' for reading: No such file or directory Файла нет по этому пути.
- head: invalid number of lines После -n должно стоять число:
- Вывод заканчивается на середине строки Ты указал -c (байты) вместо -n (строки).
- В выводе нет нужной строки Она дальше первых десяти.
- jq: error: Cannot index ... Структура не та, что ждёшь.
- В выводе лишние кавычки Для строк jq печатает с кавычками.
- Невалидный JSON на входе jq падает на не-JSON.
- Нужно подставить shell-переменную Не вклеивай в строку фильтра — используй --arg name val (строка) или --argjson (число/JSON), внутри ссылайся как $name.
- Как выйти из less q.
- Pattern not found Слова нет ниже текущей позиции.
- "file" may be a binary file. See it anyway? Файл двоичный, и читать его как текст бессмысленно.
- Вместо цветов — ESC[31m и похожий мусор Программа выдала коды цвета, а less показывает их буквами.
- Missing filename less запустили без имени файла и без конвейера.
- sed -i ничего не поменял {#no-change} Шаблон не совпал ни с одной строкой.
- Заменилось лишнее {#too-much} Шаблон шире, чем нужно:
- unterminated `s' command {#unterminated} sed 's/a/b' — не хватает последнего разделителя.
- unknown option to `s' {#unknown-option} В шаблоне или замене есть /, и sed принял остаток за флаги.
- invalid reference \1 on `s' command's RHS {#invalid-reference} В замене стоит \1, а группы в шаблоне нет:
- awk: unexpected newline or end of string {#awk-syntax} Не закрыта скобка или кавычка в программе:
- awk печатает пустые поля {#awk-empty} Строка делится не тем разделителем:
- 10 стоит раньше 9 Сравнение идёт как текст.
- sort -k2 сортирует не только по второй колонке -k2 значит «с колонки 2 до конца строки», поэтому при равных значениях решают следующие колонки.
- Порядок заглавных и строчных не тот, что ждал Порядок текста задаёт локаль.
- sort: cannot read: x: No such file or directory Файла нет по этому пути.
- sort: invalid number at field start После -k должен идти номер колонки:
- Числа с пробелами в начале сортируются странно Без -n и -b ведущие пробелы входят в сравнение.
- После sort file > file файл пуст Оболочка обнулила файл для записи раньше, чем sort его прочитал.
- sort сортирует числа не по величине По умолчанию сортировка лексикографическая:
- uniq не убрал повторы uniq схлопывает только соседние одинаковые строки, поэтому перед ним нужен sort:
- cut не видит колонки Разделитель по умолчанию — табуляция.
- wc -l показывает на одну строку меньше Последняя строка файла без перевода строки не считается.
- Кириллица ломается в tr tr работает с байтами, а не с символами:
- tail -f замолчал после ротации журнала logrotate переименовал файл и создал новый, а tail -f продолжает читать старый.
- tail: cannot open: Permission denied Системные журналы читает root и группа adm.
- tail: cannot open 'x' for reading: No such file or directory Файла нет — возможно, служба пишет в journald, а не в файл.
- Новые строки появляются с задержкой Программа буферизует свой вывод, а не tail.
- Ctrl+C не возвращает приглашение Щёлкни по терминалу, чтобы фокус был в нём, и нажми Ctrl+C ещё раз:
-
teeперезаписал файл вместо дописывания Без -a tee обрезает файл. - Код возврата всегда 0, хотя команда упала В конвейере cmd | tee код берётся от последней команды (tee).
- Запись в файл root не удалась Используй | sudo tee, а не sudo cmd >.
- uniq не убрал повторы Повторы стоят не подряд.
- Строки выглядят одинаково, но не схлопываются Различаются невидимые символы:
- cut не берёт число из вывода uniq -c Перед числом стоят пробелы для выравнивания, и cut -d' ' видит пустые колонки.
- uniq: x: No such file or directory Файла нет по этому пути.
- wc -l показывает на одну строку меньше wc считает переводы строки.
- В выводе лишнее имя файла Имя печатается, когда файл передан аргументом.
- wc -c и wc -m дают разные числа -c считает байты, -m — символы по локали.
- ls | wc -l считает не то число файлов ls без -A пропускает скрытые файлы, ls -l добавляет строку total.
- wc: x: Is a directory wc читает файлы, а не каталоги.
- grep 'a|b' ничего не находит {#bre-alternation} Без -E знак | — обычный символ, и grep ищет строку a|b буквально.
- \d находит букву d {#backslash-d} \d есть только в PCRE.
- Unmatched ( or ( {#unmatched} Скобка в шаблоне не закрыта:
- Точка находит лишнее {#dot} grep -o '10.20.0.15' находит и начало 10.20.0.150:
- Звёздочку раскрыла оболочка {#quote-pattern} Без кавычек grep error.* app.log оболочка может заменить error.* на имена подходящих файлов.
Пользователи и права
- Изменился срок пароля вместо срока записи {#wrong-field} Сравни поля вывода sudo chage -l labpaused.
- Пользователь найден, но локальное изменение не удаётся {#nonlocal-account} Запись могла прийти через внешний источник NSS.
- chmod 777 «на всякий случай» Почти всегда неправильно и опасно (особенно на каталоги/веб).
- Общий каталог для команды — не 1777 1777 (sticky bit, world-writable) — это режим для публичных каталогов вроде /tmp:
- Рекурсия сломала исполняемость chmod -R 644 dir снимет x с каталогов → в них не зайти.
- Сменил владельца — служба перестала читать Многие демоны работают от своего пользователя (www-data, postgres).
- имя - No such file or directory Части пути с этим именем нет.
- имя - Permission denied У каталога строкой выше нет x для того, кто запустил namei.
- По namei всё открыто, а доступа нет namei не показывает ACL, AppArmor и группы, которые процесс получил при запуске.
- У файла права 644, а прочитать его нельзя Права файла проверяются последними.
- Служба работает, хотя shell запрещён {#service-still-runs} Это может быть ожидаемо:
- Команда от пользователя всё ещё разрешена через sudo {#sudo-still-works} Проверь правила sudo.
- passwd: Authentication token manipulation error passwd не смог сменить пароль.
- passwd: password unchanged Итоговая строка после любой такой неудачи.
- passwd: You may not view or modify password information Обычный пользователь пытается посмотреть или сменить чужой пароль.
- После passwd -l пользователь всё равно входит Он входит по ключу SSH:
- Ввожу пароль, а на экране ничего не появляется Так и задумано:
- Файл в общем каталоге создаётся без записи для группы У создателя маска 022:
- Какая маска у команды от другого пользователя sudo -u alice открывает сессию PAM, и pam_umask ставит маску alice:
- Маска поменялась, а старые файлы те же Маска действует только при создании.
- Скрипт создался без права на запуск Маска не даёт файлам x.
- bash: umask: 9: octal number out of range Маска пишется восьмеричными цифрами 0–7:
- useradd: Permission denied / cannot lock /etc/passwd Команда запущена без root.
- useradd: user 'alice' already exists Такое имя занято.
- useradd: group 'devs' does not exist Группа из -G или -g должна существовать заранее:
- Пользователь создан, но войти не может Пароль не задан — выполни sudo passwd alice.
- Вместо bash странная оболочка: нет истории и автодополнения Пользователь создан без -s и получил /bin/sh.
- Could not chdir to home directory при входе Создан без -m, и домашнего каталога нет.
- usermod: user alice is currently used by process 1234 Имя, UID или домашний каталог нельзя менять, пока пользователь работает в системе.
- usermod: group 'devs' does not exist Группа из -g или -G должна существовать.
- Добавил в группу — доступа всё равно нет Сессия и службы держат старый список групп.
- Пропали группы после usermod -G Это -G без -a:
- gpasswd: user 'alice' is not a member of 'docker' Пользователя в этой группе и не было — проверь id -nG alice.
- Новый файл в общем каталоге с личной группой На каталоге нет setgid (ls -ld — x вместо s у группы) — поставь chmod g+s.
- Коллега удалил мой файл У каталога нет sticky, а у группы есть w.
- rm: cannot remove 'x': Operation not permitted Файл чужой, а на каталоге sticky (t или T в конце ls -ld).
- chmod 775 не снял setgid с каталога GNU chmod с числом из трёх-четырёх цифр не снимает setuid и setgid у каталогов.
- chmod: changing permissions of 'x': Operation not permitted Менять права может только владелец файла и root.
- setuid на скрипте не работает Ядро Linux не применяет setuid к скриптам с #!
- Добавил в группу — не действует Членство применяется при новом логине.
-
Случайно перезаписал группы (
-Gбез-a) Восстанови нужные: - Не могу удалить пользователя — «currently used by process» Заверши его процессы (pkill -u alice, см.
- Вход запрещён, хотя пароль верный Учётка/пароль заблокированы (passwd -l/chage -E в прошлом) или shell = nologin.
- Права на файлы «не той» группы SGID-каталог наследует группу для НОВЫХ файлов; старые переведи chgrp -R (см.
- Permission denied при запуске скрипта Нет бита x:
- Не могу записать в каталог, хотя есть w на файл Для создания/удаления/переименования файла важны права на каталог (w+x), не на сам файл.
- Веб-сервер не читает файлы (403) nginx работает от www-data — нужен r на файлы и x на все каталоги пути.
- Доступ должен быть, но его нет Возможно, действуют ACL (символ + в ls -l) или AppArmor (в журнале apparmor ...
- SGID-каталог: новые файлы не той группы SGID наследует группу для новых, но уже существующие и перенесённые через mv надо перевести вручную (chgrp -R).
- Права выглядят верно, но доступа нет / есть лишний Действуют ACL.
- Именованному пользователю дал rw, а он не пишет Маска урезает:
- ACL не наследуются новыми файлами Нужны default ACL на каталоге (setfacl -d -m ...).
- ACL «пропали» после копирования/бэкапа cp не переносит ACL — используй cp -a/--preserve=all, rsync -A, tar --acls.
- ФС не поддерживает ACL Нужна опция монтирования acl (на ext4 обычно по умолчанию).
Процессы
- Permission denied у чужого процесса {#permission-denied} fd, environ, cwd, exe, io, maps чужого процесса читает только root.
- sudo есть, а Permission denied всё равно {#sudo-redirect} Перенаправления < и > выполняет твоя оболочка без прав root, sudo действует только на команду.
- No such file or directory {#no-such-pid} Процесс уже завершился, и его каталог исчез вместе с ним.
- В environ нет переменной, которую задали {#environ-stale} Переменную задали после запуска процесса.
- Процесс «убит», в логах memory cgroup / oom-kill Служба упёрлась в MemoryMax своей cgroup — ядро убило её (cgroup-OOM, не глобальный).
- Служба «съедает» весь CPU/диск Ограничь через systemd:
- Контейнер не видит другие процессы/сеть — это норма Так задумано (namespaces изолируют).
- Где реально потребление по службам systemd-cgtop (как top, но по cgroup/службам) — сразу видно, какая служба грузит.
- pidstat -d ничего не показывает {#pidstat-empty} Две причины.
- Первая строка iostat не похожа на остальные {#first-report} Это средние с момента загрузки:
- %util 100, а всё работает {#util-100} Устройство выполняет запросы параллельно, %util считает только время, когда занято хоть что-то.
- ionice не помогает {#ionice-none} Планировщик диска none не учитывает классы:
- iotop: command not found {#no-iotop} iotop на машине тренажёра не установлен.
- kill: (12345) - No such process Процесса с таким PID уже нет:
- kill: (1) - Operation not permitted Процесс принадлежит другому пользователю или root.
- После kill процесс всё ещё в списке Состояние Z (зомби):
- Процесс вернулся после kill Его перезапускает systemd или другой надзиратель.
- kill: invalid signal specification Такого сигнала нет — чаще всего опечатка в имени.
- Load высокий, а процессор свободен {#high-load-idle-cpu} В top — 90.9 id, а load на одном процессоре 2.90.
- Процесс в D не завершается от kill -9 {#kill-d} Сигнал ждёт конца операции ядра.
- Load 1.00 на одном процессоре — это много? {#one-per-cpu} Нет очереди:
- В контейнере load как у всей машины {#containers} /proc/loadavg один на всё ядро:
- Высокий st на виртуальной машине {#steal} st (steal) — процессор был нужен ВМ, а гипервизор отдал его другим машинам.
- df показывает «полно», du — нет Удалённый, но открытый процессом файл не освобождает место.
- umount: target is busy Что-то держит ФС:
- Порт занят, кто — непонятно sudo lsof -i :PORT -nP или ss -tlnp.
- Процесс «утёк» файловыми дескрипторами sudo lsof -p PID | wc -l — сколько открыто; сравни с лимитом ulimit -n.
- lsof долго думает Резолвит DNS/порты/маунты — добавь -nP, при зависших NFS — может висеть на маунте.
- Служба перезапускается по кругу {#restart-loop} systemctl status — activating (auto-restart) (Result:
- Процесс пропал без единой строки в своём журнале {#silent-death} SIGKILL не даёт программе ничего записать.
- Result=exit-code, status=137 {#exit-code-137} Главный процесс-оболочка успел выйти сам — с кодом 137, когда OOM убил его потомка, — раньше, чем systemd получил событие OOM:
- OOM при свободной памяти {#oom-free-memory} free -h показывает память всей машины, а OOM случился в cgroup.
- OOM убил не того {#wrong-victim} Процесс из строки invoked oom-killer только попросил память в момент нехватки.
- pattern that searches for process name longer than 15 characters Имя процесса обрезано до 15 знаков, и длинный образец не совпадёт ни с чем.
- pgrep -f находит лишний процесс Образец встретился в чужой командной строке — например, у оболочки bash -c, которая сама запускает pgrep -f ….
- pgrep ничего не печатает Ничего не нашлось, код возврата 1.
- pgrep: invalid user name Пользователя с таким именем нет.
- Процесс ест CPU, а в ps у него немного %CPU %CPU в ps — среднее за всю жизнь процесса, а не «сейчас».
- error: user name does not exist ps -u ждёт существующее имя или UID.
- Процесс в списке есть, а kill не помогает Состояние Z — процесс уже завершён, убить его нельзя:
- Командная строка обрезана ps подгоняет вывод под ширину окна.
- Терминал пока не показывает приглашение {#no-prompt} Команда переднего плана ещё выполняется.
- Вместо задержки появилась ошибка {#invalid-duration} Проверь аргумент:
- attach: ptrace(PTRACE_SEIZE, …): Operation not permitted {#attach-denied} ptrace_scope = 1 не даёт подключиться к процессу, который не твой потомок.
- Вывод программы перемешан со strace {#mixed-output} Оба пишут в терминал.
- Строки обрезаны: "hello-wo"... {#truncated} strace показывает 32 символа строки, остальное — ....
- Вызовов потомков нет {#no-children} Работу делает дочерний процесс, а strace без -f его не видит.
- temp-path '.' must be readable and writeable {#temp-path} --hdd пишет файлы в текущий каталог, а в / у ученика нет права записи.
- gave up trying to mmap, no available memory {#no-memory} Полная строка — vm:
- stress-ng работает и не заканчивается {#runs-forever} Забыт --timeout:
- Сообщения note и cpu-method в выводе {#notes} note:
- Load average высокий, а CPU почти свободен В очереди стоят процессы в состоянии D, которые ждут диск.
- free почти ноль — памяти не хватает? Нет, если велики buff/cache и avail Mem:
- Процесс показывает 150 %CPU Процент считается от одного ядра:
- Как выйти из top q.
- В выводе через конвейер мусор и коды терминала Без -b top рисует экран управляющими кодами.
- Too many open files {#emfile} Процесс упёрся в мягкий лимит nofile (код ошибки EMFILE, номер 24):
- cannot modify limit: Operation not permitted {#cannot-modify} Мягкий поднимают выше жёсткого или жёсткий выше текущего без root.
- Поднял в limits.conf, а службе не помогло {#limits-conf-service} limits.conf действует на вход пользователей через PAM.
- systemctl show показывает новый лимит, а служба падает по-старому {#needs-restart} После daemon-reload служба не перезапущена:
- fork: retry: Resource temporarily unavailable {#nproc} Пользователь упёрся в лимит процессов nproc (ulimit -u).
- Permission denied при подключении nginx пишет connect() to unix:/run/app/app.sock failed (13:
- No such file or directory nginx — (2:
- Connection refused, хотя файл на месте Файл остался от остановленного процесса — в ss -xl его нет.
- Address already in use Сервер не может создать сокет:
- PID не является дочерним для этой оболочки {#not-a-child} Проверь место запуска.
- Получен код от неожиданной команды {#overwritten-status} Между ожиданием и чтением $?
- Высокий load, процессор простаивает {#high-load-idle-cpu} Задачи в состоянии D.
- Высокий wa: кто пишет на диск {#high-wa} Без sudo pidstat -d показывает только твои процессы:
- free почти ноль {#low-free} Ядро держит свободную память под кэш страниц и отдаёт её программам по требованию.
- sar печатает только LINUX RESTART {#sar-empty} Сбор истории выключен:
- pidstat ничего не показывает {#pidstat-empty} pidstat печатает только процессы, которые что-то делали за интервал.
- free почти ноль {#low-free} Норма:
- Сервер тормозит, растут si и so {#swapping} Памяти не хватает, ядро гоняет страницы между памятью и swap.
- Процесс завершился, в журнале Killed process {#oom} Память кончилась, и ядро завершило процесс — разбор в oom-killer.
- mkswap или swapon: insecure permissions 0644 {#insecure-permissions} mkswap пишет insecure permissions 0644, fix with:
- swapon failed: Device or resource busy {#busy} Файл уже включён.
- После перезагрузки swap пропал {#swap-after-reboot} swapon действует до перезагрузки.
- swap.img.swap в списке failed {#swap-unit-failed} Для каждой строки swap в fstab systemd делает юнит <путь>.swap.
- vm.swappiness вернулся к 60 {#swappiness-reset} Значение поставили sysctl vm.swappiness=… — оно живёт до перезагрузки.
- Процесс грузит CPU top (или ps aux --sort=-%cpu | head) → найди PID → дождаться / renice / kill.
- Утечка памяти / OOM ps aux --sort=-%mem | head; в журнале — journalctl -k | grep -i oom (ядро убило по нехватке памяти, см.
-
Процесс-зомби (
Z/defunct) Сам безвреден — ждёт, пока родитель его «приберёт» (wait). - kill не убивает (даже -9) Процесс в состоянии D (uninterruptible sleep, ждёт I/O) — kill не поможет, жди завершения I/O или разбирайся с диском/NFS.
- Какой процесс открыл порт/файл Порт — ss -tlnp; файл/каталог — lsof.
- Процесс умер после закрытия SSH По & он привязан к сессии и получает SIGHUP при выходе.
- Вывод фоновой задачи засоряет терминал Перенаправь stdout и stderr:
- Ctrl+Z «завис» процесс Это не убийство — процесс приостановлен (stopped, состояние T).
- Скрипт завершился, а фоновые ещё работают/осиротели Добавь wait в конце, либо trap 'kill 0' EXIT чтобы прибить группу при выходе.
Службы и systemd
- Сервер не отвечает на запросы named-checkconf (нет ли ошибок), служба активна, слушает 53 (ss -tulnp), порт открыт в firewall (53/udp и 53/tcp).
- Изменил зону — старые данные Не увеличил serial в SOA или не перезагрузил (rndc reload).
- SERVFAIL Ошибка в зоне (named-checkzone), битый делегат или DNSSEC.
- Резолвит только локально Проверь allow-query / listen-on в named.conf.options — слушает ли на нужном адресе и пускает ли клиентов.
- 506 Cannot talk to daemon {#cannot-talk} chronyd не запущен:
- 501 Not authorised {#not-authorised} Команды, которые меняют состояние службы — makestep, burst, reload sources, — даются от root:
- В sources пусто {#no-sources} Имя сервера не разрешается:
- Источник ^? {#unreachable} Сервер не ответил ни разу (Reach 0):
- Leap status: Not synchronised {#not-synchronised} Годного источника нет:
- Часы перевёл руками, а они вернулись {#clock-reverted} chronyd возвращает время к источнику шагом, как в разделе chrony.
- timedatectl timesync-status: Failed to query server {#timedatectl} timesync-status спрашивает systemd-timesyncd, а его удалила установка chrony.
- cron-задача не выполняется У cron скудный $PATH и нет окружения интерактивной сессии (алиасов, переменных из ~/.bashrc) — указывай абсолютные пути к командам и файлам, не полагайся на…
- Таймер не сработал, пока машина была выключена Добавь Persistent=true — выполнит пропущенный запуск после включения.
- Не знаю, когда следующий запуск systemctl list-timers --all покажет все таймеры, включая неактивные, вместе с временем последнего и следующего запуска.
- Задача из crontab пользователя не видна в system crontab crontab -e редактирует crontab текущего пользователя (хранится в /var/spool/cron/crontabs/) — отдельно от системных файлов /etc/crontab и /etc/cron.d/*, у…
- Клиенты не получают адрес Сервис слушает нужный интерфейс (INTERFACESv4)?
- Конфликт адресов / два DHCP в сети Два сервера выдают из пересекающихся пулов.
- Резервация по MAC не срабатывает Точный MAC (hardware ethernet) и адрес вне динамического range.
- Panel: «No data» Источник проходит Save & Test?
- Data source: bad gateway / connection refused Grafana не достучалась до источника.
- Забыл пароль admin sudo grafana-cli admin reset-admin-password <новый-пароль> (или переменная окружения при старте).
- Дашборд пропал после переразвёртывания Если не provisioning — дашборды в БД (/var/lib/grafana/grafana.db).
- 502 за обратным прокси Если Grafana за nginx/haproxy на под-пути — задай root_url и serve_from_sub_path в grafana.ini, иначе ломаются ссылки/логин.
- 503 Service Unavailable Нет «живых» бэкендов:
- Все запросы идут на один сервер balance не задан или включена cookie/source-липкость.
- Не применяется конфиг haproxy -c -f ...
- Не вижу реальный IP клиента на бэкенде Добавь option forwardfor и читай X-Forwarded-For на бэкенде/nginx (real_ip).
- Таймауты / обрывы под нагрузкой Настрой timeout connect/client/server в defaults и maxconn.
- sudo долго думает после смены имени Новое имя не резолвится локально.
- Имя «вернулось» после ребута Его переустанавливает cloud-init или DHCP.
-
hostname -fне даёт FQDN Нет записи с доменом в /etc/hosts/DNS. - machine-id одинаковый на клонах ВМ При клонировании образа machine-id должен быть уникален (иначе путаются DHCP-лизы, журналы).
- VIP на обоих узлах одновременно (split-brain) Узлы не видят VRRP-объявления друг друга.
- VIP не переезжает при падении приложения Нет track_script — VIP держится, пока жив узел, даже если сервис умер.
- VIP «скачет» туда-сюда (flapping) Слишком чувствительный vrrp_script или восстановившийся MASTER отбирает VIP.
- Конфликт virtual_router_id В одном L2-сегменте virtual_router_id уникален на группу; совпадение с чужой группой ломает выборы.
- Где сейчас VIP / что происходит ip a на каждом узле (VIP виден только на MASTER), journalctl -u keepalived — переходы состояний (см.
- virsh: failed to connect to the hypervisor libvirtd не запущен (systemctl status libvirtd) или нет прав — пользователь должен быть в группе libvirt.
- ВМ не стартует virsh start vm1 печатает ошибку; подробности — journalctl -u libvirtd и логи /var/log/libvirt/qemu/vm1.log.
- Нет сети у ВМ Виртуальная сеть не запущена:
- Не зайти в ВМ virsh console vm1 (нужен включённый serial в гостевой ОС) — выход Ctrl+].
- Отвечает чужой сайт {#wrong-site} Host запроса не совпал ни с одним server_name — ответил сервер по умолчанию.
- 404 Not Found {#not-found} В error.log — путь, который собрал nginx:
- 403 Forbidden (13:
- 502 Bad Gateway {#bad-gateway} nginx не открыл соединение с бэкендом.
- 504 Gateway Time-out {#gateway-timeout} Соединение есть, ответа нет:
- nginx -t: test failed unexpected "}" in …:5 — в строке перед } нет ;; a duplicate default server for 0.0.0.0:80 — default_server стоит в двух блоках одного порта; open()…
- conflicting server name {#conflicting-server-name} [warn] conflicting server name "docs.lab.test" on 0.0.0.0:80, ignored — одно имя стоит в двух блоках одного порта.
- key values mismatch {#key-mismatch} SSL_CTX_use_PrivateKey(…) failed (… key values mismatch) — первый сертификат в файле ssl_certificate не пара ключу.
- Новый сертификат не виден {#reload} nginx читает сертификаты при старте и reload.
- Служба не стартует: порт занят sudo ss -tlnp | grep ':80 ' покажет, кто держит порт.
- Новый listen не применился {#listen-change} Смена адреса на том же порту (listen 80 → listen 127.0.0.1:80) через reload не проходит:
- Письма не уходят / висят в очереди mailq покажет причину рядом с каждым письмом.
- Relay access denied Postfix не пересылает чужую почту (anti-relay).
- Письма попадают в спам Нужны SPF/DKIM/DMARC-записи в DNS и корректный PTR (rDNS).
- Поменял map, а не применилось После правки sasl_passwd/transport/virtual всегда postmap файл (пересобрать .db) и reload.
- Connection refused на 25 Слушает только localhost (inet_interfaces = loopback-only) или порт закрыт (firewall).
- Connection refused {#connection-refused} connection to server at "127.0.0.1", port 5432 failed:
- no pg_hba.conf entry {#no-pg-hba-entry} FATAL:
- password authentication failed {#password-failed} Правило нашлось, пароль не подошёл.
- Peer authentication failed {#peer-failed} psql -U appuser без -h идёт через сокет, а там правило peer:
- Правка pg_hba.conf не действует {#hba-not-reloaded} Файл не перечитан или перечитан с ошибкой — тогда работают старые правила, а pg_reload_conf() всё равно возвращает t.
- pg_restore: relation "…" already exists {#restore-errors} Восстановление в базу, где объекты уже есть:
- input file appears to be a text format dump {#text-format-dump} pg_restore получил простой SQL — восстанавливай его psql -f.
- Таргет DOWN Открой /targets — там причина (connection refused / timeout / 404).
- Нет данных по метрике Проверь имя метрики и лейблы в UI (autocomplete).
- Prometheus ест диск Ретеншн и количество рядов.
- Алерты не приходят Проверь правила (promtool check rules), связь с Alertmanager и его маршруты.
- Could not connect to Redis (6379) Служба не запущена (systemctl status redis-server) или слушает только 127.0.0.1, а клиент идёт по сети.
- OOM / выросло потребление памяти redis-cli info memory, --bigkeys.
- Данные пропали после рестарта По умолчанию данные только в памяти.
- Тормозит / высокая задержка redis-cli --latency, slowlog get.
- NOAUTH Authentication required Задан requirepass — подключайся redis-cli -a СЕКРЕТ или AUTH первой командой.
- NT_STATUS_LOGON_FAILURE Неверный SMB-пароль/пользователь.
- NT_STATUS_ACCESS_DENIED Системные права на каталог (path) или valid users/read only в smb.conf.
- Не видно сервера/шары Порт SMB 445/tcp закрыт (firewall) или служба не запущена.
- Mount: «host is down» / protocol negotiation failed Несовпадение версии SMB.
- Кириллица/права в именах файлов unix charset = UTF-8; права новых файлов — create mask/directory mask, force user/force group для единого владельца.
-
is-activeврёт после ручного запуска бинарника systemctl видит только то, что запущено им самим. - Изменения в юните не применяются После правки .service нужен sudo systemctl daemon-reload, затем restart.
- Служба «activating» и висит Смотри Type= в юните и journalctl -xeu <unit>:
- Служба «не стартует и не пишет почему» sudo systemctl status -l --no-pager <unit> + sudo journalctl -u <unit> -b (за текущую загрузку).
- Warning: some journal files were not opened due to insufficient permissions. systemctl status показал состояние службы, но без строк журнала.
- Вывод открылся в пейджере, приглашения нет Длинный вывод status, cat, list-units не помещается в окно терминала, и systemctl показывает его через less:
- enable не работает — «no installed section» В юните нет [Install].
- Служба не стартует systemctl status <unit> — код выхода и последние строки журнала.
- «Unit not found» Проверь имя и путь:
- Долгая загрузка systemd-analyze critical-chain — кто держал загрузку; порядок разбора — systemd-analyze.
- Время «уехало», логи/сертификаты странные timedatectl → System clock synchronized:
- Failed to set time: Automatic time synchronization is enabled {#set-time} Сначала выключи автосинхронизацию:
-
Разное время в логах и
dateЛоги часто в UTC, а date — в локальной зоне. - Часы «прыгают» после ребута RTC в неверном режиме (set-local-rtc).
- В контейнере неверная зона Таймзона хоста ≠ контейнера; задаётся переменной TZ или монтированием /etc/localtime.
- Служба «упала», а systemctl status показывает active Возможно, ты смотришь другую службу или переименованный юнит (алиасы, .socket вместо .service).
- enable не запустил службу сейчас enable только ставит автозапуск на будущее (создаёт симлинк).
- Служба перезапускается сама по себе (restart loop) Значит она падает после старта, а systemd настроен её перезапускать (Restart= в unit-файле).
- Warning: some journal files were not opened due to insufficient permissions. Строки журнала в systemctl status видны только с sudo или пользователю из групп adm и systemd-journal.
- Не понимаю разницу между «служба», «демон» и «юнит» Демон — фоновый процесс в общем смысле (термин старше systemd).
- Руками работает, по таймеру — нет {#works-by-hand} Дело почти всегда в окружении службы (раздел «Окружение службы» выше).
- Job for clean.service failed {#job-failed} Скрипт вернул не 0.
- Таймер есть, а задача не запускается {#not-firing} systemctl list-timers --all:
- Refusing to start, unit … to trigger not loaded {#no-service} Таймеру не на что указывать:
- Failed to parse calendar specification {#bad-calendar} Ошибка в OnCalendar=, таймер не запустится.
- Warning: The unit file … changed on disk {#daemon-reload} Файл юнита поправлен, а systemd работает по старой версии — и старому расписанию.
- The unit files have no installation config {#no-install} enable вызван для службы.
- Таймер сработал один раз, дальше — тишина {#remain-after-exit} В службе стоит RemainAfterExit=yes.
Сеть
- nf_conntrack: table full, dropping packet Таблица переполнена (нагруженный шлюз/NAT) — новые соединения дропаются.
- NAT/проброс работает «через раз» conntrack -L — есть ли запись о соединении и в каком состоянии.
- Соединение «залипло» после смены правил файрвола Существующие соединения уже в таблице (ESTABLISHED) и проходят мимо новых правил.
-
Высокий
insert_failedвconntrack -SГонки/переполнение при большом числе одновременных коннектов; смотри лимит и таймауты (/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_*). - Где видно текущие соединения без conntrack Локальные сокеты приложений — ss; именно tracking ядра (для NAT/файрвола) — conntrack -L.
- curl: (7) Failed to connect … Couldn't connect to server На адресе и порту никто не слушает или соединение режет файрвол.
- curl: (6) Could not resolve host Имя не нашлось:
- curl: (60) SSL certificate problem Сертификат не прошёл одну из трёх проверок:
- curl: (35) … wrong version number https:// ушёл на порт, где сервер говорит обычным HTTP.
- Код 0, а сайт отвечает ошибкой Без -f ответ 404 или 502 — нормальный ответ для curl.
- curl: (52) Empty reply from server Соединение открылось, но сервер закрыл его без ответа:
- Пингуется IP, но не имена DNS не работает.
- Имя резолвится не в тот IP Запись в /etc/hosts перебивает DNS — проверь его (getent hosts имя).
- resolv.conf затирается после ребута Не правь /etc/resolv.conf напрямую (это симлинк на resolved).
- Внутренние имена не резолвятся, внешние — да Нет search-домена или нужного DNS для внутренней зоны.
-
digработает, а приложение «не находит» хост dig ходит в DNS мимо NSS. - «Сеть медленная» на физическом уровне sudo ethtool eth0 → Speed и Duplex.
- Растут ошибки/дропы ethtool -S eth0 → rx_errors, rx_dropped, rx_crc_errors.
- Не знаю, какой порт физически sudo ethtool -p eth0 10 — помигает светодиодом порта 10 секунд.
- Скорость «прыгает» / half-duplex Проблема автосогласования с коммутатором.
- Странные задержки/таймауты под нагрузкой Иногда виноват offload (GRO/TSO) с конкретным драйвером.
- 400 Bad Request Запрос не по правилам HTTP.
- 403 Forbidden Сервер понял запрос и отказал.
- 404 Not Found Файла нет по пути, который собрал сервер.
- 405 Not Allowed Метод не подходит ресурсу:
- 413 Request Entity Too Large Тело запроса больше разрешённого.
- 502 Bad Gateway, 504 Gateway Timeout Ответ прокси:
- Ответ 301, а ждёшь 200 Сервер отправляет на адрес из заголовка Location.
- curl: (35) … wrong version number Обратная ошибка к 400 … sent to HTTPS port:
- curl: (7) Failed to connect … Couldn't connect to server Ответа HTTP нет:
-
Нет адреса (
ip -br aпусто/down) Интерфейс down (sudo ip link set <if> up) или не отработал DHCP/netplan (sudo netplan apply, journalctl -u systemd-networkd). -
NO-CARRIERвip -br lНет физического линка: - Есть адрес, но «Network is unreachable» Нет маршрута по умолчанию:
- Два интерфейса, трафик идёт «не туда» ip route get <IP> покажет реальный выбор.
- Пингуется IP, но не имена Это уже DNS, а не ip:
- «Доступен ли порт отсюда?» nc -zvw3 host port.
- Порт открыт локально, но не снаружи С сервера nc -zv 127.0.0.1 8080 — слушает ли.
- Нужно быстро проверить L4-связность между хостами nc -l 8080 на одной стороне, nc -zv host 8080 с другой — проходит ли TCP/UDP именно по этому порту (полезно при отладке файрвола).
- nc «висит» Без -w соединение может ждать вечно.
- Host seems down {#host-down} Узел не ответил на пробы обнаружения:
- Порт closed, а служба запущена {#closed-but-running} Служба слушает другой адрес.
- Порт filtered, хотя правила нет {#filtered} Пакеты отбрасывает политика цепочки (policy drop) или правило в другой таблице — sudo nft list ruleset покажет все таблицы, в том числе fail2ban и Docker.
- You requested a scan type which requires root privileges {#needs-root} SYN-скан, UDP (-sU) и определение ОС шлют сырые пакеты.
- ping: connect: Network is unreachable Маршрута к адресу нет:
- Temporary failure in name resolution Имя не превратилось в адрес:
- 100% packet loss, хотя узел точно работает ICMP режет межсетевой экран — на узле или по пути.
- ping не заканчивается Нет -c:
- Потери 10–30 %, ответы с большим разбросом Путь перегружен или нестабилен.
- «Address already in use» при старте службы Порт уже занят.
- Служба запущена, но снаружи недоступна Слушает ли вообще:
- Растёт число сокетов в CLOSE-WAIT Приложение не закрывает соединения (утечка дескрипторов) — рано или поздно упрётся в ulimit.
- Много TIME-WAIT Норма при большом числе коротких клиентских соединений; обычно не проблема.
- Непонятно, что за процесс держит соединение ss -tnp покажет users:(("nginx",pid=1234,...)).
- Permission denied (publickey) Ключа нет на сервере или права на клиенте/сервере неверные.
- Host key verification failed Ключ хоста изменился (переустановка/смена IP).
- Connection timed out vs refused timed out — не дошли (файрвол/маршрут/не та сеть); refused — дошли, но порт закрыт (sshd не запущен / другой порт).
- Сессия рвётся по таймауту ServerAliveInterval 60 в конфиге клиента.
- ssh всё равно спрашивает про new host key Хешированное имя в known_hosts (-H) не совпадёт, если подключаешься по другому имени/алиасу или порту, — known_hosts привязан к конкретной паре хост:порт.
- После переустановки сервера ssh ругается на «REMOTE HOST IDENTIFICATION HAS CHANGED» Это ожидаемо:
- Пустой вывод / таймаут Хост недоступен по SSH-порту (упал, фаервол, не тот порт — проверь -p) или DNS не резолвит имя.
- Permission denied (publickey) Публичный ключ есть в ~/.ssh/authorized_keys на сервере?
- Каждый раз спрашивает пароль к ключу Ключ не в агенте:
- Сервер вообще не принимает ключи На сервере в sshd_config:
- Несколько ключей — подходит не тот / «Too many authentication failures» Агент перебирает все ключи и упирается в лимит.
- Потерял приватный ключ Восстановить нельзя — генерируй новый и обнови authorized_keys на серверах.
- «Доходит ли запрос до сервера?» На сервере sudo tcpdump -ni any port 80, сделай запрос с клиента.
- Видно SYN, но нет SYN-ACK Пакеты приходят, но сервер не отвечает:
- Виден SYN-ACK, но соединение не встаёт Асимметричный маршрут или файрвол на обратном пути/у клиента.
- Слишком много вывода Сузь фильтром (host/port), ограничь -c N, исключи свою сессию (not port 22), пиши в .pcap и разбирай в Wireshark.
- Нет прав / нет интерфейса tcpdump требует root (доступ к сырым сокетам).
- Bond есть, но трафик идёт по одной карте Это нормально для active-backup (вторая — резерв).
- VLAN не работает Тег id должен совпадать с настройкой порта коммутатора (trunk с этим VLAN).
- После netplan apply пропала сеть Опечатка/неверный link.
- Линк «флапает» в бонде cat /proc/net/bonding/bond0 покажет, какой слейв падает; проверь кабель/порт (ethtool).
- Сменил режим бонда, и сеть пропала совсем Порт коммутатора настроен под старый режим.
- ERROR: cannot verify ... certificate Проблема с TLS-сертификатом/цепочкой.
- Скачивание оборвалось wget -c URL докачает с места обрыва, если сервер поддерживает Range.
- Получил HTML вместо файла Ссылка ведёт на страницу/редирект/логин, а не на файл.
- Качается бесконечно / зеркалит лишнее У рекурсии -r без -np/-l нет тормозов.
- Медленно/упирается в канал --limit-rate= чтобы не забить канал; -q чтобы не засорять лог скрипта.
- Пустой/скудный ответ по домену Данные скрыты privacy-защитой (GDPR/WHOIS privacy).
- Ответ «обрезан» или редирект на другой сервер Верхнеуровневый whois отсылает к регистратору/реестру.
- Хочу понять, откуда атака, и заблокировать сеть whois 1.2.3.4 → abuse/OrgAbuseEmail (жалоба), NetRange/CIDR (весь блок — для блокировки в firewall).
- whois тормозит/таймаут Реестр лимитирует частоту запросов.
- ping IP идёт, ping имени — нет Сеть работает, DNS не работает.
- Не пингуется даже шлюз Локальная проблема:
- Пинг идёт, но сервис недоступен ICMP проходит, а нужный порт — нет.
- Потери/высокий пинг в середине пути mtr -rwc 20 покажет, на каком хопе растут потери.
- ICMP заблокирован — ping не показателен Многие хосты не отвечают на ping намеренно.
- «Работает через раз» Перемежающиеся потери:
- Cannot find device "lab0" Команда выполняется не в том пространстве.
- Cannot open network namespace: No such file or directory Пространства с таким именем нет.
- RTNETLINK answers: File exists Интерфейс или адрес с таким именем уже есть.
- Интерфейс UP, а ping не идёт Проверь второй конец:
- Operation not permitted Пространства имён меняет и просматривает изнутри только root.
- Маршрут пропал после перезагрузки {#route-lost} Его добавили командой ip route add, а в файлах /etc/netplan/ его нет.
- После apply пропал доступ по сети Ошибка в конфиге:
- netplan apply: ничего не изменилось Проверь синтаксис (sudo netplan generate покажет ошибку и файл), правильный ли файл правился и совпадает ли имя интерфейса (ip -br a) с тем, что указано в YAML.
- Нет DNS после настройки Добавь блок nameservers:
- netplan get показывает не то, что видно в системе netplan get читает только файлы /etc/netplan/, не реальное состояние интерфейсов.
Хранилище и ФС
- blkid ничего не выводит На устройстве нет ни файловой системы, ни таблицы разделов — новый диск.
- В выводе только PARTLABEL и PARTUUID Раздел есть в таблице, а файловой системы на нём нет:
- UUID в fstab не находится После повторного mkfs у ФС новый UUID.
- У двух разделов одинаковый UUID Раздел скопировали целиком (dd, клон диска).
- В fstab записан PARTUUID вместо UUID Обе строки рабочие, но это разные значения:
- Error: /dev/vdb: unrecognised disk label На диске ещё нет таблицы разделов — обычное состояние нового диска:
- mount: wrong fs type, bad option, bad superblock Монтируют диск или раздел, на котором нет файловой системы.
- Раздел создан, но /dev/vdb1 нет Ядро не перечитало таблицу:
- The kernel still uses the old table fdisk записал таблицу, но ядро держит прежнюю:
- Warning: The resulting partition is not properly aligned Начало раздела задано в секторах или байтах не кратно блокам диска.
- failed to set up loop device: Permission denied losetup:
- Раздела /dev/loop0p1 нет Устройство подключено без -P, и ядро не читало таблицу.
- losetup: cannot find an unused loop device Свободных устройств нет:
- Файл удалён, а место не вернулось Файл ещё подключён к loop-устройству.
- losetup -d не отключил устройство Устройство смонтировано.
- Диск подключили, а в lsblk его нет lsblk не сканирует шину заново — ядро уже должно увидеть устройство.
- Устройство есть в lsblk, но не смонтировано lsblk -f с пустой колонкой MOUNTPOINT — раздел существует, но не смонтирован и/или не в /etc/fstab.
- Имя устройства «плавает» между перезагрузками /dev/sdX может смениться при перестановке дисков.
- contains a ext4 file system … Proceed anyway? (y,N) На разделе уже есть файловая система, и mkfs.ext4 переспрашивает.
- /dev/vdb1 is mounted; will not make a filesystem here! Раздел смонтирован, на нём работают.
- appears to contain an existing filesystem (mkfs.xfs) mkfs.xfs нашёл чужую файловую систему и отказался.
- The file /dev/vdb1 does not exist and no size was specified Раздела нет:
- После mkfs раздел не монтируется по fstab mkfs выдал новый UUID, а в fstab остался старый.
- mkfs на весь диск вместо раздела mkfs.ext4 /dev/vdb (без цифры) создаёт ФС на всём диске поверх таблицы разделов.
- Образ занимает больше, чем должен qcow2 не ужимается сам после удаления данных внутри.
- Backing file has changed / overlay сломался overlay жёстко привязан к backing-образу.
- Расширил диск, а места в ВМ не прибавилось qemu-img resize меняет только контейнер.
- Нельзя менять смонтированный/используемый образ Образ запущенной ВМ не трогай qemu-img'ом — повредишь.
- Образ «битый» после сбоя qemu-img check disk.qcow2 (и -r all попытаться починить).
- xfs_growfs: «specified file is not on device» Передал имя устройства (/dev/labvg/data) вместо точки монтирования.
-
После lvextend
df -hне показал новый размер Том вырос, а файловая система — ещё нет: - resize2fs: «New size smaller than minimum» Целевой размер меньше, чем занимают данные на ФС.
- Расширение зависло или ругается на место Свободное место нужно на уровне тома группы, а не только лог.
- setquota: не работает / «not found» ФС смонтирована без usrquota/grpquota — проверь mount | grep -i quota.
- Пользователь упёрся в лимит quota -u user / repquota покажут текущее и потолок.
- Квоты «слетели» после ребута quotaon не выполняется сам — убедись, что опции в /etc/fstab и юнит quotaon включён (на ext).
- quotacheck требует отмонтировать Лучше считать на спокойной/ro ФС.
- Расширил LV, а место не появилось LV — не ФС.
- vgs показывает мало свободного (VFree=0) Группа заполнена — добавь PV:
- Снапшот «переполнился» и стал невалидным Снапшот хранит изменения; если исходный том активно пишется и снапшот мал — он переполняется (lvs покажет 100%).
- Не вижу том после ребута sudo vgchange -ay (активировать), проверь автоактивацию и /etc/fstab (монтируй по /dev/<vg>/<lv> или UUID).
- Случайно lvremove не того тома Данные теряются.
- df говорит «полно», а du не находит столько Файл удалён, но открыт процессом — место не освобождается до закрытия:
-
No space left on device, хотя
df -hпоказывает свободное Кончились inode: - Диск забили логи du -sh /var/log/*; настрой ротацию (logrotate) и журнал (journalctl --vacuum-time=, см.
- Удалил файлы, а место не вернулось Либо удалённый-но-открытый файл (см.
- wrong fs type, bad option, bad superblock {#wrong-fs-type} mount отвечает wrong fs type, bad option, bad superblock on /dev/vdb, missing codepage or helper program, or other error и советует заглянуть в dmesg.
- your fstab has been modified, but systemd still uses the old version {#daemon-reload} Подсказка mount после правки fstab:
- target is busy при umount ФС используется.
- Ошибка в fstab → система не загрузилась Неверная строка может уронить загрузку в emergency-режим.
- Смонтировал, но место не там, где ждал Если в точке монтирования уже были файлы — они «спрятаны» под смонтированной ФС (не удалены).
- Сетевая ФС вешает загрузку Без _netdev система ждёт ФС до сети.
- Не та ФС/устройство Имена /dev/sdX «плавают» между ребутами — монтируй по UUID (blkid), не по /dev/sdX.
- Массив degraded ([_U]) Диск выпал.
- Не собирается после ребута Конфиг не сохранён.
- Ребилд идёт вечно/медленно Нормально для больших дисков (часы).
- RAID — не бэкап! RAID спасает от отказа диска, но не от удаления/шифровальщика/ошибки.
- Диск был в старом массиве, не даёт пересоздать Остались метаданные:
- mount.nfs: access denied by server IP клиента не подходит под маску в /etc/exports, или после правки не сделали exportfs -ra.
- Права/владельцы «не те» на смонтированном NFS сопоставляет по UID/GID — у клиента и сервера они должны совпадать (или настрой idmapping для NFSv4).
- Connection timed out / mount висит Файрвол или служба.
- Зависание процессов при недоступном сервере (D-состояние) «Жёсткое» (hard, по умолчанию) монтирование вешает процессы намертво.
- Stale file handle Экспорт пересоздали/ФС перемонтировали на сервере.
- Ошибка ext4, ФС ушла в read-only {#ext4-errors} ext4 нашла повреждение и записала в журнал ядра EXT4-fs error (см.
- Не могу уменьшить xfs xfs не уменьшается в принципе.
- «Structure needs cleaning» (xfs) Повреждение:
- На большом диске «не хватает места» при свободном 5% зарезервировано для root по умолчанию.
- После клонирования два раздела с одним UUID Смени один:
Логи и аудит
- Журнал пустой после ребута journald не persistent.
- Диск забит журналом journalctl --disk-usage, затем --vacuum-time=7d или --vacuum-size=500M.
- Нужны логи конкретного сбоя journalctl -xeu <unit> --since "5 min ago" — самый частый диагностический запрос (см.
- Время в журнале «не то» journald пишет в UTC внутри, показывает в локальной TZ.
- Логи службы идут и в /var/log (дубли) journald + rsyslog могут дублировать.
- Лог не пишется Служба активна (systemctl status rsyslog)?
- Логи растут, забивают диск Ротация — это logrotate (rsyslog сам не чистит).
- Не приходят логи на центральный сервер На приёмнике включён модуль приёма (imtcp/imudp, порт 514) и открыт порт (firewall, nc -zv host 514).
- Дубли строк / «logged twice» journald пересылает в rsyslog (imjournal) и тот же facility пишется в несколько файлов.
- journald vs rsyslog — где смотреть Структурный поиск по службам — journalctl (-u, _COMM=); привычные текстовые файлы и пересылка — /var/log/* (rsyslog).
- Лог растёт, ротации нет Конфиг в /etc/logrotate.d/?
- После ротации служба пишет в старый (удалённый) файл Нет postrotate с reload или copytruncate.
- «error: skipping … because parent directory has insecure permissions» logrotate ругается на права/владельца каталога логов.
- Диск уже забит логами Срочно:
Загрузка
- user-data не применился Первая строка ровно #cloud-config (без пробелов/BOM), валидный YAML (cloud-init schema --system).
- Пакеты не поставились / runcmd не отработал /var/log/cloud-init-output.log — вывод команд и ошибки (нет сети для apt?
- Не зайти по SSH после провижена Ключ не попал нужному пользователю или сеть (netplan) не поднялась.
- Hostname/сеть «возвращаются» к дефолту cloud-init переустанавливает их на каждом boot, если не отключить:
- Отключить cloud-init совсем sudo touch /etc/cloud/cloud-init.disabled (или удалить пакет).
- read kernel buffer failed: Operation not permitted {#not-permitted} kernel.dmesg_restrict = 1:
- journalctl -k печатает -- No entries -- {#no-entries} Без sudo пользователь вне групп adm и systemd-journal видит только свои записи.
- Буфер начинается не с загрузки или пуст {#buffer-wrapped} Буфер переполнился и старые строки вытеснены, или его очистили (dmesg -C).
- No journal boot entry found {#no-previous-boot} Прошлой загрузки в журнале нет:
- Время в dmesg -T и в журнале расходится {#time-mismatch} -T считает время от момента загрузки и не учитывает сон машины.
- Поменял, а после перезагрузки сбросилось {#reset-after-reboot} sysctl -w и запись в /proc/sys живут до перезагрузки.
- permission denied on key, а значение напечатано {#no-sudo} Без sudo sysctl печатает строку с новым значением и код 0, но значение не меняет.
- Файл в sysctl.d не применяется {#file-ignored} Имя кончается не на .conf — файл пропущен молча.
- cannot stat /proc/sys/…: No such file or directory {#cannot-stat} Ответ — sysctl:
- invalid syntax, continuing {#invalid-syntax} В командной строке имя=значение пишется без пробелов.
- Форвардинг включил, а пакеты не идут {#forwarding} Кроме net.ipv4.ip_forward = 1 нужны маршруты (ip) и разрешающие правила файрвола, для NAT — правило маскарадинга.
- Bootup is not yet finished {#not-finished} Загрузка ещё идёт:
- Убрал первую строку blame, а загрузка не ускорилась {#blame-misleads} blame показывает, сколько запускался каждый юнит, но не кто кого ждал.
- verify молчит, а служба не стартует {#verify-silent} Опечатка в имени ключа или неверное значение дают код 0 — читай вывод.
- Unit … not found {#unit-not-found} Requires= или Wants= называет юнит, которого нет:
- Transaction order is cyclic {#ordering-cycle} Юниты ждут друг друга через After=.
- Система не загружается до конца В GRUB выбери предыдущее ядро (Advanced) — грузится → проблема в новом ядре.
- Завис на загрузке из-за fstab Ошибка в /etc/fstab роняет в emergency.
- Долгая загрузка systemd-analyze blame + critical-chain — какие юниты тормозят (часто зависший сетевой/монтирование с таймаутом, NetworkManager-wait-online).
- Забыл root-пароль GRUB → e → добавить init=/bin/bash к строке ядра → загрузиться → mount -o remount,rw / → passwd → exec /sbin/init или ребут.
- initramfs prompt после обновления ядра Не найден корень/модуль.
- Устройство/драйвер не работает dmesg | grep -i <устройство> — ошибки инициализации.
- OOM-killer убил процесс dmesg -T | grep -i oom или journalctl -k | grep -i oom — ядро убило процесс при нехватке памяти (см.
- Модуль не грузится при старте Добавь в /etc/modules-load.d/*.conf; проверь modinfo и зависимости (depmod -a).
- modprobe -r: «Module is in use» Модуль используется (lsmod — колонка «Used by»).
- Диск сыпет I/O errors dmesg → «I/O error, dev sdX» — признак умирающего диска; проверь SMART (smartctl -a), делай бэкап (см.
- You are in emergency mode {#emergency-mode} Загрузку остановила зависимость local-fs.target:
- Служба работает, а после перезагрузки не запущена {#not-enabled} Её не включили:
- Служба стартует раньше сети и падает {#before-network} В юните нет After=network-online.target или есть только After=network.target.
- Dependency failed for … {#dependency-failed} Юнит с Requires= (или BindsTo=) не стартовал, потому что не запустилась его зависимость.
- is-system-running: degraded {#degraded} Загрузка закончилась, но какой-то юнит упал.
- uname -r показывает старую версию после apt upgrade Обновление ядра ставит новые файлы, но работает всё ещё старое, пока не случится перезагрузка.
- Не понимаю разницы между ядром и дистрибутивом Ядро — один процесс и набор драйверов; дистрибутив — ядро плюс системные утилиты, пакетный менеджер и настройки (см.
- Не грузится нужный драйвер Это почти всегда про модуль ядра, а не про ядро целиком — смотри kernel-modules:
- Хочу изменить поведение ядра без перезагрузки Часть параметров меняется на лету через sysctl (см.
Пакеты
- «Could not get lock /var/lib/dpkg/lock» Уже запущен apt/unattended-upgrades.
- dpkg прервался, «broken packages»
- apt update: NO_PUBKEY / 404 / repository changed Битый/устаревший источник в sources.list.d/.
- Конкретная версия / откат apt-cache policy PKG — что доступно; apt install pkg=версия; зафиксировать — apt-mark hold.
- Освободить место от кэша sudo apt clean (весь кэш) / autoclean (только устаревшее); autoremove --purge (см.
- Пакет ставится медленно/много весит Snap несёт зависимости с собой (тяжелее apt) — это нормально.
- Snap не видит файлы вне $HOME Песочница (confinement) ограничивает доступ.
- Обновился и сломался sudo snap revert package — откат к прошлой версии (snap её хранит).
- Хочу понять, apt это или snap which cmd, snap list | grep cmd, dpkg -S $(which cmd) (см.
- Старые ревизии занимают место snap хранит прошлые ревизии.
Безопасность
- «Permission denied», а права (rwx) верные Блокирует AppArmor.
- Служба работает, но не может в новый каталог Профиль не разрешает путь.
- Профиль не перечитывается после правки sudo apparmor_parser -r <профиль> (или reload apparmor).
- Хочу временно отключить для одной службы sudo aa-complain <профиль> (мягко) или aa-disable.
- snap-приложение и AppArmor Snap использует свои профили (confinement); отказы тоже видны в journalctl -k (см.
- Кто изменил важный файл? Поставь watch (auditctl -w файл -p wa -k метка), затем ausearch -k метка -i → uid/команда/время.
- Слишком много событий / шум / потери (lost) auditctl -s покажет lost/backlog.
- Правила пропали после ребута auditctl -w/-a временно.
- Не могу изменить/удалить правила Включён immutable-режим (-e 2) — правила залочены до перезагрузки (это by design для защиты от подмены).
- auditd vs journald journald — операционные логи служб (journalctl); auditd — кто-что-сделал для безопасности (неизменяемый след).
- Отказы AppArmor пропали из journalctl -k {#apparmor-denials} Пока auditd работает, сообщения аудита ядра, в том числе apparmor="DENIED", уходят ему и пишутся в /var/log/audit/audit.log (type=AVC), а в journalctl -k новых…
- Permission denied на порту ниже 1024 {#bind-denied} PermissionError:
- unable to set CAP_SETFCAP effective capability {#setfcap} setcap запущен без sudo:
- fatal error: Invalid argument {#invalid-argument} setcap не понял имя части или файл.
- Часть пропала после копирования или обновления {#lost} getcap ничего не печатает, программа снова получает Permission denied.
- Root получает Operation not permitted {#root-denied} Процесс работает от UID 0, а ядро отказывает.
- Забанил сам себя С консоли (гипервизор/serial) или с разрешённого IP:
- Jail не банит enabled = true?
- Адрес не банится: Ignore by ip {#ignoreip} Адрес попал в ignoreip:
- Банит, но атака продолжается с других IP Это распределённый брутфорс.
- Не уверен, работает ли вообще fail2ban-client status sshd → Total/Currently failed и banned.
- gpg: decryption failed: No secret key Нет приватного ключа для этого получателя (шифровали не на твой ключ) или ключ не импортирован.
- Can't check signature: No public key Нет публичного ключа автора.
- Забыл пароль приватного ключа Восстановить нельзя.
- Inappropriate ioctl for device (в скриптах/CI) GPG не может спросить пароль (нет TTY).
- WARNING: ... not certified with a trusted signature Ключ импортирован, но не доверен.
- Пароль 123 принимается {#weak-password-accepted} grep pwquality /etc/pam.d/common-password пуст — модуля в стеке нет:
- BAD PASSWORD при смене пароля {#bad-password} Причина — в тексте после двоеточия:
- The account is locked due to N failed logins {#account-locked} pam_faillock насчитал deny неудач за fail_interval.
- Неудач много, а блокировки нет {#no-lockout} Строк pam_faillock нет в common-auth или стоят не там:
- pam-auth-update: Local modifications {#local-modifications} common-* правили руками, и pam-auth-update отказывается их пересобирать — профиль не включается.
- Permission denied (publickey) Права на сервере:
- Connection refused Сервер не слушает порт:
- Connection timed out Сетевой/файрвол-уровень (не дошёл до sshd):
- Сменил порт — не пускает SELinux/порт не разрешён, файрвол на старом порту, или клиент идёт на 22.
- Заблокировал себя сменой конфига Зайди через консоль гипервизора/serial и откати sshd_config (или sshd -t показал бы ошибку до reload — всегда проверяй).
- user is not in the sudoers file Пользователя нет в группе sudo.
- sudo: a terminal is required to read the password Нет TTY (по SSH без -t или из скрипта).
- NOPASSWD не срабатывает для смены пользователя (root) NOPASSWD:
- Команда работает руками, но не через sudo (PATH/env) env_reset/secure_path чистят окружение.
- Сломал sudoers, потерял доступ visudo не даст сохранить файл с ошибкой.
- certificate has expired {#expired} curl:
- unable to get local issuer certificate {#incomplete-chain} Клиент не дошёл до доверенного корня.
- no alternative certificate subject name matches {#name-mismatch} curl:
- self-signed certificate curl:
- wrong version number curl:
- Сервер отдаёт старый сертификат Файл заменён, а s_client показывает старый notAfter:
- Обновления не ставятся {#not-running} В 20auto-upgrades стоит "0" или файла нет.
- apt ждёт блокировку: (unattended-upgr) {#lock} apt пишет Could not get lock /var/lib/dpkg/lock-frontend.
- Обновление поставлено, а уязвимость жива {#still-vulnerable} Служба работает со старой копией файла:
- Служба перезапустилась ночью сама {#unexpected-restart} Её перезапустил needrestart после планового обновления.
- visudo: unable to open /etc/sudoers: Permission denied visudo запущен без root.
- syntax error и вопрос What now? Сохранённый файл не прошёл проверку:
- bad permissions, should be mode 0440 Файл в /etc/sudoers.d создан с обычными правами.
- Правило есть, а sudo его не видит Имя файла содержит точку (deploy.conf) или кончается на ~ — такие файлы sudo пропускает молча, и visudo -c их не перечисляет.
- Правило есть, а пароль всё равно спрашивают Из подходящих правил действует последнее.
- Туннель поднят, но нет связи sudo wg show — есть ли «latest handshake».
- Handshake есть, но пинг не идёт AllowedIPs не включает нужные адреса (для каждого пира это «какие IP за ним»).
- Не зайти после reboot systemctl enable wg-quick@wg0.
- Asymmetric/одна сторона видит, другая нет AllowedIPs настраивается на обеих сторонах согласованно.
- Закрыл себе SSH Правило для 22/tcp должно идти до DROP-политики.
- Правила пропали после ребута iptables не персистентен.
- Порядок имеет значение Правила применяются сверху вниз до первого совпадения.
- Счётчики не растут — правило не срабатывает -L -v показывает счётчики пакетов на правило.
- Не пойму, iptables или nftables на самом деле В Ubuntu iptables часто = iptables-nft (бэкенд nftables).
- Служба упала после ProtectSystem=strict {#read-only} В журнале — Read-only file system или Permission denied на запись.
- status=217/USER {#217-user} Пользователя из User= нет на машине.
- Permission denied на порту ниже 1024 {#low-port} После User= служба потеряла право на порт 80 или 443.
- Оценка снизилась, а процесс прежний {#score-not-applied} systemd-analyze security показывает 1.5 OK, а ps — служба от root.
- sudo: The "no new privileges" flag is set {#nnp-sudo} Скрипт службы вызывает sudo или другую setuid-программу, а у юнита NoNewPrivileges=yes.
- Закрыл себе SSH Зайди через консоль гипервизора/serial; ufw disable или поправь набор и перезагрузи правила.
- Правило не действует Порядок важен:
- Снаружи не доступен порт, хотя служба слушает sudo ufw status / nft list ruleset — разрешён ли порт; не забудь про внешний NAT/маршрутизатор.
- С самой машины порт открыт, хотя его закрыли {#check-from-outside} curl http://192.0.2.1:8080/ на самой машине отвечает 200, хотя порт закрыт политикой drop.
Автоматизация
- Could not match supplied host pattern {#no-hosts} Инвентарь не прочитан:
- leaves us with no hosts to target {#limit-no-hosts} -l называет машину или группу, которой нет в инвентаре.
- UNREACHABLE! {#unreachable} Ansible не подключился по SSH:
- couldn't resolve module/action {#unknown-module} Опечатка в имени модуля или коллекции нет.
- The requested handler … was not found {#handler-not-found} notify называет обработчик, которого нет:
- AnsibleUndefinedVariable {#undefined-variable} В шаблоне или задаче переменная, которой нет:
- Syntax Error while loading YAML {#yaml-syntax} Отступ не совпал:
- Permission denied без become {#become} Задача меняет то, что принадлежит root, а плей идёт от пользователя.
- Каждый прогон снова changed {#always-changed} shell или command без creates:/changed_when:, или шаблон с переменной, которая меняется каждый раз (дата, случайное число).
- UNREACHABLE! {#unreachable} Ansible не подключился по SSH; до модуля дело не дошло, код возврата 4.
- Destination /etc not writable {#not-writable} Модуль работает без прав root:
- sudo: a password is required Нужен --become и доступный sudo.
- Задача каждый раз «changed» Используешь command/shell вместо идемпотентного модуля.
- Vault: ничего не расшифровать Нужен пароль vault (--ask-vault-pass или --vault-password-file).
Контейнеры
- no configuration file provided: not found {#no-file} В текущем каталоге нет compose.yaml.
- additional properties '…' not allowed {#unknown-key} Ключ с опечаткой или не на своём уровне отступа.
- yaml: line 3: found character that cannot start any token {#yaml-tab} В строке 3 табуляция или другой символ, с которого YAML не начинает значение.
- service "backend" refers to undefined volume {#undefined-volume} Сервис подключает именованный том, которого нет в volumes:
- external volume "…" not found {#external-volume} Том с external:
- dependency failed to start: container … is unhealthy {#unhealthy} backend не прошёл проверку здоровья, и proxy с condition:
- The "X" variable is not set {#variable-not-set} The "MODE" variable is not set.
-
the attribute
versionis obsolete {#version-obsolete} Строка version: - Сервис в цикле перезапусков {#restart-loop} docker compose ps показывает Restarting:
- Pulling … failed to resolve reference {#pull-failed} Образа сервиса нет на машине, и compose пошёл за ним в реестр.
- service "proxy" is not running {#not-running} exec работает только в запущенном сервисе.
- permission denied … docker.sock {#permission-denied} Пользователь не в группе docker.
- Cannot connect to the Docker daemon {#daemon-down} Служба не запущена:
- port is already allocated {#port-allocated} Bind for 0.0.0.0:8081 failed:
- The container name … is already in use {#name-in-use} Контейнер с таким именем уже есть, хотя бы остановленный (docker ps -a).
- Контейнер сразу Exited (0) {#exited-zero} Главный процесс закончился без ошибки.
- docker stop ждёт 10 секунд и даёт 137 {#stop-137} docker stop шлёт SIGTERM и ждёт 10 секунд.
- container … is not running {#not-running} docker exec работает только в запущенном контейнере.
- docker logs | grep не находит строку {#logs-stderr} docker logs отдаёт вывод контейнера двумя потоками:
- Данные пропали после пересоздания {#data-lost} Данные лежали в слое контейнера.
- Контейнеры не видят друг друга по имени {#no-dns} Оба в сети по умолчанию bridge:
- volume is in use / has active endpoints {#in-use} Том или сеть нужны контейнеру, хотя бы остановленному.
- DEPRECATED: The legacy builder is deprecated {#legacy-builder} Сборку ведёт старый сборщик:
- failed to resolve reference на шаге FROM {#from-not-found} Образа из FROM нет на машине, и Docker пошёл в реестр.
- COPY с путём выше контекста {#outside-context} В COPY путь выше контекста:
- failed to compute cache key: not found {#file-not-found} Старый сборщик пишет COPY failed:
- failed to read dockerfile {#no-dockerfile} failed to read dockerfile:
- executable file not found in $PATH {#exec-not-found} Образ собрался, контейнер создан, но не запустился (статус Created):
- Контейнер из нового образа сразу Exited (0) {#exits-at-once} Команда запуска отработала и закончилась или ушла в фон.
- Правка не попала в контейнер {#change-not-applied} Проверь три места по порядку.
- Unable to find image … locally {#not-found} Образа с таким именем и тегом на машине нет, и Docker пошёл за ним в реестр.
- conflict: unable to delete … must be forced {#in-use} Образ нужен контейнеру, хотя бы остановленному.
- Пересобрал образ, а контейнер работает по-старому {#old-image} Контейнер создан из того образа, который был под именем в момент docker run.
-
<none>вместо имени {#dangling} Висячие образы остаются после пересборки с тем же тегом. - Permission denied на архив из docker save {#save-permission} sudo docker save -o file.tar создаёт файл от root с правами 600, и student не может его прочитать.
Ничего не найдено. Попробуй запрос короче.