这是我的操作系统信息:
sudo uname -a
Linux machine 4.9.0-8-amd64 #1 SMP Debian 4.9.110-3+deb9u6
(2018-10-08) x86_64 GNU/Linux
test
以开头的文件/tmp
。
ls -al test*
-rw-r--r-- 1 debian9 debian9 0 Nov 16 14:43 test1
-rw-r--r-- 1 debian9 debian9 0 Nov 16 14:43 test2
-rw-r--r-- 1 debian9 debian9 0 Nov 11 18:28 test.txt
我想用 列出它们find
。
find /tmp -name "test*" -type f -exec echo {} \;
find: ‘echo’: Permission denied
find: ‘echo’: Permission denied
find: ‘/tmp/snap.0_anbox_tzkdA1’: Permission denied
find: ‘/tmp/systemd-private-589e0bcc99cc438d9e12d06af643af76-apache2.service-J7vefp’: Permission denied
find: ‘/tmp/systemd-private-589e0bcc99cc438d9e12d06af643af76-colord.service-xtmKpt’: Permission denied
find: ‘echo’: Permission denied
find: ‘/tmp/pulse-PKdhtXMmr18n’: Permission denied
find: ‘/tmp/systemd-private-589e0bcc99cc438d9e12d06af643af76-rtkit-daemon.service-rVBMKE’: Permission denied
find: ‘/tmp/systemd-private-589e0bcc99cc438d9e12d06af643af76-dovecot.service-zTKk5O’: Permission denied
为什么这么多find: ‘echo’: Permission denied
?
跑来跑去也没用root
debian9@hwy:/tmp$ su root
Password:
root@hwy:/tmp# find /tmp -name "test*" -type f -exec echo {} \;
find: ‘echo’: Permission denied
find: ‘echo’: Permission denied
find: ‘echo’: Permission denied
find
命令可以列出所有以 开头的文件test
。
find /tmp -name "test*" -type f
/tmp/test2
/tmp/test.txt
/tmp/test1
为啥-exec echo {} \;
跑不了?
以下命令的输出没有任何错误或其他内容。
debian9@hwy:~$ sudo find /tmp -name "test*" -type f -exec /bin/echo "{}" \;
检查权限。
debian9@hwy:~$ sudo ls -al /bin/echo
-rwxr-xr-x 1 root utmp 0 Nov 11 18:05 /bin/echo
答案1
Kamil Maciorowski 为你指明了正确的方向(因此我为他 +1),但似乎有些非常你错了/bin/echo命令:这是我的,
# ls -l echo
-rwxr-xr-x 1 root root 35000 gen 18 2018 echo
以下是你的回复(我引用):
$ sudo ls -al /bin/echo
-rwxr-xr-x 1 root utmp 0 Nov 11 18:05 /bin/echo
你能看出区别吗?你的命令属于韓國组,而不是根团体。还,同样重要的是,它的大小为零,而它是35000字节。
因此,要明确的是:你的/bin/echo命令完全是空的,并且属于错误的组。这显然表明系统工具严重损坏。根据提供的信息,我无法提供其他建议。全新重新安装可能是您的最佳选择。
答案2
echo
是许多 shell 中的内置命令,因此当您日常使用它时,它就可以正常工作。但是find … -exec echo … \;
使用外部可执行文件,例如/bin/echo
。
find: ‘echo’: Permission denied
意味着可执行文件的权限有问题。可能是你的$PATH
权限导致你出现“错误” echo
,也可能是“正确”的权限echo
出现错误。我假设是后者。
- 找到可执行文件;
whereis echo
适用于许多系统。 - 检查其权限,就像 一样
ls -l /bin/echo
。 - 使用 修复权限
sudo chmod …
。在我的 Debian 中,权限为rwxr-xr-x
(755
)。示例命令:sudo chmod 755 /bin/echo
。
答案3
不需要-exec echo
,find
您可以使用-print
(或-ls
如果您需要更多信息)。换句话说:
find $dir -print
和
find $dir -exec echo {} \;
输出相同。这甚至是默认设置,如果你没有指定-exec
find $dir -exec echo {} \;