Linkovi
Cilj lekcije: Razumeti šta su hard linkovi i simbolički linkovi, naučiti kako se kreiraju i znati kada koristiti koji tip linka.
Šta je link?
Link je ime koje pokazuje na fajl ili direktorijum. Zamisli ga kao prečicu — isti sadržaj dostupan na više mesta istovremeno, bez duplikovanja podataka.
Linux poznaje dve vrste linkova:
- Hard link — direktna veza na iste podatke na disku (isti inode)
- Simbolički link (symlink, soft link) — prečica koja pokazuje na putanju drugog fajla
Inode — osnova za razumevanje linkova
Pre nego što razumemo razliku, treba da znamo šta je inode. Ne brini — koncept je jednostavan, samo malo apstraktan.
Kratko: hard link je samo drugi naziv za isti fajl. Symlink je drugi fajl koji sadrzi putanju do prvog. Sledi detaljnije, ali ovaj sazetak je sasvim dovoljan u 90% slucajeva.
Ako ti se ovo cini apstraktno, samo zapamti uvodni sazetak iznad — to je dovoljno.
U Linux fajl sistemu, svaki fajl ima dva dela:
- Inode — blok na disku koji čuva metapodatke (veličina, permisije, vlasnik, pokazivač na stvarne podatke)
- Ime fajla — unos u direktorijumu koji pokazuje na inode broj
Direktorijum unos Inode Stvarni podaci
"dokument.txt" -----> [inode 1234] --> [ podatak podatak podatak... ]
Ime fajla je zapravo samo jedna od referenci na inode. Hard link je samo još jedna referenca na isti inode.
Hard link — ln
Kreiranje hard linka
ln original.txt hard_link.txt
Sada oba imena (original.txt i hard_link.txt) pokazuju na isti inode — iste podatke na disku.
ls -li original.txt hard_link.txt
1234567 -rw-r--r-- 2 student student 42 Apr 13 15:00 hard_link.txt
1234567 -rw-r--r-- 2 student student 42 Apr 13 15:00 original.txt
Primetno je:
- Isti inode broj (1234567) — iste su to fizički iste podatke
- Broj
2u trećoj koloni — postoje 2 reference na ovaj inode
Šta se dešava pri brisanju?
rm original.txt
cat hard_link.txt # Podaci su i dalje dostupni!
Podaci ostaju sve dok postoji barem jedna referenca (hard link). Tek kada se obriše poslednja referenca, sistem oslobađa prostor na disku.
Ograničenja hard linkova
- Ne mogu pokazivati na direktorijume — to je dizajnerska odluka u Linuxu (sprečava ciklične strukture). Za direktorijume gotovo uvek koristiš symlink.
- Ne mogu prelaziti granice fajl sistema — ne možeš hard linkovati fajl sa drugog diska ili particije, jer inode-ovi važe samo unutar jednog fajl sistema.
Simbolički link (symlink) — ln -s
Simbolički link je poseban fajl koji sadrži putanju do drugog fajla ili direktorijuma. Funkcioniše kao prečica u Windows-u ili alias u macOS-u.
Kreiranje simboličkog linka
ln -s /putanja/do/originala ime_linka
Primer
ln -s ~/projekti/web-app/config.yaml config.yaml
ls -la config.yaml
lrwxrwxrwx 1 student student 35 Apr 13 15:00 config.yaml -> /home/student/projekti/web-app/config.yaml
Slovo l na početku i strelica -> označavaju da je u pitanju simbolički link.
Symlink na direktorijum
ln -s ~/projekti/trenutni-projekat aktualni
ls aktualni/ # Prikazuje sadržaj ciljnog direktorijuma
Ključne razlike: Hard link vs Symlink
| Hard link | Simbolički link | |
|---|---|---|
| Šta čuva? | Referencu na inode | Putanju do fajla |
| Radi sa direktorijumima? | Ne | Da |
| Radi između fajl sistema? | Ne | Da |
| Šta se dešava pri brisanju originala? | Link i dalje radi | Link postaje neispravan (broken) |
Prepoznatljiv u ls? |
Ne (izgleda kao normalan fajl) | Da (slovo l, strelica ->) |
| Može pokazivati na nepostojeći fajl? | Ne | Da (broken symlink) |
Broken symlink
Ako obrišeš originalni fajl na koji pokazuje symlink, link postaje "broken" (neispravan):
ln -s original.txt link.txt
rm original.txt
ls -la link.txt # Link i dalje postoji
cat link.txt # Greška: No such file or directory
Praktični primeri korišćenja symlinkova
Sledeci primeri pokazuju realne use-case-ove — ne moras sad da razumes svaki, samo da vidis cemu linkovi sluze.
1. Upravljanje verzijama softvera
# Instaliran Python 3.12 u /usr/local/python3.12/
ln -s /usr/local/python3.12/bin/python3 /usr/local/bin/python3
# Komanda "python3" sada pokazuje na Python 3.12
2. Prečica do duboko ugnježdenog direktorijuma
ln -s ~/projekti/klijenti/firma-abc/2024/dokumentacija/ docs-abc
cd docs-abc # Brz pristup bez dugačke putanje
3. Deljenje konfiguracionih fajlova
# Isti .bashrc na više mesta
ln -s ~/.bashrc ~/dotfiles/bashrc
4. Lakše upravljanje aktivnom verzijom projekta
mkdir projekat-v1
mkdir projekat-v2
ln -s projekat-v2 aktivan-projekat
# Kada izađe v3:
rm aktivan-projekat
ln -s projekat-v3 aktivan-projekat
Provera linkova
Najlaksi nacin da vidis linkove je ls -la — linkovi pocinju slovom l u prvoj koloni i imaju strelicu -> koja pokazuje na cilj:
ls -la
lrwxrwxrwx 1 student student 12 Apr 13 15:00 config.yaml -> /etc/app/config.yaml
-rw-r--r-- 1 student student 42 Apr 13 15:00 dokument.txt
Primetno je da linija koja pocinje sa l je symlink.
# Gde pokazuje symlink
readlink ime_linka
# Apsolutna putanja cilja
readlink -f ime_linka
Rezime
| Komanda | Šta radi |
|---|---|
ln original.txt hard_link.txt |
Kreira hard link |
ln -s /putanja/do/fajla link |
Kreira simbolički link |
ls -la |
Prikazuje linkove sa l i -> |
readlink link |
Prikazuje putanju na koju link pokazuje |
readlink -f link |
Prikazuje apsolutnu putanju cilja |
Kratki vodic: Koristi hard linkove za vazne fajlove koje ne smes slucajno izgubiti. Koristi simbolicke linkove za precice, upravljanje verzijama i deljenje resursa izmedju direktorijuma.
Pazi: Ne pravi link koji pokazuje na sebe ili kruzno (npr.
ln -s . loop) — neke komande mogu da se zaglave u beskonacnoj petlji pri obilasku takve strukture.