Ejecuté el comando apt autoremove pero esas carpetas persisten.
Como me mostró el comando "du -h -x --max- Depth=1 /usr/lib | sort -hr | head -n 10", actualmente están usando casi 1G cada uno:
858M /usr/lib/modules
823M /usr/lib/x86_64-linux-gnu
¿Cómo puedo limpiar esto? Gracias.
Respuesta1
Necesitaba hacer esto, ya que después de más de un año de usar Linux en una Chromebook, /usr/lib/modules ocupaba más de 10 GiB de espacio en disco (lo cual es un bien escaso en este dispositivo) y solo voy a ejecutar una sola instancia del kernel de todos modos. El espacio en disconecesarioejecutar un solo kernel era solo ~500MiB; por el contrario, ~5% del espacio en disco realmente se utilizaba.
Yo mismo se me ocurrió una solución, basada en mi distribución (KDE Neon, basada en Ubuntu LTS), que consta de múltiples comandos Bash para hacer lo siguiente:
- Detectar la versión de Linux actualmente en ejecución
- Detectar
linux-modules-*
paquetes que pertenecen a versiones de Linuxnoactualmente corriendo - Desinstale todos
linux-modules-*
los paquetes (ylinux-image-*
los paquetes dependientes) que no se estén ejecutando
Tenga en cuenta que sólo he probado estocuando ya esta corriendoel último kernel de Linux instalado en mi distribución. Su distribución puede venir con paquetes que dependen de un metapaquete, como linux-generic-hwe-20.04
las distribuciones basadas en Ubuntu 20.04 LTS, y no he probado este script cuando ejecuto un Linux antiguo después de instalar uno más nuevo.
TL;DR:
sudo apt remove $(dpkg-query --show 'linux-modules-*' | cut -f1 | grep -v "$(uname -r)")
Bien, pero ¿qué significa eso?
El primer comando a ejecutar es uname -r
. Esto imprime el número de versión de su kernel de Linux que se está ejecutando actualmente, en un formato como este:
$ uname -r
5.15.0-48-generic
Obtenga más información enman uname
.
El segundo comando a considerar es dpkg-query
, que nos permite consultar los paquetes instalados de diferentes maneras. Puede usarlo --list
para una visualización bonita e interactiva, pero yo elegí usarlo --show
para simplificar las secuencias de comandos.
$ dpkg-query --show 'linux-modules-*'
linux-modules-5.11.0-44-generic 5.11.0-44.48~20.04.2
linux-modules-5.11.0-46-generic 5.11.0-46.51~20.04.1
# etc.
Obtenga más información enman dpkg-query
.
Un lector decidido probablemente podría descubrir cómo utilizar la --showformat
opción para omitir este paso, pero yo preferí un enfoque más familiar: el cut
comando. El cut
comando simplemente toma una entrada estándar, un delimitador opcional provisto -d
(un carácter tabulador por defecto) y un argumento de campo provisto con -f
. En este caso, toma el resultado de nuestro dpkg-query
comando y devuelve la primera columna:
$ dpkg-query --show 'linux-modules-*' | cut -f1
linux-modules-5.11.0-44-generic
linux-modules-5.11.0-46-generic
# etc.
Obtenga más información enman cut
.
Canalizamos la salida deesoen el grep
comando, que nos permite seleccionar líneas que coincidan con un determinado patrón - o, en este caso, líneas quenocoincidir con un patrón determinado, usando la -v|--invert-match
opción. Devuelve "$(uname -r)"
una línea como 5.15.0-48-generic
, que luego se usa como patrón para grep
. Así es como seleccionamos todos linux-modules
los paquetes que estánnoactualmente en ejecución.
$ dpkg-query --show 'linux-modules-*' | cut -f1 | grep -v "$(uname -r)"
# = dpkg-query --show 'linux-modules-*' | cut -f1 | grep -v "5.15.0-48-generic"
linux-modules-5.11.0-44-generic
linux-modules-5.11.0-46-generic
# etc.
Obtenga más información enman grep
.
Finalmente, solo usamos esta lista como argumentos para el sudo apt remove
comando, que probablemente sea tan familiar para la gente en este momento que no necesita mucha explicación:
$ sudo apt remove $(dpkg-query --show 'linux-modules-*' | cut -f1 | grep -v "$(uname -r)")
# = sudo apt remove linux-modules-5.11.0-44-generic linux-modules-5.11.0-46-generic [...]
... pero en caso de que esos seannofamiliar para ti,man sudo
le permite ejecutar un comando como root, el administrador del sistema (o teóricamente otro usuario), que es necesario para usarman apt
, que gestiona paquetes y dependencias en distribuciones basadas en Debian (de ahí Ubuntu).
Respuesta2
Estaba intentando vaciar /usr/lib y encontrar un enfoque:
apt-show-versions |grep "No available version in archive"
mostrará los paquetes que actualmente no proporciona ninguna fuente.lista (para esta versión de Ubuntu). Incluye, por ejemplo, paquetes instalados manualmente de versiones anteriores de Ubuntu, si ha estado realizando actualizaciones. El problema es que también hay paquetes que quería conservar, como slack, draw.io, etc., por lo que debes inspeccionar manualmente los paquetes que ya no necesitas.
Si encuentra un patrón en los paquetes que definitivamente desea eliminar, como los paquetes de Ubuntu 16.04 en Ubuntu 22.04, puede ejecutar:
apt-show-versions |grep "No available version in archive" |grep 16.04 |cut -d " " -f1 |xargs apt remove --purge
Respuesta3
Simplemente pon:No.
En teoría, podrías eliminar módulos que no sean necesarios en la máquina en la que estás, pero si haces un paso equivocado en alguna parte, corres el riesgo de que la máquina ya no arranque. Y tendrías que repetirlo para cada actualización del kernel.
Es un gigabyte. El disco es barato. Vive con ello.