José Arrarte | Blog de notas » UNIX http://josearrarte.com/blog Un bloc de notas online sobre Java, tecnología, Uruguay, etc... Fri, 03 Sep 2010 02:39:05 +0000 en hourly 1 http://wordpress.org/?v=3.0.1 UnxUtils: ejecutar comandos Linux/UNIX en Windows http://josearrarte.com/blog/2010/05/13/unxutils-ejecutar-comandos-linuxunix-en-windows/ http://josearrarte.com/blog/2010/05/13/unxutils-ejecutar-comandos-linuxunix-en-windows/#comments Thu, 13 May 2010 21:50:48 +0000 jarrarte http://josearrarte.com/blog/?p=285
  • Ejecutar aplicaciones gráficas de X11 (Linux y Unix) en Windows
  • Copiar archivo y particiones utilizando dd (Linux/UNIX)
  • Copiar archivos utilizando SCP en Linux
  • 64GB de RAM en un sistema operativo de 32 bits
  • Hotkeys del símbolo de sistema de Windows
  • Matar procesos en Windows (taskkill)
  • Listado de comandos de administración de Informix
  • Descargar archivos de sitios de file-sharing por consola en Linux
  • Monitoreo en Linux: nmon
  • ]]>
    UnxUtils es un port para Windows de varias utilidades GNU. Para la gente que está acostumbrada a utilizar sistemas UNIX o Linux, estas utilidades se extrañan bastante en sistemas Windows, especialmente cuando tenemos que crear scripts. Incluye ls, grep, diff, wget, md5sum, tail, head, less, sed, entre otras. Podemos ver la lista entera de comandos en la siguiente imagen:

    Para instalarlo, debemos bajar la herramienta desde la página del proyecto en SourceForge.net. Descomprimimos el archivo en el directorio que más nos guste (yo lo tengo en C:\UnxUtils) y agregamos el directorio [dir]\usr\local\wbin a la variable de entorno path, donde [dir] es el directorio elegido para descomprimir el archivo (en mi caso, agregué C:\UnxUtils\usr\local\wbin)

    Otra forma, no tan rápida o directa de contar con este tipo de utilidades bajo Windows, pero más completa es instalar Cygwin. Para ello debemos bajar el instalador desde su página, y luego seguir las instrucciones de su guía para el usuario.

    Posts relacionados:

    1. Ejecutar aplicaciones gráficas de X11 (Linux y Unix) en Windows
    2. Copiar archivo y particiones utilizando dd (Linux/UNIX)
    3. Copiar archivos utilizando SCP en Linux
    4. 64GB de RAM en un sistema operativo de 32 bits
    5. Hotkeys del símbolo de sistema de Windows
    6. Matar procesos en Windows (taskkill)
    7. Listado de comandos de administración de Informix
    8. Descargar archivos de sitios de file-sharing por consola en Linux
    9. Monitoreo en Linux: nmon

    ]]>
    http://josearrarte.com/blog/2010/05/13/unxutils-ejecutar-comandos-linuxunix-en-windows//feed 1
    Ejecutar aplicaciones gráficas de X11 (Linux y Unix) en Windows http://josearrarte.com/blog/2010/03/05/ejecutar-aplicaciones-graficas-de-x11-linux-y-unix-en-windows/ http://josearrarte.com/blog/2010/03/05/ejecutar-aplicaciones-graficas-de-x11-linux-y-unix-en-windows/#comments Fri, 05 Mar 2010 19:22:46 +0000 jarrarte http://josearrarte.com/blog/?p=299
  • UnxUtils: ejecutar comandos Linux/UNIX en Windows
  • Copiar archivo y particiones utilizando dd (Linux/UNIX)
  • 64GB de RAM en un sistema operativo de 32 bits
  • Matar procesos en Windows (taskkill)
  • ]]>
    Introducción

    A veces necesitamos ejecutar aplicaciones de un servidor Linux -o Unix- remoto estando conectados a través de SSH, pero estas aplicaciones tienen una interfaz gráfica. Una solución para este problema puede ser iniciar una sesión de VNC (un escritorio remoto de Linux) y ejecutar desde este ambiente nuestra aplicacion. Otra opción que veremos en este post es utilizando X11 tunneling en nuestra sesión SSH, con la ventaja de que agregamos encriptación sobre el canal de comunicaciones.

    ¿Qué es X11?

    X11 es un software creado en los años 80 por el MIT (Massachusetts Institute of Technology) con el propósito de ser una interfaz gráfica para los sistemas Unix de la época.

    Tiene una arquitectura cliente-servidor, proveyendo servicios para acceder a la pantalla y los dispositivos de interacción con el ususario, y permitiendo independizar lo que se quiere mostrar (servidor) de la forma de cómo mostrarlo (cliente). Esto permite también que el cliente de ventanas no esté corriendo en la misma computadora que el servidor, siendo posible ejecutar aplicaciones gráficas de forma remota.

    La comunicación entre el cliente y el servidor se realiza utilizando un protocolo determinado (Xprotocol). El hecho de tener tanto un estándar como un protocolo bien definidos tiene como consecuencia una gran portabilidad del código que utiliza X11.

    Wikipedia, como ya es de cosumbre tiene información más detallada y bastante clara sobre el sistema de ventanas X, están los links en las referencias.

    Sistema de ventanas X en Windows

    El tener una definición estándar del manejo de ventanas X permite implementar clientes para Windows. Uno de estos clientes es XMing, una alternativa gratis que funciona muy bien junto a clientes SSH como PuTTY.

    Para poder utilizarlo debemos descargar, instalarlo y ejecutarlo. Aparecerá un ícono con una X en el tray, como se ve en la imagen:

    Luego, al abrir una sesión SSH, debemos activar la opción para poder hacer tunnelling de X11 a través de esa conexión SSH. En PuTTY, esa opcion está en Connection -> SSH -> X11 -> Enable X11 forwarding:

    Luego de tener activado el forwarding, siempre que ejecutemos un comando que necesite un ambiente gráfico en esa sesión SSH, se visualizará en nuestro Windows, como si fuera un proceso local.

    En mi caso, el X11 forwarding sirvió para poder utilizar el IBM Webshphere MQ Explorer (comando strmqcfg). Estoy seguro que lo voy a utilizar en alguna otra oportunidad, espero que a ustedes también les sirva.

    Referencias

    X11

    XMing

    Posts relacionados:

    1. UnxUtils: ejecutar comandos Linux/UNIX en Windows
    2. Copiar archivo y particiones utilizando dd (Linux/UNIX)
    3. 64GB de RAM en un sistema operativo de 32 bits
    4. Matar procesos en Windows (taskkill)

    ]]>
    http://josearrarte.com/blog/2010/03/05/ejecutar-aplicaciones-graficas-de-x11-linux-y-unix-en-windows//feed 0
    Copiar archivo y particiones utilizando dd (Linux/UNIX) http://josearrarte.com/blog/2009/09/23/copiar-archivo-y-particiones-utilizando-dd-linuxunix/ http://josearrarte.com/blog/2009/09/23/copiar-archivo-y-particiones-utilizando-dd-linuxunix/#comments Wed, 23 Sep 2009 15:15:50 +0000 jarrarte http://josearrarte.com/blog/?p=81
  • Copiar archivos utilizando SCP en Linux
  • UnxUtils: ejecutar comandos Linux/UNIX en Windows
  • Ejecutar aplicaciones gráficas de X11 (Linux y Unix) en Windows
  • Descargar archivos de sitios de file-sharing por consola en Linux
  • ]]>
    Introducción

    dd es de esos comandos de Linux y UNIX “para temer”. Puede ser de mucha utilidad en algunas situaciones, pero también puede ser fatal si se usa mal, especialmente si no tenemos cuidado en los parámetros con los que lo invocamos.

    En pocas palabras, dd permite copiar y convertir el contenido de un archivo a otro. El concepto de archivo es bastante amplio, ya que además de copiar archivos comunes, se pueden utilizar como entrada y salida los archivos de /dev, y así copiar una partición, generar archivos vacíos, generar archivos con contenido aleatorio, etc.

    Formato

    El formato es un poco diferente a los comandos de linux que conocemos, dado que dd se basa en parámetros del tipo opción=valor en lugar de utilizar el formato más común -op valor o –opción valor.

    El archivo de entrada estará especificado por la opción if (por input file). Como es de suponer, el archivo de salida está especificado por la opción of (por output file).

    Con la opción bs configuramos el tamaño de cada bloque que se leerá/convertirá/escribirá (con las opciones ibs, cbs y obs se configuran los tamaños de los bloques de cada proceso por separado). A éstos parámetros se les puede pasar un valores que sean el resultado de una multiplicación, por ejemplo, 1024x1024x1024 para expresar 1 GB. También se pueden utilizar sufijos como ser c (1 byte), w (2 bytes), b (512 bytes, asociado por defecto del tamaño de un sector de disco), kB (1000 bytes), K (1024 bytes), MB (1000*1000), M (1024*1024), GB (1000*1000*1000), G (1024*1024*1024), y así para T, P, E, Z, Y.

    Con el parámetro count configuramos la cantidad de bloques a copiar; por lo tanto, el tamaño de lo transferido será bs*count. Aunque la última porción del archivo no tenga el tamaño de un bloque exacto, ese restante se transfirirá de todas formas.

    Podemos utilizar el parámetro conv para hacer ciertas transformaciones además de la lectura y la escritura, y puede tener los siguientes valores:

    • lcase: transformar mayúsculas a minúsculas
    • ucase: transformar minúsculas a mayúsculas
    • swab: intercambiar cada par de bytes de entrada
    • excl: fallar si el archivo de salida existe
    • noerror: continuar aunque se encuentren errores de lectura
    • nocreat: no crea el archivo de salida

    Otras opciones que me parecieron menos interesantes fueron: ascii, ebcdic, ibm, block, unblock, notrunc, sync, fdatasync y fsync (consultar las páginas man por más datos).

    Ejemplos de uso

    (De más está decir que no puedo asegurar que todos los ejemplos van a funcionar como deberían, ya que en algunos casos, ni siquiera puedo afirmar que “en mi máquina anda”. Por favor usar con responsabilidad. Dicho esto, continuamos…)

    En los siguientes ejemplos veremos algunos ejemplos de uso del comando dd. En los casos que corresponda este comentario, se generarán archivos de 64MB, en 1000 bloques de a 64KB.

    Duplicar una partición

    En este ejemplo duplicaremos el contenido de una partición en otra. Creo que lo ideal es que sean las 2 del mismo tamaño, aunque si la partición de salida es más grande, también funcionaría.

    dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=notrunc,noerror
    

    Duplicar una partición en otro host (ésta me la enseñó MacGyver)

    Es la misma idea que el ejemplo anterior, pero en lugar de duplicar la partición en un disco local, se duplica a través de la red, utilizando el comando netcat (también conocido como la navaja suiza de TCP/IP):

    En el host de destino:

    netcat -l -p 1234 | dd of=/dev/hdc bs=16065b
    

    El el host de origen:

    dd if=/dev/sda2 bs=16065b | netcat [IP-destino] 1234
    

    También podemos duplicar una partición a un host remoto a través de SSH:

    dd if=/dev/sda2 bs=16065b | ssh user@host "dd of=/dev/hdc bs=16065b"
    

    Generar un archivo con ceros o contenido aleatorio

    Los archivos generados con ceros o contenido aleatorio nos pueden servir como material para transferir entre discos o por la red para diagnosticar posibles problemas.

    Con ceros:

    dd if=/dev/zero of=/tmp/zeros bs=64k count=1000
    

    Con contenido aleatorio:

    dd if=/dev/urandom of=/tmp/myrandom bs=64k count=1000
    

    Copiar una partición a un archivo

    dd if=/dev/sda2 of=/tmp/part.image bs=4096 conv=notrunc,noerror
    

    Si queremos copiar un CD/DVD a una imagen ISO, podemos ejecutar:

    dd if=/dev/cdrom of=/tmp/myCD.iso bs=2048 conv=sync,notrunc
    

    Parecido al ejemplo de duplicar una partición a través de la red, podemos respaldar nuestra partición a un archivo en un host remoto a través de SSH:

    dd if=/dev/sda2 | ssh user@host "dd of=/home/user/partition.image"
    

    Escribir basura en una partición

    Cuando borramos archivos o utilizamos un formato rápido, la mayoría de los archivos pueden ser recuperados. Este ejemplo puede servir para asegurarnos que no se puedan recuperar los datos de una partición entera:

    dd if=/dev/urandom of=/dev/hda
    

    Convertir un archivo a MAYÚSCULAS

    dd if=filename of=filename conv=ucase
    

    Referencias

    man dd
    http://en.wikipedia.org/wiki/Dd_%28Unix%29

    Posts relacionados:

    1. Copiar archivos utilizando SCP en Linux
    2. UnxUtils: ejecutar comandos Linux/UNIX en Windows
    3. Ejecutar aplicaciones gráficas de X11 (Linux y Unix) en Windows
    4. Descargar archivos de sitios de file-sharing por consola en Linux

    ]]>
    http://josearrarte.com/blog/2009/09/23/copiar-archivo-y-particiones-utilizando-dd-linuxunix//feed 0
    64GB de RAM en un sistema operativo de 32 bits http://josearrarte.com/blog/2009/08/30/64gb-de-ram-en-un-sistema-operativo-de-32-bits/ http://josearrarte.com/blog/2009/08/30/64gb-de-ram-en-un-sistema-operativo-de-32-bits/#comments Sun, 30 Aug 2009 21:13:33 +0000 jarrarte http://josearrarte.com/blog/?p=184
  • Hotkeys del símbolo de sistema de Windows
  • UnxUtils: ejecutar comandos Linux/UNIX en Windows
  • Ejecutar aplicaciones gráficas de X11 (Linux y Unix) en Windows
  • Monitoreo en Linux: nmon
  • ]]>
    Varias veces dije (¡ups!) y escuchado decir que por las limitaciones de un sistema operativo de 32 bits, no es posible utilizar más de 3GB o 3,5GB de RAM. Esto no es del todo cierto, y -desde la época de los Pentium Pro- ni siquiera es una limitación de hardware, sino que es una limitación impuesta en algunos sistemas operativos de Microsoft.

    En este post veremos cómo aprovechar los megabytes de RAM por arriba de los 3GB utilizando PAE, una característica de la mayoría de los procesadores modernos, sin necesidad de instalar un sistema operativo de 64 bits. Veremos también algunas consideraciones a tener en cuenta a la hora de poner en la balanza desperdiciar la memoria RAM por encima de los 3GB, habilitar PAE en un sistema operativo de 32 bits, o de utilizar un sistema de 64 bits.

    PAE

    PAE (Physical Address Extension, Extensión de dirección física) es una característica de la mayoría de los procesadores x86 y x86-64, que permite que sistemas de 32 bits puedan utilizar hasta 64GB de RAM. Esto es posible ampliando la cantidad de bits utilizados para direccionar memoria de 32 a 36 bits y por esto, la cantidad de memoria direccionable máxima pasa de 4GB (2^32) a 64GB (2^36).

    PAE en Windows

    Lo más importante a destacar si de Windows hablamos, es que el uso de PAE para extender el espacio de direccionamiento de memoria no está habilitado en ninguna versión “consumer” de Windows, por lo que hay que recurrir a una versión de servidor (NT, 2003, etc.). En realidad, en Windows XP SP1 se permitió habilitar PAE, pero en SP2 se restringió nuevamente, siendo la principal causa de esta restricción los problemas de compatibilidad e inestabilidad de los drivers de los dispositivos. Estos problemas se daban porque en la programación de dichos drivers se asumen cosas que al direccionar la memoria utilizando PAE dejan de ser ciertas (ver la parte de More information de éste artículo).

    En la siguiente tabla se muestran los máximos de memoria RAM física soportados por cada versión de Windows:

    Sistema operativo - Memoria máxima soportada con PAE
    Windows 2000 Advanced Server – 8 GB de RAM física
    Windows 2000 Datacenter Server – 32 GB de RAM física
    Windows XP (todas las versiones) – 4 GB de RAM física*
    Windows Server 2003 (y SP1), Standard Edition – 4 GB de RAM física*
    Windows Server 2003, Enterprise Edition – 32 GB de RAM física
    Windows Server 2003, Datacenter Edition – 64 GB de RAM física
    Windows Server 2003 SP1, Enterprise Edition – 64 GB de RAM física
    Windows Server 2003 SP1, Datacenter Edition – 128 GB de RAM física

    * El espacio físico de memoria está limitado a 4 GB en estas versiones de Windows.

    PAE en Linux

    La historia con Linux es diferente, ya que contando con un kernel 2.6+ que tenga habilitado el soporte para PAE, se abre la posibilidad de usar hasta 64GB de RAM en sistemas de 32 bits. Los kernels 2.4 soportan hasta 4GB de memoria RAM física.

    Veamos algunos ejemplos de configuración:

    Habilitar PAE en Ubuntu

    Para habilitar PAE en Ubuntu basta con instalar algunos paquetes que reemplazan el kernel genérico por uno con soporte para PAE. Estoy en un sistema con 4GB de RAM, con el kernel por defecto, y Ubuntu versión 9.04 para x86 (32 bits). La memoria RAM disponible anda en los 3GB:

    jarrarte@nb-jarrarte:~$ free -m
    total       used       free     shared    buffers     cached
    Mem:          3023        428       2594          0         26        176
    -/+ buffers/cache:        225       2797
    Swap:         1906          0       1906
    

    Mi kernel:

    jarrarte@nb-jarrarte:~$ uname -a
    Linux nb-jarrarte 2.6.28-15-generic #49-Ubuntu SMP Tue Aug 18 18:40:08 UTC 2009 i686 GNU/Linux
    

    Para instalar el soporte para PAE (este punto también se puede hacer desde el gestor de paquetes gráfico):

    jarrarte@nb-jarrarte:~$ sudo sudo apt-get install linux-headers-server linux-image-server linux-server
    

    Luego de reinciar con el nuevo kernel, vemos que la actualización surgió efecto:

    jarrarte@nb-jarrarte:~$ free -m
    total       used       free     shared    buffers     cached
    Mem:          4021        389       3631          0         26        166
    -/+ buffers/cache:        196       3824
    Swap:         1906          0       1906
    
    jarrarte@nb-jarrarte:~$ uname -a
    Linux nb-jarrarte 2.6.28-15-server #49-Ubuntu SMP Tue Aug 18 19:30:06 UTC 2009 i686 GNU/Linux
    

    Habilitar PAE en Gentoo

    Para habilitar el soporte para PAE en Gentoo, debemos recompilar el kernel con la opción de “High memory support” activada. Para ello, ejecutamos

    server ~ # cd /usr/src/linux
    server linux # make menuconfig
    

    Encontraremos esta configuración bajo Processor type and features —> High Memory Support:

    Processor type and features  --->
     High Memory Support  --->
      ( ) off
      ( ) 4GB
      (X) 64GB
    

    La opción de 64GB activa el soporte para PAE. Luego de seleccionada, debemos recompilar el kernel, y reiniciar el sistema utilizando este nuevo kernel.

    Habilitar PAE en CentOS, Fedora y similares

    En estos sabores de Linux podemos habilitar el soporte para PAE instalando “kernel-PAE” utilizando el comando yum:

    # yum install kernel-PAE
    

    Luego de instalado, debemos reiniciar el sistema utilizando este nuevo kernel.

    ¿PAE o sistema operativo de 64 bits?

    Creo que la desición de utilizar un sistema operativo de 32 bits con PAE habilitado o de utilizar uno de 64 bits va un poco más allá de la dificultad o facilidad técnica de utilizar uno u otro; como generalmente pasa, “depende” será la mejor respuesta a la hora de hacernos esa pregunta:

    • Como primer punto, dependerá del tipo de aplicaciones que se vayan a correr, teniendo en cuenta especialmente si existen versiones optimizadas para CPUs de 64 bits. Si nos estamos planteando este cambio en un servidor de base de datos o de procesamiento multimedia, es muy posible que veamos incrementos de performance con un sistema operativo de 64 bits, ya sea porque aprovechan los registros más grandes, los registros adicionales, las nuevas instrucciones de 64 bits o los espacios de direccionamiento de memoria para los procesos mucho más grandes (pasan de 4GB a 1TB).
    • Por otro lado, también hay que poner en la balanza que una aplicación compilada para 64 bits va a ocupar más espacio en disco y más memoria, por tener que manejar variables y punteros del doble de tamaño. Este incremento en el tamaño repercute en un incremento en el ancho de banda ocupado entre el CPU y la memoria, que a su vez puede repercutir en una degradación de performance si no es bien aprovechado.
    • El no tener drivers de 64 bits para los dispositivos de nuestro sistema puede ser una razón de peso bastante importante para no poder pasarnos de arquitectura de 64 bits. También puede pasar que los drivers de 32 bits no funcionen bien con PAE habilitado.
    • Si tenemos un sistema Linux de 32 bits corriendo hace tiempo, aplicaciones instaladas, configuraciones personalizadas, etc. hay que ver si vale la pena reinstalar todo de cero para pasarnos a un sistema de 64 bits y aprovechar un poco más de RAM (si tenemos 4GB instalados, pasarmos a ver unos 800MB adicionales, menos el incremento de uso de memoria de las aplicaciones que vimos 2 puntos más arriba). En mi caso, cambiar el kernel de Ubuntu para aprovechar los 4GB completos implicó unos minutos bajando e instalando el paquete, y una reiniciada al sistema. Hasta ahora no he tenido problemas utilizando 32 bits con PAE.
    • Como último punto, el no poder pasar a sistemas de 64 bits por política organizacional también puede ser una respuesta válida a la pregunta. Si tenemos licencias de algunas aplicaciones que puedan tener problemas o directamente no corran en un servidor de 64 bits, la desición está tomada antes de plantearla (especialmente si estamos hablando de costos elevados o de aplicaciones críticas para el negocio de la organización).

    Referencias

    Posts relacionados:

    1. Hotkeys del símbolo de sistema de Windows
    2. UnxUtils: ejecutar comandos Linux/UNIX en Windows
    3. Ejecutar aplicaciones gráficas de X11 (Linux y Unix) en Windows
    4. Monitoreo en Linux: nmon

    ]]>
    http://josearrarte.com/blog/2009/08/30/64gb-de-ram-en-un-sistema-operativo-de-32-bits//feed 1
    Cheat sheets http://josearrarte.com/blog/2009/07/03/cheat-sheets/ http://josearrarte.com/blog/2009/07/03/cheat-sheets/#comments Fri, 03 Jul 2009 20:23:57 +0000 jarrarte http://josearrarte.com/blog/?p=60 En http://www.cheat-sheets.org/ tenemos una colección de hojas de referencia sobre un montón de tecnologías, sistemas operativos, bases de datos, entre otros. Están buenas para tener alguna impresa para pegarle un vistazo si no queremos “googlear” algún detalle particular.

    Listo algunas de las más interesantes:

    .NET

    .NET Format String Quick Referencee
    Core C# and .NET Quick Reference by Stephen C. Perry [pdf] (digilife.be)
    C# and VB.NET Comparison Cheat Sheet by Steven Swafford [pdf] (aspalliance.com)

    CVS

    CVS Quick Reference Card Andrew Ford [pdf] (refcards.com)

    Design patterns

    Design Patterns Quick Reference by Jason S. McDonald [pdf] (mcdonaldland.info)

    Eclipse

    Eclipse Keyboard Shortcuts by Jesper Kamstrup Linnet [pdf, rtf] (eclipse-tools.sourceforge.net)

    FTP

    List of FTP commands for the Microsoft command-line FTP client (nsftools.com)

    Linux

    Unix/Linux Command Cheat Sheet by Jacob [pdf] (fosswire.net)
    Linux Administrator’s Quick Reference by Jialong He [pdf] (tiger.la.asu.edu)
    The One Page Linux Manual by Squadron [pdf] (homepage.powerup.com.au/~squadron/, digilife.be)

    MySQL

    MySQL Cheat Sheet by Dave Child [png, pdf] (addedbytes.com)
    MySQL cheatsheets by Bob Stein, VisiBone [two wall posters 43cmx61cm or 61cmx87cm, jpg] (visibone.com)
    MySQL Cheat Sheet (nparikh.org)
    MySQL Database Quick Reference by DeepX [pdf] (tiger.la.asu.edu)

    OpenSSH

    OpenSSH Configuration Quick Reference by Jialong He [pdf] (tiger.la.asu.edu)

    Firefox

    Keyboard Shortcuts (mozilla.org)

    SQL

    SQL in one page (sql.su)
    SQL Injection Cheat Sheet (ferruh.mavituna.com)

    SQL Server

    SQL Server Cheat Sheet by Dave Child [png, pdf] (addedbytes.com)

    Subversion

    Subversion Cheat Sheet by Dave Child [pdf] (addedbytes.com)
    Subversion Quick Reference Card by Cezary Sobaniec [pdf] (cs.put.poznan.pl)

    UNIX

    UNIX BASH shell Quick Reference by Arnold Robbins [pdf] (tiger.la.asu.edu)

    XML

    XML 1.0 Syntax Quick Reference by Mulberry Technologies, Inc. [pdf] (mulberrytech.com)

    XPath y XSLT

    XSLT 1.0 and XPath 1.0 Quick Reference [pdf] (mulberrytech.com)
    XPath by DeepX Ltd [pdf] (refcards.com)

    Actualización 24-Nov-2009

    Agrego una colección de 25 cheat sheets de diseño web, PHP, WordPress, Photoshop, etc. que me pareció interesante: 34 cheat sheets for web designers and developers

    (No existen posts relacionados)

    ]]>
    http://josearrarte.com/blog/2009/07/03/cheat-sheets//feed 3