Hallo daar weer. In deze inleiding tot hard links en symbolische links, zullen we eerst proberen te leren en te definiëren wat elk van beide betekent. Daarna zullen we bespreken wat de verschillen tussen de twee zijn.
Wat is een hard link en wat doet het precies in de shell?
Een hard link is slechts een extra naam voor een bestaand bestand op Linux of andere Unix-achtige besturingssystemen.
Een willekeurig aantal hard links, en dus een willekeurig aantal namen, kan worden aangemaakt voor een bestand. Hard links kunnen ook worden gemaakt naar andere hard links. Ze kunnen echter niet worden gemaakt voor directories, en ze kunnen niet de grenzen van het bestandssysteem overschrijden of over partities gaan.
Misschien wel de meest nuttige toepassing van hard links is om bestanden, programma’s en scripts (korte programma’s) gemakkelijk toegankelijk te maken in een andere directory dan het oorspronkelijke bestand of uitvoerbare bestand (de kant-en-klare versie van een programma). Door de naam van de hard-link in te tikken, wordt het programma of script op dezelfde manier uitgevoerd als met de oorspronkelijke naam. (http://www.linfo.org/hard_link.html)
Wilt u dit verhaal later lezen? Sla het op in Journal.
Wat betekent deze definitie nu eigenlijk? Wel, je kunt een hardlink maken naar een bestaand bestand met het commando ln file_name hardlink. Ik heb hieronder een voorbeeld gegeven van het maken van een hardlink in actie. In onderstaand voorbeeld heb ik een hardlink gemaakt naar het bestand met de naam file1 met de hardlink met de naam hlink1.
Nu laten we ls -i
. Zodat het alle bestanden met inode opsomt.
INODE Definitie: De inode is een datastructuur in een Unix-stijl bestandssysteem die een bestandssysteemobject beschrijft, zoals een bestand of een directory. Elke inode slaat de attributen en de schijfbloklocatie(s) van de gegevens van het object op. De attributen van een bestandssysteemobject kunnen metagegevens bevatten (tijdstip van laatste wijziging, toegang, wijziging), alsmede gegevens over eigenaar en rechten.
Directories zijn lijsten met namen die aan inodes zijn toegekend. Een directory bevat een entry voor zichzelf, zijn ouder, en elk van zijn kinderen. (https://en.wikipedia.org/wiki/Inode)
Als je kijkt naar de file1 en de hlink1 zie je dat de inode aan de linkerkant hetzelfde is. In essentie fungeren hardlinks als een snelkoppeling naar dat bestand dat hardgelinkt is.
Nu verder met “Softlinks”
Softlinks is een speciaal soort bestand dat naar een ander bestand verwijst, net als een snelkoppeling. In tegenstelling tot een hard link, bevat een symbolische link niet de gegevens in het doelbestand. Het wijst eenvoudigweg naar een andere entry ergens in het bestandssysteem. Dit verschil geeft symbolische koppelingen bepaalde kwaliteiten die hard links niet hebben, zoals de mogelijkheid om naar directories te verwijzen, of naar bestanden op computers op afstand die via NFS zijn verbonden. Ook worden symbolische koppelingen naar een doelbestand onbruikbaar als u het verwijdert, terwijl harde koppelingen de inhoud van het bestand behouden. (https://kb.iu.edu/d/abbe)
Nu gaan we een soft link maken om te vergelijken met de hard link die we hierboven hebben gemaakt.
Dus laten we een terminal openen. Ga naar de finder of zoek en voer terminal in. Klik erop en open.
Voor ons voorbeeld maken we eerst een bestand aan. Als we touch example1
typen en op enter drukken. We kunnen een bestand maken. Nu de soft link maken.
Als we in de commandoregel ln -s example1 softlink1
typen, maken we een soft link tussen de bestanden. Zie het voorbeeld hieronder.
Nu als we ls -i
zouden typen zullen we ook opmerken dat alleen het hardlink bestand dezelfde inode heeft als de hardlink terwijl het softlink bestand verschillende inodes heeft.
wat zijn de verschillen tussen hard- en softlinks?
Een softlink bevat niet de gegevens in het doelbestand.
Een soft link verwijst naar een andere vermelding ergens in het bestandssysteem.
Een soft link heeft de mogelijkheid om naar directory’s te linken, of naar bestanden op computers op afstand die via een netwerk met NFS zijn verbonden.
Het verwijderen van een doelbestand voor een symbolische link maakt die link nutteloos.
Een hard link behoudt de inhoud van het bestand.
Een hard link kan niet worden gemaakt voor directories, en ze kunnen niet bestandssysteem grenzen overschrijden of over partities gaan.
In een hardlink kunt u elk van de gemaakte hardlink namen gebruiken om een programma of script uit te voeren op dezelfde manier als de oorspronkelijk gegeven naam.
In essentie:
“Onder het bestandssysteem worden bestanden gerepresenteerd door inodes
Een bestand in het bestandssysteem is in principe een link naar een inode.
Een hardlink creëert dan gewoon een ander bestand met een link naar dezelfde onderliggende inode.Wanneer je een bestand verwijdert, verwijder je één link naar de onderliggende inode. De inode is pas verwijderd (of verwijderbaar/overschrijfbaar) als alle links naar de inode zijn verwijderd.
Een symbolische link is een link naar een andere naam in het bestandssysteem.
Als eenmaal een hard link is gemaakt, is de link naar de inode. Het verwijderen, hernoemen of verplaatsen van het originele bestand heeft geen invloed op de hard link omdat het linkt naar de onderliggende inode. Alle wijzigingen in de gegevens op de inode worden doorgevoerd in alle bestanden die naar die inode verwijzen.
Note: Hard links zijn alleen geldig binnen hetzelfde bestandssysteem. Symbolische koppelingen kunnen bestandssystemen overspannen, omdat ze eenvoudigweg de naam van een ander bestand zijn.”
(http://stackoverflow.com/questions/185899/what-is-the-difference-between-a-symbolic-link-and-a-hard-link)
Overzicht van de Shell en hoe deze een commando uitvoert
- De shell leest zijn invoer uit een bestand, uit een string of uit de terminal van de gebruiker.
- Invoer wordt opgedeeld in woorden en operatoren, waarbij de quoteerregels worden gevolgd. Deze tokens worden gescheiden door metacharacters. Alias expansion wordt uitgevoerd.
- De shell parseert (analyseert en vervangt) de tokens in eenvoudige en samengestelde commando’s.
- De shell voert verschillende shell expansies uit, waarbij de geëxpandeerde tokens worden opgesplitst in lijsten van bestandsnamen en commando’s en argumenten.
- Herleiding wordt uitgevoerd indien nodig, herleiding operatoren en hun operanden worden verwijderd uit de argumenten lijst.
- Commando’s worden uitgevoerd.
- Optioneel wacht de shell tot het commando is voltooid en verzamelt de exit-status.