Limites de comprimento de nome de arquivo no linux?

113

Existe algum nome de arquivo ou limite de comprimento de caminho no Linux?

    
por ro. 18.05.2009 / 17:27

8 respostas

119

Veja a página da Wikipedia sobre comparação de sistemas de arquivos , especialmente na coluna Tamanho máximo do nome do arquivo .

Aqui estão alguns limites de comprimento de nome de arquivo em sistemas de arquivos 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
    
por 18.05.2009 / 17:29
83

Eu li aqui que o limite de comprimento do caminho está nos cabeçalhos do sistema. O limite de tamanho do nome do arquivo também está lá. No meu sistema é arquivo:

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

e C-lang definem:

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

e mais alguns.

    
por 31.08.2011 / 08:58
20

Refiro-me a outras respostas, por favor melhore-as.

Are there any filename or path length limits on Linux?

Sim, o tamanho do nome do arquivo e do caminho é limitado por:

Para obter dinamicamente essas propriedades:

  • Use as funções pathconf e fpathconf conforme proposto por Michael Aaron Safyan
  • Crie um nome de arquivo (ou nome de caminho) por mais e mais tempo, conforme explicado por dogbane
  • Use o comando getconf como proposto por tim que também está disponível no Linux:

    $ getconf NAME_MAX /mnt/sda2/
    255
    $ getconf PATH_MAX /mnt/sda3/
    4096
    
por 24.05.2014 / 07:35
17

E por economizar tempo (e ancorá-lo na memória):

ext2, ext3, ext4, zfs: sem limites de nome de caminho; Limite de 255 bytes do nome do arquivo.

    
por 18.05.2009 / 17:43
6

Esses são os comprimentos do nome do sistema de arquivos. "linux" em si tem alguns também. Por exemplo, a partir de bits / stdio_lim.h:

# define FILENAME_MAX 4096
    
por 18.05.2009 / 18:15
3

Não há nenhuma maneira para determinar o comprimento máximo de caminhos no Linux de maneira portátil. No meu sistema:

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

Mas posso criar caminhos com muito mais facilidade que 4096 caracteres. Em vez disso, veja PATH_MAX como um limite inferior. Você tem a garantia de poder criar caminhos por muito tempo, mas também pode criar muito mais longos.

    
por 22.03.2016 / 18:31
1

Você deve sempre usar o pathconf ou alguma função como esta para obter o valor do tempo de execução sobre os itens especificados, como este página disse que:

It should be noted, however, that many of the listed limits are not invariant, and at runtime, the value of the limit may differ from those given in this header, for the following reasons:

  • The limit is pathname-dependent.

  • The limit differs between the compile and runtime machines.

For these reasons, an application may use the fpathconf(), pathconf(), and sysconf() functions to determine the actual value of a limit at runtime.

    
por 16.01.2015 / 02:17
0

É especificado no arquivo de cabeçalho limits.h do sistema.

Aqui está um desses arquivos:

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

Aqui é onde as cópias desse arquivo estão localizadas e os valores que eles definem:

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

Saída:

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