Restaurer des fichiers supprimés depuis leurs paquets Debian/Ubuntu

Posté le sam. 24 mai 2014 dans Ubuntu & GNU Linux

Il y a peu, en bidouillant mes lanceurs Unity sous Ubuntu, j'ai supprimé le dossier /usr/share/icons du système. La conséquence a été plutôt rapide : le système s'est plus ou moins figé, impossible de lancer un programme quel qu'il soit (donc pas de terminal), relancer la session ou redémarrer la machine ne changeait rien...

Heureusement, il était toujours possible de basculer en mode terminal avec un petit Ctrl + Alt + F1 . Après quelques recherches sur Internet, j'ai pu trouver les commandes qui m'ont été utiles. L'idée ici était de faire la liste des paquets Ubuntu qui avaient installé un fichier dans /usr/share/icons. Pour cela, dpkg a été bien pratique

$ dpkg -S /usr/share/icons
tango-icon-theme, clementine, gimp-data, filezilla-common, geany-common, gnome-accessibility-themes, gnome-orca,
aisleriot, ubuntu-mono, evince-common, eog, humanity-icon-theme, gnome-mines, empathy-common, blender-data,
gnome-mahjongg, gnome-user-share, openjdk-7-jre:amd64, hicolor-icon-theme, cabextract, deja-dup, sqliteman,
smuxi-frontend-gnome, meld, software-center, libpeas-common, unity-asset-pool, gnome-online-accounts,
libgweather-common, gnome-power-manager, gnome-icon-theme, gnome-icon-theme-symbolic, unity-control-center,
update-notifier, homebank, indicator-sync, imagemagick, unity-webapps-common, gparted, gnome-sudoku, gnome-media,
xterm, vlc-data, audacious, file-roller, onboard, totem-common, ibus, unity-control-center-signon, btsync-gui-gtk,
webbrowser-app, software-properties-gtk, ubuntu-artwork, indicator-session, indicator-messages, gnome-disk-utility,
gnome-control-center-data, activity-log-manager, chromium-browser, poedit, unity-settings-daemon, dconf-editor,
rhythmbox-data, network-manager-gnome, audacity-data, gnome-settings-daemon, apport, synaptic, aptdaemon-data,
shotwell-common, skype-bin, icedtea-netx-common, modemmanager, dropbox, seahorse, gcr, brasero-common,
landscape-client-ui-install, dmz-cursor-theme, baobab, indicator-printers, cheese-common, gnome-bluetooth,
gnome-session-common, usb-creator-gtk, xchat, gnome-system-log, ubuntuone-client-data, gnome-nettool,
unity-scope-gdrive, xcursor-themes, transmission-common, remmina-common, deluge-gtk,
libreoffice-common: /usr/share/icons

On a donc une liste des paquets que l'on va devoir réinstaller. La commande est la suivante

sudo apt-get install --reinstall <paquet>

En temps normal, j'aurais copié la liste dans un éditeur de texte digne de ce nom, puis j'aurais édité en bloc pour construire la commande dont j'ai besoin. Ici, pas d'autre choix que de tout faire en ligne de commande...

Dans apt-get, si l'on veut installer plusieurs paquets, il faut les séparer par des espaces. C'est la même chose pour les réinstaller. On a donc besoin de nettoyer un peu la sortie de dpkg -S

$ dpkg -S /usr/share/icons | sed -e 's/,//g'
tango-icon-theme clementine gimp-data filezilla-common geany-common gnome-accessibility-themes gnome-orca aisleriot
ubuntu-mono evince-common eog humanity-icon-theme gnome-mines empathy-common blender-data gnome-mahjongg
gnome-user-share openjdk-7-jre:amd64 hicolor-icon-theme cabextract deja-dup sqliteman smuxi-frontend-gnome
meld software-center libpeas-common unity-asset-pool gnome-online-accounts libgweather-common gnome-power-manager
gnome-icon-theme gnome-icon-theme-symbolic unity-control-center update-notifier homebank indicator-sync imagemagick
unity-webapps-common gparted gnome-sudoku gnome-media xterm vlc-data audacious file-roller onboard totem-common
ibus unity-control-center-signon btsync-gui-gtk webbrowser-app software-properties-gtk ubuntu-artwork
indicator-session indicator-messages gnome-disk-utility gnome-control-center-data activity-log-manager
chromium-browser poedit unity-settings-daemon dconf-editor rhythmbox-data network-manager-gnome audacity-data
gnome-settings-daemon apport synaptic aptdaemon-data shotwell-common skype-bin icedtea-netx-common modemmanager
dropbox seahorse gcr brasero-common landscape-client-ui-install dmz-cursor-theme baobab indicator-printers
cheese-common gnome-bluetooth gnome-session-common usb-creator-gtk xchat gnome-system-log ubuntuone-client-data
gnome-nettool unity-scope-gdrive xcursor-themes transmission-common remmina-common deluge-gtk
libreoffice-common: /usr/share/icons

Beaucoup mieux, mais on a toujours un rappel du dossier recherché à la fin de la liste. Qu'à cela ne tienne

$ dpkg -S /usr/share/icons | sed -e 's/,//g' | sed -e 's/: \/usr\/share\/icons//g'
tango-icon-theme clementine gimp-data filezilla-common geany-common gnome-accessibility-themes gnome-orca aisleriot
ubuntu-mono evince-common eog humanity-icon-theme gnome-mines empathy-common blender-data gnome-mahjongg
gnome-user-share openjdk-7-jre:amd64 hicolor-icon-theme cabextract deja-dup sqliteman smuxi-frontend-gnome meld
software-center libpeas-common unity-asset-pool gnome-online-accounts libgweather-common gnome-power-manager
gnome-icon-theme gnome-icon-theme-symbolic unity-control-center update-notifier homebank indicator-sync imagemagick
unity-webapps-common gparted gnome-sudoku gnome-media xterm vlc-data audacious file-roller onboard totem-common
ibus unity-control-center-signon btsync-gui-gtk webbrowser-app software-properties-gtk ubuntu-artwork
indicator-session indicator-messages gnome-disk-utility gnome-control-center-data activity-log-manager
chromium-browser poedit unity-settings-daemon dconf-editor rhythmbox-data network-manager-gnome audacity-data
gnome-settings-daemon apport synaptic aptdaemon-data shotwell-common skype-bin icedtea-netx-common modemmanager
dropbox seahorse gcr brasero-common landscape-client-ui-install dmz-cursor-theme baobab indicator-printers
cheese-common gnome-bluetooth gnome-session-common usb-creator-gtk xchat gnome-system-log ubuntuone-client-data
gnome-nettool unity-scope-gdrive xcursor-themes transmission-common remmina-common deluge-gtk libreoffice-common

Oui je sais ça commence à se compliquer, mais c'est bientôt fini... Il nous reste à passer cette jolie liste de paquets en paramètre de apt-get

sudo apt-get install --reinstall $(dpkg -S /usr/share/icons | sed -e 's/,//g' | sed -e 's/: \/usr\/share\/icons//g')

Il est temps de prendre un petite pause, la réinstallation de tous les paquets va prendre un peu de temps... Une fois réinstallés, il suffit de repasser en mode graphique (Ctrl + Alt + F7 ), et tout rentre dans l'ordre.

J'ai quand même eu la chance dans ce cas d'avoir supprimé des fichiers moyennement importants pour le fonctionnement général du système. Ça aurait pu être beaucoup plus compliqué avec /usr/bin ou autre. Il faut toujours réfléchir à deux fois avant d'envoyer un sudo rm -fr  sur quelque chose !