Por ejemplo, ante la pregunta:
Tengo un fichero en una carpeta compartida y necesita permisos de escritura, pero no quiero que los usuarios sean capaces de borrarlo, ¿es posible?
Recordemos que realmente el proceso de borrado de un fichero no es nada más que eliminar el apuntador desde el directorio y marcar esos cluster como libres en la MFT. Es decir, el fichero en sí sigue existiendo mientras esos cluster no se utilicen para otra asignación de fichero.
Si fuésemos capaces de crear un apuntador desde otro directorio a ese mismo fichero, es decir si el fichero estuviese referenciado desde dos sitios, el borrado desde uno de ellos sólo liberaría ese apuntador. El espacio físico del fichero no se marcará como libre hasta que nadie lo referencie y, como sigue referenciado desde el apuntador del otro directorio, seguirá existiendo desde él.
Es decir, imaginamos que tenemos un fichero llamdao mis-datos.txt que está apuntado por la carpeta c:\carpeta1, es decir que el nombre completo sería c:\carpeta1\mis-datos.txt
Si fuésemos capaces desde c:\carpeta2, de apuntar al mismo fichero, entonces el borrado desde la carpeta anterior simplemente implicaría que no sería accesible desde ella, pero sí desde c:\carpeta2.
En XP, Windows 2003 e incluso en Vista, esto es inmediato con el comando FSUTIL. Este comando permite crear "links duros" (enlaces simbolicos: "hardlinks") desde una carpeta a cualquier fichero (siempre y cuando el disco sea NTFS). Veamos un ejemplo.
En el disco R: me creo carpeta1 y carpeta2. En carpeta1, pongo un fichero de texto llamado mis-datos.txt con el texto "prueba de mis-datos".
Posteriormente doy el comando:
[R:\]fsutil hardlink create r:\carpeta2\enlace-1.txt r:\carpeta1\mis-datos.txt
y el sistema me responde:
Hardlink created for r:\carpeta2\enlace-1.txt <<===>> r:\carpeta1\mis-datos.txt
El nombre del fichero enlace-1.txt puede ser cualquiera, aconsejo que sea el mismo que el otro, es decir mis-datos.txt, pero lo he puesto a propósito diferente para que veamos que no tiene por qué coincidir. Si ahora hacemos:
[R:\]rd carpeta1 /s
carpeta1, Are you sure (Y/N)? y
Acabamos de borrar no solamente mis-datos.exe, sino tambien toda la carpeta1. Aún así:
[R:\]cd carpeta2
[R:\carpeta2]type enlace-1.txt
prueba de mis-datos
Es decir, sigue todo existiendo... :-)
Lo que sí es verdad es que Vista incorpora nativamente otros comandos de enlaces simbólicos nuevos, por lo que, la operacion anterior, no sólo podemos hacerla de esta forma sino tambien con el nuevo comando de Vista MKLINK.
Si ejecutas MKLINK, te dice:
MKLINK [[/D] | [/H] | [/J]] Link Target
/D Creates a directory symbolic link. Default is a file
symbolic link.
/H Creates a hard link instead of a symbolic link.
/J Creates a Directory Junction.
Link specifies the new symbolic link name.
Target specifies the path (relative or absolute) that the new link
refers to.
En nuestro caso, ejecutariamos para tener lo mismo que con FSUTIL:
mklink /h r:\carpeta2\enlace-1.txt r:\carpeta1\mis-datos.txt
Cuidado con el parametro /J porque crea un enlace de carpeta (nueva) a carpeta existente, pero si se borra la original el enlace queda huérfano. Es decir, no sirve en ese caso.
Por supuesto, todos estos comandos hay que darlos, si estamos en Vista, en una consola arrancada en modo elevado (es decir, botón derecho en Símbolo del Sistema -Inicio, Accesorios- y "Ejecutar como Administrador).
--
|
30 - septiembre - 2007