Verificar actualizaciones con aptitude, explicando redireccionamiento y tuberias

En este articulo veremos algo util para verificar la cantidad de paquetes que podemos actualizar en un sistema con aptitude instalado, pero tambien explicaremos como utilizar redireccionamientos y tuberias, asi que esta sin duda es una excelente publicacion para aprender algo nuevo.

Puede que en algun momento necesitemos saber si nuestro sistema tiene paquetes para actualizar y cuantos (por ejemplo en un script para verificar el estado de un servidor). Bueno, usando aptitude desde la consola con un usuario con privilegios puede ser bastante sencillo… Esta es una de las tantas formas que podemos resolver nuestro problema/necesidad

Ejemplo:

aptitude update > /dev/null && aptitude search ~U | wc -l

Explicacion

Bueno, vamos a desarmar esto para explicarlo parte por parte y dejarlo lo mas claro posible.
Para que logren comprender completamente lo que esta secuencia de comandos hace es necesario explicar los conceptos de redireccionamiento y tuberias. Manos a la obra!!

Redireccionamiento

Decimos que redireccionamos algo cuando lo desviamos de su destino inicial a un nuevo destino. De esto podemos suponer que ese “algo” nunca llegara al “destino inicial” por la sencilla razon de que ha sido desviado, desencaminado, en definitiva redireccionado.
El programa aptitude mostrara informacion util al usuario, para esto enviara esta informacion a la salida estandar del sistema (la pantalla), pero como podran imaginar esta informacion puede ser redireccionada y por lo tanto desviada a un nuevo destino como puede ser un archivo y esta informacion no se mostrara en pantalla pues su destino ha cambiado.

Como redireccionar la salida de un comando?

Para redireccionar la informacion que un programa mostraria en la pantalla se utilizan los signos de > y >> los cuales tienen comportamientos distintos que mas adelante explicaremos.

Ejemplo:

echo "luis" > nombres.txt

NOTA: El comando se escribe a la izquierda del simbolo de redireccion y el archivo de destino a la derecha del mismo.

Que diferencia hay entre > y >> ?

Sabia pregunta! Bueno para hacerlo sencillo UN SOLO SIGNO “>” reemplaza el contenido del archivo de destino con la salida del comando y DOS SIGNOS “>>” agrega al final del archivo de destino la salida del comando.
Veamos un ejemplos para dejarlo mas claro. A continuacion mostraremos una serie de comandos y como afectan al archivo nombres.txt si se ejecutan en el siguiente orden:
Ejecutamos el comando:

echo "pedro" > nombres.txt

Contenido del archivo nombres.txt:

pedro

Ejecutamos el comando:

echo "antonio" >> nombres.txt

Contenido del archivo nombres.txt:

pedro
antonio

Ejecutamos el comando:

echo "ana" >> nombres.txt

Contenido del archivo nombres.txt:

pedro
antonio
ana

Ejecutamos el comando:

echo "luis" > nombres.txt

Contenido del archivo nombres.txt:

luis

Tuberias

Las tuberias son algo realmente genial! Para explicarlo de la mejor manera posible vamos a pensar en una cadena de ensamblado.
En una cadena de ensamblado, cada trabajador cumple una funcion especifica sobre el futuro producto. Una vez terminada su labor, envia el futuro producto al siguiente punto de la cadena de ensamblado donde otro trabajador lo recibira, realizara su labor y lo enviara al siguiente punto… asi hasta el final de la cadena de ensamblado.
Si entendemos esto, podemos pensar que cada comando en una secuencia de tuberias es como un trabajador en una cadena de ensamblado. Tomando la salida del comando anterior, trabajando con ella y enviandola al comando siguiente (si lo hay).

Como se hace una tuberia?

Bueno en realidad es algo muy sencillo, basta con utilizar el singo | y ahora veremos como funciona…
Cuando el interprete de comandos (shell) encuentra una tuberia, le pasa la salida del comando que se encuentra a la izquierda del singo | al comando que esta a la derecha del mismo. Cuando tenemos una serie de tuberias, la regla se mantiene y podemos imaginar el ejemplo de la cadena de ensamblado.

Veamos unos ejemplos:

La siguiente tuberia contara cuantos archivos hay en la carpeta donde se encuentran. Se que con menos comandos se puede hacer lo mismo, pero de esta manera es mas didactico.

ls -l | egrep "^-.*" | wc -l

Analicemos la tuberia:
* ls -l : Lista todos los archivos, enlaces y carpetas visibles.
* egrep “^-.*” : En este caso especifico, filtrara la lista generada por el comando “ls -l” y devolvera unicamente la informacion de los archivos.
* wc -l : En este caso especifico, recibira la lista de archivos generada por la tuberia ‘ls -l | egrep “^-.*”‘ y contara la cantidad de lineas devolviendo dicha cantidad (numero).

Como ven cada comando recibe la salida del comando anterior, realiza operaciones con la informacion recibida y devuelve un resultado. Si aun no se han percatado noten que las tuberias son una “redireccion” bastante especial, que envian la “salida” de un comando a la “entrada” del siguiente. Si no logran notarlo, no importa realmente. Lo importante es que lo vean como una cadena de ensamblado donde cada comando o programa realiza una tarea especifica para generar un producto final.

Luego de toda esta explicacion es hora de revelar el gran misterio del universo…
Que hace realmente esto??

aptitude update > /dev/null && aptitude search ~U | wc -l

Bueno muy sencillo:
* aptitude update > /dev/null : actualizara la lista de paquetes disponibles en los repositorios sin mostrar nada en pantalla (por eso la redireccion a /dev/null)
* && : Esto se encargara de ejecutar el comando que esta a su derecha luego de terminar la ejecucion del comando que esta a su izquierda.
* aptitude search ~U : listara los paquetes que se pueden actualizar
* wc -l : en este caso, contara la cantidad de lineas de la lista devuelta por el comando anterior (aptitude search ~U)

Bueno mis queridos/as. Es el fin!
Me esmere mucho en este articulo, asi que a leer y disfrutarlo 🙂

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s