abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 13:11 | Zajímavý software

    Kevin Bentley zveřejnil na GitHubu zdrojové kódy počítačové hry Descent 3 z roku 1999: "Někdo se nedávno zeptal, zda budou zveřejněny zdrojové kódy Descent 3. Oslovil jsem svého bývalého šéfa (Matt Toschlog) z Outrage Entertainment a ten mi to povolil. Budu pracovat na tom, aby se to znovu rozběhlo a hledám spolusprávce." [Hacker News]

    Ladislav Hagara | Komentářů: 0
    dnes 04:33 | Bezpečnostní upozornění

    Byla vydána verze 0.81 telnet a ssh klienta PuTTY. Opravena je kritická bezpečnostní chyba CVE-2024-31497 obsažena ve verzích 0.68 až 0.80. Používáte-li klíč ECDSA NIST P521 a použili jste jej v PuTTY nebo Pageantu, považujte jej za kompromitovaný.

    Ladislav Hagara | Komentářů: 0
    včera 21:44 | Komunita

    Hra MineClone2 postavena nad voxelovým herním enginem Minetest byla přejmenována na VoxeLibre.

    Ladislav Hagara | Komentářů: 0
    včera 19:11 | IT novinky

    Společnosti Avast Software s.r.o. byla pravomocně uložena pokuta ve výši 351 milionů Kč. Tu uložil Úřad pro ochranu osobních údajů za neoprávněné zpracování osobních údajů uživatelů jejího antivirového programu Avast a jeho rozšíření internetových prohlížečů (Browser Extensions), k čemuž docházelo prokazatelně po část roku 2019.

    … více »
    Ladislav Hagara | Komentářů: 4
    včera 15:55 | Zajímavý článek

    Bylo vydáno do češtiny přeložené číslo 714 týdeníku WeeklyOSM přinášející zprávy ze světa OpenStreetMap.

    Ladislav Hagara | Komentářů: 0
    včera 15:44 | Pozvánky

    V sobotu 20. dubna lze navštívit Maker Faire Jihlava, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    včera 14:44 | Zajímavý software

    Knihovna pro potlačení šumu RNNoise byla vydána ve verzi 0.2. Kvalitu potlačení lze vyzkoušet na webovém demu.

    Ladislav Hagara | Komentářů: 0
    včera 04:33 | Nová verze

    FRRouting (FRR) (Wikipedie), tj. softwarová sada pro směrování síťové komunikace, fork Quagga, byl vydán ve verzi 10.0.

    Ladislav Hagara | Komentářů: 0
    včera 03:22 | Nová verze

    Julian Andres Klode vydal APT (Advanced Packaging Tool) ve verzích 2.9.0 a 2.9.1. Jedná se o vývojové verze nové větve APT 3.0. Vylepšuje se uživatelské rozhraní. Přidány byly barvičky. Aktuální náhledy a vývoj lze sledovat na Mastodonu.

    Ladislav Hagara | Komentářů: 3
    14.4. 17:00 | Komunita

    Miguel de Icaza se na svém blogu rozepsal o vložitelných herních enginech. Kdysi slibné projekty UrhoSharp a Urho3D jsou již mrtvé. Zůstává Godot. Aktuálně vývojáři řeší Pull request #90510 s návrhem knihovny LibGodot.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (60%)
     (13%)
     (2%)
     (24%)
    Celkem 412 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Hardlink na adresáře

    26.11.2011 18:39 | Přečteno: 3244× | Linux | Výběrový blog | poslední úprava: 26.11.2011 21:10

    Ve chvíli, kdy jsem viděl (teď už) předposlední xkcd mi bylo jasné, že tohle prostě musím mít! Ale jak na to? Program ln má sice parametr -d, ale i pod rootem vrací EPERM. Takže přece jen ty zdrojáky zas budu muset otevřít.

    Takže, co budeme potřebovat? Zdrojáky jádra, včetně funkčního configu, nástroje pro překlad - gcc, binutils, make, virtuální stroj nebo dobré zálohy a odvážného ducha.

    A jak na to? Nejdřív by to chtělo zjistit na čem to vlastně chcípá. OK, já vím, že ln volá syscall link ale budeme předstírat, že to nevím. krok 1: strace ln -d /existujici/adresar /novy/hardlink. A po chvilce hledání ve výpisu snad najdete tohle:

    linkat(AT_FDCWD, "1", AT_FDCWD, "2", 0) = -1 EPERM (Operation not permitted)

    Takže na řadu přichází krok 2: ve zdrojáku najít odpovídající syscall. Hledáme SYSCALL_DEFINE5(linkat (5 protože linkat má 5 parametrů). Najdeme ho ve fs/namei.c:2939 (kernel 3.1.2). Jenže, v té funkci (mimochodem, vědeli jste, že se goto stále používá? :))) ) nic EPERM nevrací. Nabízí se několik možností - vzít debugger, ohackovat to přes printk("prvni test prosel"); nebo si prostě tipnout. No, a zjistíme, že je to ve funkci vfs_link, která je definovaná jen o pár řádků výš :), Konkrétně to jsou řádky 2911 a 2912, s kódem:

    if (S_ISDIR(inode->i_mode))
     return -EPERM;

    No, a máme jasno, stačí zakomentovat/smazat, překompilovat jádro, rebootovat a jedééém!

    root@debian:/mnt# ls -a
    .  ..  lost+found
    root@debian:/mnt# mkdir prvni
    root@debian:/mnt# mkdir druhy
    root@debian:/mnt# mkdir prvni/1
    root@debian:/mnt# mkdir prvni/2
    root@debian:/mnt# ln -d prvni/1 druhy/jednicka
    root@debian:/mnt# echo "foo" > prvni/1/testfile
    root@debian:/mnt# cat druhy/jednicka/testfile 
    foo
    root@debian:/mnt# ln -d druhy/ prvni/1/dvojka 
    root@debian:/mnt# cd prvni/1     
    root@debian:/mnt/prvni/1# ls
    dvojka	testfile
    root@debian:/mnt/prvni/1# cd dvojka
    root@debian:/mnt/prvni/1/dvojka# ls
    jednicka
    root@debian:/mnt/prvni/1/dvojka# cd jednicka/
    root@debian:/mnt/prvni/1/dvojka/jednicka# ls
    dvojka	testfile
    root@debian:/mnt/prvni/1/dvojka/jednicka# cd /mnt
    root@debian:/mnt# # co takhle zkusit treba find?
    root@debian:/mnt# find . 
    .
    ./prvni
    ./prvni/1
    ./prvni/1/testfile
    ./prvni/1/dvojka
    find: File system loop detected; `./prvni/1/dvojka/jednicka' is part of the same file system loop as `./prvni/1'.
    ./prvni/2
    ./lost+found
    ./druhy
    ./druhy/jednicka
    ./druhy/jednicka/testfile
    find: File system loop detected; `./druhy/jednicka/dvojka' is part of the same file system loop as `./druhy'.
    root@debian:/mnt# # ta mrcha se nezacykli, no co, treba budu mit s e2fsck vetsi stesti
    root@debian:/mnt# cd ..
    root@debian:/# umount mnt
    root@debian:/# e2fsck -f /zerofile 
    e2fsck 1.41.12 (17-May-2010)
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Entry 'jednicka' in /druhy (1833) is a link to directory /prvni/1 (13).
    Clear<y>? no
    
    Entry 'dvojka' in /prvni/1 (13) is a link to directory /druhy (1833).
    Clear<y>? no
    
    Pass 3: Checking directory connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    
    /zerofile: ********** WARNING: Filesystem still has errors **********
    

    Mno, takže minimálně pod ext4 to i funguje. Nevím, jak se na to bude tvářit reiserfs, btrfs, xfs nebo jfs, ale snad by s tím nemusel být problém, až bude čas vyzkouším. A mezitím budu přemýšlet, k čemu je to vlastně dobré... :)

    Update

    Koukám, že je trochu problém s rm:

    root@debian:/mnt# rm -rf prvni/
    rm: WARNING: Circular directory structure.
    This almost certainly means that you have a corrupted file system.
    NOTIFY YOUR SYSTEM MANAGER.
    The following directory is part of the cycle:
      `prvni/1/dvojka/jednicka'
    
    rm: cannot remove `prvni/1': Directory not empty
    

    Update 2

    Hardlink mířící na / skutečně není dobrý nápad. Nejde to unlinknout :)        

    Hodnocení: 100 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    26.11.2011 18:59 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    A použiješ je i na stejný účel jako v xkcd? :-D

    BTW hardlinkovat adresáře šlo krásně ve FAT. Tam se to někdy i povedlo nechtěně :-D.

    Goto v jádře je celkem normálka, v každým modulu jich je několik. Ono když se v sekvenci kontroluje třeba 10 věcí (neNULLový ukazatel na strukturu, návratová hodnota několika registračních funkcí...), tak v případě něčeho jako if, by odsazení v místě po všech kontrolách bylo extrémně vpravo :-D. Nebo by se musely použít funkce, co by to obalily a to by tam bylo zase 10 zbytečných funkcí.

    P.S. Grep v MC na .[cSh] a "goto" mě našel zatím 80000 hitů a stále roste :-D.
    26.11.2011 19:18 Mrkva | skóre: 22 | blog: urandom
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Tak jasně, já to goto chápu :)
    Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
    26.11.2011 19:29 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Njn to jsem celý já, vidím požadavek na informaci a hnedka vyhodím data :-D.
    26.11.2011 19:35 Mrkva | skóre: 22 | blog: urandom
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Mimochodem, ke goto je tu tak jeden hezký strip.
    Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
    David Watzke avatar 26.11.2011 20:15 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    True story. Od tý doby koktám :-D
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    Bluebear avatar 26.11.2011 20:43 Bluebear | skóre: 30 | blog: Bluebearův samožerblog | Praha
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Ale vývojáři kernelu mají od svatého Tuxe zvláštní povolení :-)

    V kernelu se goto používá jako escape continuation, v podstatě ekvivalent vyhození výjimky. To je ve skutečnosti (IMO) nejlepší způsob, jak výjimečné situace řešit; při množství věcí, které se mohou zku*vit, by skutečně muselo být skoro každé volání funkce obklopené několika úrovněmi if-ů a nevyznalo by se v tom ani to prase.
    To mi připomíná, jak jsem si pořídil květináč, že v něm budu mít květinu. Opravdu tam byla, ale potom být přestala...
    26.11.2011 21:18 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Od toho je ale přece v C longjmp. Nebo snad v klibc longjmp nemají?
    Bluebear avatar 26.11.2011 21:56 Bluebear | skóre: 30 | blog: Bluebearův samožerblog | Praha
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    IMO v rámci jedné funkce je rozumnější použít goto než longjmp; u goto je na první pohled vidět, kam směřuje, je jednodušší udělat uvolnění naalokovaných prostředků, a stack je skoro vždy ve stejném stavu jako předtím, tudíž longjmp je overkill.
    To mi připomíná, jak jsem si pořídil květináč, že v něm budu mít květinu. Opravdu tam byla, ale potom být přestala...
    26.11.2011 23:32 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Jo tak v rámci jedné fce samozřejmě goto, to jo...
    27.11.2011 11:20 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    V C lze goto použít pouze v rámci funkce.
    26.11.2011 23:24 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    při množství věcí, které se mohou zku*vit, by skutečně muselo být skoro každé volání funkce obklopené několika úrovněmi if-ů a nevyznalo by se v tom ani to prase.

    Zvlášť při dodržení coding style, který předepisuje odsazování osmiznakovým tabulátorem a limit 80 znaků na řádek. Skalním odpůrcům goto doporučuji si nějakou funkci cvičně zkusit přepsat. Pokud by ani to nepomohlo, tak počkat půl roku a zkusit se v ní zorientovat.

    David Watzke avatar 27.11.2011 18:16 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Hehe. Na druhou stranu orientovat se v tuně goto taky není úplně jednoduchý.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    27.11.2011 18:38 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Záleží na způsobu použití. Pokud se používají jen k tomu, k čemu je v jádře obvyklé, tak si myslím, že kód zpřehledňují.
    26.11.2011 20:20 Kvakor
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Paamtuju, jak jsem přepsáním počátečního cluseru v adrsdářové struktuře FAT udělal disketu, na které bylo podle souborového manageru několik desitek megabytů (limit byl danný maximální délkou cesty v OS). Spolužákovy se to dokonce jednou povedlo udělat nějak omylem a když se to pokusil opravit Scandiskem, o všechna data v postiženém adresáři přišel.

    Jinjak ty goto v jádře typicky vypadají takto:
    pokus o alokaci prostředku 1;
    pokud selže goto 1;
    
    pokus o alokaci prostředku 2;
    pokud selže goto 2;
    
    pokus o alokaci prostředku 3;
    pokud selže goto 3;
    
    samotná akce;
    
    návěstí 3:
    uvolnění prostředku 3;
    
    návěstí 2:
    uvolnění prostředku 2;
    
    návěstí 1:
    uvolnění prostředku 1;
    
    Luk avatar 26.11.2011 21:49 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Jinjak ty goto v jádře typicky vypadají takto
    Přesněji takto:
    pokus o alokaci prostředku 1;
    pokud selže goto konec;
    
    pokus o alokaci prostředku 2;
    pokud selže goto uvolni1;
    
    pokus o alokaci prostředku 3;
    pokud selže goto uvolni2;
    
    ...
    
    
    uvolni2:
    uvolnění prostředku 2;
    
    uvolni1:
    uvolnění prostředku 1;
    
    konec:
    return;
    
    Je to mnohem čistší a hlavně přehlednější řešení, než kdyby se to dělalo bez goto pomocí vnořených ifů nebo pomocí opakování téhož kódu u každého selhání.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    26.11.2011 21:54 Sten
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Zlatý jakýkoliv jazyk, který umí výjimky :-D
    Bluebear avatar 26.11.2011 22:01 Bluebear | skóre: 30 | blog: Bluebearův samožerblog | Praha
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    V zásadě bych i souhlasil, jenže kernel je dost specifická oblast.

    Výjimky zjednodušují kód jen v případě, že je k dispozici automatické uvolňování prostředků (což si v kernelu neumím moc představit); v opačném případě to stejně musíš někde vyřešit ručně. Přitom je to právě to uvolňování prostředků, co ten kód komplikuje. Kdyby nebylo potřeba nic extra uvolňovat, výjimečné případy by se vyřešily jedním returnem a po ftákách.

    Navíc výjimky komplikují práci se stackem, resp. více věcí se děje na stacku mimo dohled programátora, což v kernelu asi taky není to nejlepší.
    To mi připomíná, jak jsem si pořídil květináč, že v něm budu mít květinu. Opravdu tam byla, ale potom být přestala...
    27.11.2011 14:17 Sten
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Operačních systémů napsaných v C++ znám docela dost a výjimky podporují, protože automatické uvolňování prostředků při RAII je velmi jednoduché, při té nejprimitivnější implementaci stačí na stack přidat ukazatele na destruktory, lepší implementace mívají stacky dva. Dokonce to ani nepotřebuje plné RTTI, stačí upcast pro třídy výjimek (a v jádře by asi nebylo potřeba ani to, když stačí errno). V podstatě kompilátor jenom vytvoří něco podobného těm goto automaticky, díky čemuž není problém ani s orientací na stacku. Výjimky dokonce nejsou ani pomalejší, díky tomu, že víc věcí dělá kompilátor, tím lépe to zvládne optimalizovat. Když se podívám na implementaci výjimek v LLVM libstdc++ nebo GNU libstdc++, tak jediné, co je skutečně potřeba, je jazyk, který výjimky podporuje. Na druhou stranu chápu, proč v roce 1991 zvolil Linus C, tehdejší implementace výjimek byly strašné.
    Grunt avatar 27.11.2011 10:49 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Abych pravdu řekl, já
    if (find ("goto", kod))
      body -= 2;
    nikdy nepochopil a vždy jsem to bojkotoval. Já bohužel pamatuju ještě doby BASICu a pamatuju, že ani s GOTO a GOSUB to nebylo tak strašné když to nepsalo prase, které se v tom samo nezamotalo. Tendenci vnucovat programátorovi jak má psát a snažit se ho vyučovat jsem též nikdy nepochopil. Aneb nač dělat věci jednoduše, když si to můžeme zasvinit konstruktorama, destrukotama, excepšnama a bůh ví čím ještě. Vždyť GOTO se velice snadno dá přeložit na jmp instrukci, jednu z nejpřirozenějších instrukcí procesoru.
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
    27.11.2011 12:13 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře

    No, ono když vidíte v kódu něco na způsob

      if (problém)
        goto label2;
    
      ...
    
    label1:
      úklid
      return 0;
    
    label2:
      něco
      goto label1;
    }
    

    tak na vás přímo dýchne tak doba BASICu na osmibitech…

    27.11.2011 14:09 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    To jako, že je v jádře goto label1 navíc (kdyby byl label2 před label1, tak se plynule přejde)? Možná to je kvůli ladění.
    27.11.2011 16:13 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře

    Tohle není kód vanilla jádra, tenhle obrat jsem viděl v jednom modulu, který ve vanilla jádře není. Prohodit pořadí nejde, protože to, co je za label2, se nemá vykonat, pokud k němu dojdete přirozenou cestou nebo na něj skočíte odjinud. Správně by to mohlo být třeba takto:

      if (problém) {
        něco
        goto label1;
      }
    
      ...
    
    label1:
      úklid
      return 0;
    }
    

    Ale i v upstreamových projektech se občas najdou strašidelné věci. Máte-li dobrý žaludek, můžete zkusit prozkoumat třeba funkci send_dg() v implementaci resolveru v glibc.

    26.11.2011 20:00 Tomáš
    Rozbalit Rozbalit vše Mac to myslím používá
    Myslím, že Mac to používá kvůli zálohování pomocí Time Machine. Je s tím spousta omezení a normálnímu smrtelníkovi ta funkce není přístupná. Přeci jenom není lepší věc, než zacyklení mezi adresáři.
    26.11.2011 23:31 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    IMHO existuje spousta jednodušších způsobů, jak si rozbít filesystém…
    27.11.2011 01:53 Mrkva | skóre: 22 | blog: urandom
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Ale on se nerozbil!
    Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
    27.11.2011 03:01 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Ano, nerozbil se, rozbil jste si ho vědomě sám. :-) (Pokud to snad nebylo jasné z minulého příspěvku, tak zacyklené adresáře považuji za rozbitý filesystém.)
    27.11.2011 13:03 Mrkva | skóre: 22 | blog: urandom
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Tak nikdo vás nenutí tam ty cykly vytvářet :)
    Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
    27.11.2011 12:04 marbu | skóre: 31 | blog: hromada | Brno
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    A mezitím budu přemýšlet, k čemu je to vlastně dobré... :)
    Jako hracka vazne dobre :) Ale realne pokud potrebujes hardlink na adresar, resilo by se to pomoci bind mount:
    mount --bind /kdesi/cosi /nekde/jinde/cosi
    .
    There is no point in being so cool in a cold world.
    pavlix avatar 27.11.2011 15:15 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    A to právě nemá s hardlinkem nic moc společného (přesněji řečeno asi tolik co se symlinkem). Navíc vzhledem k odkazu na XKCD je celkem jasné, o co tu jde :).

    Mount --bind používejte opatrně, symlinky jsou ve většině případů stejně použitelné a mnohem bezpečnější (rm -rf končí symlinkem).
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    29.11.2011 18:51 Sten
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    mount --bind neprochází přes mountpointy, takže nikdy nemuže vytvořit nekonečnou smyčku.
    pavlix avatar 29.11.2011 20:50 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Zajímavé. Prakticky ověřeno.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    30.11.2011 00:20 Tyf
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Existuje i mount --rbind. Ale zacykleni jsem nezkousel.
    30.11.2011 15:27 Sten
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    rbind to sice nabinduje rekurzivně, ale před tím bindem, takže cyklus to pořád nevytvoří:
    /
      [/bind je prázdné]
      /home
      /var
    
    rbind / do /bind:
    /
      /bind
        [/bind/bind je prázdné]
        /bind/home
        /bind/var
      /home
      /var
    
    27.11.2011 22:39 nyan
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Ja nikdy nepochopil *proc* nejde udelat hardlink adresaru. Vsude rikaji ze nejde... a nikde sem nevidel opravdove vysvetleni.
    27.11.2011 22:53 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Např. by pak byl problém s položkou "..", která má odkazovat na rodiče. Jenže tady by těch rodičů bylo víc, takže byste si musel některého vybrat, což zase bude dělat problémy, když zrovna tu adresářovou položku, jejíž to byl rodič, smažete.
    28.11.2011 00:11 Mrkva | skóre: 22 | blog: urandom
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Např. by pak byl problém s položkou "..", která má odkazovat na rodiče. Jenže tady by těch rodičů bylo víc, takže byste si musel některého vybrat
    IMHO, vzhledem k tomu, že nic jako ".." ve FS ani není je to irelevantní - systém to vygeneruje na základě cesty, takže tenhle problém odpadá.
    což zase bude dělat problémy, když zrovna tu adresářovou položku, jejíž to byl rodič, smažete.
    No, zatím jsem nepřišel na to, jak odstranit hardlink na adresář bez smazání obsahu :)
    Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
    28.11.2011 06:06 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    IMHO, vzhledem k tomu, že nic jako ".." ve FS ani není je to irelevantní - systém to vygeneruje na základě cesty, takže tenhle problém odpadá.

    Co prosím? Neusuzujte, prosím, jen na základě toho, jak se (defaultně) chová příkaz cd v bashi.

    zatím jsem nepřišel na to, jak odstranit hardlink na adresář bez smazání obsahu

    To není až tak překvapivé, vzhledem k tomu, že se s jejich existencí nepočítá. Musel byste si opatchovat syscall rmdir() nebo unlinkat() a když se zamyslíte jak, zjistíte, že není úplně triviální udělat to tak, aby to fungovalo.

    30.11.2011 10:38 Ondrej 'SanTiago' Zajicek
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Ono to nejde asi hlavne proto, aby se zachovaly dobre strukturalni vlastnosti filesystemu. Proste je mnohem vyhodnejsi predpokladat, ze adresare tvori strom a diky tomu zjednodusit spoustu algoritmu, nez povolit hardlink adresaru a vsechno implementovat s predpokladem, ze adresare tvori obecny graf.
    30.11.2011 16:53 perdy | skóre: 5 | blog: stdout
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Kaslat na GOTO, skutocny muz pouzije COMEFROM.Samozrejme spolu s dalsimi ficurami INTERCALu, coz je skvela parodia na programovaci jazyk.
    ln -s vim emacs
    4.2.2012 01:42 linux_enthusiast
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Hmmmm, pekná debata sa tu okolo toho rozbehla. :-) Nieže by sa mi nechcelo hrať sa s jadrom, ale nechcem riskovať pád systému. Som rád, že mám Linux stabilný (veď za to ho už 3 roky používam) a nechcem riskovať nejakým blbým preklepom jeho pád.
    4.2.2012 01:50 linux_enthusiast
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Tak ma teraz napadlo. keď chcem, aby sa mi spustil môj shell script pri otvorení konkrétneho adresára, kde to mám zapísať? :-)

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.