touch: nie można dotknąć `foo ': brak takiego pliku lub katalogu

21

Co może spowodować awarię dotyku przy tym komunikacie o błędzie?

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

Pamiętaj, że błąd spowodowany nieprawidłowymi uprawnieniami wygląda inaczej:

touch: cannot touch `foo': Permission denied
Lorin Hochstein
źródło

Odpowiedzi:

21

Następująca sekwencja powoduje ten komunikat o błędzie:

$ mkdir foo
$ cd foo

W innym terminalu:

$ rm -r foo

W poprzednim terminalu:

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

Oczywiście inne zdarzenia, które również powodują unieważnienie bieżącego katalogu roboczego (CWD) procesu, który próbuje utworzyć plik, również powodują wyświetlenie tego komunikatu o błędzie.

maxschlepzig
źródło
2
W moim przypadku miało to miejsce z powodu źle skonfigurowanego punktu montowania GlusterFS, ale byłem ciekawy ogólnej sprawy, która by to spowodowała. Czy tego rodzaju pytanie naprawdę stanowiłoby problem w odrabianiu lekcji w klasie?
Lorin Hochstein
3
Ogólnym przypadkiem jest brak bieżącego katalogu. Oprócz tego, że został usunięty jak w przykładzie maxschlepzig, może się to zdarzyć tylko w dziwnych okolicznościach, takich jak źle zachowujący się system plików (twoja sprawa), a może mechanizm bezpieczeństwa, taki jak SELinux, spowodował, że katalog był niewidoczny (nie wiem, czy SELinux może faktycznie produkować ten efekt).
Gilles „SO- przestań być zły”
@lorin: Cóż, na kursie wprowadzającym do Unixa na uniwersytecie zadawaliśmy takie pytania w ramach zadań domowych (ponieważ np. problemy z NFS mogą objawiać się w podobnych komunikatach o błędach). Właśnie zapytałem z ciekawości ...
maxschlepzig
3
W pierwotnej odpowiedzi nie ma potrzeby używania innego terminala: rmdir ../foow tym samym terminalu powinien działać. Inną możliwością bez niewłaściwie systemy plików: ln -s directory-that-doesnt-exist/foo foo; touch foo.
ephemient
Czuję, że powinieneś edytować „Hm, pytanie o pracę domową?” z odpowiedzi… To jest naprawdę bardzo obraźliwe. Jestem na tej stronie, ponieważ tak się stało na moim komputerze. Ale ta odpowiedź wcale tego nie rozwiązuje. To był problem z NFS, który zrestartował się, ale chcę znaleźć przyczynę.
codetaku
4

Dla mnie próba zapisu do dowiązania symbolicznego wskazującego na plik, którego już nie ma:

$ ln -s ~/doomed/file ~/mysymlink
$ rm ~/doomed/file
$ touch ~/mysymlink
$ touch: cannot touch `mysymlink': No such file or directory
antirealm
źródło
To było to!! Czuję się teraz głupio! Po prostu wykonując „ls -la” w katalogu, plik miał zostać natychmiast wyświetlony. To był „resolv.conf”, który wskazywał na miejsce, którego z powodu awarii nie było.
Stolsvik
1

Kolejny (prostszy) sposób na wywołanie wiadomości:

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

Zasadniczo próba utworzenia pliku w nieistniejącym folderze.

KevinG
źródło
0

Może to pomoże komuś w przyszłości:

Ten sam problem wystąpił, gdy usunąłem jedyny plik, który istnieje w moim folderze git rm. W ten sposób git usunął folder, w którym byłem, a każda próba utworzenia pliku powoduje ten błąd, ponieważ folderu już nie ma. Musiałem więc ponownie utworzyć folder ręcznie, wejść do niego i touchpomyślnie uruchomić polecenie.

Begueradj
źródło