Oltre a tutte le altre risposte, desidero sottolineare le seguenti proprietà importanti:
Un softlink è un vero riferimento, ovvero è un piccolo file che contiene un nome percorso. La risoluzione di un softlink avviene in modo trasparente all'applicazione: se un processo apre un file, /this/path/here
indica quale è un link simbolico che punta a /that/other/path
quindi l'intera gestione dell'apertura /that/other/path
viene eseguita dal sistema operativo. Inoltre, se /that/other/path
si tratta di un collegamento simbolico stesso, anche questo viene gestito dal sistema operativo. In effetti, il sistema operativo segue la catena di collegamenti simbolici fino a quando non trova qualcos'altro (ad esempio un file normale) o fino a quando non raggiunge SYMLOOP_MAX
(vedi sysconf(3)
) molte voci, nel qual caso il sistema operativo (più precisamente: la chiamata di sistema corrispondente) restituisce un errore e imposta errno
a ELOOP
. Pertanto, un riferimento circolare come xyz -> xyz
non bloccherà il processo. (Per i sistemi Linux consultare path_resolution(7)
i dettagli completi.)
Si noti che un processo può verificare se un percorso è un collegamento simbolico o meno attraverso l'uso di lstat(2)
e può modificare i suoi attributi di file (memorizzati nella tabella degli inode) attraverso lchown(2)
e altri (vedere symlink(7)
per l'intera storia).
Ora, in termini di autorizzazione, noterai che i collegamenti simbolici hanno sempre autorizzazioni 777 ( rwxrwxrwx
in notazione simbolica). Ciò è dovuto al fatto che qualsiasi altra autorizzazione può essere ignorata accedendo al file effettivo, comunque. Al contrario, 777 per un collegamento simbolico non rende accessibile il file con collegamento simbolico se non era accessibile in primo luogo. Ad esempio, un collegamento simbolico con autorizzazioni 777 che punta a un file con autorizzazioni 640 non rende il file accessibile per "altro" (il pubblico in generale). In altre parole, un file xyz
è accessibile tramite un collegamento simbolico se e solo se è direttamente accessibile, cioè senza riferimento indiretto. Pertanto, le autorizzazioni del collegamento simbolico non hanno alcun effetto sulla sicurezza.
Una delle principali differenze visibili tra hardlink e symlink (aka softlink) è che i symlink funzionano attraverso i filesystem mentre i hardlink sono confinati in un filesystem. Cioè, un file sulla partizione A può essere collegato in modo simbolico dalla partizione B, ma non può essere collegato in modo rigido da lì. Ciò è chiaro dal fatto che un hardlink è in realtà una voce in una directory, che consiste in un nome file e un numero di inode, e che i numeri di inode sono univoci solo per file system.
Il termine hardlink è in realtà un po 'fuorviante. Mentre per i collegamenti simbolici l'origine e la destinazione sono chiaramente distinguibili (il collegamento simbolico ha una propria voce nella tabella degli inode), ciò non è vero per i collegamenti fisici. Se si crea un collegamento fisico per un file, la voce originale e il collegamento fisico sono indistinguibili in termini di ciò che era prima. (Dato che si riferiscono allo stesso inode, condividono i loro attributi di file come proprietario, permessi, timestamp ecc.) o terzo, o quarto ...) hardlink. In effetti, ciascun inode memorizza un contatore per il numero di collegamenti fissi a quell'inode.
Infine, si noti che gli utenti ordinari non possono hardlink directory. Questo perché ciò deve essere fatto con la massima cautela: un utente inconsapevole può introdurre cicli nell'albero dei file altrimenti strettamente gerarchico, che tutti gli strumenti usuali (come fsck
) e il sistema operativo stesso non sono pronti a gestire.