Der Befehl „Find“ scheint überhaupt nicht zu funktionieren. Ich befinde mich beispielsweise in einem Verzeichnis, in dem sich eine Datei mit dem Namen „index.php“ befindet, und führe Folgendes aus:
[root@server htdocs]# find . -name "index.php"
find: .: No such file or directory
Ich erhalte immer die Fehlermeldung „Keine solche Datei oder kein solches Verzeichnis vorhanden“.
Egal welchen Pfad ich definiere oder nach welcher Datei ich suche, ich erhalte immer diesen Fehler. Ich bin ziemlich sicher, dass ich etwas ganz Einfaches übersehe. Kann mir jemand sagen, was ich falsch mache?
[root@server htdocs]# pwd
/srv/www/htdocs
[root@server htdocs]# type -a find
find is /usr/bin/find
[root@server htdocs]# ls -la | grep index.php
-rw-rw-r-- 1 andris users 413 Sep 1 2013 index.php
[root@server htdocs]# find . -name "index.php"
find: .: No such file or directory
[root@server htdocs]# find .
.
find: .: No such file or directory
[root@server htdocs]# stat .
File: `.'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: ca00h/51712d Inode: 155686 Links: 12
Access: (0775/drwxrwxr-x) Uid: ( 504/ andris) Gid: ( 100/ users)
Access: 2014-06-17 19:37:22.000000000 +0000
Modify: 2014-06-08 21:06:16.000000000 +0000
Change: 2014-06-08 21:06:16.000000000 +0000
[root@server htdocs]# find --version
GNU find version 4.2.27
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION SELINUX
strace find .
Ausgabe:https://gist.github.com/andrisp/f3adaf740548eead33da
[root@server htdocs]# find . -noleaf -name "index.php"
find: .: No such file or directory
Antwort1
Laut Ihrer strace
Ausgabe (und ich habe keine Ahnung, warum) open()
versieht die Funktion die Dateinamen mit dem folgenden Präfix /proc/
:
open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 4
fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
getdents64(4, /* 21 entries */, 32768) = 664
getgid32() = 0
stat64("/proc/index.php", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
stat64("/proc/.svn", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
stat64("/proc/init-dist.php", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
stat64("/proc/landing-page.html", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
[...]
stat64("/proc/js", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
stat64("/proc/extras", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
stat64("/proc/sitemaps", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getdents64(4, /* 0 entries */, 32768) = 0
Antwort2
Ich habe gesehen, dass dies auf einem Mac passiert, wenn sich das Verzeichnis auf einem Wechseldatenträger befindet, der seit dem Öffnen des Terminalfensters entfernt und wieder hinzugefügt wurde. Ich kann nicht erklären, warum (wahrscheinlich hat es mit Informationen zu tun, die beim Starten der Terminalsitzung zwischengespeichert wurden), aber es war reproduzierbar. Habe die Terminalsitzung einfach neu gestartet und alles war in Ordnung.
Antwort3
Versuchen Sie es mit dem absoluten Pfad wie:
sudo find /where/your_file_is/located/ -iname "index.php"
Und wie bereits oben erwähnt, kann es sein, dass Sie keine Berechtigungen haben. Was passiert, wenn Sie:
ls .
Weiß Ihre Shell, was mit dem Punkt zu tun ist?
Antwort4
Möglicherweise verfügen Sie als Benutzer nicht über die Ausführungsberechtigung für das Verzeichnis, in dem Sie suchen. Verfügt Ihr Benutzer über Lese- und Ausführungsberechtigung?