[ПРОЙДЕН] pacman: квест (драконий уровень)

Лирика, но на будущее -- хотя бы раз в месяц
comm -13 <(pacman -Qmq | sort) <(pacman -Qqe | sort) > pkglist
Ну и бэкап никто не запрещает. Очень выручает - как видно - в таких случаях. Тот же fsarchiver, либо другое по вкусу.
Ну если вы уверены что в .log есть все пакеты то парсер написать в принципе не проблема.

А иначе, надо получить список всех файлов со всех пакетов и сравнить с вашими /usr/lib/*. В целом тоже решаемая задача.
Ошибки в тексте-неповторимый стиль автора©
red
сильно муторно ( проще уж расковырять pacman.log
это был вариант.
кстати рабочий, если уж все удалено в том числе и лог.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
Пользуясь случаем, провел ликбез внуку - провел эксперимент на своем HDD: удалил /var/lib/pacman/local
ls /var/lib/pacman/local
ls: невозможно получить доступ к '/var/lib/pacman/local': Нет такого файла или каталога
Но беследно ничего из системы не удаляется - в файлах пакетов, находящихся в /var/lib/pacman/local, имеется файлик desc, в котором в самом начале прописано
%NAME%
aalib
Потратив некоторое время на определение смещения получил следующее (привожу часть вывода)
sudo hexdump -C -s 169083185600 -n 10000K /dev/sda | grep "%NAME%"
275e24aa00  25 4e 41 4d 45 25 0a 61  61 6c 69 62 0a 0a 25 56  |%NAME%.aalib..%V|
275e24fa00  25 4e 41 4d 45 25 0a 64  6d 69 64 65 63 6f 64 65  |%NAME%.dmidecode|
275e255a00  25 4e 41 4d 45 25 0a 6f  63 6c 2d 69 63 64 0a 0a  |%NAME%.ocl-icd..|
275e268a00  25 4e 41 4d 45 25 0a 66  61 61 63 0a 0a 25 56 45  |%NAME%.faac..%VE|
275e26ea00  25 4e 41 4d 45 25 0a 6c  69 62 66 66 69 0a 0a 25  |%NAME%.libffi..%|
275e270a00  25 4e 41 4d 45 25 0a 6d  65 73 61 0a 0a 25 56 45  |%NAME%.mesa..%VE|
275e274a00  25 4e 41 4d 45 25 0a 6c  69 62 78 38 36 65 6d 75  |%NAME%.libx86emu|
275e277a00  25 4e 41 4d 45 25 0a 79  61 6f 75 72 74 0a 0a 25  |%NAME%.yaourt..%|
275e27ba00  25 4e 41 4d 45 25 0a 6c  69 62 63 61 70 2d 6e 67  |%NAME%.libcap-ng|
275e28da00  25 4e 41 4d 45 25 0a 6d  65 6e 75 2d 63 61 63 68  |%NAME%.menu-cach|
275e294a00  25 4e 41 4d 45 25 0a 6e  74 70 0a 0a 25 56 45 52  |%NAME%.ntp..%VER|
275e297a00  25 4e 41 4d 45 25 0a 68  61 72 66 62 75 7a 7a 2d  |%NAME%.harfbuzz-|
275e298a00  25 4e 41 4d 45 25 0a 6c  69 62 6c 71 72 0a 0a 25  |%NAME%.liblqr..%|
275e29ca00  25 4e 41 4d 45 25 0a 67  72 61 70 68 69 74 65 0a  |%NAME%.graphite.|
275e2a1a00  25 4e 41 4d 45 25 0a 6e  61 75 74 69 6c 75 73 0a  |%NAME%.nautilus.|
275e2a8a00  25 4e 41 4d 45 25 0a 6c  69 62 6d 6f 64 70 6c 75  |%NAME%.libmodplu|
275e2ada00  25 4e 41 4d 45 25 0a 6c  69 62 67 73 66 0a 0a 25  |%NAME%.libgsf..%|
275e2afa00  25 4e 41 4d 45 25 0a 66  6c 61 73 68 70 6c 75 67  |%NAME%.flashplug|
275e2b4a00  25 4e 41 4d 45 25 0a 6c  69 62 65 76 64 65 76 0a  |%NAME%.libevdev.|
275e2c1a00  25 4e 41 4d 45 25 0a 63  75 70 73 2d 70 6b 2d 68  |%NAME%.cups-pk-h|
275e2c4a00  25 4e 41 4d 45 25 0a 6c  69 62 63 64 69 6f 2d 70  |%NAME%.libcdio-p|
275e2cba00  25 4e 41 4d 45 25 0a 6c  69 62 71 75 76 69 0a 0a  |%NAME%.libquvi..|
275e2f1a00  25 4e 41 4d 45 25 0a 78  6f 72 67 2d 78 70 72 6f  |%NAME%.xorg-xpro|
275e2f5a00  25 4e 41 4d 45 25 0a 6c  69 62 78 64 61 6d 61 67  |%NAME%.libxdamag|
275e2f7a00  25 4e 41 4d 45 25 0a 78  63 62 2d 75 74 69 6c 2d  |%NAME%.xcb-util-|
275e305a00  25 4e 41 4d 45 25 0a 6c  69 62 67 6c 76 6e 64 0a  |%NAME%.libglvnd.|
275e306a00  25 4e 41 4d 45 25 0a 70  6f 70 70 6c 65 72 0a 0a  |%NAME%.poppler..|
275e30da00  25 4e 41 4d 45 25 0a 64  76 64 2b 72 77 2d 74 6f  |%NAME%.dvd+rw-to|
275e317a00  25 4e 41 4d 45 25 0a 63  75 70 73 0a 0a 25 56 45  |%NAME%.cups..%VE|
Некоторые имена не полные, но это мелочь, зная точное смещение не проблема получить полное имя.

PS - это на случай, если нет файла pacman.log, а при наличии его все намного проще.
Ошибки не исчезают с опытом - они просто умнеют
vasek
Можно, без всякого восстановления, загрузить DMDE for Linux и просто посмотреть будут ли показаны эти разделы, если будут, то зайти в них и посмотреть файлы. Надежды, конечно, мало, но посмотреть то можно, да даже и интересно.
загрузил, попробовал
консольная версия не запускается, так как только для 32bit
графическая версия файлы не обнаружила, а только пустые папки по названиям которых в принципе наверное можно было бы восстановить имена пакетов, но из за ограничений самой программы(в бесплатной версии можно восстановить только файлы?) не удается восстановить пустые папки или как то получить сам их список
в принципе это повод задействовать другие программы для восстановления и попробовать добыть список имен каталогов, но уже нет желания этим заморачиваться так как уже почти добил pacman.log

vasek
Пользуясь случаем, провел ликбез внуку …
повезло внуку )
red
консольная версия не запускается, так как только для 32bit
У меня все работает, система 64-bit. Прога для Linux консольная (Version 3.4.4.740 (2018-08-03), запускаю командой
sudo ~/Документы/Редакторы/Дисковые_редакторы/DMDE/DMDE_linux/dmde
сайт dmde, качать Console for Linux, там же и описание и инструкции по использованию.
В основном использую в информационных целях, для анализа.

PS - да, свободная версия видит не всегда, но для этого есть другой дисковый редактор (лучший, но коммерческий, правда можно нати keygen) WinHex, один минус - виндовая. Хотя, как уже писал, всегда можно вытащить все в ручную, мне это больше нравится - видишь и понимаешь что делаешь.

EDIT 1 - Привожу снимок запущенной DMDE - папка local уже на месте, открыл файл desc для пакета aalib
Ошибки не исчезают с опытом - они просто умнеют
$ find /usr/ -type f -exec pacman -Fo {}  >> /tmp/pack \;
$ cat /tmp/pack |  awk '{print $3}' | sort | uniq -u
но это очень долго...

p.s. нужно написать скрипт который возьмёт массив с именами файлов и при первом вхождение будет выкидывать из этого массива все файлы найденного пакета

p.p.s. с массивами как-то не срослось...
find /usr -type f > /tmp/list
touch  /tmp/notfound
while true; do
[ -s /tmp/list ] || exit
for f in $(cat /tmp/list); do
  name=`pacman -Foq "$f" | head -1`
  if [[ -z "$name" ]]; then
    echo "$f" >> /tmp/notfound
    del=$(echo $f | sed 's/\//\\\//g')
    sed -i "/${del}/d" /tmp/list
    break
  fi
  echo $name >> /tmp/result
  delete=(`pacman -Flq $name`)
  for del in ${delete[@]}; do
    if [[ -f "/$del" ]]; then
      del=$(echo $del | sed 's/\//\\\//g')
      sed -i "/${del}/d" /tmp/list
    fi
  done
  echo "find $(cat /tmp/result | wc -l) pack, left $(cat /tmp/list | wc -l) file"
  echo "not found pack for $(cat /tmp/notfound | wc -l) file"
  break
done
done
Ошибки в тексте-неповторимый стиль автора©
indeviral
find /usr/ очень долго
Можно же не весь /usr шерстить а для начала переставить пакеты из списка

 pacman -Fo $(find /etc /opt /usr/bin  -type f)

оставшиеся файлы (их на много меньше должно остаться) не принадлежащие пакетам смотреть lostfiles
# pacman -Fo $(lostfiles)

Но все равно будет показано много одинаковых пакетов содержащих один и тот же файл так что вручную разбираться придется

Если лог пакмана сохранился то по вики восстановить базу
vs220
Можно же не весь /usr
можно, достаточно /usr/bin /usr/lib /usr/share
в opt из офф репозитория всего 35 пакетов ложат файлы, тем более файлы этих пакетов присутствуют в /usr/lib и /usr/share
а /etc/ сканировать вообще бесполезно.

vs220
Но все равно будет показано много одинаковых пакетов содержащих один и тот же файл так что вручную разбираться придется
не будет если
indeviral
скрипт который возьмёт массив с именами файлов и при первом вхождение будет выкидывать из этого массива все файлы найденного пакета
скрипт выше если есть желание можете проверить, на 1000 пакетов уходит ~5 часов(если уберёте лишнее будет ещё быстрее)
p.s.
правда на счёт точности пока ничего не скажу.
Ошибки в тексте-неповторимый стиль автора©
indeviral
не будет
Я про подобное
usr/bin/nvidia-xconfig принадлежит extra/nvidia-390xx-utils 390.116-1
usr/bin/nvidia-xconfig принадлежит extra/nvidia-utils 430.26-1
usr/bin/nvidia-xconfig принадлежит archlinuxcn/nvidia-utils-beta 430.26-2

indeviral
/etc/ сканировать вообще бесполезно
Не уверен но вроде есть пакеты только с конфигами
 
Зарегистрироваться или войдите чтобы оставить сообщение.