È possibile tornare da una situazione così disordinata , senza reinstallare il sistema. Bene, più esattamente eseguendo un nuovo sistema nuovo o da una chiave USB o in una Virutal Box (o giù di lì) se si dispone di un sistema a doppio avvio.
Ho eseguito di nuovo lo stesso tipo di problema (qualche bug in una sceneggiatura che stavo scrivendo) e l'ho risolto, ma è necessario chiedere l'aiuto di un esperto. Sii molto cauto!
Innanzitutto, la mia situazione era più facile da risolvere perché avevo un sistema a doppio avvio (ubuntu e la mia vecchia installazione fedora), ma eseguire il sistema per una chiave USB (o forse un CD / DVD) dovrebbe fare la stessa cosa.
Mpoint = / mount / ubuntu
Per prima cosa ho montato i miei file system in questo modo (non dimenticare di creare i punti di mount): mount / dev / ubuntu / root $ MPOINT mount / dev / ubuntu / home $ MPOINT / home
Quindi ho eseguito il seguente comando (il mio problema era solo in alcune directory - critiche -) per copiare le autorizzazioni dal sistema in esecuzione a quello disordinato (in effetti, nel mio caso, ho installato un sistema Ubuntu in Virtual Box sotto fedora e ottenuto le autorizzazioni lì):
find / etc / usr / bin -exec stat --format "chmod% a $ {MPOINT}% n" {} \; > /tmp/restoreperms.sh
E poi ho eseguito lo script restoreperms.sh.
Sono stato di nuovo in grado di avviare Ubuntu.
Il contenuto di restoreperms.sh sarà simile a:
(...)
chmod 755 /mount/ubuntu//etc/ppp
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up
chmod 2750 /mount/ubuntu//etc/ppp/peers
chmod 640 /mount/ubuntu//etc/ppp/peers/provider
chmod 755 /mount/ubuntu//etc/ppp/ipv6-up.d
chmod 777 /mount/ubuntu//etc/ppp/resolv.conf
(...)
Non l'ho provato ma deve funzionare anche per proprietari e gruppi di proprietari. Qualcosa di simile a:
find / etc / usr / bin -exec stat --format 'chown% U:% G $ {MPOINT}% n' {} \; > /tmp/restoreperms.sh^
(...)
chown root:root /mount/ubuntu//etc/obex-data-server/imaging_capabilities.xml
chown root:root /mount/ubuntu//etc/obex-data-server/capability.xml
chown root:dip /mount/ubuntu//etc/ppp
chown root:root /mount/ubuntu//etc/ppp/ipv6-up
chown root:dip /mount/ubuntu//etc/ppp/peers
chown root:dip /mount/ubuntu//etc/ppp/peers/provider
chown root:root /mount/ubuntu//etc/ppp/ipv6-up.d
chown root:root /mount/ubuntu//etc/ppp/resolv.conf
(...)
Naturalmente, devi fare attenzione qui, che UID e GID sono uguali su entrambi i sistemi, ma per gli utenti e i gruppi relativi al sistema, questo non dovrebbe essere un problema.
RK:
Una cosa importante per questo è mantenere un disco di installazione sincronizzato con la versione che stai usando, o almeno lavorare con l'attuale versione di Ubuntu. Ora, ho questi comandi in un cronjob, in esecuzione ogni giorno (potrebbero essere settimane) al fine di mantenere tali informazioni. La prossima volta renderà la soluzione più semplice ma, ovviamente, dato che ho questa ora, non accadrà mai più. ;-) Qualcosa come questo:
0 12 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chmod %a %n" {} \; |/bin/bzip2 -c > /tmp/restore_chmod.$(/bin/date +%w).sh.bz2
0 13 * * * /usr/bin/find / -exec /usr/bin/stat --format="/bin/chown %U:%G %n" {} \; |/bin/bzip2 -c > /tmp/restore_chown.$(/bin/date +%w).sh.bz2
EDIT: per supportare i collegamenti, il comando combinato è:
/usr/bin/find / -exec /usr/bin/stat --format="[ ! -L {} ] && /bin/chmod %a %n" {}