Ошибки терминала: permission denied, no such file, segfault

Тема дорожной карты · Английский для IT

🔊 Словарь терминов с произношением →

Сообщения об ошибках в терминале — стандартизированный английский, который повторяется из системы в систему, потому что большинство из них приходит из одного источника: списка кодов errno стандартной библиотеки C. No such file or directory (ENOENT) — путь не существует; самая частая ошибка, обычно опечатка или неверный текущий каталог. Permission denied (EACCES) — нет прав; нужен sudo, chmod или другой пользователь. Operation not permitted (EPERM) — операция запрещена даже с правами (например, атрибут immutable). File exists (EEXIST). Is a directory (EISDIR) и Not a directory (ENOTDIR). Directory not empty (ENOTEMPTY). No space left on device (ENOSPC) — диск заполнен. Read-only file system (EROFS). Too many open files (EMFILE) — исчерпан лимит дескрипторов. Resource temporarily unavailable (EAGAIN). Connection refused (ECONNREFUSED) — на порту никто не слушает. Connection reset by peer (ECONNRESET) — соединение сброшено другой стороной. Connection timed out (ETIMEDOUT). Network is unreachable (ENETUNREACH). Address already in use (EADDRINUSE) — порт занят. Broken pipe (EPIPE) — читатель закрыл канал раньше писателя. Input/output error (EIO) — проблемы с диском. Device or resource busy (EBUSY) — нельзя отмонтировать. Invalid argument (EINVAL). Out of memory (ENOMEM). Ошибки не из errno: command not found — команды нет в PATH; Segmentation fault (segfault) — программа обратилась к недоступной памяти; Killed — процесс убит, часто OOM killer; Bus error; Aborted (core dumped); Bad interpreter — неверная строка shebang; Exec format error — бинарник другой архитектуры; Terminated; Illegal instruction.

Как произносится

Error /ˈɛrər/ («Эрэр», два слога, а не «эррор»), denied /dɪˈnaɪd/, permission /pərˈmɪʃən/, directory /dɪˈrɛktəri/, segmentation fault /ˌsɛɡmɛnˈteɪʃən fɔːlt/, segfault /ˈsɛɡfɔːlt/, core dumped /kɔːr dʌmpt/, refused /rɪˈfjuːzd/, timed out /taɪmd aʊt/, peer /pɪər/, unreachable /ʌnˈriːtʃəbl/, interpreter /ɪnˈtɜːrprɪtər/ (ударение на «тёр»), executable /ɪɡˈzɛkjʊtəbl/, errno — «эрр-но» или по буквам, stderr — «стандард эрр» или «эс-ти-ди-эрр», stdout — «стандард аут», exit code /ˈɛɡzɪt koʊd/, non-zero /ˌnɒn ˈzɪəroʊ/ (ненулевой код возврата).

Как употребляется

Как об ошибках говорят на созвоне:

  • I'm getting permission denied on the socket. — Получаю permission denied на сокете.
  • It says no such file, but the file is right there. — Пишет, что файла нет, но он вот он (обычно неверный рабочий каталог или CRLF в shebang).
  • The service segfaults on startup. — Сервис падает с segfault при старте (segfault как глагол).
  • Port 8080 is already in use, something's squatting on it. — Порт занят, что-то на нём сидит.
  • Connection refused means nothing is listening. — Connection refused значит, что никто не слушает.
  • It exited with a non-zero code. / Exit code 137 is OOM-killed. — Вышел с ненулевым кодом; 137 — убит по памяти.
  • The disk is full: no space left on device. — Диск заполнен.
  • Broken pipe is harmless here, head closed early. — Broken pipe здесь безвредна, head закрыл поток раньше.

Полезно знать коды выхода: 0 — успех, 1 — общая ошибка, 2 — неверное использование, 126 — нет прав на исполнение, 127 — команда не найдена, 130 — прервано Ctrl+C, 137 — убито SIGKILL (128 + 9), 139 — segfault (128 + 11), 143 — SIGTERM (128 + 15).

Ловушки

Первая ловушка — искать локализованное сообщение: «Отказано в доступе» не найдётся в Stack Overflow; ищите английский оригинал или запускайте с LANG=C. Вторая — permission denied и operation not permitted: первое лечится правами, второе часто нет (immutable-атрибут, capabilities, SELinux). Третья — no such file or directory при существующем файле: это может быть отсутствующий интерпретатор из shebang или динамическая библиотека, а не сам файл. Четвёртая — connection refused и connection timed out: первое приходит мгновенно и означает «порт закрыт или никто не слушает», второе ждёт и означает «пакеты теряются, вероятно файрвол». Пятая — Killed без объяснений: смотрите dmesg на OOM killer. Шестая — segfault как «ошибка в моём коде»: часто это несовместимая библиотека или повреждённый бинарник; core dumped означает, что есть дамп для отладки.

Связанные понятия

Полезные ресурсы