# Ubuntu: Linux voor mensen/Werken met bestanden/Werken met links
## Wat zijn links?

In sommige gevallen zal je merken dat de volledige info van een bestand begint met de letter “l”, van link. Het systeem met links wordt veel gebruikt op UNIX- en Linuxsystemen om plaats te besparen. Een link is eigenlijk niets meer dan een manier om twee of meer bestandsnamen te koppelen aan dezelfde bestandsdata.
Om links te begrijpen, moeten we iets meer weten over hoe een bestand in het bestandssysteem opgeslagen wordt. Per map zijn er een zeker aantal inodes beschikbaar, dat zijn wegwijzers naar de datablokken die de inhoud van een bestand vormen. In de interne structuur van de map bevindt zich een lijst waarin bestandsnaam, overeenkomstige inode en overeenkomstige datablokken met elkaar gerelateerd worden. Het systeem maakt intern geen onderscheid tussen gewone bestanden, mappen of andere bestandstypes. Alle soorten data worden eenvoudigweg beschouwd als bestanden met een inodenummer dat verwijst naar de datablokken voor dat bestand.
Er zijn twee manieren om bestanden te linken:
* Een harde link: associeert twee of meer bestandsnamen met dezelfde inode. Harde links delen dezelfde datablokken op de harde schijf en gedragen zich onderling onafhankelijk van elkaar. Elk gewoon bestand is in principe een hardlink naar zichzelf, vandaar dat bestanden die je net aangemaakt hebt het getal “1” hebben in de tweede kolom van de volledige bestandsinformatie die je kan opvragen met ls -l bestand.
* Een symbolische link of symlink: een klein databestand is een pointer (wegwijzer) naar een andere bestandsnaam. Een symbolische link is niet onafhankelijk van het doelbestand: als het doelbestand verdwijnt, werkt de link niet meer.
Het voordeel van een symbolische link is dat dit type link partities kan overspannen. Een harde link moet binnen eenzelfde partitie blijven. Toch worden harde links op sommige systemen gebruikt om redenen van robuustheid: als je de link verwijdert, of het bestand zelf, blijven toch de bestandsdata (de inhoud) bestaan, toegankelijk via de bestandsnaam of via de linknaam. Een harde link kan dus eigenlijk nooit stuk gemaakt worden: de inhoud van het bestand wordt nooit verwijderd door de linknaam of de bestandsnaam te verwijderen. Als gewone gebruiker zal je echter meestal met symbolische links werken, omdat ze beter zichtbaar zijn.
* Partitie
* Een partitie is het Linux-equivalent van een drive op MS Windows.
Onderstaande tekening verduidelijkt het een en ander:
* hlink is een harde link naar bestand: ze delen dezelfde inode N1.
* slink is een symbolische link naar bestand, met een aparte inode N2, die via de linkdatablokken naar het oorspronkelijke bestand verwijst.
Let op: bestand, hlink en slink zijn slechts namen van bestanden. De naam van een bestand staat min of meer los van de inhoud ervan.
Gezien beide soorten links ultiem naar de datablokken van het doelbestand verwijzen, gedragen links zich op dezelfde manier als het doelbestand zelf.
Men zou kunnen argumenteren dat er nog een derde soort van link is, de zogenaamde user-space link, die vergelijkbaar is met de shortcuts of snelkoppelingen in MS Windows. Dit zijn bestanden die meta-data bevatten die enkel geïnterpreteerd kan worden door de grafische bestandenbeheerder. Voor ons Linux systeem en voor de shell zijn dit echter bestanden als alle andere. Dit soort links eindigt bijvoorbeeld met de suffix .desktop of .lnk en aanmaken is eenvoudig genoeg met behulp van de features van je grafische omgeving. Gezien deze bestanden van geen betekenis zijn voor het werk dat we in deze cursus verrichten op de commandoregel, gaan we hier niet verder op in.

## Links aanmaken

Het meest gebruikt op Linux systemen zijn symbolische links, omdat ze eenvoudig te onderscheiden zijn van gewone bestanden en verder voordelen hebben die te maken hebben met de indeling van je harde schijf of schijven.
Links worden heel veel gebruikt in de /usr/lib map, die bibliotheken voor de meeste programma's bevatten. Elke bibliotheek heeft een versienummer, dat natuurlijk verandert bij elke update van het programma waarvoor ze dient. Om niet telkens de hele code te moeten aanpassen wanneer er een nieuwe bibliotheek beschikbaar is, gebruiken we enkel de naam van de bibliotheek, eventueel gevolgd door het hoofdnummer van de versie, maar verder zonder detail.
* Bibliotheek
* Bibliotheken zijn hulpbestanden waarin alle funtionaliteiten van een programma gedefinieerd worden.
Bijvoorbeeld:
* ubuntu@ubuntu:/usr/lib$ ls -l libaudiofile*
* lrwxrwxrwx 1 root root 21 2005-04--14 15:15 libaudiofile.so.0 -> libaudiofil
* e.so.0.0.2
* -rw-r--r-- 1 root root 132012 2005-04-14 15:15 libaudiofile.so.0.0.2
Merk op dat de link zelf slechts een klein bestandje is: 21 bytes. Het eerste karakter op de lijn van de link is een “l”, we herkennen de link door de verwijzing “->”, gevolgd door de naam van het bestand waar de link naar wijst.
Zelf een symbolische link aanmaken doe je als volgt:
Bijvoorbeeld:
* ubuntu@ubuntu:~$ ln -s bestand1 link_naar_1
* ubuntu@ubuntu:~$ ls -l
* total 2
* -rw-r--r-- 1 ubuntu ubuntu 0 2006-05-31 12:56 bestand1
* lrwxrwxrwx 1 ubuntu ubuntu 8 2006-05-31 14:41 link_naar_1 -> bestand1
Merk op dat in bovenstaande schermoutput enkel de relevante bestandsnamen weergegeven worden, uiteraard staan er ondertussen al wel meer bestanden in je map.
* En alweer ls
* Ook voor het controleren van links gebruiken we het ls commando.