miércoles, 13 de enero de 2016

Conocer las IPs conectadas a la red local

En ocasiones vamos a conectar un nuevo periférico a la red local y deseamos conocer su IP para realizar alguna labor. Para ello propongo utilizar la herramienta de exploración de redes y de sondeo de seguridad "nmap".

Si no viene instalada por defecto, la instalamos:


  • $ sudo apt-get install nmap

Para conocer las IPs conectadas a nuestra red local, en un momento concreto, ejecutamos en una terminal:

  • $ nmap -sn 192.168.1.0/24

Donde:

  1. nmap es el programa que utilizamos
  2. Las opciones s y n significan que se debe realizar un sondeo a base de PINGs sin resolución de DNSs. 
  3. 192.168.1.0 es la dirección base del router. En caso de que la dirección de tu router sea otra, debes ponerla en ese lugar.
  4. El /24 indica los bits de dirección dentro de la red local. En caso de ser una red doméstica siempre tendrá que haber un /24.

Para facilitar el proceso, en mi caso, me hice un script llamado rastreaips.sh (cómo hacer scripts en bash Linux) cuyo contenido es el siguiente:

#!/bin/bash
nmap -sn 192.168.1.0/24

Y simplemente se le da permisos de ejecución y lo movemos a una carpreta de ejecutables (/usr/bin/):

  • $ sudo chmod +x rastreaips.sh
  • $ sudo mv rastreaips.sh /usr/bin/

Y con ello ya tendremos nuestro script disponible en la terminal directamente ejecutando:

  • $ rastreaips.sh

Un saludo!

martes, 12 de enero de 2016

Cómo hacer un script en bash GNU/Linux

Muchas veces necesitamos automatizar algunas tareas, que se resumen en una sucesión de comandos. Para ello existen los scripts, que son una especie de "programas" que en lugar de utilizar un lenguaje de programación, utilizan comandos propios del sistema en el que se ejecutan.


Dentro de los scripts, podemos utilizar variables. Las variables son como espacios de memoria que guardan datos y se utilizan bajo un nombre.


  • Por ejemplo: "NOMBRE=Miguel". Con ello tenemos la variable NOMBRE que ahora guarda el dato Miguel. Para utilizarla ejecutamos "echo $NOMBRE" y saldría por pantalla Miguel.


De esta forma podremos guardar la salida de comandos en variables, para después utilizarla en otros comandos. Para profundizar más sobre variables accede aquí.


Si lo que deseas es guardar la salida de los comandos en un fichero de texto, puedes utilizar la redirección ">" para ello. Por ejemplo: echo "Hola Mundo" > hola.txt guardará en hola.txt el texto Hola Mundo.
Análogamente, para introducir como entrada de un comando el contenido de un fichero de texto, se utiliza la redirección "<".


Para introducir comentarios en el script basta con poner "#" al inicio de la línea.


Los condicionales y bucles (if [ cond ]; then ... fi ó for i in 1..4 do ... done) nos ayudan a controlar el flujo del script. Por ejemplo bajo el valor de una variable ejecutar un comando u otro (if), o ejecutar un comando muchas veces (for). Para aprender a utilizar estas estructuras accede aquí.


Al inicio del fichero de un script hay que indicar cómo se interpreta el código. Puede ser un script en python, shell, bash, etc. En este caso vamos a hacer un script en bash como ejemplo, por lo que al inicio del documento debe ir la siguiente línea:

#!/bin/bash

Seguidamente ya podemos empezar a introducir los comandos que necesitemos.


Ejemplo:

Un ejemplo muy sencillo de script es uno que utilizo a menudo. Para actualizar los paquetes instalados, como bien sabemos, hay que actualizar los repositorios y después actualizar los paquetes. Para simplificar, vamos a hacer un script "actualizar.sh" que ejecute los dos comandos:

#!/bin/bash
#Comprobamos que sea root con el condicional
# $(whoami) ejecuta el comando whoami y la salida se utiliza en la comparación con root
if [ $(whoami) != "root" ]; then
    #Informamos de que no ha ejecutado el script como root
    echo "Ejecuta el comando como root"
    exit
fi
#Actualizamos los repositorios
echo "Actualizando repositorios..."
apt-get update
#Actualizamos paquetes
echo "Actualizando paquetes..."
apt-get --assume-yes upgrade

Guardamos el texto del script como actualizar.sh y le damos permisos de ejecución como sigue:

  • $ sudo chmod +x actualizar.sh

Ahora ya podemos utilizar el script desde una terminal escribiendo:
  • $ sudo ./actualizar


Para que el script sea accesible desde cualquier carpeta hay que moverlo a una carpeta de ejecutables, o lo que es lo mismo, una carpeta del PATH. Por convenio los programas de usuario están en /usr/bin/, pero personalmente los scripts prefiero meterlos en mi carpeta personal, en /home/usuario/bin/

  • $ mv actualizar.sh ~/bin/

Espero que sirva de ayuda,
Un saludo!

________________________________

PD: En caso de que no os aparezca la carpeta /home/usuario/bin en el PATH acceder aquí para introducirla.

lunes, 11 de enero de 2016

Hacer una carpeta de ejecutables (tipo /usr/bin/) en tu carpeta personal

Ya hay muchas distribuciones de linux que incluyen esta funcionalidad por defecto. En ellas, únicamente hace falta crear la carpeta bin en tu carpeta de usuario y los scripts que se introduzcan en esa carpeta serán accesibles desde cualquier otra carpeta (en una terminal).

Pero para aquellos que esto no les venga configurado por defecto, se puede hacer de manera muy sencilla.

Para buscar los scripts, la terminal de GNU/Linux busca dentro de las carpetas contenidas en la variable del sistema $PATH. Por lo que debemos  incluir nuestra carpeta bin en esa variable.

Para ello vamos a añadir al final del fichero .bashrc, contenido en nuestra carpeta personal (oculto), lo siguiente:

PATH=$HOME/bin:$PATH

Haciendo que PATH contenga nuestra carpeta /home/usuario/bin y lo que contenía previamente.

Proceso:

  • En una terminal --> $ gedit ~/.bashrc
  • Añadimos al final del fichero : PATH=$HOME/bin:$PATH
  • Guardamos y cerramos


Éste fichero (.bashrc) lo ejecutará cualquier terminal al abrirse, por lo que siempre estarán disponibles nuestros scripts desde cualquier otra carpeta en la que nos ubiquemos.

Un saludo!