web2 logo

Artikel Links Notities

Symbolische links en hardlinks

Er zijn 2 soorten links, harde links en zachte links. Zachte links (softlinks) worden symbolische links genoemd, vaak ingekort tot symlinks. Een hardlink verwijst rechtreeks naar een plek in het bestandsysteem, de inode. Een symlink is een verwijzing naar een bestand of directory. Symlinks worden meer gebruikt als hardlinks, bij het gebruik van ln om links te maken zijn hardlinks echter de default, je moet de optie -s gebruiken om een symlink te maken. Symlinks lijken op de snelkoppelingen die je in Windows ook tegenkomt, ze verwijzen naar een bestand of map. Als dit bestand of deze map wordt verwijdert hou je een symlink over die ongeldig is. Hardlinks verwijzen naar een inode en zijn daarmee een andere naam voor het bestand of de map. Als het oorspronkelijke bestand of de oorspronkelijke map wordt verwijderd, wordt in feite alleen de oorspronkelijke naam verwijderd, het bestand of de map bestaat dan nog steeds, maar nu alleen met de naam van de hard link, totdat de laatste hard link die verwijst naar die inode ook wordt verwijderd. Je kunt niet zonder meer een hard link naar een map aanmaken, je moet daarvoor root zijn en de -d optie gebruiken.

Softlink aanmaken

ln maakt een link naar een bestand of map. $ ln -s doel_van_de_symlink naam_voor_de_symlink doel_van_de_symlink = waar de link naar toe moet verwijzen, deze moet al bestaan. naam_voor_de_symlink = de symlink die met deze opdracht zal worden aangemaakt. Een hardlink aanmaken: $ ln doel_van_de_hardlink naam_voor_de_hardlink Een softlink aanmaken naar een map op een andere locatie. In dit voorbeeld bestaat de directory /var/www/html en gaat dat verwijzen naar /home/kees/www. Eerst het origineel hernoemen van html naar html2 zodat het origineel ook bewaard blijft: cd /var/www sudo mv html html2 sudo ln -s /home/kees/www html (html is in dit geval een directory)

Symbolische links opvragen

De directory-entries van symbolische links beginnen met een 'l' (dat is de letter l van Leo), dus je kan het volgende gebruiken: ls -lrt | grep '^l' Je krijgt dan een lijst met uitsluitend symbolische links, bijvoorbeeld: lrwxrwxrwx 1 root root 16 okt 24 2018 html -> /home/kees/www De link 'html' verwijst hier naar de map '/home/kees/www'. Een andere mogelijkheid om symbolische links op te sporen is de find opdracht: find . -type l -ls # resultaat (gestart vanuit de '~/www' map): 9306121 0 lrwxrwxrwx 1 kees kees 22 okt 8 2019 ./www-test -> /home/kees/www-test/ De punt geeft aan dat vanuit de huidige map gezocht moet worden. Er wordt nu naar symlinks gezocht in de huidige map en alle onderliggende mappen. De uitvoer geeft uitgebreide informatie over de symlinks. Als je alleen de symlinks wil zien met waar deze heen verwijzen zonder andere informatie, dan kan je dit gebruiken: find . -type l -printf '%p -> %l\n' # resultaat (gestart vanuit de '~/www' map): ./www-test -> /home/kees/www-test/

naar boven

term zoeken

Notitieruimte