Вопрос или проблема
Что могло вызвать ошибку с этим сообщением об ошибке?
touch: cannot touch `foo': No such file or directory
Обратите внимание, что ошибка из-за неправильных разрешений выглядит иначе:
touch: cannot touch `foo': Permission denied
Следующая последовательность вызывает это сообщение об ошибке:
$ mkdir foo
$ cd foo
В другом терминале:
$ rm -r foo
В предыдущем терминале:
$ touch x
touch: cannot touch `x': No such file or directory
Конечно, другие события, которые также приводят к аннулированию текущего рабочего каталога (CWD) процесса, который пытается создать там файл, также приводят к этому сообщению об ошибке.
Для меня это была попытка записи в символьную ссылку, указывающую на файл, который больше не существует:
$ ln -s file symlink
$ rm file
$ touch symlink
$ touch: cannot touch `symlink': No such file or directory
Другой (более простой) способ вызвать сообщение:
$ mkdir foo
$ touch foo/bar/baz.txt
touch: cannot touch 'foo/bar/baz.txt': No such file or directory
По сути, это попытка создать файл в несуществующей папке.
Ответ или решение
Причина, по которой команда touch
может завершиться с ошибкой «cannot touch `foo’: No such file or directory», часто связана с попыткой создать файл в местоположении, которое в данный момент недоступно или не существует. Давайте подробно рассмотрим возможные причины этого и примеры.
Теория
Команда touch
в UNIX и UNIX-подобных операционных системах используется для создания пустых файлов или обновления времени доступа и изменения существующих файлов. Когда вы выполняете touch foo
, система ожидает, что вы либо создаете новый файл с именем foo
, либо обновляете временные метки существующего.
Ошибка «No such file or directory» возникает в том случае, если система не может найти путь для операции записи. Это может быть результатом нескольких ситуаций:
-
Папка или каталог, в котором вы пытаетесь создать файл, не существует. Это наиболее распространенная причина, когда пользователи пытаются создать файл в несуществующем пути.
-
Символическая ссылка, указывающая на несуществующий файл или директорию. Если символическая ссылка не ведет к реальному объекту, то операция с ней — например, попытка обновить ее временные метки с помощью
touch
— приведет к подобной ошибке. -
Рабочий каталог больше не существует из-за его удаления в другом процессе. Если вы работаете в директории, которая была удалена другим процессом или пользователем, и пробуете создать файл, то получите эту ошибку.
-
Недоступность файла из-за проблем с файловой системой. Иногда файловая система может стать недоступной из-за сбоев сети (в случае, например, с NFS) или других проблем с монтированием.
Примеры
-
Пробуем создать файл в несуществующем каталоге:
$ mkdir foo $ touch foo/bar/baz.txt
В этом примере команда
touch
пытается создать файлbaz.txt
в отсутствии промежуточного каталогаbar
, который отсутствует. -
Работа с символической ссылкой:
$ ln -s file symlink $ rm file $ touch symlink
Здесь команда
touch
вызывает ошибку, поскольку символическая ссылкаsymlink
указывает на файлfile
, который был удален. -
Удаление текущего рабочего каталога:
$ mkdir foo $ cd foo # В другом терминале: $ rm -r foo # Вернувшись в первый терминал: $ touch x
В этом примере удаление каталога
foo
, в котором вы находитесь, делает отсутствие директории, что приводит к ошибке при попытке создать файл в этой директории.
Применение
Для IT-специалистов крайне важно понимать контекст работы с файловыми системами и управления каталогами. Установление процедур контроля над рабочими процессами и внедрение мониторинга может предотвратить многие из вышеперечисленных проблем.
-
Проверка наличия всех промежуточных директорий перед операцией
touch
. Автоматизация таких проверок может предотвратить человеческие ошибки, приводящие к созданию файлов в несуществующих путях. -
Обработка ошибок в скриптах. Добавление проверок и обработки ошибок в ваши скрипты может помочь выявить проблемы до выполнения критических операций.
-
Мониторинг состояния файловых систем. Использование инструментов мониторинга для отслеживания доступности и состояния файловых систем поможет предупредить сбои, такие как потеря доступа из-за сетевых проблем.
-
Предпочтение абсолютных путей относительно символическим ссылкам в критических аппликациях. Таким образом можно избежать случайного обращения к несуществующему ресурсу.
В таких сценариях глубокое понимание принципов работы операционных систем и файловых структур существенно повышает надежность и эффективность системы. Владение инструментами, такими как скрипты для автоматической проверки и систем мониторинга, помогут IT-специалистам лучше управлять ресурсами и избегать ошибок.