Type bestanden

Één detail dat we tot nu toe verborgen hebben gehouden, is dat de Linux kernel bijna alles als een bestand in aanmerking neemt. Tevens directory's en devices: het zijn slechts speciale soorten bestanden.

Zoals je je misschien kunt herinneren, wordt door het eerste teken van een ls -l het type bestand weergegeven. Voor een gewoon bestand, zal dit gewoon een - zijn. Andere mogelijkheden zijn:

Symbolische links

Symbolische links (worden ook wel symlinks of soft links genoemd) zijn de andere soort links naast hardlinks. Een symlink is een speciaal bestand dat "verwijst naar" een hardlink op ieder gemount bestandssysteem. Wanneer je de inhoud van een symlink probeert te lezen, geeft het de inhoud van het bestand waarnaar het verwijst in plaats van de inhoud van de symlink zelf. Aangezien directory's, devices en andere symlinks typen bestanden zijn, kun je niet met een symlink hiernaar verwijzen.

Dus een hardlink bestaat uit een bestandsnaam en een inode-nummer. Een bestand is eigenlijk een inode: een lokatie op de disk, type bestand, permissie mode, enz. Een symlink is een inode dat de naam van een hard link bevat. Door een symlink vormt een bestandsnaam met een andere bestandsnaam een koppel, terwijl door een hardlink een bestandsnaam met een inode-nummer wordt gekoppeld.

Alle hardlinks naar hetzelfde bestand hebben gelijke status. Dat wil zeggen dat de ene net zo goed is als de ander; als je een bewerking op de ene uitvoert is dat hetzelfde als wanneer je die bewerking op één van de anderen uitvoert. Dit komt doordat hardlinks allen naar dezelfde inode verwijzen. Bewerkingen op symlinks, aan de andere kant, hebben soms effect op de inode van de symlink (die met de naam van een hardlink) en soms effect op de hardlink waarnaar verwezen wordt.

Er zijn een aantal belangrijke verschillen tussen symlinks en hardlinks:

Probeer:

cd; ln -s /tmp/me MyTmp

cd naar je home-directory. ln met de -s optie maakt een symbolische link; in dit geval één genaamd MyTmp welke naar de bestandsnaam /tmp/me verwijst.

ls -l MyTmp

De uitvoer zou er ongeveer zo uit moeten zien:
lrwxrwxrwx   1 havoc    havoc           7 Dec  6 12:50 MyTmp -> /tmp/me
De datum en gebruiker/groepsnamen zullen voor jou natuurlijk anders zijn. Merk op dat het type bestand een l is, waarmee wordt aangegeven dat dit een symbolische link is. Let ook op de permissies - symbolische links hebben altijd deze permissies. Als je de opdracht chmod op een symlink probeert toe te passen, zal het in werkelijkheid de permissies van het bestand waarnaar het verwijst wijzigen.

chmod 700 MyTmp

Je zal de foutmelding "No such file or directory" krijgen, omdat het bestand /tmp/me niet bestaat. Merk op dat je er toch een symlink naar aan zou kunnen maken.

mkdir /tmp/me

Maak de directory /tmp/me aan.

chmod 700 MyTmp

Zou nu moeten werken.

touch MyTmp/mijn-bestand

Maak een bestand aan in MyTmp.

ls /tmp/me

Het bestand werd eigenlijk aangemaakt in /tmp/me.

rm MyTmp

Verwijder de symbolische link. Merk op dat hiermee de link wordt verwijderd, niet datgene waarnaar het verwijst. Dus je gebruikt rm niet rmdir.

rm /tmp/me/mijn-bestand; rmdir /tmp/me

Ruim achter je op.