Limiti di lunghezza del nome file su Linux?


Risposte:


126

Vedi la pagina Wikipedia sul confronto dei file system , specialmente nella colonna Lunghezza massima del nome file .

Ecco alcuni limiti di lunghezza del nome file nei file system più diffusi:

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
la risposta è: il limite è di solito 255 caratteri (per coloro che sono troppo pigri per fare clic su questo link)
doc_id

11
La risposta deve contenere almeno un riepilogo delle informazioni pertinenti nel collegamento fornito. Non solo un link.
Zrajm,

2
@rahmanisback è giusto per i limiti dei nomi dei file, mentre i limiti dei percorsi sono generalmente definiti dal sistema operativo, non da FS (ad eccezione di alcuni strani FS come iso o ntfs), e, su Linux, sono 4K
nonchip

2
In realtà si trattava di entrambi: D
nonchip

7
Solo sottolineando: bytes! = Chars, specialmente se usi UTF-8. Vedi qui .
Kris,

87

Ho letto qui che il limite di lunghezza del percorso è nelle intestazioni di sistema. C'è anche il limite di lunghezza del nome file. Sul mio sistema è il file:

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

e C-lang definisce:

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

e un po 'di più.


10
Mi dispiace, ma sono nuovo qui e non posso nemmeno commentare, salvo votare. La risposta precedente (di sfp) dovrebbe essere aumentata, poiché risponde completamente alla domanda, mentre le altre sono parzialmente disattivate. Ancora una volta, mi dispiace per andare oltre le regole, ma non posso stare zitto quando la risposta migliore è in fondo.
David Balažic,

1
Solo sottolineando: bytes! = Chars, specialmente se usi UTF-8. Vedi qui .
Kris,

1
@ DavidBalažic: Anche se vero, PATH_MAX su Linux è solo una linea guida, la maggior parte dei file system sottostanti non ha limiti. Questo rende difficile fare riferimento a percorsi più grandi di quella dimensione. Di solito uso "pezzi" di PATH_MAX come dimensione.
Rahly,

23

Mi riferisco ad altre risposte, per favore votale.

Esistono limiti di lunghezza del nome file o del percorso su Linux?

Sì, le lunghezze di nome file e percorso sono limitate da:

Per ottenere dinamicamente queste proprietà:

  • Utilizzare le funzioni pathconfefpathconf come proposto da Michael Aaron Safyan
  • Crea un nome file (o nome percorso) più lungo e più lungo come spiegato da dogbane
  • Usa il comando getconfcome proposto da tim che è disponibile anche su Linux:

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


20

E per risparmiare tempo (e ancorarlo alla memoria):

ext2, ext3, ext4, zfs: nessun limite di percorso; 255 byte limite di nome file.


1
La maggior parte dei programmi è limitata a percorsi assoluti PATH_MAX = 4096, tuttavia. Ciò può essere risolto se il programma è in grado di utilizzare percorsi relativi e si cambia prima la directory di lavoro.
Mikko Rantalainen,

È perché si basano varie API POSIX come getcwde realpath(che è possibile reimplementare nel codice dello spazio utente leggendo i metadati .e cambiando ..e ripetendo fino a quando non si colpisce la radice del filesystem) PATH_MAX. ( Fonte )
ssokolow,

6

Quelle sono le lunghezze dei nomi del file system. "Linux" stesso ha anche alcuni. Ad esempio, da bits / stdio_lim.h:

# define FILENAME_MAX 4096

Quindi, poiché i filesystem extX hanno un limite di nome file inferiore a quello che è definito nel kernel, non avresti mai raggiunto quel limite, a meno che non includesse anche nomi di percorso, giusto?
Ivan,

1
questo è quello che mi sembra. C'è anche PATH_MAX per il percorso, che è 4096, quindi verrebbe colpito prima della dimensione "illimitata" del percorso sugli est ... Non sono sicuro di come il sistema operativo risolva le proprie restrizioni interne e quelle dell'FS, mai avuto le mie braccia così profonde. domanda interessante però.
jj33,

4096 caratteri è un nome di percorso helluva. Sono sicuro che potrebbe essere generato con una ricompilazione, ma onestamente, / perché avresti bisogno di nomi di percorso così a lungo? /
Avery Payne,

Non sono sicuro che ne avresti bisogno o no. Lo vedo più come una protezione contro programmi dannosi o negligenti (potrei facilmente vedere uno script che si comporta male e inizia a creare la stessa directory in modo ricorsivo. In realtà, ho creato quello script, ma stava reindirizzando un sito Web, non creando directory ...).
jj33

@AveryPayne Per aggiungere tag ai file in modo che possano essere cercati usando un semplice locate.
Hubert Kario,

3

Non è possibile determinare la lunghezza massima dei percorsi su Linux in modo portatile. Sul mio sistema:

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

Ma posso facilmente creare percorsi molto più lunghi di 4096 caratteri. Invece vedi PATH_MAXcome un limite inferiore. Sei sicuro di essere in grado di creare percorsi così a lungo, ma potresti anche essere in grado di creare percorsi molto più lunghi.


Un modo portatile semplice per trovare la massima lunghezza empiricamente è scrivere un programma che crea catene di directory sempre più lunghe e vedere dove fallisce. Non saprai esattamente perché non funziona (anche se spererai in un messaggio di errore leggibile dall'uomo) ma saprai fino a che punto puoi andare in sicurezza. Ricordarsi di verificare sia la lunghezza della singola directory, la lunghezza relativa del percorso e la lunghezza assoluta del percorso.
Tripleee

Inoltre, ad esempio il os.pathconf()modulo Python avrà alcune risposte; se la porta Python è buona, dovrebbero essere ragionevoli.
Tripleee,

2
Non puoi perché alcuni filesystem non impongono alcun limite . Presto fallirebbe con un errore di memoria insufficiente da cui qualsiasi programma avrebbe difficoltà a recuperare.
Björn Lindqvist,

Questa è la risposta corretta, tranne che per il commento di @ BjörnLindqvist. PATH_MAX è solo una linea guida e il 99% dei file sarà probabilmente entro quel limite.
Rahly,

1

Dovresti sempre usare pathconf o qualche funzione come questa per ottenere il valore di runtime sugli elementi specificati, come diceva questa pagina :

Va notato, tuttavia, che molti dei limiti elencati non sono invarianti e, in fase di esecuzione, il valore del limite può differire da quelli indicati in questa intestazione, per i seguenti motivi:

  • Il limite dipende dal percorso.

  • Il limite differisce tra le macchine di compilazione e di runtime.

Per questi motivi, un'applicazione può utilizzare le funzioni fpathconf (), pathconf () e sysconf () per determinare il valore effettivo di un limite in fase di esecuzione.


0

È specificato nel file di intestazione del sistema limits.h .

Ecco uno di questi file:

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

Ecco dove si trovano le copie di questo file e i valori che definiscono:

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

Produzione:

...
/usr/include/linux/limits.h:#define NAME_MAX         255        /* # chars in a file name */
...
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.