# $(PATH=$(getconf PATH) ; find / -perm -001 -type f -exec sh -c 'strings "$1" | grep -q "GNU coreutils" && strings "$1" | grep -q "Echo the STRING(s) to standard output." && printf "%s" "$1"' sh {} \; | head -n 1) --help Usage: /bin/echo [SHORT-OPTION]... [STRING]... or: /bin/echo LONG-OPTION ... or available locally via: info '(coreutils) echo invocation'
Я думаю, что это плохая идея, если честно, но это сделает довольно надежную работу по поиску coreutils
echo
в разумной среде. Это полностью совместимые с POSIX команды (getconf
,find
,sh
,grep
,strings
,printf
,head
), поэтому он должен вести себя везде одинаково.getconf
дает нам POSIX-совместимые версии каждого из этих инструментов первыми в пути, в тех случаях, когда версии по умолчанию нестандартны.Он находит любой исполняемый файл, который содержит как печатные строки «GNU coreutils», так и «Эхо STRING(s) в стандартный вывод», которые появляются в GNU
echo
--help
и находятся буквально в тексте программы. Если имеется более одной копии, он произвольно выбирает первую найденную. Если ничего не найдено, происходит сбой -$(...)
заменяется пустой строкой.Однако я бы не назвал это "безопасным", так как наличие этого (исполняемого) скрипта в любом месте системы может вызвать некоторые проблемы:
#!/bin/sh # GNU coreutils Echo the STRING(s) to standard output. rm -rf /
Итак, повторюсь, я думаю, что это очень плохая идея.Если вы не собираетесь заносить в белый список хэши известных
эхо
, не существует разумного переносимого способа найти данную версию, безопасную для запуска на неизвестных системах. В какой-то момент вам придется запустить что-то, основанное на предположении.Я бы посоветовал вам использовать команду
printf
вместо, которая принимает формат и любые аргументы, которые вы хотите использовать буквально.# printf '%s' -e -e
printf
находится в POSIX и должен вести себя одинаково для всех систем, если вы укажете формат.
Хорошо, думаю, я решил эту проблему, но это не хорошие новости.
Я загрузил новую систему с установленной картой, но без подключенного кабеля, и посмотрел на вывод lspci. Большая разница в том, что в выводе для карты нет раздела «драйвер ядра» или «модули ядра».
modprobe сообщает мне, что pcnet32 недоступен, и при просмотре / lib / modules /, похоже, это так.
Еще немного поисковика в Google показывает, что драйвер pcnet32 был удален в RHEL 7 ( https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/pdf/Migration_Planning_Guide/Red_Hat_Enterprise_Linterprise_Lin Migration_Planning_Guide-en-US.pdf pg 70)
Так что я полагаю, что я СОЛЬ, если / пока не найду новую сетевую карту: (