Взагалі я схиляюся до перевстановлення (з резервних копій, які ви, безумовно, повинні мати). Але я відчуваю хакерство, тож ось інший спосіб (якщо припустити, що ваша система встановлена під /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 в останньому рядку).