find: 'echo': Erlaubnis verweigert

579
scrapy

Es ist meine OS-Info:

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 

Dateien, die bei testin beginnen /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 

Ich möchte sie mit auflisten 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 

Warum gibt es so viele find: ‘echo’: Permission denied?
Es hat keinen Zweck, mit zu laufenroot

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 

findBefehl kann alle Dateien auflisten, die mit beginnen test.

find /tmp -name "test*" -type f /tmp/test2 /tmp/test.txt /tmp/test1 

Warum -exec echo {} \;kann ich nicht laufen?

Nichts falsches oder etwas anderes als Ausgabe des Befehls unten.

debian9@hwy:~$ sudo find /tmp -name "test*" -type f -exec /bin/echo "{}" \; 

Überprüfen Sie die Erlaubnis.

debian9@hwy:~$ sudo ls -al /bin/echo -rwxr-xr-x 1 root utmp 0 Nov 11 18:05 /bin/echo 
0
Jede Datei hat die Berechtigung `r`. Sie können die Ausgabe von 'ls -al test *` sehen. scrapy vor 5 Jahren 0
Wie kann ich es dann zum Laufen bringen? scrapy vor 5 Jahren 0
Es kann nicht verwendet werden, um es mit Sudo auszuführen. Es werden dieselben Fehlerinformationen angezeigt. scrapy vor 5 Jahren 0

3 Antworten auf die Frage

2
Kamil Maciorowski

echoist in vielen Muscheln eingebaut. Wenn Sie es täglich verwenden, funktioniert es einfach. Verwendet find … -exec echo … \;jedoch eine externe ausführbare Datei wie /bin/echo.

find: ‘echo’: Permission deniedbedeutet, dass mit den Berechtigungen der ausführbaren Datei etwas nicht stimmt. Es kann sein, dass $PATHSie zu einigen "falschen" Ergebnissen führen echooder die Berechtigungen "der richtigen" echosind falsch. Ich gehe von letzterem aus.

  1. Suchen Sie die ausführbare Datei. whereis echofunktioniert auf vielen Systemen.
  2. Überprüfen Sie die Berechtigungen, z. B. mit ls -l /bin/echo.
  3. Korrigieren Sie die Berechtigungen mit sudo chmod …. In meinem Debian sind sie rwxr-xr-x( 755). Beispiel Befehl: sudo chmod 755 /bin/echo.
Nichts falsches oder etwas anderes als Ausgabe des Befehls unten. scrapy vor 5 Jahren 0
Sudo find / tmp -name "test *" -Typ f -exec / bin / echo "{}" \; scrapy vor 5 Jahren 0
@scrapy Wie wäre es, wenn Sie es ohne `sudo` aber trotzdem mit` / bin / echo` laufen lassen? Kamil Maciorowski vor 5 Jahren 0
Bitte lesen Sie auch meine Antwort, vielleicht haben Sie noch etwas hinzuzufügen? Vier Augen sehen besser als nur zwei. MariusMatutiae vor 5 Jahren 0
1
MariusMatutiae

Kamil Maciorowski deutete Sie in die richtige Richtung (also meine +1 für ihn), aber es scheint, es ist etwas sehr falsch mit Ihrem / bin / echo - Befehl: hier ist mein,

# ls -l echo -rwxr-xr-x 1 root root 35000 gen 18 2018 echo 

und hier ist deins (und ich zitiere):

$ sudo ls -al /bin/echo -rwxr-xr-x 1 root utmp 0 Nov 11 18:05 /bin/echo 

Kannst du die Unterschiede sehen? Ihr Befehl gehört zur utmp - Gruppe, statt der Wurzelgruppe. Auch, und was ebenso wichtig ist, seine Größe Null ist, während es 35000 Bytes in mir.

Um es klar zu sagen: Ihr / bin / echo- Befehl ist völlig leer und gehört zur falschen Gruppe. Dies weist eindeutig auf eine schwerwiegende Beschädigung von Systemwerkzeugen hin. Auf der Grundlage der bereitgestellten Informationen kann ich nichts anderes anbieten. Eine Neuinstallation ist möglicherweise die beste Option.

Es muss etwas mehr geben. In meinem Debian habe ich eine leere Datei mit genau demselben Besitz und den gleichen Berechtigungen wie das `/ bin / echo` des OP erstellt. Es wird erfolgreich ausgeführt (imitiert "true"). Eine Neuinstallation ist möglicherweise die beste Option. Kamil Maciorowski vor 5 Jahren 0
0
xenoid

Keine Notwendigkeit -exec echo, findkönnen Sie verwenden -print(oder -lswenn Sie mehr Informationen wünschen). Mit anderen Worten:

find $dir -print 

und

find $dir -exec echo {} \; 

haben die gleiche Ausgabe. Dies ist sogar die Standardeinstellung, wenn Sie keine angeben-exec

find $dir -exec echo {} \; 
Eine Subtilität: Der Code hinter dem OP sagt, dass der Befehl "find" alle Dateien auflisten kann, die mit "test" beginnen. Obwohl -exec echo {} \; `nicht wirklich nützlich ist, sollte es * funktionieren *. Ich las es als ein grundlegendes Beispiel für `-exec echo… \;` was * im Allgemeinen * für das OP fehlschlägt. Kamil Maciorowski vor 5 Jahren 1