web-dev-qa-db-fra.com

Limites de longueur de nom de fichier sur Linux?

Y a-t-il des limites de nom de fichier ou de longueur de chemin sous Linux?

130
ro.

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
134
WerkkreW

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.

90
sfp

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:

Pour obtenir dynamiquement ces propriétés:

  • Utilisez les fonctions pathconf et fpathconf comme proposé par Michael Aaron Safyan
  • Créez un nom de fichier (ou chemin d'accès) de plus en plus longtemps comme expliqué par dogbane
  • Utilisez 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
    
24
olibre

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.

20
Ivan

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
6
jj33

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.

3
Björn Lindqvist

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.

1
andy

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 */
...
0
Bohdan Voloshyn