Softlinks a archivos o carpetas en Windows al estilo Linux

by Marc Cortada 05/07/2012

¡Sí, se puede! En Windows se pueden crear enlaces virtuales a archivos al estilo UNIX o Linux. Estos enlaces (no confundir con accesos directos) pueden ser de gran utilidad para el desarrollo de aplicaciones, permisos de acceso a directorios, puestas en marcha y control de versiones, etc. (en esta entrada hay un ejemplo de aplicación real).

Esta funcionalidad está disponible desde Windows Vista y Windows 7 en lo que se refiere a sistemas operativos de sobremesa o estaciones de trabajo. En lo que se refiere a la familia de servidores está disponible dese Windows Server 2008. En todos los sistemas es recomendable instalar SP1 y este hotfix, ya que realizan algunas correcciones. En el enlace al hotfix encontraréis más información.

Para entender cómo funciona un enlace o softlink, haré una prueba y detallaré la diferencia entre un acceso directo y un enlace. De hecho la prueba será sobre un directorio, aunque los softlinks también pueden apuntar a un archivo.

Al respecto de las diferencias entre directorio y acceso directo. Al llamarse casi igual y al tener una funcionalidad aparentemente idéntica desde el explorador de archivos, muchos creen que es lo mismo, pero no, en absoluto un acceso directo es lo mismo que un enlace o softlink. Lo veremos con más detalle a continuación creando uno de cada.

  1. Lo primero, crearemos una estructura de directorios para hacer nuestras pruebas. En mi caso será: C:\_temporal\pruebasSoftLinks
  2. Dentro del directorio crearemos otro que se llamará dir1.
  3. Dentro del dir1 crearemos un archivo de texto vacío llamado hola.txt (por poner algo).

Quedará de la siguiente manera:

Y ahora es cuando vamos al grano: creamos el softlink que apunta al directorio real. En este caso el softlink está en el mismo directorio a modo de pruebas, pero no tiene por qué ser así el softlink puede estar en cualquier parte ¡incluso puede hacer referencia a una unidad de red!

  1. Abrimos la ventana de comandos (inicio > cmd).
  2. Nos situamos en el directorio donde crearemos el softlink cd "C:\_temporal\pruebasSoftLinks"
  3. Finalmente creamos el softlink con la instrucción mklink /D dirLink1 "C:\_temporal\pruebasSoftLinks\dir1"

Notar que utilizo una ruta completa en lugar de una ruta relativa. Eso es porque yo he experimentado problemas en un entorno que no tenía las actualizaciones que he detallado al principio. Utilizando las rutas absolutas y completas no he tenido ningún problema.

Por otra parte notar el parámetro /D que indica que es un enlace a un directorio. Si no se especifica nada, por defecto es un enlace a un archivo.

El softlink ya está creado, lo podemos ver a continuación:

Si haceos doble clic en dirLink, comprobaremos que se abre dirLink igual que si abriéramos la carpeta dir1 normalmente y que la ruta de acceso a la misma es válida ("C:\_temporal\pruebasSoftLinks\dirLink1" existe como directorio).

Ahora, para ver la diferencia entre un acceso directo y un enlace crearemos un acceso directo.

Tan fácil como situarse en la ventana del explorador de archivos, botón derecho > nuevo > acceso directo.

En el asistente que nos aparece le indicamos la misma ruta que hemos vinculado antes (el directorio real dir1) "C:\_temporal\pruebasSoftLinks\dir1"

Y como nombre le pongo accDir1.

En este momento tenemos en la carpeta:

  • Un directorio real.
  • Un apuntador, enlace o softlink al directorio real.
  • Un acceso directo al directorio real.

Puede crear confusión el hecho de que ambos tengan el mismo icono, sin embargo no son lo mismo.

Anteriormente hemos visto que la ruta "C:\_temporal\pruebasSoftLinks\dirLink1" existe. Se puede acceder a ella desde un programa para abrir el archivo de texto, desde el explorador de archivos.... es una ruta perfectamente válida para todo como si fuera real.

Para comprobar que el acceso directo no es lo mismo, es tan simple como hacer doble clic sobre el icono accDir1 desde el explorador de archivos. Podemos ver como no aparece la ruta "C:\_temporal\pruebasSoftLinks\accDir1" simplemente porque no es válida, nos aparece la ruta del directorio físico al que hemos hecho referencia "C:\_temporal\pruebasSoftLinks\dir1". El objeto llamado accDir1 no es un directorio ni un apuntador a un directorio, es un archivo con contenido que es interpretado por el explorador de Windows como un acceso directo, lo que hace que abra la ruta que lleva informada.

Otra forma para comprobar la diferencia seria ejecutar la ruta del archivo de texto desde la ventana ejecutar (inicio > ejecutar) haciendo referencia al archivo de texto utilizando la ruta con el vínculo. Si ejecutamos el comando siguiente se abrirá el archivo de texto:

Si tratamos de ejecutar la ruta con el acceso directo "C:\_temporal\pruebasSoftLinks\accDir1\hola.txt" nos da el siguiente resultado:

accDir1 no se comporta como un directorio porque no lo es.

Algunas características y aplicaciones de los directorios virtuales:

  • Los permisos establecidos en el enlace directo son los que prevalecen. Por ejemplo, para dar acceso temporal a un usuario o crearle una ruta más cómoda y accesible, se podrían establecer permisos diferentes en el enlace para una carpeta que está ubicada en un sitio donde el usuario no tiene privilegios. Para quitar el acceso sería suficiente con eliminar el vínculo o cambiar los permisos del mismo. De este modo no tenemos que mover o duplicar una carpeta que puede tener una gran cantidad de datos ni alterar sus permisos.
  • Se pueden crear los enlaces aunque el destino no exista.
  • Se añade un nivel de abstracción más. Puede ser ideal (por ejemplo) para cambios de versiones. Podemos tener un programa corriendo o trabajando con unos archivos a los que accede a través de un apuntador. Podemos crear la estructura de archivos de la nueva versión en cualquier ruta que nos vaya bien. En el momento de hacer el cambio solamente se tendría que cambiar el enlace para que apunte a la nueva ruta y reiniciar la aplicación. Con un cambio así de rápido aumentamos el tiempo de disponibilidad de la misma y podemos volver atrás fácilmente si algo falla. Ideal para aplicaciones que trabajan a tiempo real (aquí entraríamos en temas de clústeres).
  • Elimina la necesidad de duplicar directorios de archivos. Por ejemplo una aplicación que tiene varios perfiles que se separan por carpetas. Si queremos dos perfiles iguales y garantizar que siempre serán iguales, bastaría con crear una carpeta real y otra apuntando a la real. Como los dos directorios son el mismo, solamente hay que mantener uno directorio. Ésta es la aplicación con la que estoy usando actualmente softlinks.

Tags:

Categorías: Programación y desarrollo

No se aceptan más comentarios

Entradas por mes