Inicio

martes, 31 de octubre de 2017

Monitoriza el trafico de la interfaz de red con "iftop"

iftop



El comando iftop, nos brinda una visión continua e interactiva en tiempo real del tráfico que pasa por nuestra interfaz de red, mostrándonos el origen y destino de la comunicación y el tamaño de la transferencia por IP.

Instalación

Generalmente, esta herramienta no viene instalada por defecto, por lo que procedemos a indicar si instalación en las principales distribuciones y por ende en sus derivadas:

Debian:


Centos:


ArchLinux: 


Sintaxis

La interfaz de iftop trabaja de la siguiente manera:

iftop [Opciones][Interfaz]


Comando "iftop" y su interfaz en consola

Antes que nada es necesario aclarar que iftop tiene que ser ejecutado con permisos de administrador.

Si ejecutamos en comando iftop sin más, nos imprimirá en pantalla la siguiente interfaz gráfica con información completa del trafico que esta pasando por nuestra tarjeta de red.




Durante unos breves segundos del inicio de iftop, nos indica el nombre de la interfaz de red que va a ser escuchada. Como se muestra a continuación "Listening on enp2s0"



Una vez cargada la interfaz de red, comenzara a mostrar el trafico.



Pero, ¿Como leemos esta interfaz?



En el margen superior de la pantalla tenemos una escala que va de la mano con el gráfico de barras de cada conexión.

Las dos primeras columnas corresponden a cada conexión de origen y destino. Entre estas dos, las flechas que permiten saber la dirección que el tráfico fluye.

Las tres últimas columnas proporcionan el ancho de banda promedio por cada conexión durante los últimos segundos 2s para la primera columna, 10s para la segunda y 40s para la tercera.


Y por ultimo tenemos el margen inferior con un resumen de los totales enviados, recibidos y la suma de ambos respectivamente.

Sabiendo esto, pasemos a trabajar con algunas de sus opciones.


iftop -p

Nos muestra los puertos de las conexiones tanto remotas como locales.


iftop -n

Nos deshabilita la resolución de nombres (DNS), que, como vimos en el ejemplo anterior, el hostname es ARCH-BCI y podremos visualizar la/las IPs de el o los hostnames.




iftop -i

Esta opción nos permite elegir la interfaz de red que queremos monitorear. En mi caso tengo una sola porque es una PC de escritorio con una placa de red onboard, pero hay casos en que operamos con varias placas de red.

Averiguamos el nombre de la interfaz con "ifconfig" 


y ejecutamos "sudo iftop -i enp2s0"


Cabe señalar que la sintaxis nos permite ejecutar todas las opciones en una sola linea de comando.


Sin dudas iftop es un comando simple y muy útil para quienes quieran monitorizar el trafico de red de su sistema.

Existen mas opciones para trabajar con esta herramienta, pero como es un articulo pensado para usuario linuxeros, les dejo el manual con el resto de las opciones para que puedan analizarlas e investigarlas ustedes mismos.  



Espero sea de utilidad
Saludo, Cristian.

sábado, 2 de septiembre de 2017

Monitoreo de procesos con "top"


top


Top, es un sencillo pero potente monitor de procesos que nos permite obtener una lectura en tiempo real de una cantidad diversa de información de nuestro GNU/Linux y del consumo de recursos que este esta llevando a cabo, entre las que se encuentran el consumo de memoria, de los CPUs, la cantidad de usuarios, etc.

Esta potente herramienta viene instalada por defecto en la mayoría de las distribuciones.

Sintaxis


La sintaxis de "top" trabaja de la siguiente manera:


Comando "top" y su interfaz en consola


Al ejecutar top en consola nos se nos imprime en pantalla la siguiente interfaz:

Analicemos paso a paso la información que nos proporciona.
Para esto, dividiremos el análisis en dos partes, donde la primera sera el encabezado de la interfaz que nos brinda información general y luego el analizaremos el cuerpo, que nos dará información mucho mas detallada.


Encabezado



La primera linea del encabezado nos muestra el tiempo de actividad y carga media del sistema:

-La hora actual: 18:22:49 
-Tiempo que ha estado el sistema encendido: up 13:40
-Numero de usuarios activos: 2 users, (root y cristian)
-Carga media en intervalos de 5, 10 y 15 minutos respectivamente: load average: 0,04, 0,10, 0,22

La segunda linea del encabezado nos muestra el total de tareas, procesos, y el estado de los procesos.

-Total de procesos: 230 total

-Total de procesos Running (en ejecución): 2 running

Es el numero de procesos ejecutándose actualmente o preparados para ejecutarse.

-Total de procesos sleeping (Dormidos): 299 sleeping

Es el numero de procesos dormidos esperando que ocurra algo (depende del proceso) para ejecutarse.

-Total de procesos stopped (detenidos): 0 stopped

Son los procesos cuya ejecución esta detenida.

-Total de procesos zombie: 0 zombie

Son los procesos que no está siendo ejecutado. Estos procesos se quedan en este estado cuando el proceso padre que los inicio muere.

Las lineas siguientes nos muestra los porcentajes de uso del procesador según el numero de núcleos.

%Cpu0
%Cpu1
%Cpu2
%Cpu3

Las ultimas dos lineas nos brindan información sobre las memorias de lectura y de intercambio SWAP respectivamente.

En el primer caso apreciamos el porcentaje de consumo de Memoria RAM (43.1%) sobre el tamaño de la memoria (7748M)

La misma lectura se hace sobre el ultimo indicador que pertenece a la memoria de intercambio SWAP.

En mi caso no tengo, por ello sus porcentaje y tamaño están en 0.

Cuerpo



Identifiquemos cada una de las columnas:

PID: es una abreviatura de "process ID" mejor conocido por "identificador de proceso". Cada proceso tiene un identificador único que es utilizado para realizar acciones sobre los procesos que identifica, como por ejemplo: matar un proceso.

USER: Identifica al usuario propietario del proceso.

PR: Es el numero de prioridad que se le da al proceso. Si nos indica RT es que se está ejecutando en tiempo real. 
El rango de prioridad disponible es de -20 a 20, siendo -20 la mayor prioridad y 20 la menor.

NI: Asigna la prioridad. Si tiene un valor bajo (hasta -20) quiere decir que tiene más prioridad que otro con valor alto (hasta 20).

VIRT: Es la cantidad de memoria virtual utilizada por el proceso.

RES: Es la cantidad de memoria RAM física que utiliza el proceso.

%CPU: Es el porcentaje de CPU utilizado desde la última actualización.

%MEM: Es el porcentaje de memoria física utilizada por el proceso desde la última actualización.

TIME+: Es el tiempo total de CPU que ha usado el proceso desde su inicio.

S (ESTADO): Nos indica el estado del proceso.

Preparado (R): El proceso está esperando a que el sistema operativo le asigne un tiempo de CPU.

Ejecutando (O): Sólo uno de los procesos preparados se está ejecutando en cada momento.

Suspendido (S): Un proceso se encuentra suspendido si no entra en el reparto de CPU, ya que se encuentra esperando algún tipo de evento (por ejemplo, la recepción de una señal software o hardware). En cuanto dicho evento se produce, el proceso pasa a formar parte del conjunto de procesos preparados.

Parado (T): Un proceso parado tampoco entra en el reparto de CPU, pero no porque se encuentre suspendido esperando algún evento. En este caso, sólo pasarán a estar preparados cuando reciban una señal determinada que les permita continuar.

Zombie (Z): Todo proceso al finalizar avisa a su proceso padre, para que éste elimine su entrada de la tabla de procesos. En el caso de que el padre, por algún motivo, no reciba esta comunicación no lo elimina de la tabla de procesos. En este caso, el proceso hijo queda en estado zombie, no está consumiendo CPU, pero sí continua consumiendo recursos del sistema.

COMMAND: Es el comando utilizado para iniciar el proceso.

Opciones de "top"


Top, también nos permite por medio de su sintaxis, hacer uso de opciones que nos van a dejar ser un pocos mas selectos en las peticiones realizadas.

"top -u usuario"

Muestra los procesos que están corriendo con ese usuario y sus valores

Procesos que pertenecen al usuario "root"


Procesos que pertenecen al usuario "cristian"


"top -p PID"

En esta opción indicamos el procesos que deseamos monitorear y se nos mostrara únicamente el proceso seleccionado y sus valores.


"top -n refrescar"

Refrescar es la cantidad de interacciones que va a tener el comando y luego se cerrara.

Por ejemplo: "top -n4" Se ejecutara top, refrescara las instancias de los procesos 4 veces y luego se cerrara.

"top -d numero"

Donde numero es el tiempo en segundos que va a esperar top para recargar la lista de procesos.

Opciones en ejecución

Dentro de "top" podemos interactuar con varias opciones. A continuación se exponen las mas relevantes a nivel usuario.
-N Ordena los procesos por PID
-A Ordena los procesos por aparición, primero se encuentran los mas nuevos
-P Ordena los procesos por uso de CPU, (esta opción inicia por default)
-M Ordena los procesos por memoria residente
-T Ordena los procesos por tiempo.

Espero que sea de utilidad
Saludos, Cristian.

sábado, 26 de agosto de 2017

Cómo crear alias



Alias



Hay una forma muy sencilla de personalizar y simplificar lineas de los comandos que usamos con regularidad, "remplazando" estas por una palabra mas simple, a la que denominamos alias. 

Sintaxis

Alias responde a la siguiente sintaxis.


Alias temporal

El alias temporal, luego de ser creado, nos va a permitir operar con él hasta que cerremos nuestra consola.

Para ejemplificar este caso vamos a crear el alias "actualizar" al que le asignaremos la linea de comando "sudo pacman -Syyu". Como estoy utilizando Archlinux, actualizo desde su gestor de paquetes pacman.

Abrimos nuestra consola de comados y haciendo uso de la sintaxis de alias, escribimos la siguiente linea:


Donde actualizar es la palabra que va a reemplazar a la linea "sudo pacman -Syyu"

Ejecutamos ambas para ver como funcionan...


Y podemos observar que el alias creado "actualizar" ejecuta la linea "sudo pacman -Syyu".

Una vez cerrada la consola el alias que hemos creado se suprimirá.

Alias permanente

Si lo que queremos es crear un alias de forma permanente, lo debemos incrustar en nuestro fichero .bashrc, ubicado en /home/usuario haciendo uso de cualquier editor de texto.




Incrustamos el alias haciendo uso de su sintaxis. Utilizaremos el mismo ejemplo que para el alias temporal.


Guardamos y nuestro alias ya sera permanente...

Para probarlo cerramos la consola, la abrimos nuevamente y ejecutamos el alias que hemos creado.


En lo personal, para lo único que utilizo alias es para iniciar programa que trabaja desde consola y que es necesito ejecutarlos desde una ruta especifica.
Un ejemplo puede ser el de iniciar telegram desde consola:
La ruta en Archlinux desde la que se ejecuta es "/usr/bin/telegram-cli", por lo que cree el alias telegram al que le asigne la ruta desde la que inicia.

"alias telegram=/usr/bin/telegram-cli"

Espero sea de utilidad.
Saludo, Cristian.

domingo, 13 de agosto de 2017

Tipos de Shells

Tipos de shells


En Linux y Unix, un shell es un programa que se utiliza para interpretar comandos escritos que el usuario envía al sistema operativo (Interprete de comando).

Consiste en la interfaz mediante la cual el usuario del sistemas operativos puede comunicarse con su núcleo a través de instrucciones que le aporta al intérprete y por extensión, ejecutar dichas órdenes como herramientas que le permiten controlar el funcionamiento de la computadora entre otras cosas.

Las órdenes se introducen siguiendo la sintaxis incorporada por dicho intérprete.


Shell Bourne:

La Shell Bourne original lleva el nombre de su creador en los Laboratorios Bell, Steve Bourne. Fue la primera shell utilizada para el sistema operativo Unix, y ha superado en gran parte la funcionalidad de muchas de las shells más recientes. Sin embargo, todas las versiones de Linux Unix permiten a los usuarios cambiar a la original Shell Bourne, conocida simplemente como "sh", si así lo desean para renunciar a funcionalidades como el completado de nombres de archivo y el historial de comandos que los depósitos posteriores han añadido.

Shell Zsh:

Zsh es un potente intérprete de comandos que puede funcionar como shell interactiva y como intérprete de lenguaje de scripting. Aún siendo compatible con Bash (no por defecto, solo si se ejecuta emulate sh), ofrece numerosas ventajas como:

-Eficiencia
-Completado de tabulador mejorado
-Expansión de nombres de fichero mejorada
-Manejo de arrays mejorado
-Totalmente personalizable

Shell C:

La Shell C, tambien conocida como "csh", fue diseñada para permitir a los usuarios escribir programas en script de shell con una sintaxis muy similar a la del lenguaje de programación C.

En muchos sistemas como Red Hat, csh es tcsh, una versión mejorada de csh. A menudo cualquiera de los dos nombres (csh o tcsh) es un enlace simbólico a la versión mejorada de C shell (tcsh).

Shell TC:

Shell TC es una expansión de la Shell C. Tiene todas las mismas funcionalidades, pero añade la posibilidad de utilizar pulsaciones de teclado del programa de procesador de palabras Emacs para editar el texto en la línea de comandos. Por ejemplo, los usuarios pueden presionar Esc-D para eliminar el resto de la palabra seleccionada. 

Comunmente conocida como "tcsh".

Shell Korn:

Shell Korn también fue escrita por un programador en los Laboratorios Bell, David Korn. Intenta combinar las características de la Shell C, Shell TC y Shell Bourne en un solo paquete. También incluye la capacidad para crear nuevos comandos de shell para los desarrolladores cuando surja la necesidad.

Se conoce como "ksh".

Shell Bourne-Again:

La Shell Bourne-Again es una versión actualizada de la Shell Bourne original creada por la Free Software Foundation en su proyecto de código abierto GNU. Por esta razón, es una shell utilizada ampliamente en la comunidad de código abierto.

Su sintaxis es similar a la utilizada por la Shell Bourne, sin embargo, incorpora algunas de las funcionalidades más avanzadas que se encuentran en las shells C, TC y Korn.

Entre las funcionalidades adicionales que carecía Bourne, está la capacidad para completar nombres de archivos pulsando la tecla TAB, la capacidad de recordar un historial de comandos recientes y la capacidad de ejecutar múltiples programas en segundo plano a la vez.

Conocida como "Bash" (Bourne again shell).

Espero sea de utilidad.
Saludos. Cristian


sábado, 15 de julio de 2017

Comando "cat"



Comando "cat"

El comando "cat" sirve para crear, mover, concatenar (unir elementos de texto) contenidos de archivos para posteriormente, como salida, imprimirlos en pantalla.

Sintaxis:

#cat [Opciones] [Archivo]


Crear un archivo

El comando "cat" nos permite crear archivos de texto, haciendo uso de su sintaxis, ejecutamos...


Donde la opción "mayor que" ">" indica que insertaremos texto en un archivo y "texto.txt" es el archivo que se creara para incrustar dicho texto.


Una vez ejecutada la linea de comando, el cursor cambiara de posición para permitirnos ingresar el contenido de texto. Para el ejemplo utilizaremos un simple "hola mundo" y presionamos la combinación de teclas "ctrl+d" para indicar que terminamos el proceso.


 Si hacemos un "ls -l" podremos ver que se creo el archivo "texto.txt"


Visualizar contenido

#cat [Archivo]

La forma mas simple de ver el contenido de un archivo es invocando el comando "cat" e indicándole la ruta del archivo, si nos encontramos posicionado en otro directorio o el nombre del archivo si nos encontramos en el mismo directorio que este.

Visualicemos el contenido del archivo "texto.txt" creado anteriormente..


Hay que mencionar que no estamos sujetos a visualizar contenidos de un archivo a la vez, si indicamos a "cat" varios archivos simultáneamente podremos visualizar sus contenidos en el orden en que estos fueron indicados. Veamos... 


Opciones de visualización

#cat -n [Archivo]

La opción "-n" nos permite visualizar el contenido de un archivo con sus lineas enumeradas comenzando desde la linea "1" en adelante, incluyendo las lineas en blanco.
En este caso imprimiremos el contenido de un script "actualizar.sh" bajo la opción "-n", obteniendo el siguiente resultado.

#cat -b [Archivo]

La opción "-b" no permite enumerar también la linear del contenido de un archivo, pero sin tener en cuenta las lineas en blanco. Haremos uso del mismo archivo para que podamos hacer la comparación.


#cat -s [Archivo]

Para el caso en el que tengamos muchas lineas vacías podemos utilizar la opción "-s", quien nos sustituirá todas estas en una sola linea haciéndonos mas cómoda la visualización de un contenido con estas características.


#cat -T [Archivo]

En el caso que necesitemos visualizar las tabulaciones, "cat" cuenta con la opción "-T".


Lease "^I" como uno por tabulación. Lo que nos indica que tenemos dos tabulaciones en la imagen anterior.
Personalmente solía utilizar esta opción para visualizar las tabulaciones cuando escribía ciclos en python si lo hacia desde consola.


Concatenar

Texto a un archivo

Con "cat" podemos concatenar texto introducido por teclado a un archivo ya existente. Podemos hacerlo reescribiendo o concatenando.

Reescribiendo

#cat > texto.txt 

Especial atención a esto. Siendo texto.txt un archivo con contenido existente lo que ingresemos por teclado reemplazara todo el contenido del archivo por lo que ingresemos desde el teclado. Como vimos anterior mente, si el archivo no existe lo creara con el contenido ingresado.


Como podemos observar, primero visualizamos el contenido de "texto.txt" en la linea "cat texto.txt" imprimiendonos en pantalla "hola mundo", luego indicamos que vamos a ingresar texto por teclado "cat > texto.txt" donde ingresamos la cadena "reescribiendo" y salimos con "ctrl + d" guardando así lo ingresado. Cuando solicitamos nuevamente ver el contenido del archivo "texto.txt" bajo la ejecución de "cat texto.txt" vemos que el contenido cambio por el ingresado eliminando la linea "hola mundo" de su contenido.

Concatenando 

#cat >> texto.txt

Para concatenar o unir elementos de texto a un archivo existente por medio de teclado, utilizaremos el comando "cat" la opción ">>" e indicamos el archivo sobre el que vamos a trabajar.


Como podemos observar en la imagen anterior primero visualizamos el contenido de "texto.txt" en la linea "cat texto.txt" imprimiendonos en pantalla "reescribiendo" tal cual lo dejamos en el ejemplo anterior, luego indicamos que vamos a ingresar texto por teclado "cat >> texto.txt" donde ingresamos la cadena "hola mundo" y salimos con "ctrl + d" guardando así lo ingresado. Cuando solicitamos nuevamente ver el contenido del archivo "texto.txt" bajo la ejecución de "cat texto.txt" vemos que la linea que ingresamos por teclado se incrusto al final del contenido sin modificar el resto del contenido del archivo en cuestión.

Archivo a un archivo

Reescribiendo

#cat texto1.txt > texto.txt 

Del mismo modo que reescribimos el contenido de un archivo mediante la inserción por teclado y haciendo uso de "cat" podemos reescribir el contenido de un archivo con el contenido de otro archivo. Debe tenerse en cuenta que el contenido del archivo que indiquemos en primer lugar reemplazara el contenido del archivo que indiquemos en segundo lugar. Observemos...


En primer lugar visualizamos el contenido del archivo "texto.txt" para lo que nos arrojara en pantalla "hola mundo", hacemos lo mismo con el archivo "texto1.txt" obteniendo "hola mundo 1".
Para reemplazar el contenido del archivo "texto.txt" por el de "texto1.txt" ejecutamos la linea "cat texto1.txt >> texto.txt". Y si solicitamos ver el contenido nuevamente de "texto.txt" vemos que fue reescrito de "hola mundo" por "hola mundo 1". 

Concatenando 

#cat texto1.txt >> texto.txt

Para concatenar o unir el contenido de ambos archivos invocamos el comando "cat" seguido del archivo del que se obtendrá en contenido a concatenar, la opción que nos permitirá realizar la concatenación es ">>" y por ultimo el archivo en el que se incrustara el contenido del primer archivo. Observemos...


En esta imagen podemos observar como el contenido del archivo "texto1.txt" fue incrustado en el archivo "texto.txt" sin modificar el resto de su contenido.
Cabe destacar que esto no es una fusión de archivos. Si hacemos uso de "ls -l" veremos que el archivo "texto1.txt" sigue existiendo y que su contenido sigue intacto si lo visualizamos.


Espero sea de utilidad.
Saludos, Cristian.