Mostrando entradas con la etiqueta Bash scripting. Mostrar todas las entradas
Mostrando entradas con la etiqueta Bash scripting. Mostrar todas las entradas

sábado, 22 de junio de 2013

Convertir un archivo .nrg (creado con Nero) en una imagen .iso

Dos posibilidades:

1) Usar el comando dd. La diferencia entre una imagen nrg y una iso es un header de 300KB que Nero agrega a un archivo iso. Por este motivo, podemos "cortar" ese encabezado y tendremos la imagen iso original.
dd bs=1k if=cd-image.nrg of=cd-image.iso skip=300
2) Utilizar una herramienta llamada nrg2iso, disponible desde repositorios:


nrg2iso cd-image.nrg cd-image.iso

martes, 4 de junio de 2013

Crear imagen iso de una unidad flash y extraer sus contenidos

Window$ no ofrece soporte de manera nativa para crear imágenes iso ni para extraer los contenidos de una generada previamente. Hay muchos programas que ofrecen más o menos esta funcionalidad, pero como dije, ninguno viene instalado junto con el sistema operativo. Si no se cuenta con una conexión a Internet o con el ejecutable de uno de esos programas, no hay manera de realizar esta tarea.
GNU/Linux, por otra parte, permite realizar ambas tareas de manera muy fácil desde la línea de comandos:
1) Para crear la imagen iso con los contenidos de la unidad /dev/sdb, en el directorio actual:
dd if=/dev/sdb of=usb-imagen.iso
2) Para extraer los contenidos:
  • Crear el directorio /mnt/iso que se utilizará para montar la imagen iso:
mkdir /mnt/iso
mount -o loop usb-imagen.iso /mnt/iso
(La opción -o junto con el argumento loop permite montar un archivo (usb-imagen.iso en este caso) como si fuera un dispositivo de bloques).
  • Ir al punto de montaje del pseudo-dispositivo y copiar sus contenidos a otro directorio:
cd /mnt/iso
cp -r * /tmp
Nota: Si el comando mount devuelve un mensaje diciendo que se debe especificar el tipo de sistema de archivos para llevar a cabo el montaje, utilizar la opción -t seguida del argumento iso9660.

martes, 2 de abril de 2013

Cuando no se puede escribir a un dispositivo de bloques particionado con NTFS...

Intentando hacer un backup de mi /home, esta mañana me encontré con que no podía escribir a mi disco rígido portátil. Este último estaba formateado como NTFS, tal como muchos dispositivos extraíbles hoy en día.
Cuando esto sucede, se puede montar el dispositivo y ver sus contenidos, pero no escribir en el mismo, salvo que... se tenga el paquete ntfs-3g instalado:
 gacanepa@Gabriel-PC:~$ aptitude show ntfs-3g  
 Package: ntfs-3g               
 State: not installed  
 Version: 1:2010.3.6-1  
 Priority: optional  
 Section: otherosfs  
 Maintainer: Adam Cécile (Le_Vert) <gandalf@le-vert.net>  
 Uncompressed Size: 209 k  
 Depends: libc6 (>= 2.3), libntfs-3g75  
 Description: read-write NTFS driver for FUSE  
  The ntfs-3g driver is an open source, GPL licensed, third generation Linux NTFS  
  driver which was implemented by the Linux-NTFS project. It provides full  
  read-write access to NTFS, excluding access to encrypted files, writing  
  compressed files, changing file ownership, access right.   
  Technically it's based on and a major improvement to the third generation Linux  
  NTFS driver, ntfsmount. The improvements includes functionality, quality and  
  performance enhancements.   
  ntfs-3g is based on FUSE (userspace filesystem framework for Linux), thus you  
  will have to prepare fuse kernel module to be able to use it.   
  Fuse is available in any recent kernel. No need to prepare a kernel module if  
  you are already running Debian Etch kernel or newer.  
 Homepage: http://www.ntfs-3g.org/  
De otra manera, el dispositivo es montado con el módulo NTFS del kernel, que no brinda permisos de escritura.
Después de instalar dicho paquete, pude proceder a hacer el backup necesario en mi disco portátil.

viernes, 7 de diciembre de 2012

enscript - Convertir archivos de texto a formato PostScript, HTML, RTF, y ANSI

Acabo de encontrar esta joyita en Linux: el paquete enscript. Como el título de este post lo dice, permite convertir archivos de texto plano a varios formatos, incluso proveyendo resaltado de sintaxis en el resultado para un montón de lenguajes de programación.
En los siguientes dos ejemplos voy a exportar 1) un script del Bash, y 2) un programa sencillo del tipo "Hola mundo!" escrito en Java, a correspondientes archivos bash.html y java.html.

holamundo.java:


Ahora ejecuto el siguiente comando desde la terminal:
Y muestro el resultado en el navegador:


servicios.sh:

Ahora ejecuto el siguiente comando desde la terminal:
Quedando:


viernes, 23 de noviembre de 2012

Uso de [m]awk en GNU/Linux

Hoy me interesó adentrarme un poco en el uso y la utilidad del comando awk en GNU/Linux. 
De hecho, es un lenguaje de programación en sí, con una sintaxis muy parecida a C. En Debian (al menos) la implementación e intérprete de awk recibe el nombre de mawk, y se utiliza mayormente para buscar patrones (modelos) en archivos de texto.
Del man page de mawk:
Un programa awk es una secuencia de pares patrón {acción} y definiciones de funciones. Los programas cortos en la línea de comandos generalmente se encierran en comillas simples para evitar que la consola los interprete, mientras que los más largos pueden ser leídos directamente desde un archivo utilizando la opción -f. Los datos de entrada son leídos desde la lista de archivos en la línea de comandos o desde la entrada estándar stdin si la lista es vacía. La entrada se descompone en registros, tal como se determina por la variable de separación de registros, RS. Inicialmente, RS="\n" (salto de línea) y cada fila se considera un registro separado. Cada uno de ellos se compara con el patrón especificado y si concuerda, se ejecuta el programa {acción}.
Un ejemplo: Tengo la siguiente hoja de cálculo en la que se detallan Nombre y Apellido, Usuario, Contraseña, y Email de un cierto grupo de personas (podrían ser un montón de campos y registros más, pero para la demostración estos son suficientes).

Figura 1: Hoja de cálculo

Lo que quiero obtener es la dirección de email de un cierto registro, y mostrarlo junto con el Nombre y Apellido del mismo.

PRIMER PASO: Guardo el contenido de la hoja de cálculo en formato .csv:

Figura 2: Archivo de texto plano

SEGUNDO PASO: Desde la consola ejecuto el siguiente comando (si quisiera los datos mencionados anteriormente para Elvis Tek):


RESULTADO:


Figura 3: Ejecución del comando y resultado

Explicación de la sintaxis del comando:
  1. -v var=valor   asigna valor a la variable var. En este caso (OFS="\t"), se asigna a la variable OFS (Output Field Separator) el valor tabulador, para separar cada campo de la salida (resultado).
  2. BEGIN   La palabra reservada BEGIN indica el comienzo del programa interpretado por awk, el cual puede especificarse en la misma línea del comando o desde un archivo que contenga las instrucciones. 
  3. {FS=","}   FS (Field Separator) indica el caracter que se utiliza para separar los campos en el archivo que se toma como entrada (en este caso, ~/pruebas/nombres y usuarios.csv).
  4. $1=="Elvis Tek" {print $1,$4}   Si el primer campo del archivo de entrada contiene la cadena Elvis Tek, devolver los campos $1 y $4, que según se pueden ver en la figura 1, corresponden a Nombre y Apellido, y Email, respectivamente.

Génesis

Comienzo este blog para documentar las cosas que hago y que aprendo con GNU/Linux, lenguajes de programación (C#, Bash scripting, Java, Python, Ruby, PHP, Vbscripting... sí, todavía algo se usa), bases de datos (SQL Server, MySQL), y desarrollo de aplicaciones web (HTML5, CSS / CSS3) tanto por mi trabajo (soy desarrollador junior en una empresa cuyo principal cliente es la mayor compañía de productos masivos de consumo a nivel mundial) como en cosas personales.
Bastante variadito, pero acá vamos...