Linux: Comprobar si un ARCHIVO tiene datos o esta vació.-

#!/bin/bash
ARCHIVO=$1
if [ -s "$ARCHIVO" ]
then
    echo "El archivo $ARCHIVO tiene datos."
else
    echo "El archivo $ARCHIVO esta vacio."
fi

Publicado en Unix - Linux | Deja un comentario

LINUX – Arrays en BASH.-

#!/bin/bash
<<INFO
Ejemplo de utilizacióe arrays en bash
${valores[*]}         # Muestra todos los valores de un array
${!valores[*]}        # Muestra todos los indices de un array
${#valores[*]}        # Devuelve el numero de valores en un array
${#valores[0]}        # Devuelve la longitud del indice 0
INFO
# definimos un array de valores
valores=("primero" "segundo" "tercero")
# añmos un nuevo valor en la posicion 3 del array
valores[3]="quarto"
# añmos un nuevo valor en la posicion 5 del array
valores[5]="quinto"
printf "\nCantidad de valores dentro del array\n"
printf "   %s\n" ${#valores[*]}
printf "\nMostramos un valor dado\n"
printf "   %s\n" ${valores[2]}
printf "\nMostramos la longitud del indice 2\n"
printf "   %s\n" ${#valores[2]}
# recorremos todos los valores del array
printf "\nmostramos todos los valores\n"
for item in ${valores[*]}
do
    printf "   %s\n" $item
done
# recorremos todos los indices del array
printf "\nMostramos todos los indices\n"
for index in ${!valores[*]}
do
    printf "   %d\n" $index
done
# mostramos los indices y sus valores
printf "\nMostramos todos los indices con sus valores\n"
for index in ${!valores[*]}
do
    printf "%4d: %s\n" $index ${valores[$index]}
done

Si ejecutamos el SCRIPT nos mostrara por pantalla el siguiente resultado :

Cantidad de valores dentro del array
5
Mostramos un valor dado
tercero
Mostramos la longitud del indice 2
7
mostramos todos los valores
primero
segundo
tercero
quarto
quinto
Mostramos todos los indices
0
1
2
3
5
Mostramos todos los indices con sus valores
0: primero
1: segundo
2: tercero
3: quarto
5: quinto

Publicado en Unix - Linux | Deja un comentario

LINUX . MATAR MUCHOS PROCESOS CON EL MISMO NOMBRE Y/Ó PATRÓN.-

En lugar de tener que hacer kill a cada PID de forma “manual”, con el siguiente script lo haremos en una línea y sin apenas trabajo.

for i in ps aux | grep "/tmp/prueba.sh" | awk '{print $2}'; do kill -9 $i; done

De esta forma podremos matar uno, decenas ó miles de procesos que se hayan quedado colgados.

Publicado en Unix - Linux | Deja un comentario

LINUX – Como saber que procesos consumen mas CPU y MEMORIA.-

Para conocer los procesos que consumen más CPU y MEMORIA se utiliza el siguiente comando :

ps aux --width 30 --sort -rss | head

Con el parámetro “width” , indicamos el ancho de pantalla; con “sort” ordenamos el resultado, combinado con el parámetro “rss”, por uso de memoria. Por último, mediante una tubería o pipe, utilizamos el comando “head”, de esta manera se nos muestran las primeras 10 líneas.

Publicado en Unix - Linux | Deja un comentario

Saber durante cuanto tiempo se ha ejecutado un proceso en Linux.-

Todos los que ya conocen GNU/Linux o los sistemas Unix conocerán el comando ps que nos permite monitorizar procesos, así como otros programas que nos permiten trabajar con los procesos abiertos en nuestro sistema operativo. Se muestra a continuación; paso a paso y de forma sencilla cómo se puede saber el tiempo de ejecución que un proceso ha estado activo.

pidof httpd

En este caso nos devolverá el PID del proceso para el demonio HTTP, pero si quieres averiguar otro programa, utiliza su nombre en vez de éste. Imaginemos que nos devuelve el PID 815. Pues lo siguiente es usar ps para determinar el tiempo con la opción etime:

ps -p 815 -o etime

Y nos dará los días, horas, minutos y segundos que lleva en ejecución. Si quieres visualizar el tiempo en segundos en vez de en formato DD-HH:MM:SS, entonces usa la opción etimes.

Publicado en Unix - Linux | Deja un comentario

LINUX – Script para busqueda de patrones con GREP.-

El siguiente script muestra en pantalla el nombre del archivo donde se encontró el patrón de búsqueda dentro de un directorio. Si no hubo coincidencias, también lo indicará. Tanto el patrón de búsqueda como el directorio son ingresados al script usogrep.sh como argumentos ($1 y $2 respectivamente).

#!/bin/bash

# Patrón de búsqueda
PATRON=$1

# Directorio en donde buscar
DIRECTORIO=$2

# Búsqueda
grep -irq $PATRON $DIRECTORIO/*

if [ $? -eq 0 ]; then
    LUGAR=$(grep -irl $PATRON $DIRECTORIO/*)
    echo "El patrón $PATRON fue localizado en $LUGAR."
else
    echo "No se encontró el patrón $PATRON en los archivos presentes dentro de $DIRECTORIO."
fi
Publicado en Unix - Linux | Deja un comentario

Obtener el directorio de ejecución de un script BASH.-

Este SCRIPT se puede utilizar para cargar un archivo de configuración ubicado en la misma ruta en donde esta grabado el script, lo lances de cualquier parte, siempre mostrara la misma ruta.

#!/bin/bash
 
SCRIPT=$(readlink -f $0);
dir_base=`dirname $SCRIPT`;
 
echo "El script se encuentra en $dir_base";

Publicado en Unix - Linux | Deja un comentario

EXPECT- Script para ejecutar comandos en forma remota.-

El siguiente ejemplo es un SCRIPT realizado con EXPECT para tomarlo como base para ejecutar script remotos y mostrar el resultado por pantalla. Suponiendo que al script lo grabamos con el nombre remoto.sh, para ejecutarlo sería :

bash remoto.sh “ps -fea | grep componente”

!/bin/bash
HOST="servidor"
USER="usuario"
PASS="password"
CMD=$@
VAR=$(expect -c "
spawn ssh -o StrictHostKeyChecking=no $USER@$HOST $CMD
match_max 100000
expect \"?assword:\"
send -- \"$PASS\r\"
send -- \"\r\"
expect eof
")
echo "==============="
echo "$VAR"

Entre las comillas se debe ingresar el comando que se desee ejecutar en el servidor remoto.-

Publicado en Unix - Linux | Deja un comentario

LINUX – SCRIPT Monitorizar el uso del disco.-

En el siguiente SCRIPT de ejemplo se monitorean los File System y muestra por pantalla los que estan utilizando mas del 40% de uso. Este mismo script se puede modificar para que en vez de que muestre la información por pantalla, envié un mail. Esto puede ponerse en un CRONTAB y ejecutarse en forma periódica.-

!/bin/sh
df -Ph | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5,$1 }' | while read output;
do
used=$(echo $output | awk '{print $1}' | sed s/%//g)
partition=$(echo $output | awk '{print $2}')
if [ $used -ge 40 ]; then
echo "The partition \"$partition\" on $(hostname) has used $used% at $(date)"
fi
done
Publicado en Unix - Linux | Deja un comentario

UNIX – Busqueda de varios patrones con comando FIND.-

Es comando lo he probado en Unix (Solaris) y ha funcionado en forma correcta. Tambien se puede utilizar para buscar archivos en múltiples servidores, la búsqueda la realiza en forma recursiva desde la ruta que uno ingresa como base :

find /usr99/applsin/web -type f -name '*p9412*.*' -o -name '*full*.*' -o -name '*Res*.*' -o -name '*Aut*.*' -o -name '*Rut*.*'
Publicado en Unix - Linux | Deja un comentario

BASH – Script manejo de array (iteración arreglo).-

#! /bin/bash

set -o errexit  # the script ends if a command fails
set -o pipefail # the script ends if a command fails in a pipe
set -o nounset  # the script ends if it uses an undeclared variable

declare -a ARRAY;

ARRAY=("cero" "uno" [3]="tres")
ARRAY[2]="dos"

LENGTH=${#ARRAY[*]}

for (( i=0; i<LENGTH; i++ )); do
    echo $i=${ARRAY[i]}
done

Al ejecutar el SCRIPT nos arrojara el siguiente resultado :

0=cero
1=uno
2=dos
3=tres

Publicado en Unix - Linux | Deja un comentario

LINUX – Uso del comando EVAL con ejemplo.-

El comando eval permite la realización de una doble evaluación en la línea de comandos. Recibe como argumento un conjunto de expresiones en el que efectúa las operaciones siguientes:

  • Primera etapa: los caracteres especiales contenidos en las expresiones se tratan. El resultado del tratamiento genera una o varias expresiones: eval otra_exp1 otra_exp2 … otra_expn. La expresión otra_exp1 representará el comando Unix que se debe ejecutar en la segunda etapa.
  • Segunda etapa: eval va a ejecutar el comando otra_exp1 otra_exp2 … otra_expn. Sin embargo, previamente, esta línea se va a someter a una nueva evaluación. Los caracteres especiales se tratan y después el comando se lanza.
#!/bin/bash
nombre=gonzalo
apellido=reiser
direccion=teatinos
pais=chile
var=nombre
eval echo \$$var
var=apellido
eval echo \$$var
var=direccion
eval echo \$$var
var=pais
eval echo \$$var
Publicado en Unix - Linux | Deja un comentario

BASH – Script calcula si un año es bisiesto.-

#!/bin/bash
clear;
echo "Entre el año verificar (4 digitos), y despuews[ENTER]:"
read year
if (( ("$year" % 400) == "0" )) || (( ("$year" % 4 == "0") &amp;&amp; ("$year" % 100 !="0") )); then
       echo "$year es bisiesto."
       echo ""
else
       echo "$year NO es bisiesto."
       echo ""
fi

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 (Se puede utilizar directamente en un crontab para eliminar archivos de log por ejemplo) :

/usr/bin/find /usr21/home/usuario/procesos/v22/_log -mtime +5 -exec rm {} \; 1> /dev/null 2> /dev/null

Publicado en Unix - Linux | Deja un comentario

Script – LINUX : Comando SED con ejemplos útiles.-

#Ver las líneas de un fichero de texto de la 15 a la 17

sed -n 15,17p nombre.txt

#Mostrar todo el contenido excepto las líneas 10 a 14

sed 10,14d nombre.txt

#Mostrar cada 3º línea comenzando desde la 2

sed -n '2,3p' nombre.txt

#Eliminar la línea 4

sed 4d nombre.txt

#Eliminar la última línea, sea cual sea

sed $ d nombre.txt

#Eliminar un rango de líneas

sed '20 -34d ' nombre.txt

#Eliminar solo las lineas mencionadas

sed '29 -34! d ' nombre.txt

#Agregar una línea en blanco tras cada línea de texto

sed G nombre.txt

#Localizar "hola" y sustituirlo por "hello"

sed 's / hola / hello /' nombre.txt

#Sustituir palabra de una línea concreta

sed '4 s / peligro / seguridad /' nombre.txt

#Sustituir una línea donde se encuentre la palabra "adios" por otra línea escrita

sed '/ adios / c "Esta será la nueva línea"' nombre.txt

Sustituir apariciones de cadena1 por cadena2 en las líneas 1 a 10:

cat archivo.txt | sed ‘1,10 s/cadena1/cadena2/g’

Reemplazar múltiples cadenas (A o B):

sed ‘s/cadenasrc1|cadenasrc2/cadena_nueva/g’

Mostrar desde una expresión regular hasta el final de archivo:

sed -n ‘/regexp/,$p’ archivo

Eliminar espacios al principio de línea:

# sed ‘s/^ *//g’ archivo

Eliminar todos los espacios que haya al final de cada línea:

sed ‘s/ *$//’ archivo

Eliminar espacios sobrantes a principio y final de línea, o ambos:

sed ‘s/^[ t]*//’ archivo
sed ‘s/[ t]*$//’ archivo
sed ‘s/^[ t]*//;s/[ t]*$//’ archive

Reemplazar cadenas:

sed 's/^unix/linux/g' fichero > fichero2

Ver la siguiente línea a una regexp:

sed -n '/regexp/{n;p;}' archive

Mostrar desde una regexp, hasta el final del archivo:

sed -n '/regexp/,$p' archive

Ver las líneas que contengan 75 caracteres o menos:

sed '/^.\{75\}/d' archivo

Borrar líneas en blanco de un archivo:

sed '/^$/d' archivo > archivo1.txt

Borrar las líneas duplicadas que no sean consecutivas:

sed -n 'G; s/\n/&amp;&amp;/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P' archive

Cambia el texto indicado en el archive oldfile.txt y crea un backup del archivo Como oldfile.txt.bak

sed -i.bak 's/cat/dog' oldfile.txt
Publicado en Unix - Linux | Deja un comentario

PHP – Servicio REST y conversión de datos UTF-8.-

El siguiente código PHP lo utilizo para traer información (Servicio REST) de una URL especifica, en que le paso como argumento un RUT, Esta información no reconoce los caracteres especiales, acentos, etc.. Por este motivo se transforma a codificación UTF8.

<?php
header('Content-Type: text/html; charset=ISO-8859-1');
$Nombre_de_Archivo = "/opt/mon/shell/cert/datos01.txt";
$Datos = utf8_decode(file_get_contents("http://carton:8270/consuT-rs/CONtransv/getINFo/$argv[1]"));
$archivo = fopen($Nombre_de_Archivo, "a");
fwrite($archivo, $Datos . "\n");
exec("iconv -f ISO-8859-1 -t utf-8 /opt/mon/shell/cert/datos01.txt > /opt/mon/shell/cert/datos02.txt");
fclose($archivo);

Publicado en Unix - Linux | Deja un comentario

Script – Cambio masivo de texto en archivos.-

La siguiente linea la utilizo para cambiar la ruta en forma masiva en Script. Se puede adaptar para cambiar cualquier texto. En este caso se cambia la ruta del ejecutable EXPECT :

sed -i "s%/usr/local/bin/expect%//usr/bin/expect%g" /opt/usuario/shell/certi/*.sh

Publicado en Unix - Linux | Deja un comentario

Script BASH – Copia masiva de archivos con EXPECT.-

#!/bin/bash
/usr/bin/expect -c "
log_user 0
spawn /usr/bin/scp -q -p adm@10.22.3.101:/usr01/home/ad/*.txt /opt/usuario/shell/cert/
expect {
"*assword:*" { send cart123.\r;interact }
}
Publicado en Unix - Linux | Deja un comentario

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.

#!/bin/bash

total=1

for var in "$*"; do

    echo "\$* =======> #$total = $var"

    total=$(($total + 1))

done

total=1

for var in "$@"; do

    echo "\$@ =======> #$total = $var"

    total=$(($total + 1))

done
echo "El numero de parametros es       : $#"
echo "El ultimo parametro ingresado es : ${!#}"

Al Ejecutar este Script, obtendriamos el siguiente resultado :

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

$* =======> #1 = uno dos tres cuatro cinco seis siete ocho
 $@ =======> #1 = uno
 $@ =======> #2 = dos
 $@ =======> #3 = tres
 $@ =======> #4 = cuatro
 $@ =======> #5 = cinco
 $@ =======> #6 = seis
 $@ =======> #7 = siete
 $@ =======> #8 = ocho
 El numero de parametros es       : 8
 El ultimo parametro ingresado es : ocho

Publicado en Unix - Linux | Deja un comentario

BASH – Script reinicio SERVICIO consola JAVA.-

#!/bin/bash
motor=$1
clave=$2
logs=/usr01/home/monitor/netsw/check_$motor.log
consulta=`/usr/local/bin/curl "http://pilot.sii.cl/api/modelo_v1.php?g=$motor" 2> /dev/null`
IFS=';' read -ra servidor <<< "$consulta"
for i in "${servidor[@]}"; do
    servi=`echo "$i" | grep -v Suspend | cut -d "," -f 2 | cut -d "-" -f 1`
    if [ "$servi" ]
       then
           check_ser=
           check_ser=`/usr/local/bin/expect /usr01/home/monitor/netsw/nsex-veser.sh $servi $motor $clave | grep Disabled | cut -d " " -f 1`
           num=`echo $check_ser | wc -l`
           if [ ${num} -gt 0 ]
                then
                    for servicio in `echo $check_ser`
                    do
                    /usr/local/bin/expect /usr01/home/monitor/netsw/nsex-reser.sh $servi $motor $clave $servicio 1> /dev/null 2> /dev/null
                    echo "$motor $servi `date +%d-%m-%Y` `date +%H:%M:%S` servicio $servicio HABILITADO" >> $logs
                    done
           fi
    fi
done
Publicado en Unix - Linux | Deja un comentario