it-swarm.com.de

Dateinamenlängenbeschränkungen unter Linux?

Gibt es unter Linux Dateinamen- oder Pfadlängenbeschränkungen?

130
ro.

Siehe Wikipedia-Seite zum Dateisystemvergleich , insbesondere in Spalte Maximale Dateinamenlänge .

Hier sind einige Längenbeschränkungen für Dateinamen in gängigen Dateisystemen:

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

Ich habe hier gelesen, dass sich die Pfadlängenbeschränkung in Systemheadern befindet. Die maximale Länge des Dateinamens ist ebenfalls vorhanden. Auf meinem System ist es Datei:

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

und C-lang definiert:

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

und noch mehr.

90
sfp

Ich verweise auf andere Antworten, bitte stimmen Sie ihnen zu.

Gibt es unter Linux Dateinamen- oder Pfadlängenbeschränkungen?

Ja, Dateinamen- und Pfadnamenlängen sind begrenzt durch:

So erhalten Sie diese Eigenschaften dynamisch:

  • Verwenden Sie die Funktionen pathconf und fpathconf wie von Michael Aaron Safyan vorgeschlagen
  • Erstellen Sie einen Dateinamen (oder Pfadnamen) länger und länger, wie durch dogbane erklärt
  • Verwenden Sie den Befehl getconf, wie von tim vorgeschlagen, der auch unter Linux verfügbar ist:

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

Und um Zeit zu sparen (und sie im Gedächtnis zu verankern):

ext2, ext3, ext4, zfs: keine Pfadnamenbeschränkungen; 255 Bytes Dateinamenlimit.

20
Ivan

Dies sind die Längen der Dateisystemnamen. "Linux" selbst hat auch einige. Zum Beispiel aus bits/stdio_lim.h:

# define FILENAME_MAX 4096
6
jj33

Es gibt keine Möglichkeit, um die maximale Länge von Pfaden unter Linux auf tragbare Weise zu bestimmen. Auf meinem System:

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

Aber ich kann leicht Pfade erstellen, die viel länger als 4096 Zeichen sind. Siehe stattdessen PATH_MAX als Untergrenze. Sie können garantiert so lange Pfade erstellen, aber möglicherweise auch viel längere.

3

Sie sollten immer pathconf oder eine Funktion wie diese verwenden, um den Laufzeitwert für die angegebenen Elemente zu erhalten, wie dies Seite sagte ::

Es ist jedoch zu beachten, dass viele der aufgelisteten Grenzwerte nicht unveränderlich sind und der Wert des Grenzwerts zur Laufzeit aus folgenden Gründen von dem in diesem Header angegebenen Wert abweichen kann:

  • Das Limit ist vom Pfadnamen abhängig.

  • Das Limit unterscheidet sich zwischen der Kompilierungs- und der Laufzeitmaschine.

Aus diesen Gründen kann eine Anwendung die Funktionen fpathconf (), pathconf () und sysconf () verwenden, um den tatsächlichen Wert eines Grenzwerts zur Laufzeit zu bestimmen.

1
andy

Es ist in der Header-Datei system limit.h angegeben.

Hier ist eine dieser Dateien:

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

Hier befinden sich Kopien dieser Datei und die von ihnen definierten Werte:

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

Ausgabe:

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