Junior
Mis on sümboliline link?
sobes.tech AI
Vastus AI-lt
Symbolic link (symbolic link või symlink) on spetsiaalne failitüüp operatsioonisüsteemis, mis viitab teisele failile või kaustale. See toimib nagu otsetee.
Põhijooned:
- Sisu: Symbolic link sisaldab tekstijada — teed sihtfailile või kaustale. Failile või kaustale juurdepääsul järgib süsteem seda teed.
- Andmed puuduvad: Sildil endal ei ole sihtfaili andmeid. Sildi suurus on tavaliselt väike ja sõltub tee pikkusest.
- Sõltumatus sektsioonist: Sihtfail või kaust võib asuda teisel kettasektsioonil või isegi failisüsteemis, mis erineb ise sildist.
- Rikutud lingid: Kui sihtfail või kaust kustutatakse, muutub symboliline link "rikutuks" (broken) või "ripuks" (dangling), kuid ise link jääb alles.
- Toetus: Seda toetab enamik kaasaegseid operatsioonisüsteeme (Linux, macOS, Windows NTFS-ga).
Võrdlus kõva lingiga (hard link):
| Kriteerium | Symbolic link | Hard link |
|---|---|---|
| Failitüüp | Eraldi failitüüp | Täiendav link inode'i suhtes |
| Tee | Säilitab tee sihtkoha juurde | Ei säilita teed |
| Sektsioon/Fs | Võib viidata teisele sektsioonile/Fs | Peab olema samal sektsioonil/Fs |
| Kustutamine sihtkoha | Link muutub katki | Andmed on saadaval teiste linkide kaudu |
| Kaustadele | Võib viidata kaustadele | Tavaliselt ei saa viidata kaustadele |
Java-s tehakse simboliliste linkidega tööd API java.nio.file kaudu.
// Näide simbolilise lingi loomise kohta
import java.io.IOException;
import java.nio.file.*;
public class SymlinkExample {
public static void main(String[] args) {
Path target = Paths.get("target_file.txt"); // Sihtfail
Path link = Paths.get("mylink_to_target"); // Symboliline link
try {
// Loome sihtfaili (näiteks)
Files.write(target, "Hello, World!".getBytes());
// Loome symbolilise lingi
Files.createSymbolicLink(link, target);
System.out.println("Symboliline link loodud: " + link.toAbsolutePath());
// Kontrollime, kas tee on symboliline link
System.out.println(link.getFileName() + " on symboliline link: " + Files.isSymbolicLink(link));
// Loeme sisu läbi lingi
byte[] content = Files.readAllBytes(link);
System.out.println("Sisu lingi kaudu: " + new String(content));
// Lahendame lingi, et saada tee sihtfailile
Path resolvedTarget = Files.readSymbolicLink(link);
System.out.println("Lingitud sihtkoha tee: " + resolvedTarget);
} catch (IOException e) {
e.printStackTrace();
} finally {
// Kustutame loodud failid puhastamiseks
try {
Files.deleteIfExists(link);
Files.deleteIfExists(target);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}