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