Ошибка «non existent or non regular file» появляется в терминале при работе утилит tar, scp, rsync или при создании архивов — и означает, что программа не может прочитать указанный путь как обычный файл: либо его вообще нет, либо это каталог, символьная ссылка, сокет или устройство. Первое действие — выполнить команду ls -la для проблемного пути и посмотреть, что реально находится по этому адресу.
Сообщение выглядит пугающе, но в большинстве случаев причина банальна: опечатка в имени файла, неверный регистр символов или попытка передать каталог без соответствующего флага. Ниже разберём, откуда берётся эта ошибка, как быстро её диагностировать и что делать в каждом типичном сценарии.
Что означает сообщение «non existent or non regular file»
Фраза состоит из двух частей. «Non existent» — объект по указанному пути отсутствует: файл удалён, переименован, либо путь содержит ошибку. «Non regular file» — объект существует, но не является обычным файлом: это может быть директория, symlink, именованный канал (FIFO), сокет или файл устройства из /dev.
Утилиты вроде scp и tar по умолчанию работают только с регулярными файлами. Когда они встречают что-то другое, то сообщают об этом именно такой формулировкой. Понимание типа объекта — ключ к решению: команда file имя_файла или stat имя_файла покажет, с чем вы имеете дело.
Диагностика: как проверить путь и тип файла
Прежде чем что-то исправлять, убедитесь, что объект существует и имеет нужный тип. Последовательность проверки проста и безопасна — все команды только читают информацию.
ls -la /путь/к/файлу
stat /путь/к/файлу
file /путь/к/файлу
Обратите внимание на первый символ в выводе ls -la: - означает обычный файл, d — каталог, l — символьная ссылка, s — сокет, p — именованный канал. Если вместо ожидаемого файла вы видите l и стрелку, указывающую в никуда (красная подсветка в терминале), — перед вами «битая» ссылка, и это частая причина ошибки.
- 🔍 Проверьте путь на опечатки и регистр символов — Linux различает
File.txtиfile.txt - 📁 Убедитесь, что вы не передаёте каталог туда, где ожидается файл
- 🔗 Проверьте, не является ли объект символьной ссылкой на несуществующую цель
- 💾 Убедитесь, что диск или сетевой ресурс с файлом смонтирован и доступен
Ошибка при копировании через scp и sftp
Наиболее частый сценарий — попытка скопировать каталог командой scp без рекурсивного флага. Утилита видит, что источник — не регулярный файл, и сообщает об ошибке. Решение — добавить флаг -r:
scp -r /локальный/каталог user@host:/удалённый/путь
Вторая типичная причина — пробелы и спецсимволы в именах. Если путь содержит пробелы, возьмите его в кавычки или экранируйте символы, иначе scp воспримет часть имени как отдельный аргумент и не найдёт файл. Также проверьте, что удалённый путь указан относительно домашней директории пользователя либо как абсолютный — относительные пути часто трактуются не так, как ожидается.
⚠️ Внимание: при использовании подстановочных символов (*) в scp шаблон раскрывается удалённой стороной. Если на удалённом сервере нет совпадений, вы получите именно ошибку о несуществующем файле — проверьте шаблон командойlsна той стороне.
Ошибка при работе с tar-архивами
При создании архива tar может выдать предупреждение о несуществующих файлах, если часть объектов была удалена или переименована в момент архивирования — например, временные файлы активного приложения. Архив при этом обычно создаётся, но без пропущенных объектов. Если важна целостность, остановите приложение, пишущее в архивируемый каталог, или исключите временные файлы через --exclude.
При распаковке похожее сообщение возникает, если архив содержит жёсткие или символьные ссылки, цели которых отсутствуют в архиве или на диске. Проверьте содержимое до распаковки:
tar -tvf archive.tar | less
☑️ Проверка перед архивированием или копированием
Ошибка в rsync и права доступа
В rsync сообщение о нерегулярных файлах появляется, когда в синхронизируемом дереве встречаются сокеты, устройства или FIFO — например, при копировании системных каталогов вроде /run или /dev. Это нормально: такие объекты нельзя и не нужно копировать как файлы. Исключите их или добавьте флаг, соответствующий вашей задаче, сверившись с документацией man rsync.
Отдельный случай — права доступа. Если у пользователя нет прав на чтение файла или на вход в родительский каталог (отсутствует бит выполнения x на каталоге), утилита может сообщать об объекте как о недоступном или несуществующем. Проверьте права командой ls -la на сам файл и на всю цепочку родительских каталогов, при необходимости запустите операцию через sudo — но только если понимаете, зачем это нужно.
Сводная таблица причин и решений
| Ситуация | Вероятная причина | Действие |
|---|---|---|
| scp каталога | Каталог без флага -r | Добавить -r |
| Файл «есть», но ошибка | Битая символьная ссылка | Проверить ls -la, исправить ссылку |
| tar пропускает файлы | Файлы изменяются во время архивирования | Остановить приложение или исключить файлы |
| rsync системных каталогов | Сокеты и устройства нельзя копировать | Исключить /dev, /run |
| Файл с пробелами в имени | Путь разбивается на аргументы | Заключить путь в кавычки |
Профилактика: как не сталкиваться с ошибкой
Большинство случаев предотвращается дисциплиной в работе с путями. Используйте автодополнение клавишей Tab — оно гарантирует, что путь существует и набран без опечаток. Перед массовыми операциями копирования сначала выполните «сухой прогон»: у rsync для этого есть флаг --dry-run, который покажет список действий без их выполнения.
⚠️ Внимание: если ошибка возникает при работе с файлами на сетевой шаре (NFS, SMB), причиной может быть отвалившееся монтирование — каталог-точка монтирования существует, но пуст или содержит устаревшие данные. Проверьте вывод командыmountилиdf -h.
Почему symlink считается «нерегулярным» файлом
Символьная ссылка — это отдельный тип объекта файловой системы, содержащий лишь текст пути к цели. Утилиты вроде scp по умолчанию не переходят по ссылкам, а пытаются обработать сам объект ссылки. Если цель недоступна, возникает ошибка. Поведение можно изменить флагами (например, rsync имеет опции -l и -L для копирования ссылок или их целей) — уточните нужный флаг в man-странице вашей утилиты.
Если после всех проверок файл на месте, имеет тип «regular file», права в порядке, а ошибка повторяется — посмотрите полное сообщение об ошибке целиком: рядом часто указан конкретный путь или код, который сузит поиск. Полезно также проверить файловую систему на ошибки и свободное место на диске командой df -h.
Часто задаваемые вопросы
Что значит «non regular file» простыми словами?
Это любой объект файловой системы, который не является обычным файлом с данными: каталог, символьная ссылка, сокет, именованный канал или файл устройства. Утилита сообщает, что не может обработать его как файл.
scp пишет «not a regular file» — что делать?
Скорее всего, вы копируете каталог. Добавьте флаг -r для рекурсивного копирования. Если копируете один файл — проверьте, не является ли он символьной ссылкой.
Файл точно существует, но ошибка остаётся. Почему?
Проверьте регистр символов в имени, права доступа на файл и родительские каталоги, а также не отмонтировался ли диск или сетевая шара, на которой лежит файл.
Опасно ли игнорировать это предупреждение в tar?
Зависит от контекста. Если пропущены временные файлы — обычно некритично. Если пропущены нужные данные, архив будет неполным. Всегда просматривайте список пропущенных объектов и, при необходимости, повторяйте архивирование.
Как скопировать символьные ссылки через rsync?
Используйте флаг -l, чтобы сохранить ссылки как ссылки, или -L, чтобы скопировать файлы, на которые они указывают. Точное поведение описано в man rsync.