Если это просто между ELF и скриптом, вам может вообще не понадобиться файл
. С bash
:
IFS= LC_ALL=C read -rn4 -d '' x < file
case $x in
($'\x7fELF') echo ELF;;
("#!"*) echo script;;
(*) echo other;;
esac
( -d ''
(использовать символ NUL в качестве разделителя) - это обойти тот факт, что bash
читать
, иначе просто игнорирует байты NUL во входных данных).
См. Также:
Так как rpm не требует python (слава богу ), мы используем rpm, чтобы узнать полное имя каждого пакета, который либо содержит python в имени, либо требует базового пакета python.
# rpm -qa |grep -i python |sort
# rpm -q --whatrequires python |sort
Когда у вас есть полный список пакетов, вам нужно выяснить, откуда yum их загружает.
# grep -i '\[base\]' /etc/yum.repos.d/*
Это должно дать вам /etc/yum.repos.d/CentOS -Base.repo
Затем вам нужно посетить страницу списка зеркал в веб-браузере
# egrep 'mirrorlist.*=(os|updates)' /etc/yum.repos.d/CentOS-Base.repo
Должно быть 2 строки. Вам придется немного изменить их (в блокноте! )перед вставкой в браузер:
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
Конкретно нужно поменять релиз и арку, и удалить инфру.
Мой в конечном итоге выглядел так, когда я пошел вставлять его.
http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=updates
http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os
Как только это было сделано, я смог wget все необходимые мне пакеты, объединив несколько команд выше вместе в 4 одного -скрипта лайнера:
# while read line; do wget http://yum.tamu.edu/centos/7.5.1804/updates/x86_64/Packages/${line}.rpm; done < <(while read line; do rpm -ql ${line} |grep -iq /usr/lib/python2.7/site-packages; if [ $? -eq 0 ]; then echo ${line}; fi; done < <(rpm -q --whatrequires python |sort))
# while read line; do wget http://yum.tamu.edu/centos/7.5.1804/os/x86_64/Packages/${line}.rpm; done < <(while read line; do rpm -ql ${line} |grep -iq /usr/lib/python2.7/site-packages; if [ $? -eq 0 ]; then echo ${line}; fi; done < <(rpm -q --whatrequires python |sort))
# while read line; do wget http://yum.tamu.edu/centos/7.5.1804/updates/x86_64/Packages/${line}.rpm; done < <(while read line; do rpm -ql ${line} |grep -iq /usr/lib/python2.7/site-packages; if [ $? -eq 0 ]; then echo ${line}; fi; done < <(rpm -qa |grep -i python |sort))
# while read line; do wget http://yum.tamu.edu/centos/7.5.1804/os/x86_64/Packages/${line}.rpm; done < <(while read line; do rpm -ql ${line} |grep -iq /usr/lib/python2.7/site-packages; if [ $? -eq 0 ]; then echo ${line}; fi; done < <(rpm -qa |grep -i python |sort))
Обратите внимание: если вы скопируете и вставите имена пакетов из приведенных выше команд rpm в текстовый файл вашего дистрибутива, это может быть сокращено до 2 строк. Например, если вы поместите имена пакетов в /tmp/packagedownload.txt, вы можете сделать следующее вместо приведенного выше:
# while read line; do wget http://yum.tamu.edu/centos/7.5.1804/updates/x86_64/Packages/${line}.rpm; done </tmp/packagedownload.txt
# while read line; do wget http://yum.tamu.edu/centos/7.5.1804/os/x86_64/Packages/${line}.rpm; done </tmp/packagedownload.txt
После того, как файлы rpm будут загружены с помощью wget, вы можете просто ввести приведенную ниже команду, чтобы исправить систему и заставить yum работать:
# rpm -ivh --force *.rpm
Затем вы можете исправить любые другие пакеты, которые все еще могут быть сломаны (надеюсь, ни один из них )путем ввода ниже:
# while read line; do xargs yum -y reinstall $line; done </tmp/packagedownload.txt