touch: не может касаться `foo ': нет такого файла или каталога

21

Что может вызвать сбой касания с этим сообщением об ошибке?

touch: cannot touch `foo': No such file or directory

Обратите внимание, что ошибка из-за неправильных разрешений выглядит иначе:

touch: cannot touch `foo': Permission denied
Лорин Хохштайн
источник

Ответы:

21

Следующая последовательность вызывает это сообщение об ошибке:

$ mkdir foo
$ cd foo

В другом терминале:

$ rm -r foo

В предыдущем терминале:

$ touch x
touch: cannot touch `x': No such file or directory

Конечно, другие события, которые также приводят к аннулированию текущего рабочего каталога (CWD) процесса, который пытается создать файл, также приводят к этому сообщению об ошибке.

maxschlepzig
источник
2
В моем случае это происходило из-за неверно сконфигурированной точки монтирования GlusterFS, но мне было любопытно, в каком общем случае это может произойти. Действительно ли этот тип вопроса будет проблемой домашней работы в классе?
Лорин Хохштайн
3
В общем случае текущий каталог не существует. Помимо того, что он был удален, как в примере с maxschlepzig, это может произойти только в странных обстоятельствах, таких как неправильная работа файловой системы (ваш случай) или, возможно, с помощью механизма безопасности, такого как SELinux, который сделал каталог невидимым (я не знаю, может ли SELinux на самом деле производить этот эффект).
Жиль "ТАК - перестать быть злым"
@lorin: Ну, на вводном курсе Unix в университете мы задавали такие вопросы, как часть домашних заданий (потому что, например, проблемы с NFS могут проявляться в похожих сообщениях об ошибках). Просто спросили из любопытства ...
maxschlepzig
3
В исходном ответе нет необходимости в другом терминале: rmdir ../fooв этом же терминале должен работать. Другая возможность без плохо себя файловые системы: ln -s directory-that-doesnt-exist/foo foo; touch foo.
Эфимент
Я чувствую, что вы должны отредактировать "Хм, домашнее задание?" из ответа .... честно говоря очень обидно. Я на этой самой странице, потому что это на самом деле произошло на моем компьютере. Но этот ответ не решает это вообще. Это была проблема с NFS, исправляющая перезагрузку, но я хочу найти причину.
Codetaku
4

Для меня это была попытка записи в символическую ссылку, которая указывала на файл, которого больше не было:

$ ln -s ~/doomed/file ~/mysymlink
$ rm ~/doomed/file
$ touch ~/mysymlink
$ touch: cannot touch `mysymlink': No such file or directory
antirealm
источник
Это было это !! Чувствую себя глупо сейчас! Просто выполнив команду «ls -la» в каталоге, файл должен был быть показан немедленно. Это был «resolv.conf», который указывал на место, которого там не было из-за
сбойного
1

Еще один (более простой) способ вызвать сообщение:

$ mkdir foo
$ touch foo/bar/baz.txt
touch: cannot touch 'foo/bar/baz.txt': No such file or directory

В основном пытается создать файл в несуществующей папке.

KevinG
источник
0

Может быть, это поможет кому-то в будущем:

Я получил эту же проблему, когда удалил единственный файл, который существует в моей папке с git rm. Таким образом, git удалил папку, в которой я находился, и любая попытка создать файл вызывает эту ошибку, потому что папки больше нет. Поэтому мне пришлось заново создать папку, зайти в нее и touchуспешно выполнить команду.

Begueradj
источник