Quale modalità file indica che un file è un collegamento simbolico (collegamento simbolico)?


Il mio caso duso è rilevare simboli collegamenti allinterno di un repository git (e la sua cronologia). Avevo limpressione che un link simbolico fosse un link simbolico a causa della sua modalità file e che la modalità file fosse ciò che lo strumento chmod imposta.

Commenti

  • Vedi superuser.com/questions/303040/…
  • Sembra che la mia domanda sarebbe stata fatta meglio ‘ quali modalità file sono collegamenti simbolici in git ‘.
  • stackoverflow.com/questions/15465436/git-how-to-handle-symlinks
  • chmod imposta i bit di autorizzazione (rwx e sticky / setuid / setgid bits, …): questo è ciò che chiamiamo una ” modalità “. Ma sembra che tu ti riferisca invece ai tipi di file.
  • @JohnWHSmith Sarei ansioso di votare un collegamento ai documenti che distinguono le differenze di modalità di file e tipi di file! : D

Risposta

Le modalità file coprono due diverse nozioni: tipi di file e permessi dei file. La modalità di un file è rappresentata dal valore di st_mode nel risultato delle stat(2) chiamate e ls -l li presenta tutti insieme; vedi Capire i permessi UNIX e i tipi di file per i dettagli.

Una volta che un file è stato creato, il suo tipo può “T essere cambiato. Inoltre, su sistemi Linux non è possibile specificare i permessi di un collegamento simbolico; tutto ciò che conta è il permesso del target (ed effettivamente la modalità completa poiché ciò determina anche il comportamento del link simbolico). Vedi Come si applicano i permessi dei file ai link simbolici? per i dettagli. Su Mac OS X i collegamenti simbolici possono avere le proprie autorizzazioni.

Infine, git utilizza un modello semplificato, con un numero limitato di modalità riconosciute:

  • 040000 per una directory
  • 100644 per un file normale
  • 100755 per un file eseguibile
  • 120000 per un collegamento simbolico

Puoi visualizzare questi valori utilizzando comandi come git cat-file -p "master^{tree}"; vedi Pro Git per i dettagli.

Risposta

Quale modalità file indica che un file è un collegamento simbolico (collegamento simbolico)?

LAPI POSIX da controllare se un file è un collegamento simbolico utilizza la macro S_ISLNK.

In glibc, S_ISLNK è definito come segue:

#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) 

es un file è un collegamento simbolico if ((mode & 0170000) == 0120000) (almeno su GNU / Linux).

Risposta

Un collegamento simbolico (sebbene alcuni filesystem gestiscano i collegamenti simbolici in modo diverso) è una voce di tabella inode che punta alla stessa posizione di un altro file (o directory).

Ad esempio, se foo è inode 1234 allora bar (un collegamento simbolico a pippo) è inode 1234.

bar non “esiste veramente” è solo un puntatore a un file “reale”.

Symlinks generalmente non dispone di autorizzazioni al di fuori delle autorizzazioni del file a cui puntano. Pertanto, le autorizzazioni bar"s sono “lo stesso” as foo"s. Non puoi “impostare le autorizzazioni su bar (il collegamento simbolico) solo su foo (il file reale).

Detto questo, è “una vista di alto livello. Diversi file system gestiscono i collegamenti simbolici in modo diverso. Strumenti diversi gestiscono symlinks in modo diverso. Alcuni file system” flag “symlinks e gestirli in modo speciale, ma alcuni “t.

Ad esempio chmod su Linux non cambierà un symlinks permessi ma su OSX puoi ottenerli. In entrambi i casi vengono cambiati i permessi dei file reali.

Non riesco a pensare a nessun sistema (non “t significa che “non è là fuori) dove un symlink ha autorizzazioni separate dal file reale.

Commenti

  • No, un collegamento simbolico è un tipo di file (” tutto è un file “) che contiene un nome file anziché un nome generico- dati relativi allo scopo. In genere questo nome file si riferisce a un file esistente – che ‘ è il punto centrale di avere collegamenti simbolici – ma non è garantito che sia vero. Sì, un collegamento simbolico (come ogni altro tipo di file) ha un inode. No, un collegamento simbolico e il file a cui punta hanno inode separati, con numeri di inode diversi. I link Hard hanno lo stesso inode, e quindi lo stesso inode num ber.
  • beh, doveva essere di alto livello ma i sistemi moderni non ‘ per creare un file sul disco rigido la tabella degli inode contiene la stringa e nessun file reale è creato. Penso che ‘ si chiami ” collegamento simbolico veloce ”
  • Se ‘ foo ‘ e ‘ bar ‘ sono entrambi puntatori al nodo 1234, quindi ‘ sono collegamenti HARD, non collegamenti simbolici. Se ” bar ” fosse un SYMlink, sarebbe letteralmente la stringa di caratteri ” foo ” (o anche il percorso per foo) invece di un nodo. In effetti, puoi creare un link simbolico che ‘ non punta a nessun punto significativo, ad es. ln -s 'this is not a real file' bar
  • Inoltre: BSD (che include Mac OS X) ha una chiamata di sistema lchmod () che ti permetterà di impostare i permessi del link simbolico stesso. Non ho idea di quale sia luso di questo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *