Mikä tiedostotila osoittaa, että tiedosto on symbolinen linkki (symlink)?
Minun käyttötapani on tunnistaa symbolinen linkit git-arkiston sisällä (ja sen historia). Minusta tuntui, että symlink on symboli sen tiedostotilan vuoksi, ja työkalut chmod
asettaa tämän tiedostotilan.
Kommentit
vastaus
Tiedostotilat kattavat kaksi eri käsitettä: tiedostotyypit ja tiedostojen käyttöoikeudet. Tiedoston ”s” -tilaa edustaa arvo st_mode
stat(2)
-puhelujen ja ls -l
esittelee ne kaikki yhdessä; katso lisätietoja kohdasta UNIX-käyttöoikeuksien ja tiedostotyyppien ymmärtäminen .
Kun tiedosto on luotu, sen tyyppi voi ”ei muuteta. Lisäksi Linux-järjestelmissä et voi määrittää symlinkin käyttöoikeuksia; Ainoa merkitys on kohteen luvalla (ja käytännössä koko tilassa, koska se määrää myös symlinkin käyttäytymisen). Katso lisätietoja kohdasta Kuinka tiedoston oikeudet koskevat symlinkkejä? . Mac OS X: ssä symlinkeillä voi olla omat käyttöoikeutensa.
Lopuksi git
käyttää yksinkertaistettua mallia, jossa on rajoitettu määrä tunnistettuja tiloja:
-
040000
hakemistolle -
100644
normaalille tiedostolle -
100755
suoritettavalle tiedostolle -
120000
symboliselle linkille
Näet nämä arvot käyttämällä komentoja, kuten git cat-file -p "master^{tree}"
; katso lisätietoja kohdasta Pro Git .
Vastaa
Mikä tiedostotila osoittaa, että tiedosto on symbolinen linkki (symlink)?
Tarkistettava POSIX-sovellusliittymä jos tiedosto on symlinkki, käyttää S_ISLNK
-makroa.
Glibc-määritelmässä S_ISLNK
määritetään seuraavasti:
#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 tiedosto on symlink if ((mode & 0170000) == 0120000)
(ainakin GNU / Linuxissa).
Vastaa
Symlink (vaikka jotkin tiedostojärjestelmät käsittelevät symlinkkejä eri tavalla) on inode
taulukon merkintä, joka osoittaa samaan paikkaan kuin toinen tiedosto (tai hakemisto).
Esimerkiksi jos foo
on inode 1234
, sitten bar
(a symlink to foo) on inode 1234
.
bar
ei todellakaan ole olemassa, se on vain osoitin ”oikea” tiedosto.
Symlinks
yleensä ei ole oikeuksia sen tiedoston käyttöoikeuksien ulkopuolella, johon he osoittavat. Joten bar"s
-oikeudet ovat ”sama” as foo"s
. Et voi asettaa oikeuksia bar
(symlink) vain foo
(oikea tiedosto).
Tästä huolimatta se on todella korkean tason näkymä. Eri tiedostojärjestelmät käsittelevät symlinkkejä eri tavalla. Eri työkalut käsittelevät symlinks
eri tavalla. Jotkut tiedostojärjestelmät ”merkitsevät” symlinks
ja käsittele niitä erityisesti, mutta jotkut eivät.
Esimerkiksi chmod
sivustolla Linux
ei muuta symlinks
käyttöoikeudet, mutta OSX
-palvelussa voit saada sen. Molemmissa tapauksissa todellisten tiedostojen käyttöoikeuksia muutetaan.
En voi ajatella mitään järjestelmää (ei ”t” tarkoittaa sitä, ettei sitä ole siellä, missä symlink
: llä on erilliset oikeudet todellisesta tiedostosta.
Kommentit
- Ei, symlink on tiedostotyyppi (" kaikki on tiedosto "), joka sisältää tiedostonimen eikä yleistä- tarkoitustiedot. Tyypillisesti tämä tiedostonimi viittaa olemassa olevaan tiedostoon – joka ' on symlinkkien koko kohta – mutta tämän ei voida taata olevan totta. Kyllä, symlink (kuten kaikki muutkin) tiedostotyypillä) on inode. Ei, symlinkillä ja tiedostolla, jonka mukaan sillä on erilliset inodit, joilla on erilaiset inodinumerot. Hard -linkeillä on sama inode ja siten sama inodinumero Ber.
- No, sen oli tarkoitus olla korkeatasoista, mutta nykyaikaiset järjestelmät eivät ' t tee kiintolevylle tiedostoa, jonka inoditaulukko sisältää merkkijonon, eikä oikeaa tiedostoa ole luotu. Mielestäni sitä ' kutsutaan nimellä " nopea symlink "
- Jos ' foo ' ja ' bar ' ovat molemmat osoittimia solmuun 1234, sitten ne ' ovat HARD-linkkejä, ei symlinkkejä. Jos " bar " olisi SYMlink, se olisi kirjaimellisesti merkkijono " foo " (tai jopa polku foon) solmun sijaan. Itse asiassa voit luoda symlinkin, joka ' ei osoita mitään merkityksellistä, esim.
ln -s 'this is not a real file' bar
- Lisäksi: BSD: llä (joka sisältää Mac OS X: n) on järjestelmäkutsu lchmod (), jonka avulla voit asettaa itse symlinkin käyttöoikeudet. Minulla ei ole aavistustakaan, mikä on sen käyttö.
chmod
asettaa käyttöoikeusbittejä (rwx ja tahmea / setuid / setgid bittiä, …): Tätä kutsutaan " -tilaksi ". Mutta näytät viittaavan sen sijaan tiedostotyyppeihin .