Effacer les fichiers qui ne sont contenus dans aucun paquet

Le
BERTRAND Jo=c3=abl
Bonjour à tous,

À la suite d'un nouveau dysfonctionnement de systemd (et qu'on ne me
dise surtout pas que ce n'est pas systemd le fautif, le même bug est
visible sur d'autres distributions sur systemd 245 et il y a plein de
gens qui râlent fort en ce moment ;-) ), les interfaces réseaux de mon
serveur principal, tant qu'à faire à 500 bornes de chez moi, ont été
sauvagement renommées. Les règles udev ne servaient plus à rien. En
soit, c'est déjà ennuyeux. Mais pire que cela, il y avait un script qui
s'appuyait sur un nom d'interface et qui s'est mis à faire n'importe
quoi. Au lieu de virer les fichiers plus vieux que 7 jours d'une
arborescence de /var, il a commencé à faire la même chose dans /bin
(erreur de typo dans le script en question).

Comme il n'y a pas de répertoire rescue (contrairement à NetBSD)
contenant les utilitaires liés statiquement, j'ai copié à la hussarde
/bin, /lib/x86, /usr/bin et /usr/lib/x86 depuis une installation
fraîche parce que, comme d'habitude, c'est toujours quand on a besoin
d'une sauvegarde qu'on s'aperçoit que la dernière a merdé !

J'ai réussi à faire redémarrer le système, mais je me retrouve
maintenant avec des fichiers surnuméraires. Existe-t-il un moyen
d'effacer tous les fichiers d'un répertoire qui ne sont pas dans l'un
des paquets installé sur le système (autre que l'algo trivial qui doit
être en n² consistant à chercher pour tous les fichiers du répertoire
s'ils apparaissent dans l'une des sorties de dpkg-query -L xx) ?

Bien cordialement,

JKB
Vos réponses
Trier par : date / pertinence
Sébastien Dinot
Le #26548738
BERTRAND Joël a écrit :
Existe-t-il un moyen d'effacer tous les fichiers d'un répertoire qui
ne sont pas dans l'un des paquets installé sur le système (autre que
l'algo trivial qui doit être en n² consistant à chercher pour tous les
fichiers du répertoire s'ils apparaissent dans l'une des sorties de
dpkg-query -L xx) ?

Cela me semble très délicat car des fichiers ou des liens symboliques
peuvent ne pas être fournis par les paquets, mais bel et bien créés par
eux lors de l'installation.
J'ai trouvé la commande élégante et efficace pour identifier tous les
paquets non fournis par les paquets sur Stack Exchange :
https://unix.stackexchange.com/questions/153260/how-to-find-files-that-are-not-owned-by-any-package
La commande est :
comm -23 <(find / -xdev -type f | sort) <(sort -u /var/lib/dpkg/info/*.list)
Mais cette liste constitue une base de travail brute, qu'il faut
minutieusement affiner. Par exemple, il faut en exclure tout ce qui est
dans /home et dans d'autres répertoires tels que /usr/lib, /var/log,
voire /var, etc.
Sébastien
--
Sébastien Dinot,
http://www.palabritudes.net/
Ne goûtez pas au logiciel libre, vous ne pourriez plus vous en passer !
Haricophile
Le #26548777
Le mercredi 10 juin 2020 à 15:05 +0200, Sébastien Dinot a écrit :
Mais cette liste constitue une base de travail brute, qu'il faut
minutieusement affiner. Par exemple, il faut en exclure tout ce qui
est
dans /home et dans d'autres répertoires tels que /usr/lib, /var/log,
voire /var, etc.

Sébastien

A condition de monter le volume en fonction, ne serait-il pas opportun
d'utiliser aussi les date de dernier accès pour éviter les impairs ?
Publicité
Poster une réponse
Anonyme