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


Respuestas:


126

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

Estos son 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

45
respuesta es: límite suele ser de 255 caracteres (para aquellos que son demasiado perezosos para hacer clic en este enlace)
DOC_ID

11
Su respuesta debe contener al menos un resumen de la información relevante en el enlace proporcionado. No solo un enlace.
zrajm

2
@rahmanisback es correcto para los límites de nombre de archivo, mientras que los límites de ruta generalmente están definidos por el sistema operativo, no FS (excepto algunos FSes extraños como iso o ntfs), y, en Linux, son 4K
chip el

2
En realidad se trataba de ambos: D
nonchip

77
Solo señalando: bytes! = Caracteres, especialmente si usa UTF-8. Ver aquí .
Kris

87

He leído aquí que el límite de longitud de ruta está en los encabezados del sistema. El límite de longitud del nombre del archivo también está ahí. 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.


10
Lo siento, pero soy nuevo aquí y ni siquiera puedo comentar, excepto votar. La respuesta anterior (por sfp) debe aumentarse, ya que responde la pregunta por completo, mientras que las otras están parcialmente apagadas. Una vez más, lo siento por ir más allá de las reglas, pero no puedo estar callado cuando la mejor respuesta está en la parte inferior.
David Balažic

1
Solo señalando: bytes! = Caracteres, especialmente si usa UTF-8. Ver aquí .
Kris

1
@ DavidBalažic: Aunque es cierto, PATH_MAX bajo Linux es solo una guía, la mayoría de los sistemas de archivos subyacentes no tienen una limitación. Esto hace que sea difícil hacer referencia a rutas que sean mayores que ese tamaño. Por lo general, uso "fragmentos" de PATH_MAX como tamaño.
Rahly

23

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:

  • Usar funciones pathconfyfpathconf según lo propuesto por Michael Aaron Safyan
  • Cree un nombre de archivo (o nombre de ruta) cada vez más largo según lo explicado por dogbane
  • Use el comando getconfpropuesto por tim que también está disponible en Linux:

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


20

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.


1
Sin PATH_MAX = 4096embargo, la mayoría de los programas están limitados con rutas absolutas a . Eso puede solucionarse si su programa puede usar rutas relativas y primero cambia su directorio de trabajo.
Mikko Rantalainen

Esto se debe a que varias API POSIX como getcwdy realpath(que puede volver a implementar en el código del espacio de usuario leyendo los metadatos .y luego cambiando ..y repitiendo hasta llegar a la raíz del sistema de archivos) dependen PATH_MAX. ( Fuente )
ssokolow

6

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

Entonces, dado que los sistemas de archivos extX tienen un límite de nombre de archivo más bajo que el definido en el núcleo, nunca alcanzarías ese límite, a menos que también abarque nombres de ruta, ¿verdad?
Ivan

1
eso es lo que me parece a mí. También hay PATH_MAX para la ruta, que es 4096, por lo que se vería antes del tamaño de ruta "ilimitado" en las extensiones ... No estoy seguro de cómo el sistema operativo resuelve sus propias restricciones internas y las del FS, nunca tuvo mis brazos en esa profundidad pregunta interesante sin embargo.
jj33

4096 caracteres es un nombre de camino infernal. Estoy seguro de que podría plantearse con una recompilación, pero, sinceramente, / ¿por qué necesitarías nombres de ruta durante tanto tiempo? /
Avery Payne

No estoy seguro de que lo necesites o no. Lo veo más como una protección contra programas maliciosos o negligentes (pude ver fácilmente un script que se comporta mal y comienza a crear el mismo directorio de forma recursiva. En realidad, hice ese script, pero estaba redirigiendo un sitio web, no creando directorios ...)
jj33

@AveryPayne Para agregar etiquetas a los archivos para que puedan buscarse usando un simple locate.
Hubert Kario

3

No hay forma de 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, ver PATH_MAXcomo un límite inferior. Se garantiza que podrá crear rutas durante tanto tiempo, pero también podría crear rutas mucho más largas.


Una manera simple y portátil de encontrar empíricamente la longitud máxima es escribir un programa que cree cadenas de directorios cada vez más largas y ver dónde falla. No sabrá exactamente por qué falla (aunque esperaría un mensaje de error sugestivo legible por humanos), pero sabrá hasta dónde puede llegar con seguridad. Recuerde verificar la longitud del directorio individual, la longitud relativa del nombre de ruta y la longitud absoluta del nombre de ruta.
tripleee

Además, por ejemplo, el os.pathconf()módulo Python tendrá algunas respuestas; si el puerto de Python es bueno, deberían ser razonables.
tripleee

2
No puede porque algunos sistemas de archivos no imponen ningún límite . Antes fallaría con un error de falta de memoria del que cualquier programa tendría dificultades para recuperarse.
Björn Lindqvist

Esta es la respuesta correcta, excepto que esto se debe al comentario de @ BjörnLindqvist. PATH_MAX es solo una guía, y el 99% de los archivos probablemente estarán dentro de ese límite.
Rahly

1

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 esta 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.


0

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

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 */
...
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.