Keresés

Új hozzászólás Aktív témák

  • Jester01

    veterán

    válasz bambano #20828 üzenetére

    Ha egy program a szabványos chdir függvényt hívja, akkor az a fizikai struktúrát használja, mint ahogy egyéb függvények is, különös tekintettel az open-re. Természetesen előre irányban követi a symlinkeket, de visszafelé (a ..) nem. Továbbá a getcwd is fizikai elérési utat ad vissza, akkor is ha symlinken keresztül léptél bele.

    Példa:

    /tmp$ mkdir -p foo/bar
    /tmp$ echo test > baz.txt
    /tmp$ ln -s foo/bar bar
    /tmp$ cd bar
    /tmp/bar$ cat ../baz.txt
    cat: ../baz.txt: No such file or directory
    /tmp/bar$ cat /tmp/baz.txt
    test
    /tmp/bar$ readlink -f ../baz.txt
    /tmp/foo/baz.txt

    A cd hiába használt logikai útvonalat, a cat nem tud róla. Neki a .. az a /tmp/foo-t jelenti, ahol bizony nincs baz.txt.

    Az alternatives teljesen jól működik, mivel ott simán csak előrefelé haladó symlink követés van.

    Bónusz: meglepő módon ez sem működik:

    /tmp$ cat /tmp/bar/../baz.txt
    cat: /tmp/bar/../baz.txt: No such file or directory

    Tehát a .. nem automatikusan üti ki az előtte lévő komponenst (hiszen akkor ez simán /tmp/baz.txt lenne, ami létezik), hanem szépen követi a fizikai struktúrát ami miatt a /tmp/bar ugye /tmp/foo/bar lesz és onnan a .. már /tmp/foo.

    [ Szerkesztve ]

    Jester

Új hozzászólás Aktív témák