¿Hay alguna forma de averiguar todos los archivos en un sistema dado que no se instalaron a través de RPM? Entiendo que puedo forzarlo por mí mismo usando algo como rpmquery -f
en un script que recorre todos los archivos del sistema de archivos, sin embargo, me preguntaba si hay alguna forma estándar de hacer esto para los sistemas basados en RPM (específicamente Fedora, que uso en casa). Dado que esto es para Fedora, está bien usarlo yum
o dnf
resolverlo.
Si no hay una forma estándar de hacerlo, ¿alguien sabe de algunos scripts preexistentes para hacerlo? No quiero reinventar la rueda si no lo necesito.
PD: Hay otra pregunta similar a esta , pero se trata de Gentoo y Portage, por lo que no es totalmente relevante.
Respuestas:
un poco tarde para la fiesta, pero espero que alguien encuentre esto útil:
Este comando se arrastra sobre el sistema de archivos y se ejecuta
rpm -qf
en él.rpm -qf
imprime el paquete correspondiente para un archivo y, afortunadamente, tiene un valor de retorno de 0 si encuentra uno y 1 de lo contrario.Si eres valiente, puedes vincular la salida
| xargs rm -f
, pero personalmente no sería tan valiente. Resulta que hay muchas cosas en / usr que realmente no son propiedad de nada.fuente
Hasta donde yo sé, esto no es posible con algún tipo de comando dedicado, solo a través de una pequeña secuencia de comandos. TL; DR: vea los enlaces en la parte inferior. Y para sistemas basados en rpm u otros gestores de paquetes basados en binarios, esto no tiene mucho sentido. Dichos administradores de paquetes suelen ser máquinas basadas en el estado destinadas a realizar un seguimiento de las cosas que instalan ellos mismos, y no a saber todo lo que los usuarios se escabullen en el sistema "detrás de la parte posterior" del administrador de paquetes.
¿Dónde trazaría la línea para los archivos que no son propiedad de los archivos rpm? ¿Qué pasa con los archivos temporales (think / tmp y / var / tmp) o cachés (think / var / cache) o archivos creados por un usuario (/ home o / srv u otros puntos de montaje definidos por el usuario)?
Para las distribuciones basadas en la fuente, podría tener sentido ofrecer esa funcionalidad si el caso de uso los limita a directorios FHS utilizados por paquetes "del sistema" como / usr, / bin, / lib y similares, en lugar de, por ejemplo, / usr / local o / optar por software de terceros.
Consulte las siguientes preguntas similares para los scriptlets para hacer lo que solicitó:
fuente
Por /superuser/555918/how-do-i-list-all-the-files-not-owned-by-any-package-in-a-rpm-based-system , el siguiente comando es una base sólida para lo que necesita:
comm -13 <(rpm -qla | sort) <(find / -type f | sort)
Personalizar aún más filtrando el comando find a los directorios de interés (ya sea especificando la lista de directorios en lugar de
/
(por ejemplo/{usr,bin}
) o excluir carpetas como/proc
,/dev
,/home
, y/tmp
.fuente
comm -13 <(rpm -qla | sort | uniq) <(find / -xdev \( -type f -o -type d -o -type l \) | sort)
Esto enumera (-l
) los archivos en todos los paquetes instalados (rpm -qa
) y los ordena, luego elimina los duplicados (porque algunos directorios son suministrados por múltiples paquetes). También encuentra todos los archivos en la partición raíz (sin entrar en otros sistemas de archivos-xdev
) y devuelve todos los archivos, directorios y enlaces simbólicos (\( -type f -o -type d -o -type l \)
). Luego se utilizacomm
para comparar, ignorando las entradas solo en la lista de rpm (-1
) y las entradas en ambos (-3
).sudo
en la búsqueda para poder encontrar archivos (especialmente bajo / etc) a los que solo puede acceder la raíz.