Взагалі я схиляюся до перевстановлення (з резервних копій, які ви, безумовно, повинні мати). Але я відчуваю хакерство, тож ось інший спосіб (якщо припустити, що ваша система встановлена під /target
):
Отримайте список усіх встановлених пакетів, у яких є файли /bin
:
grep ^/bin/ /target/var/lib/dpkg/info/*.list | sed 's%^.*/\([^/\.]*\).list%\1%' >/tmp/pkglist
(У моїй системі Debian Squeeze загалом 34 пакети, майже всі вони є основними)
Завантажте кожен із цих пакетів (мені не вдалося зациклюватися на скрипті цього біту, тому просто натисніть пакети пакунків.ubuntu.com та завантажте їх десь під /target
). Якщо вам пощастило, деякі пакунки все ще можуть плавати навколо /target/var/cache/apt/archives
.
Для кожного пакета запустіть /target/usr/bin/dpkg -x <package> /target
. Я dpkg
абсолютно впевнений, що це все є самодостатніми в наші дні, і не повинен закликати нічого до /bin
себе.
Після того, як ви повернете систему на ноги, вам слід переконатися в цьому apt-get --reinstall install <all the packages from step 1>
, оскільки (оскільки ви працюєте з попереднім випуском, який, як каже Sysadmin Cat, є ні-ні у виробничих системах), версії пакетів Ви тільки що видобули, ймовірно, будуть відрізнятися від тих, що були в системі раніше, і ви хочете переконатися, що система точно знає, що до чого.
dpkg-query -S /bin
зробив би те саме, що і твояgrep .. | sed
строфа? Якщо список потрібно очистити, щоб перерахувати одну назву пакета на рядок, тоді вінdpkg-query -S /bin | sed 's/\,\ /\n/g'
працює (хоча має додатковий: / bin в останньому рядку).