In linux wordt naar bestanden verwezen door middel van een nummer, de inode. Een bestandsnaam verwijst naar dergelijke inode. Op je schijf kunnen verschillende bestandsnamen verwijzen naar diezelfde inode. Die bestandsnamen zijn eigenlijk de hardlinks.
Als je hier eens doordenkt, dan snap je dat alle hardlinks naar eenzelfde bestand noodzakelijk op dezelfde partitie staan, d.w.z., bestaan binnen één bestandssysteem.
Een hardlink kan je niet onderscheiden van het origineel: elk van de hardlinks is 'evenwaardig'.
Een softlink is een klein bestandje dat een verwijzing bevat naar een bestandsnaam. Softlinks kunnen dus wel verwijzen naar bestanden op andere partities/schijven/aangekoppelde netwerkschijven, ... Softlinks gedragen zich onder linux praktisch hetzelfde als het originele bestand, maar je kan ze 'onderscheiden' van het origineel. Als de naam van het origineel wordt gewijzigt, dan breekt de softlink.
Waarom is de -H optie traag? Omdat het systeem van zodra het een bestand tegenkomt, moet gaan onderzoeken of er nog andere hardlinks naar dat bestand zijn. Dan kan het één kopie maken op de bestemming, en alle andere hardlinks ook op de bestemming aanmaken als hardlinks naar hetzelfde bestand.
Zonder de -H optie wordt het bestand eenvoudig gekopieerd naar de bestemming. De volgende hardlink naar dat zelfde bestand zal op de bestemming een afzonderlijk bestand worden, geen hardlink naar dezelfde data. m.a.w., standaard worden je hardlinks gebroken bij een kopieeroperatie.
In het 'dagelijkse leven' werk je best met softlinks: je behoudt het overzicht beter.