Mostrando las entradas con la etiqueta scripts. Mostrar todas las entradas
Mostrando las entradas con la etiqueta scripts. Mostrar todas las entradas

martes, 10 de junio de 2014

Como automatizar nuestros scripts con cron

Este tutorial es para poder crear scripts "croneados",cron viene de chronos(tiempo),así que podríamos decir que ejecutar scripts cada cierto tiempo,pueden ser scripts en Bash,Perl,Awk o lo que sea,programas en C,C++,etc,mas que scripts son tareas o ordenes.

Por eso se llama así la entrada ya que un script son ordenes,mas que nada seria para ejecutar tareas importantes,como por ejemplo algo relacionado con apache,pero también podríamos poner recordatorios de cosas cotidianas.

Cron es un demonio,en los sistemas de tipo Unix es lo que se conoce como un proceso en segundo plano,cron estaría como "vigilando" el sistema cada cierto tiempo si es que se lo pidiéramos.

Vamos a hacer un ejemplo,tenemos que hacer algo a las cinco de la tarde,y se nos olvida :\ para eso esta cron "a pequeña escala" ya que no es un ejemplo muy bueno a menos que estemos todo el dia en la Pc,pero como podríamos crear un recordatorio en Linux?

Para empezar usamos una notificación,este script sirve:


1
2
3
4
#!/bin/bash
# Archivo :  ~/.scripts_cron/recordatorio.sh

notify-send "Recordatorio importante"

Por ejemplo lo vamos a guardar en ~/.scripts_cron/

Creamos el directorio:

Desde terminal tecleamos:

mkdir ~/.scripts_cron/

Y lo guardamos con el nombre recordatorio.sh

Le debemos dar permiso de ejecución ya que cron ejecuta ordenes(ejecutables):

chmod +x ~/.scripts_cron/recordatorio.sh

Luego como hacemos que se ejecute en una hora?

Para esto usamos crontab.

Para ello ejecutamos:

crontab -e

Nos abrirá la configuración de nuestro usuario con el editor de consola que tengamos en la variable de entorno EDITOR,para verla:

echo $EDITOR

Si no sale nada puede que el editor sea vi,para definir nano por ejemplo usamos:

export EDITOR=gedit

Si queremos que sea el editor de siempre,ejecutamos:

echo 'export EDITOR=gedit' >> ~/.bashrc


Bien,incluso creo que cron mismo da la opcion de elegir nuestro editor.

La sintaxis de cron es esta:


minuto hora dia mes dia_semana ejecutable


Explico:

minuto es en formato : 0 a 59 si desean siempre(cada minuto),usar *,si desean minutos específicos usar comas.

hora es en formato : 0 a 23 : 0 son las doce de la noche,las doce del dia son 12,ejecutar cada hora usar *,ejecutar horas seleccionadas usar comas.

dia es en formato : día de mes (1-31[dependiendo de los días del mes]),ejecutar todos los días usar *,ejecutar días seleccionados usar comas.

mes es en formato : 1 a 12 o las primeras tres letras del mes en ingles,para ejecutar todos los meses usar *,para ejecutar mas de un mes,usar comas.

dia_semana es en formato : 0 a 6 (domingo es cero,lunes 1,etc),o usar las tres primeras letras del nombre en ingles,para todos los dias usar *,para mas de un dia usar comas.

ejecutable es en formato : /ruta_ejecutable

Bien como ejecutamos el script a las 5 de la tarde,añadimos al final del archivo:

0 17 * * * /home/tu_usuario/.scripts_cron/recordatorio.sh

Eso es todo,ahora deberíamos ver el recordatorio a las cinco,antes que nos confiemos en esto vamos a probar ya que puede haber errores:


Error 1 no esta activo el demonio:

Para saber si esta activo ejecutamos en terminal:

 ps -ef | grep cron | grep -v grep

Si no muestra nada lo reiniciamos:

sudo service cron restart

Error 2 ejecutar programas con interfaz gráfica:


Si ejecutamos programas que se muestran en la pantalla debemos setear la variable de entorno DYSPLAY a :0

 env DISPLAY=:0

0 17 * * *  env DISPLAY=:0 /home/tu_usuario/.scripts_cron/recordatorio.sh

Error 3 nuestro usuario no puede ejecutar tareas con cron:

 Puede que nuestro usuario este agregado al archivo:

/etc/cron.deny
Si es así no podemos ejecutar cron,asi que editamos el archivo como root.

Por otro lado el fichero cron.allow permite a los usuarios que esten en el ejecutar cron.

Lo malo es que basado en el sistema que usemos puede que este en distintos directorios,lo buscamos con:

sudo find / -name \cron.deny -type f

Si muestra una ruta la editamos,si no no es este el problema.



Eso es todo,bueno antes de que acabe el tutorial debo aclarar que crontab tiene variables especiales,pero no es muy buena idea usarlas ya que se pueden remplazar con la sintaxis mencionada,la unica variable que no tiene remplazo es la acción de que se ejecute cada vez que se reinicie la Pc:

@reboot

Su uso es así:

@reboot script_a_ejecutar

Eso es todo :D


Leer más...

sábado, 22 de septiembre de 2012

Curso scripting bash (read case esac)


Esta es la parte 6 de los tutoriales tipo cursos para aprender como funciona el lenguaje de programacion bash y porque no,para aprender a crear scripts o programas que nos ayuden a usar o administrar el sistema

Bueno en estas son las partes anteriores:

Parte 1


Parte 2


Parte 3

Parte 4  

Parte 5

En esta ocacion veremos case y esac que seria case y su palabra alrevez esac,como ocurre con if en bash se cierra con fi,que es if volteado,bueno case y esac nos permiten tomar deciciones mezclando esto con read,read es una toma de decisiones,es interactuar desde el teclado con la terminal,esto ya lo hemos visto en python y mono C# en este sitio,y bueno vamos a empezar con los ejemplos:

El programa hola mundo,es el que se encarga de imprimir texto en la terminal o ventana en dado caso de un lenguaje,el programa hola mundo fue el primero que vimos en estos tutoriales pero lo traigo de nuevo,vitaminado con condicionales if,fi y el comando read

Código:

#!/bin/bash
echo " Escribe hola mundo"
tex="Hola Mundo"
read opcion
if [[ $opcion = $tex ]]
then
echo -e "\e[1;34m$opcion\e[0m"
else
echo "No escribiste bien"
exit 0;
fi




Lo explico

Aquí usamos una variable(tex) para definir el texto "Hola Mundo" nos da toma de decisión con el comando read y al final compara con una condicional(ya las vimos en una entrada pasada) si se cumple el texto,si se cumple ejecuta Hola Mundo en color azul y si no se cumple muestra "No escribiste bien" y se cierra el programa.


Ahora ¿el comando case para que sirve?

bueno nos ayuda ha desviar la respuesta a un comando,que puede ser del sistema o algo local

codigo:

#!/bin/bash
echo "Presiona t para mostrar texto"
echo "Presiona l para listar tu contenido"
read opcion
case $opcion in
t)
echo "Hola Mundo"
;;
l)
ls
;;
*)
echo "Opcion incorrecta saliendo..."
;;
esac

Bien,explico el código con #

#!/bin/bash
echo "Presiona t para mostrar texto" # Mostramos la opciones
echo "Presiona l para listar tu contenido" # Mostramos las opciones
read opcion # Leemos las opciones
case $opcion in # Tomamos las opciones
t) # Si elegimos t...
echo "Hola Mundo" #Muestra esto
;; # Símbolo de cierre de elección
l) # Si elegimos l...
ls # Ejecuta esto,comando del sistema que lista el contenido
;; # Simbolo de cierre de elección
*) # Si no elegimos ninguna de las anteriores...
echo "Opcion incorrecta saliendo..." # Se muestra esto y sale
;; # Simbolo de cierre de elección
esac # Cierre de case

Ahora,como se pueden haber dado cuenta solo se elige de a una letra l) o t) esto no es necesariamente así,ya que se puede usar texto) o listar),incluso esto puede ir mas haya usando este símbolo | que quiere decir or en español o,por ejemplo tener dos palabras o letras para ejecutar,solo un comando,por ejemplo listar|LISTAR) que seria listar o LISTAR

codigo:

#!/bin/bash
echo "Presiona t para mostrar texto"
echo "Presiona l para listar tu contenido"
read opcion
case $opcion in
t|texto|TEXTO) # Varias palabras o letras
echo "Hola Mundo"
;;
l|listar|LISTAR)
ls
;;
*)
echo "Opcion incorrecta saliendo..."
;;
esac

Aquí lo único que se tiene que explicar es que se pueden usar varias palabras o letras que si son elegidas con read,ejecutara solo un comando.

Ahora como hacer para que no se cierre hasta que escribamos Hola Mundo? bueno para eso haremos uso de un bucle while

#!/bin/bash
while [ 1 ]; do
read opcion
case $opcion in
t|T)
echo "Hola Mundo"
;;
s|S)
exit 0;
;;
help)
echo "Presiona s para salir"
echo "Presiona t para mostrar texto"
;;
*)
echo "Opcion incorrecta"
echo "Presiona help para obtener ayuda"
;;
esac
done

Vieron,se pueden hacer cosas muy buenas con bash,ahora explico el codigo con #

#!/bin/bash
while [ 1 ]; do # Iniciamos bucle con una condición logica,repetira y repetira los comandos hasta encontrarse con algún exit que lo cierre o algún argumento que rompa el bucle
read opcion
case $opcion in
t|T)
echo "Hola Mundo"
;;
s|S) # Este comando cierra el bucle y sale del programa
exit 0; Argumento
;;
help) # Añadido help para mostrar los textos
echo "Presiona s para salir"
echo "Presiona t para mostrar texto"
;;
*) # Si se presiona cualquier otra tecla que no este asignada,mostrara esto y podremos ver la guia del pequeño programa
echo "Opcion incorrecta"
echo "Presiona help para obtener ayuda"
;;
esac
done

Bien ahora si usamos el comando clear(no lo uso mucho) para limpiar la pantalla y que se vea un poco mejor usaríamos algo como lo que esta en el enlace de abajo, también usariamos sleep en el codigo y para que se vea un poco mas bonito vamos a identarlo

Enlace

Les recomiendo que identen, aunque bash no sea como python y de un error,les recomiendo que identen con tab los scripts que creen,los dos codigos de abajo no estan identados.

Bueno en el código use n=1,que quiere decir que le doy el valor de 1 a la variable n,luego cuando entra en el bucle y ve si la variable n es igual a 1,si lo ejecuta,luego cuando encuentra en un comando que n es 2 u otro valor se cierra,es parecido a exit solo que en ocaciones puede ser mas eficas si el codigo es largo ya que tambien se pudo haber escrito de esta manera

Código anterior:

#!/bin/bash

n=1
while [ $n = 1 ] 
do

clear
echo "Texto o Salir (t/s)"
read opcion

case "$opcion" in

t|T)
clear
echo "Hola Mundo"
sleep 3
n=2 # Argumento que rompe el bucle
;;
s|S)
n=2
;;
help)
                clear
echo "Presiona s para salir"
echo "Presiona t para mostrar texto"
sleep 3
;;
*)
clear
echo "Opcion incorrecta"
echo "Presiona help para obtener ayuda"
sleep 3
;;

esac
done

Otra forma de escribirlo:


#!/bin/bash

while [ 1 ]; do

  clear
echo "Texto o Salir (t/s)"
read opcion

  case "$opcion" in

  t|T)
clear
echo "Hola Mundo"
sleep 3
exit 1;
;;
s|S)
exit 2;
;;
help)
                clear
echo "Presiona s para salir"
echo "Presiona t para mostrar texto"
sleep 3
;;
*)
clear
echo "Opcion incorrecta"
echo "Presiona help para obtener ayuda"
sleep 3
;;

  esac
done

Les dejo un video de demostración del codigo anterior,ya identado y ejecutado




Bueno eso es todo,lo que hay que hablar sobre case esac y read,en la proxima entrada veremos operaciones aritmeticas que no lo hemos visto y es de lo primero que debi haber escrito XD


Leer más...

domingo, 9 de septiembre de 2012

Curso scripting bash Comparación de valores

Esta es la parte numero 5 de estos tutoriales tipo cursos para aprender como funciona bash,y para aprender a crear nuestros scripts escritos en bash

Esta entrada esta basada en que ya leíste las 4 pasadas o ya tienes algún tipo de conocimientos en scripting o programación así que si no lo has hecho adelante


Parte 1


Parte 2


Parte 3

Parte 4 

En esta ocasión veremos los símbolos que comparar distintas cosas

Primero los símbolos de

Comparación de valores numéricos


Símbolo Ejemplo Descripción
-lt e -lt c e es menor a c
-le e -le c e es menor o igual a c
-eq e -eq c e es igual que c
-ge e -ge c e es mayor o igual que c
-gt e -gt c e es mayor que c
-ne e -ne c e no es igual que c

Ahora estos valores los podemos usar en un script mediante if declarando una variable


Comprobación de atributos de un archivo,carpeta o fichero


Símbolo Ejemplo Descripción
-d -d archivo Archivo existe y es un directorio
-e -e archivo Archivo existe y es cualquier tipo de archivo
-f -f archivo Archivo existe y es un fichero regular
-r -r archivo Tenemos permisos de lectura sobre el archivo
-s -f archivo Archivo existe y no esta vacio
-w -w archivo Tenemos permisos de escritura en el archivo
-x -x archivo Tenemos permisos de ejecución en el archivo o de búsqueda si fuese un directorio
-O -O archivo Somos dueños de archivo
-G -G archivo El grupo del archivo es igual al nuestro
-nt archivo -nt otro Archivo es mas reciente que el otro archivo
-ot archivo -ot otro Archivo es mas antiguo que el otro archivo



Comparación de valores alfanuméricos


Símbolo Ejemplo Descripción
= ValorA = ValorB El ValorA es igual a ValorB
!= ValorA != ValorB El ValorA es desigual al ValorB
< ValorA < ValorB El ValorA es menor que el ValorB
> ValorA > ValorB El ValorA es mayor que el ValorB
-n -n ValorA Longitud de ValorA mayor a 0
-z -z ValorA Logitud de ValorA menor a 0


Variables especiales


Símbolo Descripción
$$ Numero de proceso de SHELL en el que se esta utilizando
$0 Nombre de la SHELL que estamos ocupando
$1 a $9 Hace referencia a n-esimo en la linea de comandos
$? El código de retorno del ultimo comando ejecutado
$# Numero de argumentos
$* La lista de todos los argumentos

Ahora esto usado en un script seria así como lo que vimos en la entrada pasada

#!/bin/bash

e=10000
i=0;
while [[ $e -gt $i ]] # e es mayor que i,claro y como es un valor lógico ejecuta lo siguiente
do
echo Numero $i ejecutado
let i=$i+1
done

Ahora si se entiende mejor,estos simbolos son muy usados por los programadores,scripters para otorgar valores lógicos,y ejecutar acciones o compararar distintos archivos o valores,por ejemplo este es un script para jugar un rato

#!/bin/bash
echo 'Adivina el Numero'
echo 'Una pista,es entre el 0 y el 10'
num=$(($RANDOM%10))
read numb
if [ $num = $numb ]
then
echo "Acerstate era $num"
else
echo "Error el numero era $num"
fi

Ese script no usa ningún simbolo,pero si queremos que use dejemos que la pc juegue sola :D

#!/bin/bash
echo 'Adivina el Numero'
echo 'Una pista,es entre el 0 y el 10'
num=$(($RANDOM%10))
numb=$(($RANDOM%10))
if [ $num -ne $numb ]
then
echo "Acertaste $HOSTNAME era $num"
else
echo "Error $HOSTNAME el numero era $num"
fi




xD,se va a enojar la Pc,bueno ese es un ejemplo y estos símbolos mas que nada se los dejo para que tengan una idea para que sirven cuando están en un script





Leer más...

domingo, 2 de septiembre de 2012

Curso scripting bash bucles (for-while-until)

Bueno esta es la entrada numero 4 de estos tutoriales tipo cursos que estoy realizando para entender un poco mas como funcionan los scripts escritos en bash y tambien para poder crear algunos.

Estos tutoriales se van basando en el conocimiento previamente adquirido,en las partes anteriores,asi que puedes revisarlas

Parte 1


Parte 2


Parte 3

En esta ocacion veremos los bucles for while y until

for

For es una instruccion mas en nuestro script programado para realizar una determinada accion en este caso for se refiere cual por cada elemento en determinada variable se repetirán determinadas acciones, esto hasta que lo haya hecho con todos los elementos indicados, entonces el ciclo habrá terminado y solo entonces.

Ejemplo de scipt

Los llamado for son mas que nada para contar

Por ejemplo para contar del uno al diez seria este un script usando for

#!/bin/bash # Hashbang
for i in 1 2 3 4 5 6 7 8 9 10 # Comienza instruccion
do # Termina instrucción
echo "Numero $1" # Se ejecuta la accion que convierte i en 1,2,3,etc y lo llamamos
done # Termina el script

Pero si quisieramos contar del 1 al 1000?

No se preocupen para eso solo se usaria esta sintaxis

#!/bin/bash # Hashbang
for i in {1 .. 1000} # Comienza la instruccion
do # Termina la instruccion
echo "Numero $i" # LLamamos i que for lo convirtio en 1,2,3,etc
done # Termina el script

Bucle infinito con for

El bucle infinito es algo que nunca terminal y en bash se define así


#!/bin/bash
for (( ; ; ))
do
   echo "Bucle infinito solo se cierra con CTRL+C "
done

Uso util

Bien,for no solo sirve para ese tipo de cosas ya que se puede fucionar con lo que previamente hemos visto y podriamos crear un script como este,como por ejemplo para saber cuantos archivos de configuración tenemos en /etc

#!/bin/bash # Hashbang
for file in /etc # Comienza la instruccion "para archivo en /etc"
do # Termina la instrucción
        if [ "${file}" == "/etc" ] # Si file es /etc...
        then
                archivos=`ls /etc | grep -c .conf` # Ejecuta este pipe
                echo "Tienes  ${archivos} archivos de configuracion en ${file}" # Ahora lo llama y se añade texto
                break # Comando break termina con el bucle
        fi # Termina condición if
done # Termina bucle

Este script nos enumera los archivos de confgiruracion que como sabemos o si no saben los archivos de configuracion de Linux y otros Unix se guardan en /etc

Esto seria lo mismo que usar este pipe

ls /etc | grep -c .conf

Pero bueno ese es un ejemplo otro seria este para listar los archivos pero ponerle un texto antes


#!/bin/bash
for i in $( ls );  # i toma el valor ls
echo Archivo: $i # Llamamos i
done # Termina el código y i puede tomar un nuevo valor


Bien un script util

Si tienen el programa host instalado(parecido a ping)

Cheken este script

#!/bin/bash

for HOST in www.itimetux.com www.google.com 
do
  echo "##################"
  echo $HOST
  echo "##################"
  
  /usr/bin/host $HOST # Edita esta parte " busca con whereis host"
  echo "##################"

done

También lo podemos hacer con ping y mas util cheken

#!/bin/bash

echo "Control+C para pasar al siguiente"

for PING in www.itimetux.com www.google.com 
do
  echo "-------------------"
  echo $PING
  echo "-------------------"
  
   /bin/ping $PING # Edita esta parte busca el ejecutable con "whereis ping"
   echo "########################################"

done




While

While es una instrucción que sirve para generar bucles, en lq cual la instrucción se ejecuta de forma repetida hasta que se cumpla una condición.
While cerciorara que se cumpla la condición logica y si se cumple se ejecutara lo que este entre do y done.

Ejemplo de bucle

Por ejemplo vamos ha hacer un script para hackear (fake),los scripts para pentest normalmente se escriben en perl,python o lua pero vamos ha hacer algo sencillo

#!/bin/bash
termina=40000
i=0;
while [[ $termina -gt $i ]]
do
echo Probando $i passwords
let i=$i+1
done
echo 'No se encontraron coincidencias'

Lo que hace es mostrar lo que haría un brute force o ataque con fuerza bruta,pero en realidad solo esta contando del 0 al 40000,lo explico

#!/bin/bash # Hashbang
termina=40000 # Donde termina
i=0; # Donde comienza
while [[ $termina -gt $i ]] # La estructura while añadiendo el formato -gt(que veremos mas adelante)
do # Inicia lo que queramos ejecutar
echo Probando $i passwords # Llamamos a i y añadimos texto
let i=$i+1 # let se usa para poder trabajar con números(lo veremos mas adelante) se suma por 1
done # Termina lo que queramos ejecutar
echo 'No se encontraron coincidencias' # Se ejecuta algo nuevo

Bucle infinito while


#!/bin/bash
while :
do
   echo "Bucle infinito solo se cierra con CTRL+C "

done


Until

El bucle until es igual a while podemos usar esta estructura igual

#!/bin/bash

numero=0

until [ $numero -gt 40000 ]; do # Se usa until
    echo "Probando $numero"
    let numero=$numero+1
done

Eso es todo por ahora


Leer más...

sábado, 14 de abril de 2012

Instalar plantillas para scripts en ubuntu 12.04 LTS

Esto es algo muy fácil pero muchas personas no saben y pienso que a mas de uno le servirá

Si han notado en ubuntu cuando dan clic derecho sale crear un documento pero sale esto


Si te preguntas como hacer para que salga como esto



La respuesta es este tutorial

Tutorial

1.Abre la carpeta personal



2.Abre Plantillas


3.Crea un script 

Solo usando el hashbang

Ejemplo

Bash

#!/bin/bash

Python

#!/usr/bin/python

Debe quedar así


Le ponemos el nombre que corresponda con su extensión

Bash.sh

Perl.pl

Python.py

ETC


O también podemos crear plantillas para documentos ofimaticos de 

doc,docx,xml,ectc





Video







Leer más...