TL;DR:

TL;DR:

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 (y linux-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.04las 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 --listpara una visualización bonita e interactiva, pero yo elegí usarlo --showpara 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 --showformatopción para omitir este paso, pero yo preferí un enfoque más familiar: el cutcomando. El cutcomando 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-querycomando 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 grepcomando, 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-matchopció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-moduleslos 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 removecomando, 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 sudole 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.

información relacionada