Pregunta ¿Límites de longitud de nombre de archivo en linux?


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


110
2018-05-18 17:27


origen




Respuestas:


Ver el Página de Wikipedia sobre comparación de sistemas de archivos.especialmente en la columna Longitud máxima del nombre de archivo.

Aquí están algunas límites de longitud de nombre de archivo en los 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

117
2018-05-18 17:29



La respuesta es: el límite suele ser de 255 caracteres (para aquellos que son demasiado perezosos para hacer clic en este enlace) - rahmanisback
Su respuesta debe contener al menos un resumen de la información relevante en el enlace provisto. No solo un enlace. - zrajm
@rahmanisback es correcto para los límites de nombre de archivo, mientras que los límites de la 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 - nonchip
En realidad se trataba de ambos: D - nonchip
Solo señalando: bytes! = Caracteres, especialmente si usa UTF-8. Ver aquí. - Kris


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 está ahí. En mi sistema es el 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.


81
2017-08-31 08:58



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 completamente, mientras que las otras están parcialmente desactivadas. Nuevamente, perdón 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
Solo señalando: bytes! = Caracteres, especialmente si usa UTF-8. Ver aquí. - Kris
@ 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 mayores que ese tamaño. Usualmente uso "trozos" de PATH_MAX como tamaño. - Rahly


Me refiero a otras respuestas, por favor, las vota.

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

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

Para obtener dinámicamente estas propiedades:

  • Usar funciones pathconf y fpathconf según lo propuesto por Michael Aaron Safyan
  • Cree un nombre de archivo (o ruta de acceso) más y más largo como se explica en dogbane
  • Usa 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
    

20
2018-05-24 07:35





Y para ahorrar tiempo (y anclarlo a la memoria):

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


17
2018-05-18 18:15



La mayoría de los programas están limitados con caminos absolutos para PATH_MAX = 4096, aunque. Se puede solucionar si su programa puede usar rutas relativas y usted primero cambia su directorio de trabajo. - Mikko Rantalainen


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

# define FILENAME_MAX 4096

6
2018-03-22 18:31



Entonces, dado que los sistemas de archivos extX tienen un límite de nombre de archivo inferior al que está definido en el kernel, nunca alcanzaría ese límite, a menos que también incluya rutas de acceso, ¿verdad? - Ivan
Eso es lo que me parece. También hay PATH_MAX para la ruta, que es 4096, por lo que sería golpeado antes del tamaño de ruta "ilimitado" en los exts ... No estoy seguro de cómo el sistema operativo resuelve sus propias restricciones internas y las de la FS, nunca tuvieron Mis brazos en esa profundidad. pregunta interesante sin embargo. - jj33
4096 caracteres es un nombre de ruta helluva. Estoy seguro de que podría generarse con una recompilación, pero honestamente, / ¿por qué necesitarías los nombres de ruta tanto tiempo? - Avery Payne
No estoy seguro de que lo necesitarías o no. Lo veo más como una protección contra programas malintencionados o negligentes (puedo ver fácilmente un script que se comporta mal y comienza a crear el mismo directorio de forma recursiva. De hecho, he creado ese script, pero estaba redirigiendo un sitio web, no creando directorios). ...). - jj33
@AveryPayne Para agregar etiquetas a los archivos para que se puedan buscar utilizando un simple locate. - Hubert Kario


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

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

Pero puedo crear fácilmente rutas mucho más largas que 4096 caracteres. En lugar de ver PATH_MAX como un límite inferior. Se le garantiza que podrá crear rutas de esta longitud, pero también puede crear rutas mucho más largas.


3
2018-01-16 02:17



Una forma portátil simple 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 para personas) pero sabrá hasta dónde puede llegar con seguridad. Recuerde verificar tanto la longitud del directorio individual como la longitud relativa de la ruta y la longitud absoluta de la ruta. - tripleee
También, por ejemplo el pitón os.pathconf() El módulo tendrá algunas respuestas; Si el puerto de Python es bueno, deberían ser razonables. - tripleee
No puedes porque algunos sistemas de archivos no imponen cualquier limite. Antes fallaría con un error de falta de memoria que cualquier programa tendría dificultades para recuperar. - 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


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

Sin embargo, se debe tener en cuenta que muchos de los límites enumerados no son invariantes, y en el tiempo de ejecución, el valor del límite puede diferir de los indicados en este encabezado, por los siguientes motivos:

  • El límite depende de la ruta de acceso.

  • 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 el tiempo de ejecución.


1
2017-12-05 01:49