IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Linux Professional Institute Certificate. LPIC-1

Lpic1 large.gif
Certificat LPIC-1
Examen: 101 (torneu a la resta de temes)
Fitxers: Els trobareu al tema LPI_103.3.
Objectius: http://www.lpi.org/eng/certification/the_lpic_program/lpic_1/exam_101_detailed_objectives
Dipòsit SVN: https://svn.projectes.lafarga.cat/svn/lpi/Materials/Examen_101/104.6
Usuari: anonymous
Paraula de pas: qualsevol paraula de pas

Objectius del tema

104.6. Crear i canviar els enllaços durs i simbòlics
Objective.jpg
  • Objectiu: Els candidats han de ser capaços de crear i gestionar enllaços durs i simbòlics a un fitxer.
  • Pes: 2
060317 Icon - Theory of Knowledge v01 pdc.jpg

Àrees Clau de Coneixement:

  • Crear enllaços.
  • Identificar enllaços durs i/o simbòlics.
  • Diferències entre copiar i enllaçar fitxers.
  • Utilitzar enllaços com a ajuda per a tasques d'administració del sistema.
Icon list.jpg

La següent és una llista parcial de fitxers, termes i utilitats utilitzades:

Text-editor.svg

Apunts: LPI 104.6. Crear i canviar els enllaços durs i simbòlics

Enllaços

Enllaços simbòlics (Soft links)

Els enllaços permeten que un sol fitxer tingui múltiples camins en un sistema de fitxers. El fitxer només existeix un cop i només ocupa l'espai un cop, però pot tenir múltiples camins (paths).

Els enllaços són similars (encara que força més potents) als accessos directes de Windows o els alias de Mac OS. Windows Vista suporta symlinks

Els enllaços tenen múltiples utilitats, com per exemple:

  • Assignar noms (camins) més simples a fitxers amb noms complicats
  • Assignar diferents noms a un mateix fitxer
  • Algunes ordres que semblen ordres diferents són realment enllaços que porten al mateix executable (per exemple les ordres fsck).
  • El sistema operatiu els utilitza de múltiples maneres, per exemple, els guions d'inicialització System V.
  • Apache utilitza enllaços simbòlics per els sites (sites-enabled i sites-available) i els moduls (mods-enabled i mod-available). Consulteu les ordres a2enmod/a2dismod i a2ensite/a2dissite.
  • ...

Hi ha dos tipus d'enllaços:

  • Enllaços simbòlics o soft links (també coneguts com a symlinks)
  • Enllaços durs (hard links)
NOTA: Per defecte ln crea enllaços durs. Consulteu l'apartat Enllaços durs (Hard links)

En aquest apartat parlarem dels enllaços simbòlics. L'ordre que ens permet crear enllaços és ln. La sintaxi és la següent:

$ ln [opcions] origen enllaç

On origen és el camí a un fitxer existent al sistema de fitxers i enllaç és el camí de l'enllaç que apunta al fitxer origen.

Els enllaços simbòlics es generen amb el paràmetre -s (--symbolic):

$ mkdir prova
$ cd prova
$ touch a
$ ln -s a b

Com hem explicat a l'apartat tipus de fitxers, els enllaços simbòlics són un tipus especial de fitxer i es poden identificar amb l'ordre ls i l'opció -l:

$ ls -l 
total 0
-rw-r--r-- 1 sergi sergi 0 2009-10-12 19:33 a
lrwxrwxrwx 1 sergi sergi 1 2009-10-12 19:33 b -> a

Els enllaços es mostren en color blau si esta activat l'esquema de colors de ls, s'indiquen amb el caràcter l al principi de la línia, i també es poden identificar per que el nom del fitxer indica cap a quin fitxer s'està enllaçant. Recordeu també que l'opció -F de ls:

$ ls -F
a  b@

Mostra un suffix per indicar el tipus de fitxer (l'arroba correspon als enllaços).

Els enllaços simbòlics compleixen les següents propietats:

  • Si s'esborra l'enllaç no s'esborra el fitxer original
  • Si s'esborra els fitxer enllaçat aleshores el link no apunta a cap lloc correcte

Els enllaços incorrectes apareixen en fons vermell:

$ rm a
$ ls -l
total 0
lrwxrwxrwx 1 sergi sergi 1 2009-10-12 19:33 b -> a

Podeu consultar totes les opcions al manual de ln:

$ man ln

o a Internet:

http://linux.die.net/man/1/ln

o com l'ordre pertany a coreutils, podeu també consultar info:

$ info coreutils ln

Algunes de les opcions més importants són:

  • Esborrar els fitxers de destinació (-f o --force): L'opció -f o --force causa que l'ordre ln elimini el enllaç si ja existeix. Per defecte, si l'enllaç ja existeix, no es realitza cap acció.
  • Mode interactiu (-i): Pregunta si s'ha d'eliminar o no els fitxers destinació existents.

Recursos:

Enllaços durs (Hard links)

Per defecte ln crea enllaços durs, tot i que a la pràctica són més habituals els enllaços simbòlics.

Els enllaços durs són dos noms de fitxer que apunten al mateix inode. Tots dos fitxers (o noms de fitxer) són igual de vàlids, i cap té més importància.L'única diferència és que un s'ha creat primer i l'altre més tard.

Per esborrar un fitxer (inode) amb múltiples enllaços durs cal esborrar tots els enllaços durs.

NOTA: cal tenir en compte que, per la seva naturalesa i a diferència dels enllaços simbòlics, els enllaços durs han de ser entre fitxers del mateix sistema de 
fitxers, no poden apuntar a un directori, i aquest ha de suportat enllaços durs (tots els sistemes Linux natius ho suporten).

Diferències entre els enllaços simbòlics i els enllaços durs:

  • Esborrar un enllaç simbòlic no esborra mai el fitxer original. Un enllaç dur només esborra els continguts del fitxer si és l'últim enllaç dur al fitxer.
  • Els enllaços simbòlics són una mica més lents en accés que els enllaços durs.
  • Els enllaços durs no poden apuntar entre fitxers de diferents sistemes de fitxers.
  • Esborrar el fitxer enllaçar per un enllaç simbòlic, deixa l'enllaç simbòlic trencat. Esborrar un dels enllaços durs no afecta a la resta d'enllaços (només decreix el comptador link del inode)
  • No es poden crear enllaços durs de directoris (però si enllaços simbòlics)

El següent exemple ens mostra com un mateix fitxer pot tenir més d'un enllaç dur i com fins que no s'esborren tots els links no s'elimina definitivament el fitxer:

$ touch a
$ stat a
File: «a»
  Size: 0         	Blocks: 0          IO Block: 4096   fitxer ordinari buit
Device: 801h/2049d	Inode: 57526      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   sergi)   Gid: ( 1000/   sergi)
Access: 2009-10-12 20:04:46.000000000 +0200
Modify: 2009-10-12 20:04:46.000000000 +0200
Change: 2009-10-12 20:04:46.000000000 +0200
$ ln -s a symlink_b
$ stat symlink_b 
  File: «symlink_b» -> «a»
  Size: 1         	Blocks: 0          IO Block: 4096   enllaç simbòlic
Device: 801h/2049d	Inode: 57528       Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/   sergi)   Gid: ( 1000/   sergi)
Access: 2009-10-12 20:05:42.000000000 +0200
Modify: 2009-10-12 20:05:41.000000000 +0200
Change: 2009-10-12 20:05:41.000000000 +0200
$ ln a b
$ stat a
  File: «a»
  Size: 0         	Blocks: 0          IO Block: 4096   fitxer ordinari buit
Device: 801h/2049d	Inode: 57526       Links: 2
Access: (0644/-rw-r--r--)  Uid: ( 1000/   sergi)   Gid: ( 1000/   sergi)
Access: 2009-10-12 20:04:46.000000000 +0200
Modify: 2009-10-12 20:04:46.000000000 +0200
Change: 2009-10-12 20:08:29.000000000 +0200
$ stat b
  File: «b»
  Size: 0         	Blocks: 0          IO Block: 4096   fitxer ordinari buit
Device: 801h/2049d	Inode: 57526       Links: 2
Access: (0644/-rw-r--r--)  Uid: ( 1000/   sergi)   Gid: ( 1000/   sergi)
Access: 2009-10-12 20:04:46.000000000 +0200
Modify: 2009-10-12 20:04:46.000000000 +0200
Change: 2009-10-12 20:08:29.000000000 +0200

Fixeu-vos que el soft-link té un inode diferent (57528) al del fitxer a (57526). En canvi el hardlink b té el matei inode que el fitxer a (fixeu-vos com augmenta el comptador link).

Observeu que els dos fitxers tenen el mateix inode:

$ ls -li 
6242474 -rw-r--r-- 2 sergi sergi 5 2008-05-10 11:23 a
6242474 -rw-r--r-- 1 sergi sergi 0 2008-05-10 11:22 b
NOTA: Fixeu-vos també en la tercera columna. El nombre que apareix és el nombre d'enllaços durs del fitxer.

Si continuem fent enllaços...

$ ln b c
$ stat a
  File: «a»
  Size: 0         	Blocks: 0          IO Block: 4096   fitxer ordinari buit
Device: 801h/2049d	Inode: 57526       Links: 3
Access: (0644/-rw-r--r--)  Uid: ( 1000/   sergi)   Gid: ( 1000/   sergi)
Access: 2009-10-12 20:04:46.000000000 +0200
Modify: 2009-10-12 20:04:46.000000000 +0200
Change: 2009-10-12 20:12:27.000000000 +0200

$ stat b
  File: «b»
  Size: 0         	Blocks: 0          IO Block: 4096   fitxer ordinari buit
Device: 801h/2049d	Inode: 57526       Links: 3
Access: (0644/-rw-r--r--)  Uid: ( 1000/   sergi)   Gid: ( 1000/   sergi)
Access: 2009-10-12 20:04:46.000000000 +0200
Modify: 2009-10-12 20:04:46.000000000 +0200
Change: 2009-10-12 20:12:27.000000000 +0200
$ stat c
  File: «c»
  Size: 0         	Blocks: 0          IO Block: 4096   fitxer ordinari buit
Device: 801h/2049d	Inode: 57526       Links: 3
Access: (0644/-rw-r--r--)  Uid: ( 1000/   sergi)   Gid: ( 1000/   sergi)
Access: 2009-10-12 20:04:46.000000000 +0200
Modify: 2009-10-12 20:04:46.000000000 +0200
Change: 2009-10-12 20:12:27.000000000 +0200

si esborreu un dels hardlinks:

$ rm c

l'únic que passa es que decrementem el comptador link:

$ stat a
  File: «a»
  Size: 0         	Blocks: 0          IO Block: 4096   fitxer ordinari buit
Device: 801h/2049d	Inode: 57526       Links: 2
Access: (0644/-rw-r--r--)  Uid: ( 1000/   sergi)   Gid: ( 1000/   sergi)
Access: 2009-10-12 20:04:46.000000000 +0200
Modify: 2009-10-12 20:04:46.000000000 +0200
Change: 2009-10-12 20:13:31.000000000 +0200

$ stat b
  File: «b»
  Size: 0         	Blocks: 0          IO Block: 4096   fitxer ordinari buit
Device: 801h/2049d	Inode: 57526       Links: 2
Access: (0644/-rw-r--r--)  Uid: ( 1000/   sergi)   Gid: ( 1000/   sergi)
Access: 2009-10-12 20:04:46.000000000 +0200
Modify: 2009-10-12 20:04:46.000000000 +0200
Change: 2009-10-12 20:13:31.000000000 +0200

Cal tenir en compte que els enllaços durs són similar a fer una copia amb cp però amb les següents diferències:

  1. Els continguts dels fitxer només són emmagatzemats un cop (no ocupa doble espai)
  2. Si es modifica a o b es modifiquen tots dos fitxers.
  3. Si es canvia qualsevol de les metadades de a o b (permisos, propietaris, marques de temps) es modifiquen a tots dos fitxers
  4. Si s'esborren els continguts d'un dels fitxers s'esborrem el de tots, o si es sobreescriu un fitxer. NOTA: rsync sempre fa un unlink abans de sobrescriure.

NOTA: no es poden fer enllaços durs a directoris:

$ ln prova provan
ln: «prova»: no es permet l’enllaç fort cap al directori

Hi ha una explicació interessant de que és un hardlink i com es poden utilitzar per fer còpies incrementals a:

http://www.mikerubel.org/computers/rsync_snapshots/#Incremental.

Consulteu cp -al per a més informació de com fer còpies incrementals.

Recursos:

Buscar tots els enllaços d'un fitxer (inode)

Es pot fer amb l'ordre find:

 $ sudo find / -inum 6242512
/home/sergi/aborrar/prova/linkdurb
/home/sergi/aborrar/prova/b

Ordres

ln

Consulteu ln.

stat

Consulteu stat.

ls

La tercera columna de la llista llarga (long list) de ls (opció -l) mostra el nombre de links durs d'un fitxer.

Consulteu també ls.