находка: 'echo': в доступе отказано

568
scrapy

Это моя ос информация:

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 

Файлы начинаются с testin /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 
0
Каждый файл имеет разрешение `r`, вы можете увидеть вывод` ls -al test * `. scrapy 5 лет назад 0
Как заставить это бежать тогда? scrapy 5 лет назад 0
Нет смысла запускать его с помощью sudo, он сталкивается с той же информацией об ошибках. scrapy 5 лет назад 0

3 ответа на вопрос

2
Kamil Maciorowski

echoэто встроенный во многих оболочках, так что когда вы используете его ежедневно, он просто работает. Однако 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.
Ничего плохого или что-то еще, как вывод команды ниже. scrapy 5 лет назад 0
sudo find / tmp -name "test *" -type f -exec / bin / echo "{}" \; scrapy 5 лет назад 0
@scrapy Как насчет того, чтобы запустить его без `sudo`, но все еще с` / bin / echo`? Kamil Maciorowski 5 лет назад 0
Пожалуйста, прочитайте мой ответ тоже, может быть, вам есть что добавить? Четыре глаза видят лучше, чем два. MariusMatutiae 5 лет назад 0
1
MariusMatutiae

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 

Вы видите различия? Ваша команда принадлежит группе utmp, а не корневой группе. Кроме того, и, что не менее важно, его размер равен нулю, тогда как в моем случае он составляет 35000 байт.

Итак, чтобы быть ясным: ваша команда / bin / echo полностью пуста, и она принадлежит к неправильной группе. Это ясно указывает на серьезное повреждение системных инструментов. На основании предоставленной информации я ничего не могу предложить. Чистая переустановка может быть вашим лучшим вариантом.

Там должно быть что-то еще. В своем Debian я создал пустой файл с точно такими же правами владения и правами, что и у OP `/ bin / echo`. Он выполняется успешно (имитирует `true`). Чистая переустановка действительно может быть лучшим вариантом. Kamil Maciorowski 5 лет назад 0
0
xenoid

Нет необходимости -exec echo, findвы можете использовать -print(или, -lsесли вы хотите больше информации). Другими словами:

find $dir -print 

а также

find $dir -exec echo {} \; 

имеют одинаковый выход. Это даже по умолчанию, если вы не указали-exec

find $dir -exec echo {} \; 
Тонкость: код после OP говорит, что команда `find` может перечислить все файлы, начинающиеся с` test` ', предполагает, что они знают. Хотя `-exec echo {} \;` не очень полезно, оно * должно * работать. Я прочитал его как базовый пример `-exec echo… \;`, который * вообще * не срабатывает для OP. Kamil Maciorowski 5 лет назад 1

Похожие вопросы