Manejo de enlaces simbólicos en Linux


uso de enlaces simbólicos desde la terminal de ubuntuCon este post me gustaría iniciar una serie de artículos cuyo objetivo no es otro que ofrecer a los lectores una serie de herramientas básicas (de ahí que como imagen haya optado por colocar una caja de herramientas que volveré a utilizar para destacar estos artículos añadiéndoles alguna otra que haga alusión al tema que vaya a tratarse) para el manejo de Linux.

En esta primera entrega me gustaría centrarme en el uso de los enlaces simbólicos que, aunque simples una vez comprendido su funcionamiento, son de extrema utilidad al gestionar nuestro sistema de archivos.

Definición de enlace simbólico

Lo primero sería explicar qué es un enlace simbólico pero, como no quiero aburriros con los detalles lo mejor será incluir un enlace donde poder consultarlo.

Como más de uno se habrá quedado igual añadiré que podrían verse (con ciertas diferencias) como los accesos directos del «ventanuco« o lo que es lo mismo: la posibilidad de colocar en cualquier sitio un directorio (o fichero) que realmente se encuentra ubicado en otro lugar.

Si sientes adversión por la terminal prueba con el post «Crear enlaces simbólicos gráficamente«

Tipos y creación de enlaces

Enlaces simbólicos

Son los enlaces que suelen utilizarse habitualmente de ahí que incluso suela denominarse, por defecto, enlace simbólico a cualquier enlace que se cree.

Cualquier cambio que se haga tanto en el directorio original como en el contenido del enlace simbólico quedará reflejado en el otro (si cambias el contenido del enlace simbólico se podrá ver en el original y viceversa)

Borrar el enlace simbólico no afecta al original (seguirá existiendo)

Para crear un enlace simbólico lanzaremos el siguiente comando desde la terminal

ln -s DIRECTORIO_ORIGINAL DIRECTORIO_ENLACE

Donde

  • DIRECTORIO_ORIGINAL es el directorio al que queremos apuntar
  • DIRECTORIO_ENLACE es donde queremos poner el enlace al DIRECTORIO_ORIGINAL

Sirva de ejemplo la siguiente sentencia

ln -s $HOME/www /opt/joomla1.5.1/joomla-1.5.2-0/apache2/htdocs/

Donde

  • /opt/joomla1.5.1/joomla-1.5.2-0/apache2/htdocs/ es la ruta al directorio en el que se encuentran los archivos del servidor web que tengo montado en mi equipo con el stack de Bitnami
  • $HOME es mi directorio de usuario
  • www es un directorio que me he creado en mi carpeta de usuario

Con ese enlace simbólico consigo tener todos los proyectos web que voy creando en mi equipo dentro de mi carpeta de usuario.

La idea es que si algún día cambio de distribución Linux no perder ese trabajo por un despiste: toda mi documentación y proyectos están en mi directorio de usuario ($HOME) así no tengo que recordar que dentro del sistema de ficheros de Linux tengo cosas que me podrían hacer falta

TRUCO Para recordar el parámetro -s asociar la palabra SOFT o SIMBÓLICO seguro que así no se te olvida 😉

Enlaces duros

Igual que el simbólico pero con un matiz: cuando se borre el último enlace que apunte al DIRECTORIO_ORIGINAL (se pueden crear tantos enlaces como se necesiten a un directorio cualquiera de nuestro sistema de archivos) se borrará el DIRECTORIO_ORIGINAL

La sintaxis es la misma cambiando única y exclusivamente el parámetro por -t; sirva de ejemplo

ln -t $HOME/www /opt/joomla1.5.1/joomla-1.5.2-0/apache2/htdocs/

Identificar enlaces simbólicos

Desde el administrador de archivos pueden identificarse fácilmente por contar con una flecha en la parte inferior del icono de carpeta

Desde la terminal (lanzando un ls -l para que muestre información adicional) veremos que en el bit de tipo en lugar de aparecer una d (de Directorio) aparece una l (de Link)

Ya que estamos con la terminal y recordando el aviso que hicimos sobre los enlaces duros (al borrar el último se borra el DIRECTORIO_ORIGINAL) comentar que para saber cuántos enlaces DUROS apuntan al directorio original basta con mirar el número que hay justo a la derecha de los permisos (en el ejemplo es un 1 porque sólo hay un enlace duro al DIRECTORIO_ORIGINAL)

Eliminar enlaces

Tan sencillo como ejecutar el comando unlink

unlink RUTA_AL_ENLACE_NO_DESEADO

Donde

  • RUTA_AL_ENLACE_NO_DESEADO es la ruta a alguno de los enlaces que hemos creado y han dejado de sernos útiles

Conclusión

Espero que este tocho os haya servido para entender algo mejor el funcionamiento y utilidad de los enlaces simbólicos; utilidades todas las que se os puedan ocurrir (recordad el ejemplo para ubicar los proyectos webs en el directorio de usuario y evitar que se pierda con alguna instalación desde cero)

Podría interesarte

81 comentarios en “Manejo de enlaces simbólicos en Linux

  1. Pero si creas un enlace simbólico y borras el archivo al que «apunta», rompes el enlace, es decir que si instalas desde cero, tu www dejaria de funcionar, o me equivoco?

    Muy bueno el blog 🙂

    Me gusta

  2. La idea Laucha es copiar el contenido del directorio www a tu cuenta de usuario, borrar el www de Apache y en su lugar crear el enlace a tu $HOME.

    Cuando reinstales la única precaución será volver a crear el enlace a tu cuenta de usuario donde tendrás el código de todos tus proyectos web.

    Me alegra que te guste el blog, puedes ponerte cómodo… estás en tu casa 😉

    Me gusta

  3. Que tal compañero, soy nuevo en esto de linux, pero al leer este magnifico post, me surgio una pequeña pregunta, si bien se puede crear un enlace simbolico.. hay alguna manera de proteger el enlace de manera que no modifique al original? si mi pregunta el algo tonta me disculpo.. enlace simbolico parece un espejo ó una virtualizacion aunque en algunos casos el termino virtualizacion no se acerque en lo mas minimo a este caso.

    Gracias y disculpa la molestia.

    Me gusta

    1. No pidas disculpas por querer aprender [ nadie nace sabiendo, ¿verdad? 😉 ]

      Respecto a la pregunta no termino de captar lo que quieres hacer.

      Me explico: cuando creas un enlace simbólico estás, digámoslo así, creando un «atajo» en cualquier punto del árbol de directorios a otra rama de dicho árbol que te interesa

      ¿Para qué necesitas que no pueda modificarse? Si me planteas cuál es tu objetivo puede que consiga indicarte una alternativa que resulte viable.

      Un saludo y suerte

      Me gusta

      1. a mi me interesaria proteger el destino original para este caso: digamos que quiero hacer un enlace simbolico de mis proyectos a la carpeta de skydrive para que lo que modifique en mis proyectos originales se respalde inmediato a skydrive, pero yo soy muy desconfiado que tal si alguien se mete a mi cuenta de skydrive y borra todo entonces eso afectaria tambien a la carpeta original y perderia todo lo que tengo.

        Me gusta

  4. A mi no me deja crear enlances simbolicos, todos los crea como enlaces duros, saben como puedo hacerle, ya intente con ln -s y con ln –symbolic pero aun asi no los crea como simbolicos

    En wikipedia encontre algo parecido a este post de blog pero esta un poco diferente la sentencia de ln

    ln [-s]

    Me gusta

  5. Tengo la necesida de aumentar el espacio de una particion en linux que se me esta llenado y creo que con los enlces simbolicos puedo llevar los datos a otra partición con suficiente espacio, pero no se como hacerlo a pesar de las explicaciones que son bastante claras pero no aclara este extremo que planteo, agradecería cualquier explicación de como hacerlo.

    Me gusta

  6. Hola, googleando (¿se puede decir así?) acabé aquí..y dado que mis dudas trataban sobre enlaces simbólicos, ¿que mejor sitio?.
    Conciso y claro, solo me quedó una duda..¿estos enlaces solo pueden referenciar a un directorio? es que veo que en tus ejemplos especificas claramente links a directorios…¿no puedes hacer un link a un archivo?
    Salu2!

    Me gusta

  7. hola compi buen blog pero apesar de todo estoy muy perdido con linux y me estoy rompiendo la cabeza pero no doy con la tecla veras kiero mover archivos a mi carpeta descargas desde un pen y desde mi disco duro y no se como se hace porque si intento moverlos a la carpeta o al escritorio me dice que no se puede disco lleno y no se porque dice eso si tengo espacio todavia bueno pues no me enrrollo mas si me pudieras echar una mano gracias

    Me gusta

  8. Excelente informacion gracias!!! tengo una duda como puedo ver las rutas de los archivos de un enlace duro?? he intentado pero no he encontrado nada… gracias de antemano

    Me gusta

  9. Tengo una carpeta con la particion casi llena y tengo otra particion con mucho espacio, un link simbolico me serviria para que mi nueva informacion se guarde en la otra parcion??
    /opt/miprograma/logs —> Particion casi llena
    /home/miprograma/ —> Particion con mucho espacio

    Comp puedo hacerle?

    Muchas gracias por tu vlaiosa ayuda

    Me gusta

    1. Te recomendaría mover todo el contenido de la carpeta que está a punto de «rebosar» a la nueva partición
      y luego que borres la carpeta /opt/miprograma/logs sustituyéndola por un enlace (del mismo nombre que la carpeta que has borrado) apuntando a la que creaste nueva (y en la que has metido los logs)

      Aunque no venga al cuento, te recomendaría que comprimieses los ficheros de logs más antiguos pues no creo que tengan demasiada importancia y ahorrarás bastante espacio (los ficheros de texto plano tienen altas tasas de compresión)

      Suerte y un saludo

      Me gusta

  10. hola, estoy haciendo un taller sobre shell, y la pregunta es como contar los vinculos que tiene un archivo, la verdad estoy perdido sobre como hacer este conteo?

    Me gusta

  11. hola,
    este es un tema que nunca entendi del todo, asi k a ver si m echas una mano:
    ¿Que diferencia hay entre un enlace simbolico, externamente claro, y los accesos en windows? Ambos tienen la misma finalidad(distimtas rutas de acceso a un mismo fichero), ¿no?

    Gracias:D, estupendo articulo

    Me gusta

    1. Recuperarlo lo vas a tener complicado y no te garantizo que te funcione bien.

      Si no quieres perder las aplicaciones instaladas te recomendaría instalar el mismo sistema operativo en otra partición (o mejor en una máquina virtual) y copiar el contenido de /opt a la partición perdida.

      Un saludo

      Me gusta

  12. Muy buen post. muy claro todo.

    Solo tengo una pregunta. Ayuda urgente porfavor.

    Como haría si quiero que el enlace simbolico sea a otro servidor.

    Muchas gracias de antemano

    Me gusta

      1. Gracias por tu respuesta.

        Te comento mi situación a ver si me puedes echar una mano.

        Tengo una aplicación que me guarda los archivos en el directorio /var/lib/codendi/documentos/.

        Lo que quiero hacer es que ahora esos documentos los guarde en otro servidor.

        S.O CentOS 5.3, Aplicación llamada Codendi y desarrollada en php.

        Gracias.

        Me gusta

  13. Muy buena explicacion amigo..al fin m qedo mas q claro esto de los enlaces.. 😀 a tener cuidao con los enlaces duros entonces… Se agradece y q sigan los exitos! 🙂

    Me gusta

  14. Muy buen artículo. Muy claro y conciso. Yo no he empleado mucho los enlaces simbólicos, posiblemente al tipo de estructura que sigo en mi sistema de archivos.

    Aún así, sí me gustaría ver qué otros usos y ventajas ofrecen a otros usuarios. Si miraré por internet y si alguno me llama la atención lo pondré por aquí.

    Me gusta

  15. Hola me gustaria saber como recupero la ruta de un enlace es decir:
    ln -s genera @file o un ~directorio
    si lo que tengo es @file o un ~directorio como se a donde apuntan, como recupero esta informacion

    Me gusta

  16. Hola Informático de Guardia, estoy empezando con Ubuntu, estoy trabajando con un servidor donde quiero instalar LAMP desde su fuente, asi que tu tema me fue de gran ayuda. De igual forma quiero darte las gracias por tu agran aporte a la comunidad. y de igual forma, pedirte ayuda de una manual para instalar mysql-5.5.25 para ubuntu, muchas gracias por tu tiempo.

    Me gusta

  17. Hola amigos eruditos, quiseiara saber como modificar el target de un enlace simbolico ya que necesito agregarle unos parametros a goggle-creme en linux ubuntu

    Me gusta

      1. Realmente lo más sencillo e intuitivo sería poder editarlo, pero ya me ando resignando a que en Linux no se puede esperar usabilidad.

        Con respecto al mismo problema, usar enlaces para poner parámetros no debería resultar ya que se me ocurrió hacer eso esperando que el comportamiento fuese igual que los accesos directos de Windows, pero entonces dice que el enlace está roto.
        Osea, parece que no es posible crear enlaces con parámetros.
        Dicho de otra manera, los enlaces de Linux no son compatibles con los accesos directos de Windows y son mucho más capados.

        Me gusta

        1. Son conceptos totalmente distintos (aunque, en ocasiones, queramos usarlos de otro modo).

          Lo más parecido a un acceso directo (de Windows) que podríamos esperar, son los ficheros .desktop de las distribuciones actuales.

          Estos ficheros si que admiten parametrización y ser cambiados de ubicación sin que dejen de funcionar 😉

          Me gusta

  18. hola, como podria listar todos los enlaces (duros y simbolicos) de un directorio
    ademas si es simbolico que muestre el nombre del archivo la que apunta.
    gracias

    Me gusta

  19. me parece que la palabra adversión hace referencia a una adversidad, un contratiempo… pero si es para un sentimiento de asco o repugnancia, etc me parece que se dice aversión. aunq no estoy seguro. por lo demás muy bueno

    Me gusta

  20. La pregunta que me surge es: cuando reinicio el sistema los enlaces a discos que están fuera del sistema de archivos aparecen como rotos ¿como puedo hacer para solucionar este problema?

    Me gusta

  21. Siempre que intento hace un enlace me dice

    ln: el objetivo «enlace.jpg» no es un directorio

    Y yo pienso, ya sé que no es un directorio, es el nombre de un archivo jpg, el nombre del enlace ¿cómo va a ser un directorio?

    Me gusta

  22. Queridos tengo un problema que necesito resolver:

    He instalado un servidor ftp en debian 7, el server tiene 4 hdd con informacion que deseo publicar, he creado symlink de las carpetas que quiero esten publicas en el ftp, cuando accedo via web veo los enlaces pero no a la informacion contenida en las carpetas y no he podido resolver, alguna idea me seria muy util.
    Gracias anticipadas

    Me gusta

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.