touch: impossible de toucher `foo ': aucun fichier ou répertoire de ce type

21

Qu'est-ce qui pourrait entraîner l'échec du toucher avec ce message d'erreur?

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

Notez qu'une erreur due à des autorisations incorrectes est différente:

touch: cannot touch `foo': Permission denied
Lorin Hochstein
la source

Réponses:

21

La séquence suivante provoque ce message d'erreur:

$ mkdir foo
$ cd foo

Dans un autre terminal:

$ rm -r foo

Dans le terminal précédent:

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

Bien sûr, d'autres événements qui entraînent également l'invalidation du répertoire de travail en cours (CWD) d'un processus qui tente de créer un fichier là-bas génèrent également ce message d'erreur.

maxschlepzig
la source
2
Dans mon cas, cela se produisait en raison d'un point de montage GlusterFS mal configuré, mais j'étais curieux de savoir le cas général qui provoquerait cela. Ce type de question serait-il vraiment un problème de devoirs dans une classe?
Lorin Hochstein
3
Le cas général est le répertoire courant qui n'existe pas. En plus d'avoir été supprimé comme dans l'exemple de maxschlepzig, cela ne peut se produire que dans des circonstances étranges comme un système de fichiers qui se comporte mal (votre cas), ou peut-être un mécanisme de sécurité comme SELinux ayant rendu le répertoire invisible (je ne sais pas si SELinux peut réellement produire cet effet).
Gilles 'SO- arrête d'être méchant'
@lorin: Eh bien, lors d'un cours d'introduction à Unix à l'université, nous avons posé ce type de questions dans le cadre des devoirs (parce que, par exemple, les problèmes NFS peuvent se manifester dans des messages d'erreur similaires). J'ai juste demandé par curiosité ...
maxschlepzig
3
Dans la réponse d'origine, pas besoin d'un autre terminal: rmdir ../foodans le même terminal devrait fonctionner. Une autre possibilité , sans mauvaise conduite des systèmes de fichiers: ln -s directory-that-doesnt-exist/foo foo; touch foo.
éphémère
Je pense que vous devriez éditer "Hm, question de devoirs?" hors de la réponse ... C'est honnêtement très offensant. Je suis sur cette page car cela s'est réellement produit sur mon ordinateur. Mais cette réponse ne résout pas cela du tout. C'était un problème NFS que le redémarrage a corrigé, mais je veux la cause sous-jacente.
codetaku
4

Pour moi, il essayait d'écrire dans un lien symbolique qui pointait vers un fichier qui n'était plus là:

$ ln -s ~/doomed/file ~/mysymlink
$ rm ~/doomed/file
$ touch ~/mysymlink
$ touch: cannot touch `mysymlink': No such file or directory
antiréalisme
la source
C'était ça!! Se sentir stupide maintenant! En faisant juste un "ls -la" dans le répertoire, le fichier était censé le montrer immédiatement. C'était "resolv.conf", qui indiquait un endroit qui en raison d'une mise à jour
plantée
1

Une autre façon (plus simple) de déclencher le message:

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

Essentiellement, essayer de créer un fichier dans un dossier inexistant.

KevinG
la source
0

Peut-être que cela aidera quelqu'un à l'avenir:

J'ai eu ce même problème lorsque j'ai supprimé le seul fichier qui existe dans mon dossier avec git rm. Ainsi, git a supprimé le dossier dans lequel j'étais, et toute tentative de création d'un fichier déclenche cette erreur car le dossier n'est plus là. J'ai donc dû recréer le dossier manuellement, y accéder et exécuter la touchcommande avec succès.

Begueradj
la source