Y a-t-il une limite de liens pour un file?

Y a-t-il une limite de nombre de liens pour un file? Est-il spécifié n'importe où? Quelles sont les limites sécuritaires pour Linux? Et que pour les autres systèmes POSIX?

Posix exige que le operating system comprenne le concept des liens durs, mais pas que les liens durs peuvent réellement être utilisés dans n'importe quelle circonstance particulière. Vous pouvez savoir combien de liens sont autorisés à un location particulier (cela peut varier selon le type de système de files) en appelant pathconf (filename, _PC_LINK_MAX ) . La limite minimale ( _POSIX_LINK_MAX ) est de 8, mais cela n'a pas de sens puisque link() peut de toute façon signaler d'autres erreurs (permission refusée, disque plein, …).

La structure stat stocke le nombre de liens dans un champ de type nlink_t , de sorte que le type de ce champ donne une limite supérieure à votre système. Mais il y a de fortes chances pour que vous ne puissiez jamais arriver aussi loin: il est courant d'avoir un nlink_t 32 bits mais seulement 16 bits dans de nombreux filesystems (un grep rapide dans la source Linux montre cet ext [234], NTFS, UFS et XFS utilisent des counts de liens 16 bits dans les data structures du kernel).

En regardant le format de disque de structure d'inode ext3 dans les sources du kernel Linux (* include / linux / ext3_fs.h *) qui répertorie le nombre de liens comme étant un nombre de 16 bits

 struct ext3_inode { ... snip ... __le16 i_links_count; /* Links count */ } 

Je suppose que cela signifie qu'un système de files ext3 peut avoir jusqu'à 65535 liens.

Je n'ai pas vérifié les valeurs pour les autres filesystems.

Ceci dépend du système de files.

La limite ext2 / 3/4 est de 65 k liens

ext4 source ligne 643, struct ext4_inode -> __le16 i_links_count