Trova i file non installati dal gestore pacchetti RPM


9

C'è un modo per scoprire tutti i file su un determinato sistema che non sono stati installati tramite RPM? Capisco di poterlo forzare da solo usando qualcosa di simile rpmquery -fa uno script che scorre tutti i file nel file system, tuttavia mi chiedevo se esiste un modo standard per farlo per i sistemi basati su RPM (in particolare Fedora, che uso in casa). Dal momento che questo per Fedora, va bene usarlo yumo dnfcapirlo.

Se non esiste un modo standard per farlo, qualcuno conosce alcuni script preesistenti per farlo? Non voglio reinventare la ruota se non ne ho bisogno.

PS C'è un'altra domanda simile a questa , ma riguarda Gentoo e Portage, quindi non è del tutto rilevante.


Per curiosità, quale sarebbe il caso d'uso reale?
doktor5000,

1
@ doktor5000 Ho un desktop domestico a cui ho aggiunto una discreta quantità di software di terze parti negli ultimi due anni. Invece di provare a rintracciare manualmente ogni singolo file che ho installato al di fuori di rpm, sarebbe bello avere un elenco di quei file in modo da sapere cosa copiare manualmente, reinstallare quando aggiorno il mio sistema o semplicemente ignorare. Ho sfortuna quando provo a effettuare aggiornamenti se Fedora, quindi tendo a reinstallarlo completamente fresco.
eestrada,

Bene, allora forse sarebbe più semplice limitarsi ai pacchetti rpm che non vengono forniti con i repository di base. Inoltre, altri software sono comunemente installati su / usr / local per impostazione predefinita o in / opt, il che dovrebbe essere abbastanza facile da controllare in quanto non utilizzato dai normali pacchetti di distribuzione. Per percorsi standard come / usr / bin, / usr / share o / usr / lib e simili dovresti probabilmente ricorrere a uno dei metodi di scriptlet come collegato nella mia risposta.
doktor5000,

Risposte:


5

un po 'in ritardo alla festa, ma si spera che qualcuno lo troverà utile:

find /usr/ -exec /bin/sh -c "rpm -qf {} &> /dev/null || echo {}" \;

Questo comando esegue la scansione del file system e viene eseguito rpm -qfsu di esso. rpm -qfstampa il pacchetto corrispondente per un file e fortunatamente ha un valore di ritorno di 0 se trova uno e 1 altrimenti.

Se sei coraggioso, puoi legare l'output a | xargs rm -f, ma personalmente non sarei così coraggioso. Si scopre che ci sono molte cose in / usr che non sono realmente di proprietà di nulla.


3

Per quanto ne so, questo non è possibile con una sorta di comando dedicato, solo tramite un piccolo scripting. TL; DR: vedere i collegamenti in basso. E per i sistemi basati su rpm o altri gestori di pacchetti basati su binari questo non ha molto senso. Tali gestori di pacchetti sono generalmente macchine basate sullo stato intese a tenere traccia delle cose che installano da sole e a non sapere tutto ciò che gli utenti si intrufolano nel sistema "dietro la schiena" del gestore di pacchetti.

Dove disegneresti la linea per i file che non sono di proprietà dei file rpm? Che dire dei file temporanei (think / tmp e / var / tmp) o delle cache (think / var / cache) o dei file creati da un utente (/ home o / srv o altri mountpoint definiti dall'utente).

Per le distribuzioni basate su sorgenti potrebbe avere senso offrire tale funzionalità se il caso d'uso le limita alle directory FHS utilizzate dai pacchetti "system" come / usr, / bin, / lib e simili, al contrario di / usr / local o / optare per software di terze parti.


Vedi le seguenti domande simili per gli scriptlet per fare ciò che hai chiesto:


3

Per /superuser/555918/how-do-i-list-all-the-files-not-owned-by-any-package-in-a-rpm-based-system , il seguente comando è una solida base per ciò di cui hai bisogno:

comm -13 <(rpm -qla | sort) <(find / -type f | sort)

Personalizzare ulteriormente filtrando il comando find alle directory di interesse (specificando la lista delle directory al posto di /(ad esempio /{usr,bin}) o escludere le cartelle come /proc, /dev, /home, e /tmp.


Più esaustivamente: comm -13 <(rpm -qla | sort | uniq) <(find / -xdev \( -type f -o -type d -o -type l \) | sort) elenca ( -l) i file in tutti i pacchetti installati ( rpm -qa) e li ordina, quindi rimuove i duplicati (poiché alcune directory sono fornite da più pacchetti). Trova anche tutti i file sulla partizione radice (senza accedere ad altri filesystem - -xdev) e restituisce tutti i file, directory e collegamenti simbolici ( \( -type f -o -type d -o -type l \)). Quindi utilizza commper confrontare, ignorando le voci solo nell'elenco rpm ( -1) e le voci in entrambi ( -3).
IBBoard

Si noti inoltre che potrebbe essere necessario utilizzare sudola ricerca in modo da poter trovare i file (specialmente sotto / etc) a cui solo root può accedere.
IBBoard
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.