Hvad er soft link og hard link i Linux?

Et symbolsk eller soft link er et faktisk link til den originale fil, mens et hard link er en spejlkopi af den originale fil. Hvis du sletter den originale fil, har det bløde link ingen værdi, fordi det peger på en ikke-eksisterende fil. Men i tilfælde af hard link er det helt modsat. Selv hvis du sletter den originale fil, vil hardlinket stadig have dataene fra den originale fil. Fordi hard link fungerer som en spejlkopi af den originale fil.

I en nøddeskal, et soft link

  • kan krydse filsystemet,
  • giver dig mulighed for at linke mellem mapper,
  • har et andet inode-nummer og andre filtilladelser end den originale fil,
  • tilladelser vil ikke blive opdateret,
  • har kun stien til den originale fil, ikke indholdet.

Et hårdt link

  • kan ikke krydse filsystemgrænserne (i.dvs. et hardlink kan kun fungere på det samme filsystem),
  • kan ikke linke mapper,
  • har samme inodetal og tilladelser som den oprindelige fil,
  • tilladelser vil blive opdateret, hvis vi ændrer tilladelserne for kildefilen,
  • har det faktiske indhold af den oprindelige fil, så du stadig kan se indholdet, selv hvis den oprindelige fil er flyttet eller fjernet.

Fatter du det stadig ikke? Nå, men lad mig vise dig nogle praktiske eksempler.

Skabelse af soft link eller symbolsk link

Lad os oprette en tom mappe med navnet “test”.

$ mkdir test

Opnå til mappen “test”:

$ cd test

Opret nu en ny fil kaldet source.file med nogle data som vist nedenfor.

$ echo "Welcome to OSTechNix" >source.file

Lad os se dataene i source.file.

$ cat source.fileWelcome to OSTechNix

Nu skal vi se dataene i source.fil er blevet oprettet.

Opret nu et symbolsk eller blødt link til source.file.

Kør:

$ ln -s source.file softlink.file

Lad os sammenligne dataene for både source.file og softlink.file.

$ cat source.file Welcome to OSTechNix
$ cat softlink.file Welcome to OSTechNix

Som du kan se i ovenstående output, viser softlink.file de samme data som source.file.

Lad os kontrollere inodes og tilladelser for softlink.file og source.file.

$ ls -lia

Sample output:

total 1211665675 drwxrwxr-x 2 sk sk 4096 Oct 17 11:39 . 4325378 drwxr-xr-x 37 sk sk 4096 Oct 17 11:39 ..11665731 lrwxrwxrwx 1 sk sk 11 Oct 17 11:39 softlink.file -> source.file11665692 -rw-rw-r-- 1 sk sk 21 Oct 17 11:39 source.file

Som vi ser i ovenstående skærmbillede, er inodetallet (11665731 vs 11665692) og filtilladelserne (lrwxrwxrwxrwx vs -rw-r–r–) forskellige, selv om softlink.filen har samme indhold som source.file, . Det er derfor bevist, at softlink ikke deler samme inode-nummer og tilladelser som den originale fil.

Fjern nu den originale fil (dvs. source.file) og se, hvad der sker.

$ rm source.file

Kontroller indholdet af softlink.file ved hjælp af kommandoen:

$ cat softlink.file

Eksempel på output:

cat: softlink.file: No such file or directory

Som du kan se ovenfor, er der ikke en sådan fil eller mappe kaldet softlink.file, efter at vi har fjernet den originale fil (dvs. source.file). Så nu forstår vi, at softlink blot er et link, der peger på den oprindelige fil. Softlinket er som en genvej til en fil. Hvis du fjerner filen, er genvejen ubrugelig.

Som du allerede ved, vil den originale fil stadig være tilgængelig, hvis du fjerner softlinket.

Læseforslag:

  • Hvordan du opregner symlinks på Linux
  • Hvordan du finder ødelagte symlinks og sletter dem på Linux

Skabelse af hard link

Opret en fil med navnet source.fil med noget indhold som vist nedenfor.

$ echo "Welcome to OSTechNix" >source.file

Lad os verificere indholdet af filen.

$ cat source.fileWelcome to OSTechNix

Source.file er nu blevet oprettet.

Lad os nu oprette hardlinket til source.file som vist nedenfor.

$ ln source.file hardlink.file

Kontroller indholdet af hardlink.file.

$ cat hardlink.fileWelcome to OSTechNix

Du kan se, at hardlink.file viser de samme data som source.file.

Lad os kontrollere inode og tilladelser for hardlink.file og source.file.

$ ls -lia

Sample output:

total 1611665675 drwxrwxr-x 2 sk sk 4096 Oct 17 11:58 .4325378 drwxr-xr-x 37 sk sk 4096 Oct 17 11:39 ..11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 hardlink.file11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 source.file

Nu kan vi se, at både hardlink.file og source.file har det samme inodes-nummer (11665692) og filtilladelser (-rw-r–r–). Det er således bevist, at hardlink-filen har samme inodes-nummer og tilladelser som den oprindelige fil.

OBS: Hvis vi ændrer tilladelserne på source.file, vil den samme tilladelse også gælde for hardlink.file.

Nu skal du fjerne den oprindelige fil (i.e source.file) og se, hvad der sker.

$ rm source.file

Kontroller indholdet af hardlink.file ved hjælp af kommandoen:

$ cat hardlink.file

Stikprøveoutput:

Som du kan se ovenfor, kan jeg se indholdet af hardlink.file, selvom jeg har slettet kildefilen, selv om jeg kan se indholdet af hardlink.file. Derfor er det bevist, at Hardlink deler samme inode-nummer, tilladelser og data som den oprindelige fil.

Så, hvad er forskellen mellem Hardlink og den normale kopierede fil?

Du undrer dig måske over, hvorfor vi skulle oprette et hardlink, mens vi nemt kan kopiere/indsætte den oprindelige fil? At oprette et hard link til en fil er noget andet end at kopiere den.

Hvis du kopierer en fil, kopieres indholdet blot. Så hvis du ændrer indholdet af en fil (enten original eller hard link), har det ingen effekt på den anden fil. Men hvis du opretter et hard link til en fil og ændrer indholdet af en af filerne, vil ændringen kunne ses på begge.

Lad os se på source.filen.

$ cat source.file Welcome to OSTechNix

Kildefilen har en enkelt linje, hvor der står – Velkommen til OSTechNix.

Føj en ny linje til, f.eks. “Velkommen til Linux” i source.file eller hardlink.file.

$ echo "Welcome to Linux" >>source.file

Kontroller nu indholdet af begge filer.

$ cat hardlink.file Welcome to OSTechNixWelcome to Linux
$ cat source.file Welcome to OSTechNixWelcome to Linux

See? De ændringer, vi lige har foretaget i source.file, er opdateret i begge filer. Betydning – begge filer (kilde og hard link) synkroniseres. Uanset hvilke ændringer du foretager i en af filerne, vil de blive afspejlet i den anden fil. Hvis du normalt kopierer/indsætter filen, vil du ikke se nogen nye ændringer i den anden fil.

For flere detaljer, se man-siderne.

$ man ln

Det er alt for nu. Håber du fik en grundlæggende idé om symbolsk eller blødt link og hårdt link.

Tak for at du kiggede forbi!

Hjælp os med at hjælpe dig:

  • Abonner på vores e-mail-nyhedsbrev : Tilmeld dig nu
  • Støt OSTechNix : Donér via PayPal
  • Download gratis E-bøger og videoer : OSTechNix på TradePub
  • Forbind dig med os: Reddit | Facebook | Twitter | LinkedIn | RSS feeds

Have a Good day!!!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.