Ako zistit ci dany subor je link?

Dan Lukes dan at obluda.cz
Sun Apr 10 02:38:46 CEST 2016


On 10.4.2016 1:54, Jozef Drahovsky wrote:

Dneska to bude predevsimo nazvoslovi ;-)

Vsechno na co se ptas totiz souvisi s tim, ze nektere pojmy jsou ve 
skutecnosti technickymi terminy, jejichz skutecny vyznam nelze odvodit 
semanticky ze slova, ktere se pri jejich popisu pouziva.

> podla coho rozoznam, ktory subor je a nie je link a kam (teda okrem  symbolickeho)?

Program, kterym souboru pridavas dalsi jmeno se jmenuje 'ln', ale to co 
pomoci nej vytvaris je proste dalsi jmeno tehoz souboru. Zcela 
rovnocenne vsem jmenum, ktere soubor uz ma.

Termin "delat link" sice vypada, jako bys delal neco jineho, ale neni to 
tak - vytvaris jmeno souboru.

Soubor muze mit efektivne nekonecny pocet jmen (ve skutecnosti neni 
nekonecny, ale hodne vysoky).

Omezeni:

1. To neplati pro adresare - adresar musi mit prave jedno jmeno.
2. Vsechna jmena souboru MUSI byt na tomtez disku

> lrwxr-xr-x   1 root  wheel    13 Apr 10 01:30 subor1.txt -> /a/subor1.txt
> -rw-r--r--   1 root  wheel    11 Apr 10 01:31 subor2.txt
> -rw-r--r--   1 root  wheel     5 Apr 10 01:30 subor3.txt
>
> # cat /b/subor1.txt
> cat: /b/subor1.txt: No such file or directory
> # cat /b/subor2.txt
> prvy
> druhy
> # cat /b/subor3.txt
> prvy
> #

> ale odklial sa zobralo telo subor2.txt ? Cize pokial je subor niekde systemovo zalinkovany tak sa fyzicky nevymaze.

Presne. To je totiz dalsi takovy nazvoslovny orisek. Sice se zcela bezne 
rika "smazat soubor", ale ve skutecnosti takovou funkci UNIX proste 
nema. To jedine co muzes (a to i jako superuzivatel) je smazat JMENO 
souboru.

Soubor samotny smaze sam system - a to presne v okamziku, kdy zanikne 
posledni reference na nej.

Referenci je kazde jmeno (a ty jsi smazal jen jedno ze dvou), reference 
ale vznika i tim, ze nejaky proces ma soubor otevreny.

To vysvetluje, proc se ti neuvolni misto na preplnenem disku, kdyz 
smazes petigigovy log Apache. Nesmazal jsi ten sooubor, jen jeho jmeno. 
Apache ma ten soubor ale stale otevreny, tedy na nej existuje reference. 
I kdyz soubor uz aktualne nema zadne jmeno. Takze misto na disku se 
neuvolni.

> Zaverecna a hlavna otazka ako rozoznat kedy subory /a/subor2.txt /b/subor2.txt su ten isty a kedy ine?

Unikatni identifikaci souboru neni jeho jmeno, ale dvojice [ device, 
inode ]. Pokud maji dve jmena tuto dvojici stejnou, jde o jmena tehoz 
souboru. Pokud ruznou, jde o ruzne soubory.

Onu dvojici ti prozradi prikaz 'stat' - a jsou to ty dve prvni cisla, z 
tech co vypise ...

Pokud by ti stacilo znat inode pak 'ls -i'. Znat pouze inode staci pokud 
vis, ze vsechna zkoumana jmena lezi na jednom disku (vzponem, ze soubor 
nemuze mit jmena na ruznych svazcich)

Dan




More information about the Users-l mailing list