Jaký režim souboru naznačuje, že soubor je symbolický odkaz (symbolický odkaz)?


Mým případem použití je detekce symbolického odkazu odkazy uvnitř úložiště git (a jeho historie). Měl jsem dojem, že symbolický odkaz je symbolický odkaz kvůli jeho režimu souborů a tento režim souborů je to, co nastavuje nástroj chmod.

Komentáře

Odpověď

Režimy souborů pokrývají dva různé pojmy: typy souborů a oprávnění souborů. Režim souboru je reprezentován hodnotou st_mode ve výsledku stat(2) volání a ls -l představuje je všechny dohromady; další informace najdete v části Principy oprávnění a typů souborů UNIX .

Jakmile je soubor vytvořen, lze jej „nelze změnit. Kromě toho v systémech Linux nemůžete určit oprávnění symbolického odkazu; důležité je pouze oprávnění cíle (a vlastně celý režim, protože to také určuje chování symbolického odkazu). Další informace najdete v části Jak se vztahují oprávnění k souborům se symbolickými odkazy? V systému Mac OS X mohou mít symbolické odkazy svá vlastní oprávnění.

Nakonec git používá zjednodušený model s omezeným počtem rozpoznaných režimů:

  • 040000 adresář
  • 100644 normální soubor
  • 100755 pro spustitelný soubor
  • 120000 pro symbolický odkaz

Tyto hodnoty můžete zobrazit pomocí příkazů, jako je git cat-file -p "master^{tree}"; Podrobnosti najdete v Pro Git .

Odpověď

Jaký režim souboru naznačuje, že soubor je symbolický odkaz (symbolický odkaz)?

POSIX API ke kontrole pokud je soubor symlink, používá makro S_ISLNK.

V glibc je S_ISLNK definován takto:

#define __S_IFMT 0170000 /* These bits determine file type. */ #define __S_IFLNK 0120000 /* Symbolic link. */ #define __S_ISTYPE(mode, mask) (((mode) & __S_IFMT) == (mask)) #define S_ISLNK(mode) __S_ISTYPE((mode), __S_IFLNK) 

tj soubor je symbolický odkaz if ((mode & 0170000) == 0120000) (alespoň v systému GNU / Linux).

Odpověď

Symbolický odkaz (ačkoli některé souborové systémy zacházejí se symbolickými odkazy odlišně) je položka inode tabulky, která odkazuje na stejné místo jako jiný soubor (nebo adresář).

Například pokud foo je inode 1234 pak bar (a symbolický odkaz na foo) je inode 1234.

bar ve skutečnosti neexistuje, je to jen ukazatel na a „skutečný“ soubor.

Symlinks obecně nemají oprávnění mimo oprávnění souboru, na který odkazují. Takže bar"s oprávnění jsou „the same“ as foo"s. Oprávnění pro bar (symbolický odkaz) nelze nastavit pouze na foo (skutečný soubor).

Jak již bylo řečeno, jedná se o skutečně „vysoké zobrazení“. Různé systémy souborů zpracovávají symbolické odkazy odlišně. Různé nástroje zpracovávají symlinks odlišně. Některé systémy souborů „označují“ symlinks a zacházejte s nimi zvlášť, ale někteří ne.

Například chmod na Linux nezmění symlinks oprávnění, ale na OSX se k nim dostanete. V obou případech se změní skutečná oprávnění k souborům.

Nemohu myslet na žádný systém (ne to znamená, že to tam není), kde symlink má oprávnění oddělená od skutečného souboru.

Komentáře

  • Ne, symbolický odkaz je typ souboru (" vše je soubor "), který obsahuje spíše název souboru než obecný- údaje o účelu. Tento název souboru obvykle odkazuje na existující soubor – to ' má celý význam symlinků – ale není zaručeno, že to bude pravda. Ano, symbolický odkaz (jako každý jiný) typ souboru) má inode. Ne, symbolický odkaz a soubor, na který odkazuje, má samostatné inody s různým počtem inodů. Odkazy Tvrdé mají stejný inode, a tedy stejné číslo inode ber.
  • mělo to být na vysoké úrovni, ale moderní systémy nedělají ' soubor na pevném disku, tabulka inode obsahuje řetězec a žádný skutečný soubor není vytvořeno. Myslím, že ' se nazývá " rychlý symlink "
  • Pokud ' foo ' a ' bar ' jsou oba ukazatele na uzel 1234, pak jsou ' znovu HARD odkazy, nikoli symbolické odkazy. Pokud by " bar " byl SYMlink, pak by to byl doslova řetězec znaků " foo " (nebo dokonce cesta k foo) místo uzlu. Ve skutečnosti můžete vytvořit symbolický odkaz, který ' t vůbec nikam smysluplný, např. ln -s 'this is not a real file' bar
  • Také: BSD (zahrnující Mac OS X) má systémové volání lchmod (), které vám umožní nastavit oprávnění samotného symbolického odkazu. Netuším, k čemu to slouží.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *