Y a-t-il des limites de nom de fichier ou de longueur de chemin sous Linux?
Voir la page Wikipedia sur la comparaison des systèmes de fichiers , en particulier dans la colonne Longueur maximale du nom de fichier .
Voici quelques limites de longueur de nom de fichier dans les systèmes de fichiers populaires:
BTRFS 255 bytes
exFAT 255 UTF-16 characters
ext2 255 bytes
ext3 255 bytes
ext3cow 255 bytes
ext4 255 bytes
FAT32 8.3 (255 UCS-2 code units with VFAT LFNs)
NTFS 255 characters
XFS 255 bytes
J'ai lu ici que la limite de longueur de chemin est dans les en-têtes du système. La limite de longueur de nom de fichier existe également. Sur mon système, c'est un fichier:
/usr/src/linux-headers-2.6.38-10/include/linux/limits.h
et C-lang définit:
#define NAME_MAX 255 /* # chars in a file name */
#define PATH_MAX 4096 /* # chars in a path name including nul */
et encore plus.
Je me réfère à d'autres réponses, veuillez les voter.
Y a-t-il des limites de nom de fichier ou de longueur de chemin sous Linux?
Oui, les longueurs de nom de fichier et de chemin sont limitées par:
linux/limits.h
comme indiqué par sfp .Pour obtenir dynamiquement ces propriétés:
pathconf
et fpathconf
comme proposé par Michael Aaron SafyanUtilisez la commande getconf
comme proposé par tim qui est également disponible sur Linux:
$ getconf NAME_MAX /mnt/sda2/
255
$ getconf PATH_MAX /mnt/sda3/
4096
Et pour gagner du temps (et l'ancrer dans la mémoire):
ext2, ext3, ext4, zfs: aucune limite de chemin; 255 octets limite de nom de fichier.
Ce sont des longueurs de nom de système de fichiers. "linux" lui-même en a aussi. Par exemple, à partir de bits/stdio_lim.h:
# define FILENAME_MAX 4096
Il n'y a aucun moyen pour déterminer la longueur maximale des chemins sur Linux de manière portable. Sur mon système:
$ getconf PATH_MAX /
4096
$ getconf _POSIX_PATH_MAX /
4096
Mais je peux facilement créer des chemins beaucoup plus longs que 4096 caractères. Voir plutôt PATH_MAX
comme borne inférieure. Vous êtes assuré de pouvoir créer des chemins aussi longtemps, mais vous pouvez également en créer de bien plus longs.
Vous devez toujours utiliser pathconf ou une fonction comme celle-ci pour obtenir la valeur d'exécution sur les éléments spécifiés, car cela page a dit que :
Il convient toutefois de noter que la plupart des limites répertoriées ne sont pas invariantes et, lors de l'exécution, la valeur de la limite peut différer de celles indiquées dans cet en-tête, pour les raisons suivantes:
La limite dépend du chemin d'accès.
La limite diffère entre les machines de compilation et d'exécution.
Pour ces raisons, une application peut utiliser les fonctions fpathconf (), pathconf () et sysconf () pour déterminer la valeur réelle d'une limite au moment de l'exécution.
Il est spécifié dans le système limits.h fichier d'en-tête.
Voici l'un de ces fichiers:
cat /usr/include/linux/limits.h
...
#define NAME_MAX 255 /* # chars in a file name */
#define PATH_MAX 4096 /* # chars in a path name including nul */
...
Voici où se trouvent les copies de ce fichier et les valeurs qu'elles définissent:
find /usr | grep limits.h | xargs -I {} grep -H 'NAME_MAX' {}
Production:
...
/usr/include/linux/limits.h:#define NAME_MAX 255 /* # chars in a file name */
...