Script BASH – Iterar sobre los parámetros (Argumentos).-

La variable $ * contiene todos los parámetros como un solo valor.

La variable $ @ contiene todos los parámetros como valores separados, por lo que puede iterar sobre ellos.

Al Ejecutar este Script, obtendriamos el siguiente resultado :

bash iterar.sh uno dos tres cuatro cinco seis siete ocho

Publicado en Unix - Linux | Deja un comentario

BASH – Script reinicio SERVICIO consola JAVA.-

Publicado en Unix - Linux | Deja un comentario

Script Bash – Quitar espacios delante y atrás de una variable (Trim).-

Este ejemplo nos permite quitar los espacios izquierda y a la derecha de una variable.

Publicado en Unix - Linux | Deja un comentario

Script Bash – Eliminar archivos con más de X días.-

El comando find tiene muchas opciones y argumentos que se pueden utilizar, y entre ellos está poder ejecutar otro comando para cada archivo. Partiendo de esta base, es posible encontrar que archivos tienen más de un cierto número de días, y por ejemplo, utilizar el comando rm para eliminarlos.

La sintaxis para encontrar y eliminar, por ejemplo, archivos que tengan más de 5 días (lo utilizo para eliminar archivos de LOG) :

Publicado en Unix - Linux | Deja un comentario

Bash Script – Elimina espacios de los nombres de archivos.-

Muchas veces los archivos con los que tienes que trabajar tiene espacios en sus nombres, y esto hace trabajarlos por lotes sea complicado. Los Scripts que intentes usar normalmente tendrán problemas para procesar archivos con espacios en sus nombres.

Por ello es necesario quitar esos espacios, esta línea de comando se encargará precisamente de eso.

Publicado en Unix - Linux | Deja un comentario

SCRIPT – Copia masiva de archivo a servidores.-

Para realizar una copia masiva de un archivo a múltiples servidores, en el siguiente ejemplo copiaremos el archivo “servers.conf” a 50 servidores (estos estarán en una lista en el archivo “servers.txt”). para ello se asume que tenemos relación de confianza entre los servidores (ssh). Otra opción si no se tiene la relación de confianza es realizarlo mediante EXPECT (otras hierbas, que también puede ver ejemplos de su uso en esta web).-

Publicado en Unix - Linux | Deja un comentario

Guardar la salida de un comando en una variable en Bash.-

Muchas veces necesitamos guardar la salida de un comando en una variable al escribir scripts Bash. El problema es que luego tenemos dificultades para interpretar o mostrar por salida estándar su contenido, ya que se pierden los saltos de línea. Esto se soluciona de manera sencilla utilizando comillas dobles. Tomemos como ejemplos el comando “ps”.-

Publicado en Unix - Linux | Deja un comentario

LINUX – Comando TOP en modo BATCH (Monitoreo procesos en tiempo real).-

El comando TOP es una utilidad que trae instaladas muchas distribuciones Linux – Unix por defecto. Esto nos permite ver a tiempo real el rendimiento del equipo, consumo de RAM, procesos que más consumen, CPU, etc… 

En el siguiente ejemplo, se captura el uso de CPU de un proceso JAVA. Ojo que no es lo mismo que el uso de CPU del servidor. Lo uso para monitorear un proceso JAVA, si el uso de CPU es elevado, significa que el proceso esta con problemas y debe ser reiniciado.-

Publicado en Unix - Linux | Deja un comentario

SCRIPT BASH – Lectura (READ) con timeout y variable por defecto.-

El script solicita el nombre de un archivo, si este no es ingresado en 60 segundos, le asigna el valor “defecto.txt”.

Publicado en Unix - Linux | Deja un comentario

SCRIPT BASH – Lectura archivo obteniendo campos por separado en Variables.-

Publicado en Unix - Linux | Deja un comentario

Script BASH – Cambio masivo de contraseñas a usuarios con EXPECT.-

El siguiente guion consta de 2 script, un guion Shell script y otro guion EXPECT. Para ejecutarlo tiene que tener instalado la utilidad EXPECT (librería que automatiza scripts interactivos). En esta misma web puede encontrar información al respecto.

El primer guion lo llamaremos “cambio_password.sh” el cual tiene permisos de ejecución, las lineas estan documentadas para no entrar en mayores detalles.- Este programa llama a un segundo guion creado en EXPECT (cambio_password.exp), al cual le pasa 5 argumentos por linea de comando.

A continuación el SCRIPT EXPECT, es el que realmente realiza el cambio de password en forma interactiva.-

Espero les sea de utilidad, se puede modificar y mejorar.

Publicado en Unix - Linux | Deja un comentario

LINUX – Script BASH para identificar el último día del mes.-

Como se puede observar, ejecutando el siguiente comando date –date=tomarrow +%d” se obtiene el número del día de mañana, que es guardado en una variable. Luego el contenido de la variable se compara con el número que esperamos que sea el día de mañana, que en el ejemplo es el día primero (1) del mes siguiente, y si cumple la condición hacemos lo que necesitamos hacer.

Publicado en Unix - Linux | Deja un comentario

Recorrer archivos de un directorio por tipo.-

Publicado en Unix - Linux | Deja un comentario

VERIFICAR INTEGRIDAD DE ARCHIVOS CON HASH MD5

          El MD5 es un algoritmo hash unidireccional y se puede utilizar para ayudar a determinar la integridad de un archivo, proporcionando una firma digital de 128 bits. Esta firma digital es como una huella digital para un archivo. Nos permite determinar en las réplicas de archivos entre servidores que no han sido alterados de ninguna forma, el cambio de un solo byte en un archivo resultará en un hash MD5 diferente.

             Cuando el valor de suma de comprobación MD5 coincide perfectamente, se confirma que nadie ha puesto en riesgo la seguridad y la integridad digital de un archivo y, asimismo, que es una copia precisa del archivo original. Cuando hablamos de verificar la integridad de un archivo, estamos hablando de verificar que los datos de una copia son exactamente iguales a los del archivo original. Esta verificación nos permite evitar problemas de corrupción de datos y asegurarnos que los datos han sido almacenados correctamente.

             Con respecto a la colisión de hash (2 archivos diferentes con un mismo hash) es poco probable que suceda, ya que por lo general tendría que realizarlo una persona (hacker).- Para el caso de verificar replicas debería bastar con este sistema criptográfico.-

PROCEDIMIENTO VERIFICAR INTEGRIDAD DE ARCHIVOS.

1.- Tener acceso a los servidores vía SSH desde servidor BASE que se utilizara, la cuenta debe tener permisos de escritura en su HOME.-

2.- Para realizar el pareo de archivos (Verificar integridad), se debe generar un archivo de texto plano, con la ruta completa de todos los archivos que desea verificar, tal como el siguiente ejemplo.

/home/appl/certifica/web/cgi/verifica.cgi

/home/appl/certifica/web/cgi/calculo.cgi

/home/appl/certifica/web/cgi/presenta.cgi

find /home/appl/ -type f -iname “*”

find /home/appl/ -type f \( -name “*” -o -name “*.js” \) -print

2.- Teniendo el archivo a verificar, se procede a generar el hash MD5 para cada archivo, desde el servidor que indiquen como PIVOTE. Obteniendo el siguiente archivo, en que la primera columna corresponde al hash MD5 del archivo indicado (Firma digital del archivo).

d364668873c67260fcce381a836093b6 /home/appl/certifica/web/cgi/verifica.cgi

66ac10e7ac99db2da23926d1cc3512db /home/appl/certifica/web/cgi/calculo.cgi

8a321b2db73dc8cd006a4ca5c3145905 /home/appl/certifica/web/cgi/presenta.cgi

       Este archive se puede obtener mediante el siguiente SCRIPT, ejecutándolo en el servidor PIVOTE.

#!/usr/bin/sh

archver=/home/pepe/granja-inor.ver

archhas=/home/pepe/granja-inor.has

if [ -f  $archhas ];

then

    rm -rf $archhas

fi

for url in $(cat $archver)

do

   /home/pepe/md5sum $url >> $archhas

done

3.- Este archivo con sus respectivos hash, se copia a cada servidor que componen la granja. Esto se realiza para que el proceso de verificación no sea invasivo. Al no ser un proceso invasivo, es fácil detectar problemas que están ocurriendo en el momento.

4.- Se lanza el Script que realiza el pareo en los servidores. El SCRIPT genera un archivo de LOG con los errores detectados, en el cual existen 2 tipos de errores, los cuales los anexa al final del archivo verificado, correspondiendo a :

         FAILED                                   = Indica que el archivo es diferente al original del servidor PIVOTE.

         FAILED open or read           = Indica que el archivo no existe o no se puede leer.

 Con esto nos aseguraríamos de no tener problemas con componentes a nivel de Aplicaciones, Sistema Operativo, librerías, configuraciones de ambientes, programación, etc….

Esto se puede realizar con el siguiente SCRIPT. Este script se debe ejecutar desde el servidor BASE.- El Script funciona en forma correcta. Solo se deben modificar las rutas absolutas. A este programa se le pasan 5 parámetros, los cuales son gatillados desde un MENU, el cual no vale la pena exponerlo, ya que solo se da una idea de cómo realizar este procedimiento.- Si alguien tiene alguna duda, puede consultar…

#!/usr/bin/ksh

# Manejo de colores

NONE=’\033[00m’

RED=’\033[01;31m’

GREEN=’\033[01;32m’

YELLOW=’\033[01;33m’

PURPLE=’\033[01;35m’

CYAN=’\033[01;36m’

WHITE=’\033[01;37m’

BOLD=’\033[1m’

UNDERLINE=’\033[4m’

granja=$1

server=$2

cuenta=$3

ruta=$4

sum=$5

archver=/usr01/home/user/verifica/$granja.ver

archser=/usr01/home/user/verifica/$granja.txt

archlog=/usr01/home/user/verifica/$granja.log

archbak=/usr01/home/user/verifica/$granja.bak

correo=/usr01/home/user/verifica/correo

archhas=$granja.has

vi $archver

echo ”          Ejecuta el proceso ( Si – No ) : \\c “

read op

echo “${NONE}”

if [ “$op” != “Si” ]; then

   exit

fi

if [ -f  $archlog ];

then

    rm -rf $archlog

fi

echo ”         ${GREEN}  VERIFICANDO INTEGRIDAD ARCHIVOS ${NONE}”

echo “”

echo ”     ${GREEN}   << Copiando datos a servidor PIVOTE >>${NONE}”

scp $archver $cuenta@$server:$ruta

echo ”      ${GREEN}  << Generando HAS en servidor PIVOTE >>${NONE}”

ssh $cuenta@$server “bash $ruta$granja.sh”

scp $cuenta@$server:$ruta$archhas /usr01/pepe/verifica

echo ” ${GREEN}  << Copiando archivo HAS a servidores de GRANJA >>${NONE}”

for servi in $(cat $archser)

  do

    echo $servi

    scp /usr01/pepe/verifica/$archhas $cuenta@$servi:$ruta 1> /dev/null 2> /dev/null

  done

echo “INICIO  = `date +%d/%m/%Y`   `date +%H:%M:%S`  $1”  >> $archlog

echo “${GREEN}<< Realizando revision de integridad de archivos en GRANJAS >>${NONE}”

for servi in $(cat $archser)

  do

    echo $servi

    echo ”   $servi” >> $archlog

    ssh $cuenta@$servi $sum -c $ruta$archhas | grep -v OK | grep -v “La suma coincide” >> $archlog

  done

echo “F I N  = `date +%d/%m/%Y`   `date +%H:%M:%S`”  >> $archlog

echo ”  ${GREEN} << FIN PROCESO DE VERIFICACION INTEGRIDAD ${NONE}>>”

echo “”

echo “”

cat $archlog

echo “${GREEN}<<    FIN REVISION INTEGRIDAD DE ARCHIVOS    >> ${NONE}”

echo “${GREEN}<<  Este LOG lo puede rescatar desde${NONE} ${RED} $archlog  ${NONE}${GREEN}>>${NONE}”

echo $1 > /usr01/home/monsyg/verifica/archlog

cp $archlog $archbak

  touch $correo

  echo “To:pepito@corr.cl” >> $correo

  echo “From:asistente@corr.cl” >> $correo

  echo “Subject:Chequeo Integridad archivos <<  $1  >> `date +%d/%m/%Y`   `date +%H:%M:%S`” >> $correo

  echo “” >> $correo

  echo ”  Se chequearon integridad a los siguientes archivos ($server) :” >> $correo

  echo “***************************************************” >> $correo

  cat $archhas >> $correo

  echo “***************************************************” >> $correo

  echo “Resultado del proceso : ” >> $correo

  echo “***************************************************” >> $correo

  cat $archlog  >> $correo

  echo “***************************************************” >> $correo

  echo “” >> $correo

  echo “” >> $correo

  echo “Atte.” >> $correo

  echo “Sala de Operaciones” >> $correo

  echo “Sitio Web – http://integridad.org” >> $correo

  cat $correo | mail -s destino1@sii.cl

  rm -f $correo

read j

Publicado en Unix - Linux | Deja un comentario

¿Cómo buscar en todos los archivos dentro de un directorio y sus subdirectorios?

Y aquí viene lo más interesante y por lo que esta herramienta me ahorra mucho tiempo a la hora de modificar archivos de proyectos muy grandes:

Al indicar -ri conseguimos que la búsqueda se realice dentro de todos los archivos existentes en el propio directorio y en todos los subdirectorios internos.

Publicado en Unix - Linux | Deja un comentario

BASH – Monitoreo respuestas Web Services, con archivo de bloqueo.-

El siguiente SCRIPT sirve para verificar las respuestas de Web Service que atiende una granja de servidores. Este SCRIPT se puede lanzar con el comando “NOHUP” en segundo plano, para que siga ejecutándose independiente de si cerramos la sesión. Realiza lo siguiente :
1.- La variable “lockfile” corresponde a un archivo de bloqueo para evitar que el programa se ejecute más de una vez.-
2.- Si el programa no se esta ejecutando, crea el archivo de bloqueo con el PID de ejecución del SCRIPT.-
3.- Con la instrucción “trap”, eliminamos el archivo de bloqueo, esto si se detiene el SCRIPT por algún motivo.-
4.- Para este ejemplo, tenemos una granja de servidores de nombre NEPTUNO, en que tenemos 16 servidores de nombre : neptuno203, neptuno205, neptuno206, etc…
5.- Ejecutamos un bucle for infinito.-
6.- La variabele “log” corresponde al archivo de LOG, que registra los reinicios realizados.-
7.- Un ciclo for para iterar cada servidor.-
8.- Las variables “consult1” y “consult2” corresponden al resultado de la consulta del Web Service, mediante el comando “curl”, buscando si respondió con algún error.
9.- Si la respuesta es correcta, con el comando “continue”, salta a la siguiente iteración del bucle.-
10.- Si alguno de los Web Sevice responden con error, procede a lanzar el script que reinicia el puerto con problemas y procede a registrar la acción en el archivo de LOG.-
11.- Si el programa ya esta en ejecución al tratar de lanzarlo una segunda vez. El programa lo informa y le indica como cerrarlo, haciendo un “kill” al pid indicado y le indica que debe eliminar manualmente el archivo de bloqueo. Una vez realizado esto, se puede volver a ejecutar el SCRIPT nuevamente.-

Publicado en Unix - Linux | Deja un comentario

BASH – Buscar “TEXTO” en múltiples archivos pasados como parámetros al SCRIPT.-

En este ejemplo, lo que se desea es buscar un cierto TEXTO en múltiples archivos, pasados como parámetros al SCRIPT, y mostrar en pantalla los archivos que contiene el TEXTO buscado. El SCRIPT prueba.sh contiene el siguiente código :

Ejecutamos el SCRIPT :

Al ejecutarlo nos presentaría la siguiente información (Si encuentra el PATRON buscado) :

Este SCRIPT es solo un ejemplo, el cual se puede adaptar para cualquier situación que se requiera, eliminar lineas, cambiar texto, etc…
A grandes rasgos lo que realiza es :
1.- Mediante un ciclo FOR recorre o iteramos sobre todos los parámetros (archivos) pasados como parámetros para la ejecución del SCRIPT.
2.- Busco el patrón indicado y el resultado de la búsqueda lo almaceno en la variable “linea”.
3.- Mediante “if” verificamos si la variables “linea” esta vaciá o no ha sido definida (NULL), de ser así, significa que el patrón no fue encontrado y mediante la instrucción “continue” pasa a la siguiente iteración de parámetros (siguiente archivo).-
4.- Al pasar a la intrucción “else” significa que el patrón fue encontrado y por lo tanto lo imprime en pantalla.-

Publicado en Unix - Linux | 1 comentario

BASH – Como pasar variables dentro de un SCRIPT BASH a SED.-

Puede que en algún momento necesitemos pasar una variable obtenida en un script al comando SED, para realizar algún cambio en archivos. Para el siguiente ejemplo, utilizaremos un archivo llamado “prueba.txt”, el cual contiene los siguientes datos:

Necesitamos cambiar el valor “dos” por “seis”. La única forma que me ha resultado para realizarlo es utilizando las comillas dobles y simples como se indica en el siguiente SCRIPT :

Al lanzar este SCRIPT nos generar un nuevo archivo (nueva.txt) con los siguientes datos :

Para realizar el cambio directamente en el archivo, se puede realizar mediante el lenguaje PERL, con la siguiente instrucción :

Publicado en Unix - Linux | Deja un comentario

BASH – Script verifica estado para NAGIOS.-

Este script se puede utilizar para verificar el estado de algún componente y alertar en la consola NAGIOS. Para este ejemplo se asume que una salida “0” es que el componente esta correcto. Por esto si el archivo no existe, la salida sera un “0”. Para cualquier otro tipo de codigo, la consola NAGIOS mostrara alguna alerta en particular para tomar acciones correctivas.-

Publicado en Unix - Linux | Deja un comentario

UNIX – Ejemplos y trucos para el lenguaje de programación AWK.-

Ejemplo para sumar el tamaño total ocupado por los ficheros de un directorio:

Podemos hacer mas flexible la suma de columnas en AWK∞ añadiendo una condición, en este ejemplo limitamos la suma del tamaño de los ficheros a aquellos en los que el usuario “apache” sea el propietario del mismo:

Tip! Obtener el tamaño total ocupado por un determinado tipo de ficheros: con find filtramos por el tipo de extensión, con esta obtenemos el tamaño total de cada fichero y finalmente hacemos la suma con AWK:

También podemos utilizar AWK para sacar la media de los valores que sumamos en una columna dividiendo el total entre NR (Number of Records). Ejemplo para obtener el RSS medio que consumen los procesos nginx:

Ejemplo para imprimir con AWK un determinado rango de columnas, en este caso se procesa un log de Apache para imprimir únicamente el contenido entre la primera y quinta columna:

Utilizando NF (Number of Fields, número de campos en la línea actual) podemos imprimir el contenido desde una determinada columna hasta el final, en este ejemplo analizamos el log del servicio CRON para imprimir el último campo (que se corresponde al comando ejecutado), posteriormente lo filtramos con sort + uniq para listar de mayor a menor la frecuencia de los crontabs que mas se ejecutan:

Con este sencillo hack para AWK∞ podemos imprimir el contenido entre dos determinados patrones; Por ejemplo, vamos a analizar un caso donde nos interesa extraer el contenido que se encuentra entre los caracteres [ y ]:

Establecemos la variable FS (Field Separator, o separador de campos, similar al IFS de BASH∞) al valor [. Es decir, FS contiene el primer patrón.

Al utilizar [ como FS tendremos el contenido separado en X partes: la variable $1 contendrá lo que se queda a la “izquierda” del patrón, $2 contiene lo que queda a la derecha, y así sucesivamente. Con la asignación $0=$2 la línea completa pasa a tener el valor que está a la “derecha” del patrón que hemos utilizado como FS.

Utilizamos RS=[ (Input Record Separator) para marcar el final del contenido que buscamos, así cuando AWK∞ se encuentra con el patrón ] lo toma como el final del contenido, es decir, RS contiene el segundo patrón.

En este otro ejemplo, vamos a extraer las cadenas que se encuentran entre las etiquetas HTML

de la página de un usuario del servicio Twitter, de modo que obtendremos un listado de enlaces que este ha publicado:

Publicado en Unix - Linux | Deja un comentario