Un collegamento fisico (in inglese hard link), in informatica, indica l'associazione del nome di un file al suo contenuto.
Un collegamento fisico fa riferimento ai dati ovvero il contenuto di un file, e in ciò si differenzia dai collegamenti simbolici e altri tipi di collegamenti che fanno invece riferimento a nomi di file. Un'altra differenza è che il collegamento fisico deve trovarsi sullo stesso file system che contiene i dati a cui fa riferimento, e che un collegamento fisico non può restare orfano.
La creazione di un file comporta sempre la simultanea creazione di un collegamento fisico che permetta ai programmi di riferirsi ai dati tramite un nome nel file system; dati privi di collegamenti fisici non sono accessibili, e a meno che non vi siano altri riferimenti ad essi (come ad esempio nel caso di file in uso da parte di uno o più processi) lo spazio da loro occupato ritorna a far parte dello spazio disponibile.
I sistemi operativi generalmente impediscono di creare più di un collegamento fisico alla stessa directory, per evitare problemi di ambiguità nel risalire la gerarchia di directory e per evitare che si possa includere parte di una gerarchia di directory all'interno di sé stessa (cosa che creerebbe problemi ai programmi che esaminano ricorsivamente il contenuto di un file system, perché potrebbero non terminare mai il loro compito).
I file system tipici dei sistemi Unix, Unix-like ed NT-like (tutti i sistemi della famiglia Windows NT che condividono il sistema NTFS, quindi non i cosiddetti "9x" come Windows95 ecc) prevedono la possibilità di avere più collegamenti fisici allo stesso file, mentre altri file system prevedono un solo collegamento per file.
Per ogni file o directory nei sistemi Unix ed Unix-like, il file system mantiene un identificativo univoco (inode) ed un conteggio dei collegamenti fisici che vi fanno riferimento. Un collegamento fisico quindi contiene semplicemente il nome ed il riferimento all'inode del file, senza altre informazioni.
L'eliminazione di un file (cioè di un suo collegamento fisico, perché è quello l'unica cosa che è possibile eliminare direttamente) non implica l'annullamento di tutti i collegamenti fisici ad esso, perché ognuno è indipendente dagli altri; lo spazio occupato dai dati può essere liberato solamente quando il conteggio dei collegamenti fisici di un file diventa zero (cioè tutti i collegamenti fisici ad esso sono stati eliminati) e non vi sono altri riferimenti ai dati.
Per creare un hard-link in Linux vedi il comando ln
Per creare un hard-link in Windows si fa uso del comando seguente: fsutil hardlink create NomeNuovoFile NomeFileEsistente
Nei sistemi basati su Linux, a partire dalla versione 2.4.0 del kernel è possibile usare il comando mount con le opzioni --bind o --rbind per far apparire una directory o un file in più punti della gerarchia di directory del sistema, di fatto creando l'equivalente di un collegamento fisico che però può essere tra file system diversi e che può essere anche riferito ad una directory, ma che non è persistente (ovvero va ricreato ad ogni nuovo avvio del sistema).[1]