Symbolic e Hard Link (LN) - INODE

In Linux ogni file e directory  è identificato dal suo inode che è una struttura dati che contiene informazioni come: 

- la dimensione del file, il proprietario, il gruppo e i permessi
- tempo di accesso e modifica
- il numero di hard link che referenziano l'inode
- un puntatore allo spazio del disco che contiene i file veri e propri.

# ls -li /etc/hosts
33872583 -rw-r--r-- 1 root root 207 Mar 16 12:00 /etc/hosts

Il numero 33872583 è l'inode del file hosts. E' visibile anche dal comando

[root@coslab02 ~]# stat /etc/hosts
  File: ‘/etc/hosts’
  Size: 207             Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 33872583    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-09-01 02:45:02.424953632 +0200
Modify: 2021-03-16 12:00:39.908297015 +0100
Change: 2021-03-16 12:00:39.911297015 +0100
 Birth: -





Creiamo un HARD LINK
ln  <nome_file_puntato>   <nome_link>

[root@coslab02 ~]# ln /etc/hosts /root/hardhosts

I due file puntano allo stesso inode:
[root@coslab02 ~]# ls -li /etc/hosts /root/hardhosts
33872583 -rw-r--r-- 2 root root 207 Mar 16 12:00 /etc/hosts
33872583 -rw-r--r-- 2 root root 207 Mar 16 12:00 /root/hardhosts

[root@coslab02 ~]# stat /etc/hosts
  File: ‘/etc/hosts’
  Size: 207             Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 33872583    Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-09-01 02:45:02.424953632 +0200
Modify: 2021-03-16 12:00:39.908297015 +0100
Change: 2021-09-01 11:40:26.539639820 +0200
 Birth: -
[root@coslab02 ~]# stat /root/hardhosts
  File: ‘/root/hardhosts’
  Size: 207             Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 33872583    Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-09-01 02:45:02.424953632 +0200
Modify: 2021-03-16 12:00:39.908297015 +0100
Change: 2021-09-01 11:40:26.539639820 +0200
 Birth: -

Attenzione: all'interno dell'inode il valore di "Links" contiene le informazioni degli hadr link che lo puntano. Si è passati da 1 a 2.
Se si modifica il contenuto di un hard link, anche il file originario cambia.

Creiamo un SOFT LINK
ln  -s <nome_file_puntato>   <nome_link>

[root@coslab02 ~]# ln -s /etc/hosts symhosts
[root@coslab02 ~]# ls -lrt
-rw-r--r--  2 root root  207 Sep  1 11:46 hardhosts
lrwxrwxrwx  1 root root   10 Sep  1 12:15 symhosts -> /etc/hosts

Il link simbolico ha tutti i permessi e se cancelliamo il file a cui punta diventa invalido.
[root@coslab02 ~]# cat symhosts
cat: symhosts: No such file or directory

E' possibile ricreare il file cancellato a partire dall'hard link
[root@coslab02 ~]# ln hardhosts /etc/hosts

[root@coslab02 ~]# ls -li symhosts hardhosts /etc/hosts
33872583 -rw-r--r-- 2 root root 207 Sep  1 11:46 /etc/hosts
33872583 -rw-r--r-- 2 root root 207 Sep  1 11:46 hardhosts
84175853 lrwxrwxrwx 1 root root  10 Sep  1 12:15 symhosts -> /etc/hosts

Il symbolic link fa riferimento ad inode diverso.

[root@coslab02 ~]# stat symhosts
  File: ‘symhosts’ -> ‘/etc/hosts’
  Size: 10              Blocks: 0          IO Block: 4096   symbolic link
Device: fd00h/64768d    Inode: 84175853    Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-09-01 12:15:51.090261137 +0200
Modify: 2021-09-01 12:15:49.644277697 +0200
Change: 2021-09-01 12:15:49.644277697 +0200

Il symbolik link è un alias, uno pseudonimo, un secondo nome con cui un file può essere richiamato, oltre che con il suo nome principale. 

-b (--backup) Esegue una copia di backup dei file di destinazione, prima di cancellarli (se esistono).
Esempi

Per rimuove un link simbolio
unlink <nome_link>

Post popolari in questo blog

Create e Drop Pluggable Database

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione