Gym
lesson

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:

  1. Hard link — direktna veza na iste podatke na disku (isti inode)
  2. 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 2 u 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.