domingo, 20 de enero de 2013

Backup/Restore usando el comando dd

Con el comando dd podemos hacer copias de seguridad de todo un disco duro. Con esto vamos a conseguir una imagen completa del disco rápidamente.

Para realizar una copia completa del disco y comprimirla podemos hacer

dd if=/dev/sda | gzip> /home/vm/image.gz 


Ahora tendríamos una imagen de nuestro disco duro, y si quisiéramos restaurarla podríamos hacer:

gzip-dc /home/vm/image.gz | dd of=/dev/sda


También deberíamos copiar el MBR, para esto

dd if=/dev/sda of=/home/vm/image count=1 bs=512


y para restaurarlo:

dd if=/home/vm/image of=/dev/sda

viernes, 7 de diciembre de 2012

Comando sed

Orden Sed

Sintaxis: sed [-f fichero_ordenes] [-n] [archivo]

La herramienta sed es un editor de flujo(stream editor) utilizado para manipular archivos de texto. Sed copia los archivos especificados en la salida estándar después de procesarlos. Este procesamiento de los archivos de entrada se lleva a cabo línea por línea, acorde con las órdenes dadas a sed. Podemos destacar que sed no modifica los archivos de entrada. Las órdenes que procesa sed pueden ser aportadas explícitamente desde la línea de órdenes, o bien éstas pueden residir en un archivo. En este último caso, utilizamos la opción -f y a continuación el nombre del fichero de órdenes. La opción -n será empleada siempre que deseemos evitar la salida por pantalla de la línea que está procesando(por defecto sed visualiza las líneas que procesa, aunque no haga nada)

El aspecto general de las órdenes sed es el siguiente:
[dirección [, dirección ]] función [argumentos]
En éstas se indica la dirección (número de línea) o rango de direcciones a las cuales se debe aplicar la función indicada con sus posibles argumentos.
La mejor manera de entender el funcionamiento de sed es mediante ejemplos, veamos:
Creamos un fichero que contenga el siguiente texto



$ cat fichero
linea primera
linea segunda
linea tercera

linea cuarta
linea quinta


Seleccionar una línea

En este primer ejemplo, imprimimos por pantalla la línea número 3. y especificamos la función p(print), con esto se mostrará lo siguiente.

$sed 3p fichero
linea primera
linea segunda
linea tercera
linea tercera

linea cuarta
linea quinta

Como vemos, sed imprime las líneas del archivo, y la número 3 sale duplicada, por ser la línea que indicamos a sed que sea procesada (impresa en pantalla). Si ahora eliminamos la salida normal con la opción -n, conseguiremos mostrar sólo la línea indicada.

$ sed -n 3p fichero
linea tercera

Seleccionar un rango

En este ejemplo imprimiremos desde la línea 2 hasta la 3.

$ sed -n 2,3p fichero
linea segunda
linea tercera
Los rangos de direcciones, o las direcciones, pueden ser también especificados en forma de expresión regular. De esta manera se podría imprimir desde la primera línea que comienza con un determinado carácter hasta que se encuentre una línea que esté en blanco o algo similar.

$ sed -n /primera$/,$p fichero
linea primera

En el ejemplo anterior mostramos todas las líneas que acaban con la palabra primera. Mediante expresiones regulares también podemos especificar un rango de direcciones, por ejemplo: 



$ sed -n '/segunda$/,$p' fichero
linea segunda
linea tercera

linea cuarta
linea quinta
En este caso desde la linea que acaba con segunda hasta la última línea del fichero, representada por $.


Sustitución

Con la opción s podemos sustituir palabras y con la opción g para indicar que se aplique en todo el documento, por ejemplo
$ sed 's/linea/fila/g' fichero
fila primera
fila segunda
fila tercera

fila cuarta
fila quinta

En el siguiente ejemplo eliminaremos todos los espacios en blanco.

$ sed 's/ //g' fichero
lineaprimera
lineasegunda
lineatercera
lineacuarta
lineaquinta

Operador &

Se sustituye por el patrón reconocido
Ejemplo:
reemplaza primera por <primera>


$ sed 's/primera/<&>/g' fichero
linea <primera>
linea segunda
linea tercera
linea cuarta
linea quinta
Eliminar líneas

Para eliminar desde la línea 1 a la 3.



$ sed '1,3d' fichero

linea cuarta
linea quinta

Si quisiéramos eliminar las líneas que terminan con era:



$ sed '/era$/d' fichero
linea segunda

linea cuarta
linea quinta
Fichero con órdenes

Si creamos un fichero que contenga la siguiente línea



$cat orden
s/a/XXX/g

Al indicarle a sed que utilize este archivo de órdenes para procesar otros archivos, cualquier carácter a será sustituido por XXX. Por ejemplo:

$ sed -f ord fichero
lineXXX primerXXX
lineXXX segundXXX
lineXXX tercerXXX
lineXXX cuXXXrtXXX
lineXXX quintXXX

Insertar y cambiar líneas


Insertar antes de una línea:



$sed '/segunda$/i\ insertamos linea antes' fichero
linea primera linea
insertamos linea antes
linea segunda
linea tercera
linea cuarta
linea quinta

Insertar un línea después de la línea que coincida con el patron.



$ sed '/segunda$/a\ insertamos linea despues' fichero
linea primera linea
linea segunda
insertamos linea despues
linea tercera
linea cuarta
linea quinta

Con la opción c podemos sustituir las lineas que cumplan con el patron




$ sed '/segunda$/c\ sustituimos la linea' fichero
linea primera linea
sustituimos la linea
linea tercera
linea cuarta
linea quinta

domingo, 2 de diciembre de 2012

Backup Raspberry Pi

Si tenemos instalado el sistema operativo en la tarjeta SD, es una buena idea realizar un backup de esta.

sudo dd bs=1M if=/dev/sdh of=backupRaspberry2-12-2012.img

Con esto tendremos una imagen del sistema en ese momento.

sábado, 1 de diciembre de 2012

Configurando wifi en raspberry pi.

Vamos a configurar la wifi para Raspberry Pi. En este caso particular tenemos una red ONO que está encriptada con WPA.

En primer lugar miramos las redes para ver cual es la nuestra:
$ iwlist wlan0 scan

En segundo lugar añadimos la contraseña y el essid a un fichero.
$ wpa_passphrase "ESSID" CONTRASEÑA >> /etc/wpa_supplicant/wpa.conf

Tendrá un formato parecido al siguiente:
network={
 ssid="ONOXXXX"
 key_mgmt=WPA-PSK
 psk="XXXXXXXXXXX"
 
}

También podemos hacerlo nosotros mismos. Ahora ya podemos intentar asociarnos.
$ wpa_supplicant -iwlan0 -dnl80211 -c /etc/wpa_supplicant/wpa.conf 

Si todo ha salido bien tendremos funcionando el wifi en la interfaz wlan0.
root@raspberrypi:/home/pi# ifconfig 
eth0      Link encap:Ethernet  HWaddr b8:27:xx:xx:xx:xx  
          inet addr:192.168.1.17  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1488  Metric:1
          RX packets:3128 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2461 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:164652 (160.7 KiB)  TX bytes:181438 (177.1 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:560 (560.0 B)  TX bytes:560 (560.0 B)

wlan0     Link encap:Ethernet  HWaddr 00:1a:xx:xx:xx:xx  
          inet addr:192.168.1.18  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:739 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:102641 (100.2 KiB)  TX bytes:2816 (2.7 KiB)
Por último podemos agregar las siguientes líneas al fichero /etc/network/interfaces.
echo "wpa-driver nl80211" >> /etc/network/interfaces
echo "wpa-conf /etc/wpa_supplicant/wpa.conf" >> /etc/network/interfaces

domingo, 25 de noviembre de 2012

Comando tr

Orden tr

Sintaxis:

tr [-dsc] cadena1 cadena2

La orden tr se emplea como traductor. Como todo filtro, tr lee datos en la entrada estándar, los procesa y muestra los resultados en la salida estándar. Supongamos que tenemos un fichero con las siguientes líneas:
$cat fichero
Este es un archivo de texto 
QUE CONTIENE MAYUSCULAS Y minusculas.
Veamos como funciona mediante ejemplos:

Sustituir caracteres

Sustituimos todos los caracteres del rango A a Z a sus equivalentes en el rango a a z.

$ tr "[A-Z]" "[a-z]" < fich 
este es un archivo de texto 
que contiene mayusculas y minusculas. 

Sustituimos todos los caracteres del rango a a z a sus equivalentes en el rango A a Z.
tr "[a-z]" "[A-Z]" < fich 
ESTE ES UN ARCHIVO DE TEXTO 
QUE CONTIENE MAYUSCULAS Y MINUSCULAS.

También podemos sustituir un rango de carácteres por un carácter cualquiera: Convertimos el rango de caracteres de la A a la Z por el carácter x.
tr "[A-Z]" x < fich 
xste es un archivo de texto 
xxx xxxxxxxx xxxxxxxxxx x minusculas.

Eliminar determinados caracteres

opción -d

$ tr -d "[A-Z]" < fich 
ste es un archivo de texto 
    minusculas.


Eliminar caracteres repetidos 

Imagina un fichero con el siguiente texto:

$cat fichero
Aqquuuiii tttteeeennngggoo cccciiiiiieeeeerrrrttttooooossss ccccaaarrraaacccctttteeerrreeeesss rrrreeeepppeeettttiiidddddooooossssss

$ tr -s "[a-z]" < fich2 
Aqui tengo ciertos caracteres repetidos 

Indicar complementario

 En este ejemplo le indicamos que sustituya los caracteres que no sean minúsculas por espacios.
$ tr -c "[a-z]" " " < fich 
 ste es un archivo de texto                            minusculas

sábado, 27 de octubre de 2012

Qué es umask?

Umask La máscara de usuario (umask) se utiliza para determinar los permisos de archivo para los archivos recién creados. Se puede utilizar para controlar los permisos de los nuevos archivos de forma predeterminada. Como parámetro umask recibe un número de cuatro dígitos octales. Configurando umask Podemos configurar el valor de umask para el propio usuario en /etc/.bashrc o /etc/profile para todos los usuarios. Por defecto, la mayoría de distribuciones Linux tienen establecido umask en 0022 (022) o 0002 (002).
$ echo "umask 022" >> ~/.bashrc
Los cambios tendrán efecto después de reiniciar sesión. El umask por defecto 0002 se utiliza para los usuarios normales. Con esta máscara, los permisos predeterminados de directorio son 775, y los permisos de archivo son 664. El umask por defecto para el usuario root es 0022, y como resultado, los permisos predeterminados de directorio son 755, y los permisos de archivo son 644. Para los directorios, los permisos de base es 0777 (rwxrwxrwx) y para los archivos son 0666 (rw-rw-rw). Para calcular los permisos de directorio para un valor umask de 022 (usuario root) haremos lo siguiente:

777-022 = 755
Para calcular los permisos de archivo para un valor umask de 022 (usuario root) haremos lo siguiente: 666-022 = 644
En el ejemplo siguiente veremos los pasos necesarios para establecer un valor umask que nos hará que los valores de los permisos para los directorios 700 y 600 para los archivos de usuario. De esta manera sólo el usuario podrá leer o escribir el archivo, o acceder a los contenidos del directorio.
$ umask 077
$ touch archivo.txt
$ mkdir directorio
$ ls -ld archivo.txt directorio
Salida:
drwx------ 2 vill vill 4096 2012-10-27 02:21 directorio
-rw------- 1 vill vill    0 2012-10-27 02:21 archivo.txt

sábado, 13 de octubre de 2012

Script bash - validar dni

Aquí tenéis un pequeño script en bash, para validar si un DNI es correcto o no.
#!/bin/bash

cadena="TRWAGMYFPDXBNJZSQVHLCKET";

longitud=${#1}
if [ "$longitud" -eq 9 ]
then
 posicion=`expr ${1:0:8} % 23`
 letra=${cadena:posicion:1}
 letradaentrada=`echo ${1:8} | tr [a-z] [A-Z]`

 if [ $letra == $letradaentrada ]
 then 
  echo "número DNI correcto"
  exit 0
 else 
  echo "letra inválida"
  exit 1
 fi
else
 echo "Longitud errónea"
 exit 1
fi

exit 0
Ejecutamos d la siguiente manera.
# bash dni.sh 41033454s
letra inválida