查找命令似乎根本不起作用。例如,我所在的目录中绝对存在名为 index.php 的文件,并且我执行以下命令:
[root@server htdocs]# find . -name "index.php"
find: .: No such file or directory
我总是收到“没有这样的文件或目录”错误。
无论我定义什么路径,或者搜索什么文件,我总是会收到此错误。我很确定我忽略了一些非常简单的事情。有人可以指出我做错了什么吗?
[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 .
输出:https://gist.github.com/andrisp/f3adaf740548eead33da
[root@server htdocs]# find . -noleaf -name "index.php"
find: .: No such file or directory
答案1
根据您的strace
输出,我不知道原因,该open()
函数的文件名前缀为/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
答案2
我在 Mac 上看到过这种情况,当目录位于可移动媒体上时,自终端窗口打开以来,该媒体已被删除和读取。我无法解释原因(可能与终端会话启动时缓存的信息有关),但它是可重现的。刚刚重新启动终端会话,一切都很好。
答案3
尝试使用绝对路径,例如:
sudo find /where/your_file_is/located/ -iname "index.php"
正如上面已经提到的,您可能没有权限。如果您出现以下情况,会发生什么情况:
ls .
你的 shell 知道如何处理这个点吗?
答案4
您的用户可能没有对您正在搜索的目录的执行权限。是否具有读取和执行权限?