web-dev-qa-db-fra.com

Quelle est la longueur maximale d'un chemin de fichier dans Ubuntu?

Ayant utilisé les systèmes Windows pendant longtemps, je sais qu’à un moment donné, une fenêtre d’erreur peut apparaître lorsque les noms de fichiers et de dossiers deviennent trop longs.

Cela m'est arrivé lorsque j'ai essayé de sauvegarder des fichiers avec SFTP d'un serveur vers un dossier dans (par exemple):

D:(Windows drive partition)/Temporary/Projects/2015-06/Websites/Guitar-Site/Images/Logos/Manufacturers/Instruments/Basses/(long file name).png

Comme vous pouvez le constater, j'ai parfois tendance à créer des chemins de dossier très spécifiques et si un nom de fichier est trop long, NTFS risque de ne pas pouvoir l'enregistrer de cette façon.

Je suis actuellement préoccupé par mes sauvegardes physiques, car le chemin du dossier de mon lecteur de sauvegarde ajoutera /backups/(drive name)/... à tous les chemins de fichiers.

Existe-t-il une telle limite (ou une limite similaire) dans ext4/Ubuntu que je devrais rechercher?

8
Prototype700

La longueur maximale du nom de fichier est de 255 octets. Trouvé dans le page wiki pour ext4 .

Et un chemin maximum de 4096 caractères. trouvé dans cette question Unix & Linux SE .

Bien que j'ai trouvé cet article du wiki qui ne spécifie pas un chemin de fichier max dans ext4.

13
jtoscarson

Je pense que le moyen le plus fiable de déterminer cela consiste à utiliser la fonction pathconf(".", _PC_PATH_MAX); POSIX, qui détermine le chemin maximal pour un chemin donné.

Comme le suggère la fonction, cela peut varier d’un système de fichiers à l’autre.

Je ne connais pas d'utilitaire de ligne de commande qui l'expose cependant. Voici un exemple C minimal: https://stackoverflow.com/questions/16285623/how-to-get-the-to-get-path-to-the-current-file-pwd-in-linux -de-c/54155296 # 54155296

Les limites du chemin d'accès dépendent du système de fichiers utilisé. la réponse de jtoscarson couvre ext4 qui est la valeur par défaut sous Ubuntu, mais vous pouvez utiliser divers systèmes de fichiers sur Ubuntu. Pour citer la réponse WerkkreW sur serverfault, voici quelques-uns des systèmes de fichiers et leurs limites:

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

Notez également que divers systèmes de fichiers ont des limitations quant au type de caractère pouvant être présent dans le nom de fichier. Par exemple, les noms de fichiers dans ext4 ne peuvent pas contenir NULL et /. Voir aussi, article Wikipedia pour comparaisons de systèmes de fichiers .

Notez également que les systèmes de fichiers Linux doivent prendre en compte définitions POSIX :

3.266 Chemin

Une chaîne de caractères utilisée pour identifier un fichier. Dans le contexte de la norme IEEE 1003.1-2001, un chemin est composé au maximum de {PATH_MAX} octets, y compris l'octet nul final. Il comporte une barre oblique de début facultative, suivie de zéro ou de plusieurs noms de fichiers séparés par des barres obliques. Un chemin peut éventuellement contenir une ou plusieurs barres obliques. Plusieurs barres obliques successives sont considérées comme identiques à une barre oblique.

De limits.h :

{PATH_MAX}

Nombre maximal d'octets dans un chemin d'accès, y compris le caractère nul final. Valeur minimale acceptable: {_POSIX_PATH_MAX}

{_POSIX_PATH_MAX}

Nombre maximum d'octets dans un chemin. Valeur: 256

0
Sergiy Kolodyazhnyy