it-swarm-pt.tech

Limites de comprimento de nome de arquivo no linux?

Há algum nome de arquivo ou limite de tamanho de caminho no Linux?

130
ro.

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

Aqui estão alguns limites de comprimento do nome do arquivo nos 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
134
WerkkreW

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

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

e C-lang define:

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

e um pouco mais.

90
sfp

Refiro-me a outras respostas, por favor, vote-as novamente.

Há algum nome de arquivo ou limite de tamanho de caminho no Linux?

Sim, os comprimentos do nome do arquivo e do caminho são limitados 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 do caminho) mais e mais, 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
    
24
olibre

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

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

20
Ivan

Esses são comprimentos de nomes de sistemas de arquivos. O próprio "linux" também tem alguns. Por exemplo, de bits/stdio_lim.h:

# define FILENAME_MAX 4096
6
jj33

Existe de jeito nenhum 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 facilmente caminhos com muito mais de 4096 caracteres. Em vez disso, veja PATH_MAX como um limite inferior. É garantido que você poderá criar caminhos por tanto tempo, mas também poderá criar caminhos muito mais longos.

3
Björn Lindqvist

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

Deve-se notar, no entanto, que muitos dos limites listados não são invariáveis ​​e, em tempo de execução, o valor do limite pode diferir dos dados neste cabeçalho, pelos seguintes motivos:

  • O limite depende do nome do caminho.

  • O limite difere entre as máquinas de compilação e tempo de execução.

Por esses motivos, um aplicativo pode usar as funções fpathconf (), pathconf () e sysconf () para determinar o valor real de um limite em tempo de execução.

1
andy

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

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 deste arquivo estão localizadas e os valores que eles definem:

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

Resultado:

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