eliax

Truco: Enlaces Simbólicos en Windows similar a UNIX/Linux/OS X
eliax id: 4947 josé elías en jun 28, 2008 a las 02:34 PM (14:34 horas)
Aquí les dejo con un super-poderoso truco para Windows (2000, XP y posiblemente Vista) que permite que crees enlaces simbólicos en NTFS similar a como es posible hacerlo en UNIX, Linux y OS X. Si no sabes lo que es esto continúa leyendo que te sorprenderá...

Primero, para el que no sepa, un Enlace Simbólico es (en este caso) un directorio/carperta que en realidad "apunta" a otro directorio/carpeta.

Noten que esto NO es lo mismo que un Acceso Directo ("Shortcut"). A diferencia de un Acceso Directo que te permite hacer clic con tu ratón para saltar a otro lugar en el disco duro, un Enlace Simbólico le hace creer no solo a tu ratón, sino que a cualquier otro programa instalado en tu PC, que una localización en el disco duro es en realidad otra.

La mejor manera de entender lo que es esto, y lo poderoso que es, es con un ejemplo práctico...

Digamos que tienes un programa que cada vez que cambias algo, debes replicar un directorio completo, y solo modificar unos cuantos archivos. Es decir, digamos que inicialmente tenemos esta estructura:

c:\foo\
c:\foo\A\
c:\foo\B\
c:\foo\C\
c:\foo\MiPrograma1.exe

Ahora digamos que tienes un nuevo programa que se llama MiPrograma2.exe, por lo que copias todos los archivos a un nuevo directorio, y substituyes solo el archivo MiPrograma1.exe por MiPrograma2.exe. En otras palabras, ahora tenemos esto:

c:\foo\
c:\foo\A\
c:\foo\B\
c:\foo\C\
c:\foo\MiPrograma1.exe

c:\foo2\
c:\foo2\A\
c:\foo2\B\
c:\foo2\C\
c:\foo2\MiPrograma2.exe

Y digamos que dos días después, tienes un nuevo programa, MiPrograma3.exe. Ahora en tu disco duro tienes esto:

c:\foo\
c:\foo\A\
c:\foo\B\
c:\foo\C\
c:\foo\MiPrograma1.exe

c:\foo2\
c:\foo2\A\
c:\foo2\B\
c:\foo2\C\
c:\foo2\MiPrograma2.exe

c:\foo3\
c:\foo3\A\
c:\foo3\B\
c:\foo3\C\
c:\foo3\MiPrograma3.exe

Como podrás imaginarte, por cada programa lo que haces es que copias el directorio c:\foo\ completo (incluyendo los subdirectorios "A", "B" y "C"), y reemplazas MiPrograma1.exe por el nuevo programa, y ya te imaginas el gran problema de esto: Mientras mas copias hagas, mas espacio ocupa todo esto.

El problema fundamental sin embargo es el hecho de que estamos copiando las carpetas "A", "B" y "C" que están dentro de c:\foo\ una y otra vez, aun ellas no cambien, y si esas carpetas ocupan mucho espacio, esto rápidamente puede convertirse en un problema de espacio en disco.

En el mundo UNIX, Linux y OS X, existe una solución que tiene casi 40 años que fue desarrollada, y es sencillamente algo llamado un Enlace Simbólico (comando "ln" en el shell), que lo que te permite hacer en este caso es que nunca copias las carpetas A/B/C, sino que las dejas en donde están, y en el nuevo lugar desde donde se les desea acceder simplemente creas enlace simbólicos que "apuntan" a las carpetas originales.

Es decir, que lo que tendríamos ahora sería algo mas o menos como esto:

c:\foo\
c:\foo\A\
c:\foo\B\
c:\foo\C\
c:\foo\MiPrograma1.exe

c:\foo2\
----> c:\foo\A\
----> c:\foo\B\
----> c:\foo\C\
c:\foo2\MiPrograma2.exe

c:\foo3\
----> c:\foo\A\
----> c:\foo\B\
----> c:\foo\C\
c:\foo3\MiPrograma3.exe

En donde "---->" es en realidad un simple enlace simbólico apuntando a otro lugar.

Como pueden ver, ahora lo único que ocupa espacio adicional es MiPrograma2.exe y MiPrograma3.exe, pues las carpertas A/B/C no fue necesaria copiarlas.

Noten que este es solo un ejemplo, esto tiene innumerables usos, dos ejemplos comunes mas son:

1. Una manera de acortar las rutas, de modo que no tengas que escribir tanto en la linea de comando.

2. Una manera de uno poder sacar una nueva versión de un mismo programa, copiarlo en un lugar nuevo, y mantener todo compatible, ya que se puede crear un Enlace Simbólico desde el viejo lugar al nuevo lugar, para que así los otros programas que esperan una ruta pre-determinada continúen funcionando correctamente (esto resuelve un gran problema en programas viejos en Windows).

Otra cosa a notar es que a diferencia de UNIX/Linux/OSX, en Windows solo se pueden crear enlaces simbólicos locales (es decir, dentro de una misma máquina), solo para volúmenes formateados con NTFS, y solo para directorios (en los otros sistemas operativos se pueden crear enlaces simbólicos a archivos también). Así mismo en UNIX/Linux/OSX puedes crear enlaces con propiedades mas avanzadas (enlaces "duros" y "suaves"), pero ese tema va mas allá de lo necesario en este artículo.

Entonces, ¿cómo hacemos estos enlaces simbólicos en Windows NTFS? Pues para empezar, Microsoft no los llama con la terminología estándar (razón por la cual es posible que muchas personas que vienen de otros sistemas operativos crean que no existan en Windows), sino que los llama un "Junction" (en Español eso sería algo como una "Juntura", creo), pero vamos a seguir llamándolos enlaces simbólicos que tiene mas sentido...

Para crea enlaces simbólicos en Windows NTFS, debes descargar un programa desde Microsoft que te permite hacer esto. El enlace para descargarlo es este.

Cuando lo descargues, la primera vez que lo ejecutes (desde la linea de comando) una ventana con una licencia surgirá, debes aceptarla para proseguir con el uso del programa.

Nota que lo ideal es que copies el ejecutable en algún lugar de la ruta %PATH% de tu sistema, como en C:\Windows\System32\ o similar. Si quieres ver tu ruta de ejecución en Windows, escribe el comando:

echo %PATH%

Ahora, para utilizar el comando junction, el comando básico es el siguiente:

junction fuente destino

En donde destino es la ruta a donde se encuentra la carpeta a donde deseas enviar a los usuarios u otros programas, y fuente es la ruta que te estás inventado (el enlace simbólico).

Ejemplo:

junction c:\win c:\Windows

Ese ejemplo te crea un enlace simbólico en el disco c: que se llama "win" (notarás que este comando te crea una carpeta como cualquier otra que se llama c:\win\) y que apunta en realidad a c:\windows\.

Después si ejecutas el comando:

cd c:\win

Notarás que aunque vez los archivos normalmente localizados en c:\Windows, que la linea de comando te dice que aun estás en c:\win. Similarmente, si entras visualmente con el Windows Explorer en c:\win, este te mostrará todos los archivos de c:\Windows, pero seguirá diciendo que estás en c:\win (a diferencia de un Acceso Directo que te cambia de lugar).

Advertencia Importante: Nota que si entras a c:\win\ y borras todos los archivos que ves ahí, que en realidad lo que estarás haciendo es borrando todos tus archivos de c\Windows\, por lo que ten muchísimo cuidado con esta situación. Si lo que quieres es borrar el enlace simbólico, lo que debes hacer entonces es ejecutar este comando:

junction -d c:\win

Eso es todo, ¡¡¡espero que esto les sea tan útil a ustedes como a mi!!!

Descarga Junction v1.5 desde Microsoft en este enlace

autor: josé elías

Comentarios

  • Muy buena herramienta. Me ha sacado mucho de apuros. El ejemplo lo podria simplificar diciendo que si me quedo sin espacio en mi dicos duro c: puedo mover mis programas a un dicos externo, digamos c:\Program Files -> x:\Program Files, y ya.. :) Buena suerte...

  • Excelentes noticias me has dado con esto!!! Estoy acostumbrado a trabajar con Linux, sin embargo, en el trabajo me han hecho administrar un Windows Server 2003 y tenemos un caso parecido a lo que dices de re-copiar toda una estructura de carpetas. El lunes que llegue al trabajo hago la prueba y te cuento.

  • jeje pues un ejemplo mas visual lo vemos en la pelicula matrix recargado cuado buscan al cerrajero que abren puertas y salen a otro lugar :P

  • Tengo una pregunta, si en caso de que creara un enlace simbólico en *C:/* a una carpeta en *X:/src/* , si realizo una reinstalación desde Windows que me formatea *C:/*, me borrará lo que tenga en *X:/src/* ???

    • No Arturo, al formatear solo borrarias el enlace simbolico pero hacia donde apunta...

  • Excelentísimo Post Elias, no me imagine la utilidad que tendría esta función hasta que me tope con el siguiente problema:
    1) Adquirí un sistema administrativo para pruebas, pero esa versión ya no tiene soporte. No puedo entrar a la base de datos porque esta protegida con contraseña.
    2)El sistema apunta automáticamente a la base de datos asi: "C:\Datos". Esto en la máquina que funciona como servidor no da ningun problema. El rollo es cuando quiero apuntar desde otro equipo a este archivo de base de datos asi: "P:\Datos". Pues el sistema siempre esta apuntando a "C:\Datos" y no me permite cambiarlo.
    3) Entendí perfectamente la explicación que das arriba, te echo todo este cuento solo para que me confirmes si puedo hacer ese enlace simbólico con esa carpeta compartida en la red: "P:\Datos".
    4) Confirmame si quedaría de la siguiente manera: "junction c:\Datos p:\Datos".
    5) Mil gracias.

  • Probando la herramienta me ha dado un dolor de cabeza tan solo por un pequeño error.
    Para hacer tu enlace debe ser asi:
    junction c:\win "c:\windows"
    Si no le colocas las comillas a la ruta de origen te va a botar error hasta que te explote el cerebro x_x.
    Por lo demas Gracias por la Info esta muy buena (^^)b

  • desafortunadamente, esta tecnica no es efectiva en cuanto a xampp y joomla.

    en win7 la estuve probando, pero cuando trate de acceder al backend como usuario admin, me negaba el acceso diciendo q la sesión habia caducado; fue solo borrar el enlace y poner de nuevo todo el sitio en htdocs y volvio a la normalidad

  • Excelente brother se me presento un problemilla que pude resolver con esto....grande chavo, gracias.

  • Me sirvió para usar dropbox como carpeta de mis documentos y mi musica :)

  • Alguien tiene idea si los enlaces simbolicos se pueden crear por usuario? es decir, tengo la carpeta
    c:\A
    y quiero que cada usuario en su sesion al ingresar a A, ingrese los documentos de ese usuario.

    Gracias.

  • Muchas gracias, pensé que Guindous está increíble herramienta.

  • A partir de Windows Vista, hay una órden de línea de comandos llamada mklink
    Puede hacer lo mismo que junction y más:
    /D Crea un vínculo simbólico a un directorio.
    /H Crea un vínculo físico en lugar de un vínculo simbólico
    /J Crea una unión de directorios (junction)

    Para el caso de diretorios, es aconsejable usar vínculo simbólico en vez de junction (uniones de directorios) ya que el vínculo simbólico es más nuevo. Si el sistema es un Windows 2000/2003/XP, entonces si se debe usar junctions.

    NOTA: mklink no es una utilidad (no es un archivo exe que se pueda copiar), sino que es parte de los comandos propios del sistema, y como dije antes, solo para versinoes de Windows a partir de Vista en adelante (eso incluye 2008, 2008 R2, 7, 8 Blue, y los que vengan).

    Para ver un listado de enlaces (y hacia adonde apuntan), basta con ejectuar:
    DIR /AL

    los enlaces simbólicos se muestran como , mientras que las uniones de directorios se mostrarán como

    Y por último, los recursos compartidos NO SIGUEN enlaces simbólicos ni uniones de diretorios (y a diferencia de Linux, aparentemente en Windows no hay forma de cambiar este comportamiento).

    Es deir que si tenemos un equipo (al que llamaremos PCWIN1), cuya carpeta C:\Users sea en realidad un a D:\ y luego compartimos C:\Users como Users, cuando tratemos de acceder a \\PCWIN1\Users dará error al intentar leer.

    Windows, no puede seguir los enlaces simbólicos en conexiones de red. (y ese esel problema que tenía Oscar en la respuesta #5).

    Saludos!

  • excelente post, he probado y me sirve perfecto en enlaces simbolicos con recursos locales, pero no funciona en unidades de red o recursos compartidos, es una lastima porque precisamente asi lo necesitaba , ahora una pregunta alejandro la sintaxis para el uso de mlink podrías compartirla?

Añadir Comentario

tu nombre
tu email
(opcional)
web personal
(opcional)
en respuesta a...
comentario de caracteres máximo
2 + 9 = requerido (control anti-SPAM)
 

"Inspirador tu artículo José, el cual me recuerda lo mucho que disfrutaba de la serie "Cosmos" de Carl Sagan. Eres un ejemplo de diamante para cualquier blogger."

por "HANSI ALONSO" en feb 3, 2014


en camino a la singularidad...

©2005-2014 josé c. elías
todos los derechos reservados
como compartir los artículos de eliax