Question La longueur du nom de fichier est-elle limitée sur linux?


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


110
2018-05-18 17:27


origine




Réponses:


Voir le Page Wikipedia sur la comparaison des systèmes de fichiers, surtout en colonne Longueur maximale du nom de fichier.

Voilà quelque 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

117
2018-05-18 17:29



La réponse est: limite est généralement de 255 caractères (pour ceux qui sont trop paresseux pour cliquer sur ce lien) - rahmanisback
Votre réponse doit contenir au moins un résumé des informations pertinentes dans le lien fourni. Pas seulement un lien. - zrajm
@rahmanisback est correct pour les limites de nom de fichier, alors que les limites de chemin sont généralement définies par le système d'exploitation, et non par FS (à l'exception de certains FS étranges comme iso ou ntfs), et sous Linux 4K - nonchip
En fait, c'était à propos des deux: D - nonchip
Soulignant simplement: octets! = Caractères, surtout si vous utilisez UTF-8. Voir ici. - Kris


j'ai lu ici cette limite de longueur de chemin est dans les en-têtes du système. La longueur maximale du nom de fichier est également présente. Sur mon système, c'est le 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 quelques autres.


81
2017-08-31 08:58



Désolé, mais je suis nouveau ici et je ne peux même pas commenter, sauf le vote. La réponse précédente (par sfp) devrait être augmentée, car elle répond complètement à la question, tandis que les autres sont partiellement désactivées. Encore une fois, désolé d’aller au-delà des règles, mais je ne peux pas rester silencieux lorsque la meilleure réponse est au bas de la liste. - David Balažic
Soulignant simplement: octets! = Caractères, surtout si vous utilisez UTF-8. Voir ici. - Kris
@ DavidBalažic: Bien que vrai, PATH_MAX sous Linux n'est qu'un guide, la plupart des systèmes de fichiers sous-jacents n'ont pas de limitation. Cela rend difficile de référencer des chemins supérieurs à cette taille. J'utilise habituellement des "morceaux" de PATH_MAX comme taille. - Rahly


Je me réfère à d'autres réponses, s'il vous plaît les inviter.

Existe-t-il des limites de longueur de nom de fichier ou 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:

  • Utiliser des fonctions pathconf et fpathconf tel que proposé par Michael Aaron Safyan
  • Créez un nom de fichier (ou chemin) de plus en plus long comme expliqué par dogbane
  • Utilisez la commande getconf tel que proposé par Tim qui est également disponible sur Linux:

    $ getconf NAME_MAX /mnt/sda2/
    255
    $ getconf PATH_MAX /mnt/sda3/
    4096
    

20
2018-05-24 07:35





Et pour gagner du temps (et le garder en mémoire):

ext2, ext3, ext4, zfs: pas de limite de chemin d'accès; Limite de fichier de 255 octets.


17
2018-05-18 18:15



La plupart des programmes sont limités avec des chemins absolus vers PATH_MAX = 4096, bien que. Cela peut être contourné si votre programme est capable d'utiliser des chemins relatifs et que vous modifiez d'abord votre répertoire de travail. - Mikko Rantalainen


Ce sont des longueurs de noms de système de fichiers. "linux" en a aussi. Par exemple, à partir de bits / stdio_lim.h:

# define FILENAME_MAX 4096

6
2018-03-22 18:31



Donc, puisque les systèmes de fichiers extX ont une limite de nom de fichier inférieure à celle définie dans le noyau, vous n’atteindrez jamais cette limite, à moins qu’elle englobe également les noms de chemin, non? - Ivan
c'est ce que cela ressemble à moi. Il y a aussi PATH_MAX pour le chemin, qui est 4096, donc il serait touché avant la taille de chemin "illimitée" sur les anciens ... Je ne suis pas sûr de savoir comment le système d'exploitation résout ses propres restrictions internes et celles du FS, jamais mes bras dans cette profondeur. question intéressante cependant. - jj33
4096 caractères est un nom de chemin d'accès helluva. Je suis sûr que cela pourrait être élevé avec une recompilation, mais honnêtement, / pourquoi auriez-vous besoin de noms de chemin aussi longs? / - Avery Payne
Je ne suis pas sûr que vous en ayez besoin ou non. Je le vois plutôt comme une protection contre les programmes malveillants ou négligents (je pouvais facilement voir un script qui se comporte mal et commence à créer le même répertoire de manière récursive. En fait, j’ai créé ce script, mais il redirige un site Web et ne crée pas de répertoire. ...) - jj33
@AveryPayne Pour ajouter des tags aux fichiers afin qu'ils puissent être recherchés à l'aide d'un simple locate. - Hubert Kario


Il y a en aucune façon déterminer la longueur maximale des chemins sous 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 à la place PATH_MAX comme une limite inférieure. Vous êtes assuré de pouvoir créer des chemins aussi longs, mais vous pourrez également en créer de plus longs.


3
2018-01-16 02:17



Un moyen simple et portable de trouver empiriquement la longueur maximale consiste à écrire un programme qui crée des chaînes de répertoires de plus en plus longues et à voir où il échoue. Vous ne saurez pas exactement pourquoi cela échoue (bien que vous souhaitiez un message d'erreur suggestif lisible par l'homme), mais vous saurez jusqu'où vous pouvez aller en toute sécurité. N'oubliez pas de vérifier la longueur du répertoire individuel, la longueur du chemin d'accès relatif et la longueur du chemin d'accès absolu. - tripleee
Aussi, par exemple le python os.pathconf() module aura des réponses; si le port Python est bon, ils devraient être raisonnables. - tripleee
Vous ne pouvez pas parce que certains systèmes de fichiers n'imposent pas aucune limite. Il serait préférable d'échouer avec une erreur de manque de mémoire dont tout programme aurait du mal à se remettre. - Björn Lindqvist
C'est la bonne réponse, sauf que cela est dû au commentaire de @ BjörnLindqvist. PATH_MAX est juste une indication, et 99% des fichiers seront probablement dans cette limite. - Rahly


Vous devriez toujours utiliser pathconf ou une fonction comme celle-ci pour obtenir la valeur d’exécution des éléments spécifiés, car cela page dit que:

Il convient toutefois de noter que bon nombre des limites énumérées ne sont pas invariantes et que, lors de l'exécution, la valeur de la limite peut différer de celle indiquée dans cet en-tête, pour les raisons suivantes:

  • La limite dépend du nom du chemin.

  • La limite diffère entre les ordinateurs 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
2017-12-05 01:49





C'est spécifié dans le système limites.h En tête de fichier.

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' {}

Sortie:

...
/usr/include/linux/limits.h:#define NAME_MAX         255        /* # chars in a file name */
...

0