Milyen fájlmód jelzi, hogy a fájl szimbolikus link (symlink)?
Felhasználási esetem a szimbolikus észlelés linkek egy git adattárban (és annak történetében). Az volt a benyomásom, hogy a symlink a fájl módja miatt egy symlink, és ezt a fájl módot állítja be a chmod
eszköz.
Megjegyzések
Válasz
A fájlmódok két különböző fogalmat fednek le: a fájltípusokat és a fájlengedélyeket. A fájl s módját a st_mode
értéke képviseli a stat(2)
hívások eredményeként, és a ls -l
mindet együtt mutatja be; a részletekért lásd: A UNIX engedélyek és fájltípusok megértése .
A fájl létrehozása után a típusa “nem lehet megváltoztatni. Ezenkívül Linux rendszereken nem adhatja meg a szimbólum linkjeit; csak a cél engedélye számít (és tulajdonképpen a teljes mód, mivel ez határozza meg a symlink viselkedését is). A részletekért lásd: Hogyan vonatkoznak a fájlengedélyek a hivatkozásokra? Mac OS X rendszeren a linkek saját engedélyekkel rendelkezhetnek.
Végül a git
egyszerűsített modellt használ, korlátozott számú felismert móddal:
-
040000
könyvtárhoz -
100644
egy normál fájlhoz -
100755
egy futtatható fájlhoz -
120000
egy szimbolikus linkhez
Ezeket az értékeket olyan parancsokkal láthatja, mint a git cat-file -p "master^{tree}"
; a részletekért lásd: Pro Git .
Válasz
Milyen fájlmód jelzi, hogy a fájl egy szimbolikus link (symlink)?
Az ellenőrizendő POSIX API ha egy fájl egy symlink, akkor a S_ISLNK
makrót használja.
A glibc-ben a S_ISLNK
a következőképpen definiálva:
#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)
ie egy fájl egy symlink if ((mode & 0170000) == 0120000)
(legalább GNU / Linux rendszeren).
Válasz
A symlink (bár egyes fájlrendszerek eltérően kezelik a hivatkozásokat) egy inode
tábla bejegyzés, amely ugyanarra a helyre mutat, mint egy másik fájl (vagy könyvtár).
Például, ha foo
inode 1234
, akkor bar
(a symlink to foo) inode 1234
.
bar
nem igazán létezik, csak egy “igazi” fájl.
Symlinks
általában nem rendelkeznek engedélyekkel azon fájl engedélyein kívül, amelyre mutatnak. Tehát bar"s
engedélyek “ugyanaz” as foo"s
. A bar
(a szimlink) engedélyeket csak foo
(a valódi fájl).
Ennek ellenére nagyon magas szintű nézetet mutat. A különböző fájlrendszerek eltérően kezelik a hivatkozásokat. A különböző eszközök eltérően kezelik a symlinks
t. Egyes fájlrendszerek “megjelölik” symlinks
és speciálisan kezeli őket, de egyesek nem.
Például chmod
a Linux
oldalon nem változtatja meg a symlinks
engedélyeket, de az OSX
oldalon elérheti. Mindkét esetben a valódi fájlengedélyek megváltoznak.
Nem gondolok egyetlen rendszerre sem (nem “t” azt jelenti, hogy “nincs odakinn”, ahol egy symlink
rendelkezik a valódi fájltól elkülönített engedélyekkel.
Megjegyzések
- Nem, a symlink egy fájltípus (" minden egy " fájl), amely fájlnevet tartalmaz, nem pedig általános- céladatok. Ez a fájlnév általában egy létező fájlra utal – amely ' a szimbolikus hivatkozások teljes pontját jelenti, de ez nem garantáltan igaz. Igen, egy symlink (mint minden más) típusú fájl) rendelkezik inóddal. Nem, egy szimbolikus link és az a fájl, amelyre külön inódok tartoznak, különböző inódszámokkal. A Hard linkeknek ugyanaz az inode, és így ugyanaz az inode szám ber.
- Nos, magas szintűnek szánták, de a modern rendszerek nem ' nem készítenek fájlt a merevlemezen, az inode tábla tartalmazza a karakterláncot, és nincs valós fájl létre. Azt hiszem, ' úgy hívják, hogy " gyors symlink "
- Ha ' foo ' és ' bar ' mindkettő az 1234-es csomópont mutatója, akkor ' HARD linkeket jelentenek, nem pedig szimpla linkeket. Ha a " bar " SYMlink lenne, akkor szó szerint ez lenne a karakterlánc " foo " (vagy akár a foo elérési útja) csomópont helyett. Valójában létrehozhat egy olyan symlinket, amely ' egyáltalán nem mutat értelmes helyre, például
ln -s 'this is not a real file' bar
- Továbbá: A BSD-nek (amely magában foglalja a Mac OS X-et is) van egy lchmod () rendszerhívása, amely lehetővé teszi a symlink engedélyeinek beállítását. Fogalmam sincs, mi ennek a használata.
chmod
engedélybiteket állít be (rwx és sticky / setuid / setgid bitek, …): ezt hívjuk " módnak ". De úgy tűnik, hogy inkább a fájltípusok ra hivatkozik.