找到:‘echo’:权限被拒绝

找到:‘echo’:权限被拒绝

这是我的操作系统信息:

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出现错误。我假设是后者。

  1. 找到可执行文件;whereis echo适用于许多系统。
  2. 检查其权限,就像 一样ls -l /bin/echo
  3. 使用 修复权限sudo chmod …。在我的 Debian 中,权限为rwxr-xr-x( 755)。示例命令:sudo chmod 755 /bin/echo

答案3

不需要-exec echofind您可以使用-print(或-ls如果您需要更多信息)。换句话说:

find $dir -print

find $dir -exec echo {} \;

输出相同。这甚至是默认设置,如果你没有指定-exec

find $dir -exec echo {} \;

相关内容