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

Inodo - Enlaces simbólicos y enlaces duros

El inodo (nodo índice) en el sistema de archivos de Linux, es el identificador único para cada objeto en el sistema de archivos. Para todos y cada uno de los archivos en Linux encontraremos los siguientes atributos:

  • Tipo de archivo (ejecutable, bloque especial, etc) 
  • Permisos (leer, escribir, etc) 
  • Propietario 
  • Grupo 
  • Tamaño del Archivo 
  • Acceso al archivo, el cambio y hora de modificación (recuerdar que Linux no almacena el momento de creación)
  • Número de enlaces (soft / hard) 
  • Lista de Control de Acceso (ACL)  


Toda esta información es la que se almacena en un inodo. Cada inodo está identificado por un número único dentro del sistema de archivos. definición de inodo Un inodo es una estructura de datos en un sistema de archivos al estilo Unix, como UFS o ext3. El inodo almacena información básica sobre un archivo regular, directorio, o cualquier otro objeto del sistema de archivos. ¿Cómo podemos ver el número de inodo de un archivo? Puede utilizar el comando ls-i para ver el número de inodo de archivo
$ ls -i /etc/passwd
32820 /etc/passwd
También podemos utilizar el comando stat para averiguar el número de inodo y sus atributos:
$ stat /etc/passwd

Archivo: `/ etc / passwd '
Tamaño: 1988 Blocks: 8 IO Block: 4096 archivo normal
Dispositivo: Inode 341h/833d: 32820 Enlaces: 1
Acceso: (0644/-rw-r--r--) Uid: (0 / root) gid: (0 / root)
Acceso: 2005-11-10 01:26:01.000000000 0530
Modificar: 2005-10-27 13:26:56.000000000 0530
Cambio: 2005-10-27 13:26:56.000000000 0530
Inodo aplicación Muchos de comandos a menudo dan números de inodo para designar un archivo. Vamos a ver.
 
$ ls -li /etc/passwd
12886034 -rw-r--r-- 1 root root 1903 sep 28 13:01 /etc/passwd
Si escribimos los siguientes comandos:
$ cd / tmp
$ touch \ "la *
$ ls -l
Ahora si ententamos eliminar el archivo "la *, veremos que no es posible. No podremos eliminar los archivos si los hemos creado con caracteres de control o un carácter especial como?, * ^ Etc. En estos casos tendremos usar el número de inodo para eliminar archivos.
# ls -i 
# ls -i *
2781528 index.php    2781559 ??!
# find . -inum 2781559 -exec rm -i {} \;
Enlaces duros y simbólicos Para crear un enlace duro utilizamos el comando ln de la siguiente forma:
# ln /root/file1 root/file2 /
# ls -l
Con los comandos anteriores creamos un enlace al file1. Con esto creamos un nuevo apuntador hacia el inodo donde se almacenaba la información de file1 Los enlaces simbólicos se refieren a:
  • Una ruta simbólico que indica la ubicación de otro archivo.
  • Los enlaces físicos se refieren a:
  • La ubicación específica de los datos físicos.
  • Enlaces fijos vs Soft enlace en Linux
  • Los enlaces duros no pueden enlazar directorios.
  • Los enlaces blandos o simbólicos son como enlaces duros. Se permite asociar varios nombres hacia un solo archivo.
  • Sin embargo, los enlaces simbólicos nos permiten:
  • Crear enlaces entre los directorios.
  • Estos enlaces se comportan de forma diferente cuando la fuente del enlace está eliminado.
  • Los enlaces simbólicos no se actualizan.
  • Los enlaces duros siempre hacen referencia a la fuente, incluso si se mueven o eliminan.
  • ¿Cómo creamos un enlace simbólico? Podemos crear un enlace simbólico con el comando ln:
    $ ln -s /home/user/file1.txt /home/user/file2.txt
    $ ls -ali
    
    Con el comando anterior crearemos un enlace simbólico a file1.txt. Tarea: creación de enlaces simbólicos y eliminación Vamos a crear un directorio llamado foo, escribimos:
    $ mkdir foo
    $ cd foo
    
    Copiamos el archivo /etc/resolv.conf:
    $ cp /etc/resolv.conf .
    
    Observar el número de inodo y escribir:
    $ ls -ali
    
    152 Total
    1048600 drwxr-xr-x 2 vivek vivek 09/12/2008 20:19 4096.
    1015809 drwxrwxrwt root root 220 143 360 12.09.2008 20:19 ..
    1048601-rwxr-xr-x 1 vivek vivek 09/12/2008 20:19 129 resolv.conf
    Ahora crear enlace simbólico al resolv.conf, introduzca:
    $ ln -s alink.conf resolv.conf
    $ ls -ali
    
    152 Total
    1048600 drwxr-xr-x 2 vivek vivek 09/12/2008 20:24 4096.
    1015809 drwxrwxrwt root root 220 143 360 12.09.2008 20:19 ..
    1048602 lrwxrwxrwx 1 vivek vivek 09/12/2008 20:24 11 alink.conf -> resolv.conf
    1048601-rwxr-xr-x 1 vivek vivek 09/12/2008 20:19 129 resolv.conf
    
    El contador de referencias del directorio no ha cambiado (total 152). Nuestra simbólico enlace se almacena en un inodo diferente que el archivo de texto (1048602). La información almacenada en resolv.conf es accesible a través del archivo de alink.conf. Si borramos el archivo de texto resolv.conf, alink.conf se convierte en un vínculo roto y nuestros datos se pierden:
    $ rm resolv.conf
    $ ls -ali
    
    Si alink.conf era un vínculo físico, los datos todavía serían accesibles a través de alink.conf. Además, si se elimina el enlace simbólico en sí, los datos todavía estarían allí.

    sábado, 22 de septiembre de 2012

    Configurando escritorio Debian

    Cuando hacemos una instalación de un Debian y no añadimos una réplica de red deberemos configurar los repositorios de forma manual y ya de paso añadiremos los paquetes más usuales, como libreoffice o el plugin de flash. Lo primero que vamos a hacer es abrir como root el fichero de configuración de repositorios.
    #nano /etc/apt/sources.list
    
    Y añadimos los siguientes repositorios
    deb http://ftp.es.debian.org/debian/ squeeze main
    deb-src http://ftp.es.debian.org/debian/ squeeze main
    
    También podiamos haber hecho lo siguiente sin tener que abrir el fichero.
    #echo "deb http://ftp.es.debian.org/debian/ squeeze main" >> /etc/apt/sources.list
    #echo "deb-src http://ftp.es.debian.org/debian/ squeeze main" >> /etc/apt/sources.list
    
    El siguiente paso será actualizar la lista de los paquetes del sistema.
    #apt-get update
    
    El siguiente paso es volver a abrir el fichero /etc/apt/sources.list para modificar las líneas que habíamos añadido antes.
    #nano /etc/apt/sources.list
    
    deb http://ftp.es.debian.org/debian/ squeeze main contrib non-free
    deb-src http://ftp.es.debian.org/debian/ squeeze main contrib non-free
    
    Hemos añadido contrib non-free y con esto conseguimos los paquetes con otro tipo de licencia. Volvemos a actualizar la lista de paquetes.
    #apt-get update
    
    Ahora estamos listos para instalar flash.
    apt-get install flashplugin-nonfree
    
    Con esto ya podemos ver youtube. El siguiente paso va a ser instalar una versión de LibreOffice, pero esta vez lo haremos de forma manual. Lo primero será descargar los tar de la página de Libreoffice. LibO_3.5.6_Linux_x86_helppack-deb_es.tar.gz LibO_3.5.6_Linux_x86_install-deb_en-US.tar.gz LibO_3.5.6_Linux_x86_langpack-deb_es.tar.gz Primero descomprimimos
    tar xvzf LibO_3.5.6_Linux_x86_helppack-deb_es.tar.gz
    tar xvzf LibO_3.5.6_Linux_x86_install-deb_en-US.tar.gz
    tar xvzf LibO_3.5.6_Linux_x86_langpack-deb_es.tar.gz
    
    cd LibO_3.5.6_Linux_x86_install-deb_en-US/Downloads/en-US/DEBS/
    
    Instalamos todos los paquetes del directorio
    dpkg -i *.deb
    
    Ahora nos toca integrar los iconos en el escritorio y en el menú
    cd /Downloads/en-US/DEBS/desktop-integration
    dpkg -i *.deb
    
    Ya está, ahora sólo quedaría instalar la ayuda y el idioma, sólo debemos acceder a sus respectivas carpetas y ejecutar dpkg -i *.deb.

    lunes, 10 de septiembre de 2012

    Codificación de ficheros de texto Linux/Windows

    Vamos a ver unos ejemplos de como convertir diferentes ficheros de texto editados en sistemas Unix y/o Windows. En Linux los ficheros de texto se codifican mediante UTF-8 que es una de las tablas del estándar Unicode, pero en Windows no se sigue este estándar. Las instalaciones de Windows en castellano utilizan la tabla Windows-1252. Los ficheros de texto de Windows tienen una serie de caracteres especiales y ocultos para señalar el fin de línea, fin de fichero, etc. En Linux son diferentes y aunque en muchos casos puede abrir correctamente los ficheros de texto de Windows en otros casos no. Explicado esto vamos a presentar unas herramientas que nos serán de utilidad en alguno de los supuestos anteriores. dos2unix nos permite transformar estos archivos de formato Windows (DOS) a Linux. Un ejemplo: si disponemos de un fichero creado con el notepad, podemos comprobar su codificación con la herramienta file.
    #file ejemplo.txt
    ejemplo.txt: ASCII text, with CRLF line terminators
    #dos2unix ejemplo.txt 
    dos2unix: converting file ejemplo.txt to UNIX format ...
    #file ejemplo.txt 
    ejemplo.txt: ASCII text
    
    unix2dos nos permite transformar estos archivos de formato Linux a Windows (DOS).
    #unix2dos ejemplo.txt 
    unix2dos: converting file ejemplo.txt to DOS format ...
    #file ejemplo.txt 
    ejemplo.txt: ASCII text, with CRLF line terminators
    
    iconv nos permite cambiar la codificación del fichero de texto. iconv -f old-encoding -t new-encoding file.txt > newfile.txt
    # iconv --from-code ASCII --to-code UTF-16 --output ejemplo.utf16 ejemplo.txt
    # file ejemplo.utf8 ejemplo.txt ejemplo.utf8: Little-endian UTF-16 Unicode text, with CRLF, CR line terminators
    ejemplo.txt:  ASCII text, with CRLF line terminators
    
    convmv nos permite cambiar la codificación de los carácteres.
    # convmv -f iso-8859-1 -t utf8 files
    
    Con esta orden convertiremos todos los ficheros dentro del directorio files de iso-8859-1 a utf8.

    jueves, 6 de septiembre de 2012

    Órdenes de propósito general en Linux - Iniciar y cerrar sesión

    Las órdenes que vamos a ver a continuación, nos serán de utilidad para iniciar y cerrar sesiones en un sistema Linux de diferentes maneras. login: utilizaremos esta orden para establecer una nueva sesión de trabajo con el sistema. passwd: Utilizamos esta orden para cambiar nuestra contraseña logout: Finalizamos sesión. exit: utilizaremos esta orden para finalizar una sesión de trabajo. ^d: Con Ctrl+d enviaremos una señal de exit al sistema y cerraremos sesión. startx: En caso de estar trabajando sin las X Windows, con esta orden iniciariamos estas. poweroff: orden para apagar. halt: orden para apagar. shutdown: orden para apagar. reboot: Con esta orden le diremos al sistema que se reinicie. Alt+Ctrl+Supr: Con esta combinación de teclas enviamos una orden reboot al sistema.

    martes, 17 de julio de 2012

    Habilitar ssh Raspberry Pi

    En mi caso, que aún no dispongo de un cable HDMI, no tengo otra opción que habilitar el ssh sin un monitor. Si después de haber preparado la tarjeta SD observamos, vemos que tiene varios ficheros, el que nos interesa se llama boot_enable_ssh.rc. Y lo único que tendremos que hacer será cambiarle el nombre a boot.rc
    mv boot_enable_ssh.rc boot.rc
    
    Retiremos la tarjeta del ordenador, la insertamos en nuestra Raspberry Pi y la enchufamos. Esperamos unos segundos. Lanzamos un nmap, para ver que IP se le a asignado.
    nmap 192.168.0.0/24
    
    Por último, sólo nos queda lanzar el comando ssh
    ssh pi@192.168.0.32
    password: raspberry
    
    Recuerda user: pi password: raspberry

    sábado, 14 de julio de 2012

    Raspberry Pi - Preparando la tarjeta SD en Debian Squeeze

    En 10 pasos vamos a preparar nuestra tarjeta SD de 16GB para que funcione como almacenamiento de nuestra Raspberry Pi. Mi sistema se trata de un Debian Squeeze, pero debería funcionar con cualquier otra distribución Linux. Paso 1. Descargar la imagen que plancharemos en la tarjeta SD. En mi caso fue la siguiente:
    wget http://downloads.raspberrypi.org/images/debian/6/debian6-19-04-2012/debian6-19-04-2012.zip
    Paso 2. Verificamos si la clave del hash del archivo zip es el mismo que aparece en la página de descargas. Suponiendo que usted pone el archivo zip en el directorio home ~/, en la terminal ejecutar:
    sha1sum ~/debian6-19-04-2012.zip
    
    Paso 3. Extraemos la imagen:
    unzip ~/debian6-19-04-2012.zip
    
    Paso 4. Ejecutamos
    df -h
    para ver qué dispositivos están montados.

    Paso 5. Aquí llega el momento de conectar nuestra tarjeta SD al ordenador.

    Paso 6. Ejecutamos df -h otra vez. Ahora debemos poder ver el dispositivo. La columna de la izquierda nos da el nombre del dispositivo de la tarjeta SD. En mi caso aparece en /dev/sdb1.

    Paso 7. Ahora con el nombre de la tarjeta SD vamos a desmontar para que los archivos no puedan ser leídos o escritos en la tarjeta SD mientras se están copiando sobre la imagen SD. Ejecutamos
    umount /dev/sdb1
    
    Paso 8. Ahora debemos escribir este comando, ojo no equivocarse de dispositivo.
    
    dd bs=1M if=~/debian6-19-04-2012/debian6-19-04-2012.img of=/dev/sdb
    
    El comando dd no da ninguna información de su progreso, ten un poco de paciencia.

     Paso 9. Ejecutamos el comando sync, esto asegurará que la caché de escritura vacía y ya será seguro desmontar la tarjeta SD. 

    Paso 10. Extraemos la tarjeta SD y conectala a tu Raspberry Pi. Listo!

    lunes, 9 de julio de 2012

    ¿Cómo usar getopts?

    Presentamos un pequeño script utilizando el comando getopts. Con este comando podemos procesar la entrada que se le pasa a un script. Para usarlo vemos que sólo tenemos que ponerla en un while y diferenciar entre las opciones que necesitan argumentaos y las que no. Esto se indica con dos puntos a la derecha de la opción. Como podemos ver, para cada opción recogemos su variable y la procesamos al terminar de recolectarlas.
    #!/bin/bash
     
    while getopts ":a:f:v:" opt; do
      case $opt in
        a)
         VARIABLE=$OPTARG
          ;;
        f)
         FICHERO=$OPTARG
          ;;
        v)
         VALUE=$OPTARG
          ;;
        \?)
          echo "Opcion invalida: -$OPTARG" >&2
          exit 1
          ;;
        :)
          echo "La opcion -$OPTARG necesita un argumento." >&2
          exit 1
          ;;
      esac
    done
    
    cat $FICHERO | sed s/$VARIABLE=.*/$VARIABLE=$VALUE/ > $FICHERO
    
    Después de recoger los parámetros ejecutamos la útlima línea. Lo único que hace es buscar la variable en el fichero indicado y sustituirla por el valor introducido.

    domingo, 11 de marzo de 2012

    Como usar el comando find en GNU/Linux

    Usaremos el comando find para localizar ficheros por múltiples criterios: ◦ Por nombre o patrón. ◦ Por usuario y grupo. ◦ Por tipos de elementos ( fichero, directorio, socket, pipe...) ◦ Por medida. ◦ Por permisos asignados. ◦ Por fecha o cualquier otro atributo de tiempo. Con la siguiente orden buscamos un fichero, un conjunto o un patrón en el sistema de ficheros a partir de un punto de origen, en este caso en el directorio /boot:
    $ find /boot -name "*.img" -print
    
    Con la siguiente orden buscamos todos los ficheros que son hard links de un determinado fichero:
    $ find . -samefile dades.txt
    
    Con la siguiente orden buscamos todos los ficheros que son los enlaces simbólicos de un fichero dado.
    $ find . -lname dades.txt
    
    Con la siguiente orden buscamos ficheros de una medida concretos. (o entre uns valors)
    # find /boot -size +3M -print
    
    # find /boot/ -size +3M -size -5M -print
    
    Con la siguiente orden buscamos ficheros por usuario y grupo
    # find /dev -user vcsa -print
    
    Con la siguiente orden buscamos ficheros según los permisos que tiene asignados.
    # find /usr/bin -perm -u=s -print   # setuid activado
    
    # find /usr/bin -perm -gu=s -print  # setuid i setgid simultáneamente
    
    # find /usr/bin -perm /ug=s -print  # setuid o setgid o los dos
    
    # find /usr/bin -perm 4755 -print   # los permisos son exactamente 4755
    
    Con la siguiente orden buscamos todos los ficheros posteriores en una fecha determinada
    # find /boot -newermt "01/02/2010" -print # modificados posteriormente del 01-01-2010
    
    # find /boot -newermt "$(date -d "-1Year" +%m/%d/%Y)" -print # más recientes que hace un año
    
    Con la siguiente orden buscamos en un conjunto de directorios( listado de ordenes de 2 letras que comienzan por la letra 'a'.
    # find /sbin /usr/bin /usr/sbin -name a? -print
    
    Con la siguiente orden buscamos ficheros según el tipo de fichero que sea.
    # find /dev -type s -print # listado de los ficheros de tipo socket
    
    # find /tmp -empty -print # listado de los ficheros vacíos
    
    Espero les sea útil.

    viernes, 3 de febrero de 2012

    Cómo usar dpkg

    En el paquete dpkg encontramos un gestor de paquetes, para sistemas basados en Debian. Con éste paquete podremos instalar, eliminar o crear paquetes. Órdenes básicas: Con esta orden obtenemos una lista de todos los paquetes instalados en el sistema.
    $ dpkg -l
    
    Si quisiéramos comprobar la instalación de algún paquete en particular, como por ejemplo apache, podríamos hacer lo siguiente:
    $ dpkg-l | grep apache2
    
    Con la siguiente opción obtenemos todos los ficheros de la instalación del paquete indicado. Normalmente documentación, ejecutables y ficheros de configuración:
    $ dpkg -L apache2
    Podemos instalar un fichero .deb de la siguiente manera:
    $ sudo dpkg-i paquete.deb
    
    O desinstalar mediante:
    sudo dpkg -r paquete
    

    viernes, 27 de enero de 2012

    Comprimir/Descomprimir en Linux

    En Linux nos encontramos con un buen número de herramientas que nos permiten empaquetar y comprimir. Veremos como hacerlo para los casos más conocidos.

    - tar -

    Empaquetar
    $ tar cvf archivo.tar /directorio/*
    Desempaquetar
    $ tar xvf archivo.tar

    -tar con gzip - .tar.gz, .tar.z, .tgz
    Empaquetar y comprimir
    $ tar czvf archivo.tar.gz /fichero/*
    Desempaquetar y descomprimir
    $ tar xzvf archivo.tar.gz

    - gzip - .gz
    Comprimir
    $ gzip -q archivo
    Descomprimir
    $ gzip -d archivo.gz

    - bzip2 - .bz2
    Comprimir
    $ bzip2 archivo
    Descomprimir
    $ bzip2 -d archivo.bz2



    - tar con bzip2 - .tar.bz2
    Comprimir
    $ tar -c archivos | bzip2 > archivo.tar.bz2
    Descomprimir
    $ bzip2 -dc archivo.tar.bz2 | tar -xv


    - zip - .zip
    Comprimir
    $ zip archivo.zip /directorio/archivos
    Descomprimir
    $ unzip archivo.zip

    - rar - .rar
    Comprimir
    $ rar -a archivo.rar /directorio/archivos
    Descomprimir
    $ rar -x archivo.rar