Limites de comprimento de nome de arquivo no linux?


Respostas:


126

Consulte a 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 tamanho 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

45
resposta é: limite é geralmente 255 caracteres (para aqueles que estão com preguiça de clicar neste link)
DOC_ID

11
Sua resposta deve conter pelo menos um resumo das informações relevantes no link fornecido. Não é apenas um link.
Zrajm 15/09/2013

2
@rahmanisback que é certo para os limites de nomes de arquivos, enquanto os limites de caminho são geralmente definidas pelo sistema operacional, não FS (com exceção de alguns FSEs estranhos como iso ou NTFS), e, em Linux, são 4K
nonchip

2
Na verdade, era sobre os dois: D
nonchip

7
Apenas apontando: bytes! = Chars, especialmente se você usar UTF-8. Veja aqui .
Kris

87

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


10
Desculpe, mas sou novo aqui e não posso nem comentar, salvar voto. A resposta anterior (por sfp) deve ser aumentada, pois responde completamente à pergunta, enquanto as outras estão parcialmente desligadas. Mais uma vez, desculpe por ir além das regras, mas não posso ficar quieto quando a melhor resposta está na parte inferior.
David Balažic

1
Apenas apontando: bytes! = Chars, especialmente se você usar UTF-8. Veja aqui .
Kris

1
@ DavidBalažic: Embora seja verdade, PATH_MAX no Linux é apenas uma diretriz, a maioria dos sistemas de arquivos subjacentes não tem uma limitação. Isso dificulta a referência a caminhos maiores que esse tamanho. Eu costumo usar "pedaços" de PATH_MAX como tamanho.
Rahly 30/05

23

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 funções pathconfefpathconf conforme proposto por Michael Aaron Safyan
  • Crie um nome de arquivo (ou nome do caminho) mais e mais, conforme explicado pelo dogbane
  • Use o comando getconfproposto por tim, que também está disponível no Linux:

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


20

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.


1
A maioria dos programas é limitada com caminhos absolutos para PATH_MAX = 4096, no entanto. Isso pode ser contornado se o seu programa puder usar caminhos relativos e você alterar seu diretório de trabalho primeiro.
Mikko Rantalainen

Isso ocorre porque várias APIs POSIX como getcwde realpath(que você pode reimplementar no código do espaço do usuário lendo os metadados .e depois alterando ..e repetindo até atingir a raiz do sistema de arquivos) dependem PATH_MAX. ( Fonte )
ssokolow 13/03

6

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

Portanto, como os sistemas de arquivos extX têm um limite de nome de arquivo menor do que o definido no kernel, você nunca alcançaria esse limite, a menos que ele também contenha nomes de caminho, certo?
1819 Ivan Ivan

1
é assim que me parece. Há também PATH_MAX para o caminho, que é 4096, por isso seria atingido antes do tamanho do caminho "ilimitado" nos exts ... Não tenho certeza de como o sistema operacional resolve suas próprias restrições internas e as do FS, nunca tiveram meus braços naquele fundo. pergunta interessante embora.
jj33

4096 caracteres é um nome de caminho infernal. Tenho certeza de que poderia ser levantada com uma recompilação, mas honestamente, / por que você precisa caminhos tanto tempo /?
Avery Payne

Não sei se você precisaria ou não. Eu o vejo mais como uma proteção contra programas maliciosos ou negligentes (eu podia ver facilmente um script que se comporta mal e começa a criar o mesmo diretório recursivamente. Na verdade, eu criei esse script, mas ele estava redirecionando um site, não criando diretórios ...)
Jj33 19/05/09

@AveryPayne Para adicionar tags aos arquivos para que eles possam ser pesquisados ​​usando um simples locate.
Hubert Kario

3

Não há como determinar o tamanho máximo dos 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_MAXcomo um limite inferior. É garantido que você poderá criar caminhos por tanto tempo, mas também poderá criar caminhos muito mais longos.


Uma maneira simples e portátil de encontrar o tamanho máximo empiricamente é escrever um programa que crie cadeias de diretórios cada vez mais longas e ver onde ele falha. Você não saberá exatamente por que ela falhará (embora espere uma mensagem de erro legível por humanos), mas saberá até onde pode ir com segurança. Lembre-se de verificar o comprimento do diretório individual, o comprimento relativo do nome do caminho e o comprimento absoluto do nome do caminho.
Tripleee

Além disso, por exemplo, o os.pathconf()módulo Python terá algumas respostas; se a porta Python for boa, elas devem ser razoáveis.
tripleee

2
Você não pode, porque alguns sistemas de arquivos não impõem limites . Ele falharia mais cedo com um erro de falta de memória do qual qualquer programa teria dificuldade em se recuperar.
Björn Lindqvist

Esta é a resposta correta, exceto que isso se deve ao comentário do @ BjörnLindqvist. PATH_MAX é apenas uma diretriz e 99% dos arquivos provavelmente estarão dentro desse limite.
Rahly

1

Você sempre deve usar o pathconf ou alguma função como essa para obter o valor do tempo de execução dos itens especificados, pois esta página dizia 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.


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 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 */
...
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.