Я просто случайно сделал rm -r /var
, но, к счастью, мне удалось это сделать до того, как были нанесены дополнительные убытки. Есть ли способ узнать все пакеты, файлы которых были удалены в этой папке, чтобы я мог их переустановить?
% ls -l /var
total 20
drwxr-xr-x 2 root root 4096 Jan 14 08:26 backups
drwxr-xr-x 23 root root 4096 Jan 6 20:26 cache
drwxr-xr-x 70 root root 4096 Jan 14 09:26 lib
lrwxrwxrwx 1 root root 9 Oct 31 17:53 lock -> /run/lock
drwxrwsr-x 2 root mail 4096 Oct 17 02:59 mail
lrwxrwxrwx 1 root root 4 Oct 31 17:53 run -> /run
drwxr-xr-x 11 root root 4096 Jan 10 22:06 spool
Сначала ответ более общий и простой:
Предполагая, что область состояния dpkg не повреждена, вы можете определить, отсутствуют ли в каких-либо установленных пакетах зарегистрированные файлы, например:
for p in $(dpkg-query -f '${Package} ' -W); do
dpkg -L $p | grep '^/' | while read file; do
[ -e "$file" ] || echo "$p is missing $file"
done
done
ограничив проверку файлами в /var
, вы можете просто изменить выражение grep:
for p in $(dpkg-query -f '${Package} ' -W); do
dpkg -L $p | grep '^/var/' | while read file; do
[ -e "$file" ] || echo "$p is missing $file"
done
done
Однако это может иметь ограниченную полезность для вас. Частично потому, что большинство пакетов в Debian / Ubuntu не отправляют много файлов напрямую в /var
, а также потому, что область состояния dpkg, о которой я упоминал , живет в /var
, в /var/lib/dpkg
. Если что-то было удалено оттуда, ваша проблема становится немного более сложной.
Большинство данных в /var
являются «переменными данными»; "спуфить каталоги и файлы, административные и журнальные данные, а также временные и временные файлы" в соответствии с FHS. Большая часть этого, если не большая часть, не вернется, даже если вы переустановите все пакеты. Но, к тому же, ваша система, вероятно, все еще может работать довольно хорошо без нее.
Наиболее важные данные в /var
- это ваши собственные данные; это может быть содержимое базы данных, почта, crontabs и тому подобное. Большая часть этого будет в соответствии с /var/lib
, /var/mail
, /var/spool
и /var/local
, и /var/opt
. Если данные такого рода были удалены, то вам, возможно, просто нужно надеяться на хорошие резервные копии. Как правило, менее важны системные журналы в /var/log
. Если они исчезли, очевидно, вы потеряли способность диагностировать прошлые проблемы, но все должно работать . Остальные наиболее распространенные каталоги в /var
, (/var/backups
, /var/cache
, /var/run
, /var/lock
, /var/tmp
; некоторые из них могут быть символическими ссылками на /run
или где-либо еще), вам не нужно беспокоюсь о; данные должны быть восстановлены приложением-владельцем.
Наконец, если вы не перезагружали свою систему или системные демоны после операции случайного удаления, некоторые из файлов, которые кажутся удаленными, могут все еще незаметно зависать, оставаясь открытыми каким-либо процессом. Инструмент lsof
может помочь вам найти их, и вы можете извлечь такие файлы, скопировав их из /proc/$pid/fd/$fdnumber
.
Я бы пошел в более простом подходе.
Помните, что у вас есть зеркало (кеш, собственно) всех ваших установленных пакетов в
/var/cache
Так что, если вы хотите восстановить программы и настройки, просто войдите в кеш и переустановите вещи там. Конечно, это будет работать только в том случае, если вы не установили ничего, что могло бы сломать вашу систему, И если вы не удалили кеш пакетов apt (зачем вам делать что-то подобное!?) .
Если это так, я пойду на:
cd /var/cache/apt/archives/
sudo apt-get install *.deb
Опять же, вы должны делать это только в том случае, если ваша система работала нормально до удаления материала. В любом случае, вы найдете все установленные пакеты в этом месте, перенастроив ваши настройки, как при первой установке (так что вы получите программы + конфиги, несмотря на комментарий ниже).