Eliminar kernels antiguos

Enviado por PabliNet el 25 Enero, 2012 - 04:54.

En esta entrada voy a explicar cómo llegué a eliminar kernels utilizando 3 interesantes comandos (grep, cut y awk) junto a apt-get y dpkg.

Comando:

  • grep es para filtrar el resultado de una instrucción o un archivo mediante una expresión regular.
    Ejemplo: Queremos conocer todos los archivos que cuyo nombre contengan «pera», entonces hacemos:
    $ ls | grep pera
    desespera-sh
    espera.mp3
    peralta.png
    peras.doc
  • cut se utilizará para delimitar los caracteres del resultado.
    $ ls | grep pera | cut -d p -f2
    era-sh
    era.m
    eralta.
    eras.doc

    La opción -d es para delimitar según un caracter y la opción -fn nos indicará a partir del número de carácter repetido. Suponiendo tres ejemplo sería:

    $ echo Me gusta comer palta con dulce de leche | cut -d t -f1
    Me gus
    $ echo Me gusta comer palta con dulce de leche | cut -d t -f2
    a comer pal
    $ echo Me gusta comer palta con dulce de leche | cut -d t -f3
    a con dulce de leche
  • awk es un comando de Perl y lo utilizaremos para que solo aparezca en pantalla una columna específica.
    Supongamos que tengamos un archivo que contenga tabla con varias columnas y queremos ver la tercera columna, hacemos esto:
    cat tabla.txt | awk '{print $3}'
  • dpkg con la opción --get-selections nos muestra todos los paquetes que tenemos instalados y desinstalados sin removerlos del todo.

Algunos trucos a tener en cuenta:
En GNU/Linux podemos utilizar el resultado de un comando dentro de otro con el signo $ segundo del comando entre paréntesis. Por ejemplo queremos crear un directorio que cuyo nombre contenga la fecha y hora actual utilizando «mkdir» y «date».
El comando «date» quedará así devolverá: año-mes-día.hora:minutos:segundos

date +%Y-%m-%d.%H:%M:%S

Entonces harémos esto:

$ mkdir $(date +%Y-%m-%d.%H:%M:%S)

También podemos introducir dos o más comandos separándolos con un punto y coma (;). En este ejemplo editarémos un archivo con «nano» y luego visualizaremos su contenido con «cat».

$ nano archivo.txt; cat archivo.txt

Bueno, habiendo explicado lo anterior, nos centráremos en como eliminar los kernels antiguos.

Primero tenemos que ver y analizar con qué kernels iniciamos la PC:

$ uname -r

Luego vemos qué paquetes de nuestro núcleo tenemos instalados:

$ dpkg --get-selections | grep linux-
linux-firmware install
linux-generic install
linux-headers-3.0.0-14 install
linux-headers-3.0.0-14-generic install
linux-headers-3.0.0-15 install
linux-headers-3.0.0-15-generic install
linux-headers-generic install
linux-image-3.0.0-14-generic install
linux-image-3.0.0-15-generic install
linux-image-generic install
linux-libc-dev install
linux-sound-base install
syslinux-common install
syslinux-themes-debian install
syslinux-themes-debian-squeeze install

Caramba, con dpkg --get-selections | grep linux- salen paquetes que no pertenecen a los kernel. Entonces tendremos que seguir filtrando.

Primero lo haremos con linux-headers:

$ dpkg --get-selections | grep linux- | grep headers
linux-headers-3.0.0-14 install
linux-headers-3.0.0-14-generic install
linux-headers-3.0.0-15 install
linux-headers-3.0.0-15-generic install
linux-headers-generic install

Todavía no me gusta... tenemos que sacar el linux-headers-generic. La opción -v en grep significa filtrar todo lo que es distinto a la versión actual:

$ dpkg --get-selections | grep linux- | grep headers | grep -v headers-generic
linux-headers-3.0.0-14 install
linux-headers-3.0.0-14-generic install
linux-headers-3.0.0-15 install
linux-headers-3.0.0-15-generic install

Ahora, de esta lista tenemos que quitar la versión actual y eso es complicado. Existen dos paquetes linux-headers-3.0.0-15 y linux-headers-3.0.0-15-generic. Si le agregamos al comando el filtro «grep -v $(uname -r)» solo nos filtrará linux-headers-3.0.0-15-generic. Para que filtre los dos paquetes tenemos que generar el nombre linux-headers-3.0.0-15 de la siguiente utilizar el comando «echo» con «uname» y «cut».
En este casi lo primero que se genera es: 3.0.0

$ uname -r | cut -d \- -f1
3.0.0

Luego hacemos para generar el 15:

$ uname -r | cut -d \- -f2
15

Y usamos el comando «echo» para juntar todo.

$ echo $(uname -r | cut -d \- -f1)-$(uname -r | cut -d \- -f2)
3.0.0-15

Entonces a esto lo utilizamos de la siguiente manera:

$ dpkg --get-selections | grep linux- | grep headers | grep -v headers-generic | grep -v $(echo $(uname -r | cut -d \- -f1)-$(uname -r | cut -d \- -f2))
linux-headers-3.0.0-14 install
linux-headers-3.0.0-14-generic install

Con awk le sacamos los install:

$ dpkg --get-selections | grep linux- | grep headers | grep -v headers-generic | grep -v $(echo $(uname -r | cut -d \- -f1)-$(uname -r | cut -d \- -f2)) | awk '{print $1}'
linux-headers-3.0.0-14
linux-headers-3.0.0-14-generic

Para linux-image-* hacemos el mismo procedimiento:

$ dpkg --get-selections | grep linux- | grep image | grep -v image-generic | grep -v $(echo $(uname -r | cut -d \- -f1)-$(uname -r | cut -d \- -f2)) | awk '{print $1}'
linux-image-3.0.0-14-generic

Ahora juntamos los comandos:

$ dpkg --get-selections | grep linux- | grep headers | grep -v headers-generic | grep -v $(echo $(uname -r | cut -d \- -f1)-$(uname -r | cut -d \- -f2)) | awk '{print $1}'; dpkg --get-selections | grep linux- | grep image | grep -v image-generic | grep -v $(echo $(uname -r | cut -d \- -f1)-$(uname -r | cut -d \- -f2)) | awk '{print $1}'
linux-headers-3.0.0-14
linux-headers-3.0.0-14-generic
linux-image-3.0.0-14-generic

Y por último los eliminamos:

$ sudo apt-get --purge remove $(dpkg --get-selections | grep linux- | grep headers | grep -v headers-generic | grep -v $(echo $(uname -r | cut -d \- -f1)-$(uname -r | cut -d \- -f2)) | awk '{print $1}'; dpkg --get-selections | grep linux- | grep image | grep -v image-generic | grep -v $(echo $(uname -r | cut -d \- -f1)-$(uname -r | cut -d \- -f2)) | awk '{print $1}')

Imagen de gaska92
Enviado por gaska92 el 25 Enero, 2012 - 05:36.

No se puede hacer tambien con el Ubuntu tweak,o solo funciona en ubuntu?

Imagen de PabliNet
Enviado por PabliNet el 26 Enero, 2012 - 04:32.

Por lo que leí, Ubuntu Tweak es una aplicación para personalizar Ubuntu y no un S.O.

Imagen de gaska92
Enviado por gaska92 el 27 Enero, 2012 - 02:06.

Ya lo se. Me referia si el Ubuntu tweak solo funciona en Ubuntu o Tambien en kde.Ya que hay un apartado en donde te aparecen los kernels instalados y los antiguos,aparte hay una opción que dice limpiar kernels

Imagen de PabliNet
Enviado por PabliNet el 27 Enero, 2012 - 02:26.
gaska92 escribió:

Ya lo se. Me referia si el Ubuntu tweak solo funciona en Ubuntu o Tambien en kde.Ya que hay un apartado en donde te aparecen los kernels instalados y los antiguos,aparte hay una opción que dice limpiar kernels

No te sabría decir, solo fui explicando el razonamiento para llegar al resultado adecuado.

Imagen de siddharta
Enviado por siddharta el 3 Febrero, 2012 - 16:23.

Qué bueno que sigas jugando con la consola.

Deberías corregir el artículo porque en varias partes escribiste awn en vez de awk. El delimitador puede escribirse entre comillas así "-" por lo que no necesitas escribirlo así \- ; además entre comillas es más fácil percibir si se usa un espacio como delimitador: " ", que sólo escribir \ . El parámetro -f (field, campo) significa que lo que haya antes del primer delimitador será el primer campo, lo que haya después del primer delimitador será el segundo campo, y así sucesivamente. En el renglón siguiente manzana es el primer campo, pera el segundo campo, piña el tercer campo:

manzana pera piña (el delimitador sería " ")
manzana,pera,piña (el delimitador sería ",")
manzana:pera:piña (el delimitador sería ":")
manzana_pera_piña (el delimitador sería "_")

Saludos,
Sidd.

Imagen de siddharta
Enviado por siddharta el 3 Febrero, 2012 - 16:37.

"[...] Supongamos que tengamos un archivo que contenga tabla con varias columnas y queremos ver la tercera columna, hacemos esto: cat tabla.txt | awk '{print $1}' [...]"

susurro Ahí se te fue un descuido porque debería ser print $3 para mostrar la tercera columna.

Sigo leyendo el artículo ...

Imagen de siddharta
Enviado por siddharta el 3 Febrero, 2012 - 19:54.

El último paréntesis (exactamente el último de todo el artículo) sobra:

awk '{print $1}')

Imagen de siddharta
Enviado por siddharta el 4 Febrero, 2012 - 15:59.

Después de ver que deshiciste el cambio que ya había hecho yo en la Wiki me di cuenta que fue mi error lo del paréntesis ... pero hombre, me hubieras dicho por lo menos wink

Saludos,
Sidd.

Imagen de carlos user
Enviado por carlos user el 18 Abril, 2012 - 15:05.

Hola gaska92, es para ubuntu, lo probaron en xubuntu y andan dos o tres cosas, nada mas. Sería todo un logo que este buen programa(ubuntu tweak) tuviera versiones para u/xu/y kubuntu.

Imagen de gaska92
Enviado por gaska92 el 18 Abril, 2012 - 19:48.
carlos user escribió:

Hola gaska92, es para ubuntu, lo probaron en xubuntu y andan dos o tres cosas, nada mas. Sería todo un logo que este buen programa(ubuntu tweak) tuviera versiones para u/xu/y kubuntu.

Lo peor del caso es que el Ubuntu Tweak de ahora ya no sirve como el de antes,solo sirve para personalizar...que desgracia,ya que quitaron una muy buena utilidad.