touch: kann `foo 'nicht berühren: Keine solche Datei oder kein solches Verzeichnis

21

Was könnte dazu führen, dass Touch mit dieser Fehlermeldung fehlschlägt?

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

Beachten Sie, dass ein Fehler aufgrund falscher Berechtigungen anders aussieht:

touch: cannot touch `foo': Permission denied
Lorin Hochstein
quelle

Antworten:

21

Folgende Reihenfolge verursacht diese Fehlermeldung:

$ mkdir foo
$ cd foo

In einem anderen Terminal:

$ rm -r foo

Im vorherigen Terminal:

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

Natürlich führen auch andere Ereignisse, die dazu führen, dass das aktuelle Arbeitsverzeichnis (CWD) eines Prozesses ungültig wird, der versucht, dort eine Datei zu erstellen, zu dieser Fehlermeldung.

maxschlepzig
quelle
2
In meinem Fall geschah dies aufgrund eines falsch konfigurierten GlusterFS-Einhängepunkts, aber ich war neugierig auf den allgemeinen Fall, der dazu führen würde. Wäre diese Art von Frage wirklich ein Hausaufgabenproblem in einer Klasse?
Lorin Hochstein
3
Der allgemeine Fall ist, dass das aktuelle Verzeichnis nicht vorhanden ist. Abgesehen davon, dass es wie im Beispiel von maxschlepzig gelöscht wurde, kann dies nur unter seltsamen Umständen passieren, wie einem sich schlecht verhaltenden Dateisystem (Ihr Fall) oder einem Sicherheitsmechanismus wie SELinux, der das Verzeichnis unsichtbar gemacht hat (ich weiß nicht, ob SELinux tatsächlich produzieren kann) dieser Effekt).
Gilles 'SO- hör auf böse zu sein'
@lorin: Nun, bei einem Unix-Einführungskurs in der Universität haben wir solche Fragen im Rahmen von Hausaufgaben gestellt (weil zB NFS-Probleme in ähnlichen Fehlermeldungen auftreten können).
Habe
3
In der ursprünglichen Antwort wird kein anderes Terminal benötigt: rmdir ../fooIm selben Terminal sollte es funktionieren. Eine weitere Möglichkeit , ohne Dateisysteme misbehaving: ln -s directory-that-doesnt-exist/foo foo; touch foo.
Ephemient
Ich habe das Gefühl, du solltest "Hm, Hausaufgabenfrage?" aus der Antwort heraus .... Es ist ehrlich gesagt sehr anstößig. Ich bin auf genau dieser Seite, weil dies tatsächlich auf meinem Computer passiert ist. Aber diese Antwort löst das überhaupt nicht. Es war ein NFS-Problem, das durch einen Neustart behoben wurde, aber ich möchte die zugrunde liegende Ursache.
Codetaku
4

Für mich war es der Versuch, in einen Symlink zu schreiben, der auf eine Datei zeigte, die nicht mehr vorhanden war:

$ ln -s ~/doomed/file ~/mysymlink
$ rm ~/doomed/file
$ touch ~/mysymlink
$ touch: cannot touch `mysymlink': No such file or directory
Antirealm
quelle
Das war's!! Fühle mich jetzt dumm! Wenn Sie einfach ein "ls -la" in dem Verzeichnis machen, in dem die Datei gespeichert werden soll, wird sie sofort angezeigt. Es war "resolv.conf", das auf eine Stelle hinwies, die aufgrund eines abgestürzten Updates nicht vorhanden war.
stolsvik
1

Eine andere (einfachere) Möglichkeit, die Nachricht auszulösen:

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

Grundsätzlich wird versucht, eine Datei in einem nicht vorhandenen Ordner zu erstellen.

KevinG
quelle
0

Vielleicht hilft das jemandem in der Zukunft:

Ich habe das gleiche Problem, als ich die einzige Datei, die in meinem Ordner existiert, mit entfernt habe git rm. So entfernte Git den Ordner, in dem ich war, und jeder Versuch, eine Datei zu erstellen, löst diesen Fehler aus, weil der Ordner nicht mehr da ist. Also musste ich den Ordner manuell neu erstellen, ihn aufrufen und den touchBefehl erfolgreich ausführen .

Begueradj
quelle