it-swarm-es.com

¿Límites de longitud de nombre de archivo en Linux?

¿Hay algún nombre de archivo o límite de longitud de ruta en Linux?

130
ro.

Consulte página de Wikipedia sobre la comparación de sistemas de archivos , especialmente en la columna Longitud máxima del nombre de archivo .

Aquí hay algunos ¡límites de longitud de nombre de archivo en sistemas de archivos populares:

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

He leído aquí ese límite de longitud de ruta está en los encabezados del sistema. El límite de longitud del nombre del archivo también existe. En mi sistema es archivo:

  /usr/src/linux-headers-2.6.38-10/include/linux/limits.h

y C-lang define:

  #define NAME_MAX         255    /* # chars in a file name */
  #define PATH_MAX        4096    /* # chars in a path name including nul */

y algo más.

90
sfp

Me refiero a otras respuestas, favor de votarlas.

¿Hay algún nombre de archivo o límite de longitud de ruta en Linux?

Sí, las longitudes de nombre de archivo y ruta están limitadas por:

Para obtener dinámicamente estas propiedades:

  • Utilice las funciones pathconf y fpathconf según lo propuesto por Michael Aaron Safyan
  • Cree un nombre de archivo (o nombre de ruta) cada vez más largo como se explica por dogbane
  • Utilice el comando getconf según lo propuesto por tim que también está disponible en Linux:

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

Y en aras de ahorrar tiempo (y anclarlo en la memoria):

ext2, ext3, ext4, zfs: sin límites de nombre de ruta; Límite de nombre de archivo de 255 bytes.

20
Ivan

Esas son las longitudes de nombre del sistema de archivos. "Linux" en sí también tiene algunos. Por ejemplo, de bits/stdio_lim.h:

# define FILENAME_MAX 4096
6
jj33

Hay de ninguna manera para determinar la longitud máxima de rutas en Linux de forma portátil. En mi sistema:

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

Pero puedo crear fácilmente caminos mucho más largos que 4096 caracteres. En cambio, vea PATH_MAX como límite inferior. Se garantiza que podrá crear rutas durante tanto tiempo, pero también podría crear rutas mucho más largas.

3
Björn Lindqvist

Siempre debe usar pathconf o alguna función como esta para obtener el valor de tiempo de ejecución sobre los elementos especificados, ya que esto página dice que :

Sin embargo, debe tenerse en cuenta que muchos de los límites enumerados no son invariables, y en el tiempo de ejecución, el valor del límite puede diferir de los que figuran en este encabezado, por las siguientes razones:

  • El límite depende de la ruta.

  • El límite difiere entre las máquinas de compilación y tiempo de ejecución.

Por estos motivos, una aplicación puede usar las funciones fpathconf (), pathconf () y sysconf () para determinar el valor real de un límite en tiempo de ejecución.

1
andy

Se especifica en el sistema limit.h archivo de encabezado.

Aquí está uno de estos archivos:

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 */
...

Aquí es donde se encuentran las copias de este archivo y los valores que definen:

find /usr | grep limits.h | xargs -I {} grep -H 'NAME_MAX' {}

Salida:

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