Frage Länge der Dateinamenlänge auf Linux?


Gibt es Beschränkungen für Dateinamen oder Pfadlängen auf Linux?


110
2018-05-18 17:27


Ursprung




Antworten:


Siehe die Wikipedia-Seite zum Vergleich von Dateisystemenbesonders in der Spalte Maximale Länge des Dateinamens.

Hier sind einige Dateinamen-Limits 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

117
2018-05-18 17:29



Antwort ist: Limit ist normalerweise 255 Zeichen (für diejenigen, die zu faul sind, diesen Link zu klicken) - rahmanisback
Ihre Antwort sollte mindestens eine Zusammenfassung der relevanten Informationen in dem angegebenen Link enthalten. Nicht nur ein Link. - zrajm
@rahmanisback das ist richtig für Dateinamen Grenzen, während Pfadlimits in der Regel vom Betriebssystem definiert werden, nicht FS (mit Ausnahme von einigen seltsamen FSes wie ISO oder NTFS), und auf Linux sind 4K - nonchip
Eigentlich ging es um beides: D - nonchip
Nur darauf hingewiesen: Bytes! = Zeichen, vor allem, wenn Sie UTF-8 verwenden. Sehen Hier. - Kris


Ich habe gelesen Hier Dieses Pfadlängenlimit befindet sich in Systemheadern. Das Limit für die Dateinamenlänge ist auch da. 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 etwas mehr.


81
2017-08-31 08:58



Sorry, aber ich bin neu hier und kann nicht einmal kommentieren, speichern Sie die Stimme. Die vorherige Antwort (von sfp) sollte erhöht werden, da sie die Frage vollständig beantwortet, während die anderen teilweise aus sind. Es tut mir leid, dass ich neben den Regeln gegangen bin, aber ich kann nicht ruhig sein, wenn die beste Antwort unten ist. - David Balažic
Nur darauf hingewiesen: Bytes! = Zeichen, vor allem, wenn Sie UTF-8 verwenden. Sehen Hier. - Kris
@ DavidBalažic: Obwohl wahr, PATH_MAX unter Linux ist nur eine Richtlinie, die meisten der zugrunde liegenden Dateisysteme haben keine Einschränkung. Dies macht es schwierig, Pfade zu referenzieren, die größer als diese Größe sind. Normalerweise verwende ich "Chunks" von PATH_MAX als Größe. - Rahly


Ich beziehe mich auf andere Antworten, bitte upvote sie.

Gibt es Beschränkungen für Dateinamen oder Pfadlängen auf Linux?

Ja, Dateinamen und Pfadnamen sind begrenzt durch:

So erhalten Sie diese Eigenschaften dynamisch:

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

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

20
2018-05-24 07:35





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

ext2, ext3, ext4, zfs: keine Pfadnamenlimits; 255 Bytes Dateiname begrenzen.


17
2018-05-18 18:15



Die meisten Programme sind mit absoluten Pfaden begrenzt PATH_MAX = 4096obwohl. Dies kann umgangen werden, wenn Ihr Programm relative Pfade verwenden kann und Sie zuerst Ihr Arbeitsverzeichnis ändern. - Mikko Rantalainen


Dies sind die Dateisystemlängen. "Linux" selbst hat auch einige. Zum Beispiel von Bits / stdio_lim.h:

# define FILENAME_MAX 4096

6
2018-03-22 18:31



Da die extX-Dateisysteme einen niedrigeren Dateinamen haben als der, der im Kernel definiert ist, würden Sie dieses Limit niemals erreichen, außer es umfasst auch Pfadnamen, richtig? - Ivan
so sieht es für mich aus. Es gibt auch PATH_MAX für den Pfad, der 4096 ist, also würde es vor der "unbegrenzten" Pfadgröße auf den EXTs getroffen werden ... Ich bin mir nicht sicher, wie das OS seine eigenen internen Einschränkungen und die des FS löst, hatte es nie meine Arme in dieser Tiefe. interessante Frage aber. - jj33
4096 Zeichen ist ein helluva Pfadname. Ich bin sicher, dass es mit einer Neukompilierung ausgelöst werden könnte, aber ehrlich, / warum sollten Sie so lange Pfadnamen brauchen? - Avery Payne
Ich bin mir nicht sicher, ob du das brauchst oder nicht. Ich sehe es eher als Schutz vor böswilligen oder nachlässigen Programmen (ich könnte leicht ein Skript sehen, das sich schlecht verhält und anfängt, dasselbe Verzeichnis rekursiv zu erstellen. Eigentlich habe ich dieses Skript gemacht, aber es hat eine Website umgeleitet, keine Verzeichnisse erstellt ...). - jj33
@AveryPayne Um Tags zu Dateien hinzuzufügen, damit sie mit einem einfachen Suchbegriff durchsucht werden können locate. - Hubert Kario


Es gibt auf keinen Fall um die maximale Länge von Pfaden auf Linux in einer tragbaren Weise zu bestimmen. Auf meinem System:

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

Aber ich kann einfach Pfade viel länger als 4096 Zeichen erstellen. Stattdessen sehen PATH_MAX als untere Grenze. Es ist garantiert, dass Sie Pfade so lange erstellen können, aber Sie können möglicherweise auch viel längere erstellen.


3
2018-01-16 02:17



Ein einfacher portabler Weg, um die maximale Länge empirisch zu finden, besteht darin, ein Programm zu schreiben, das immer längere Verzeichnisketten erzeugt, und zu sehen, wo es fehlschlägt. Sie werden nicht genau wissen, warum es scheitert (obwohl Sie auf eine suggestive, menschenlesbare Fehlermeldung hoffen), aber Sie werden wissen, wie weit Sie sicher gehen können. Denken Sie daran, die Länge des einzelnen Verzeichnisses, die Länge des relativen Pfadnamens und die Länge des absoluten Pfadnamens zu überprüfen. - tripleee
Auch z.B. der Python os.pathconf() Modul wird einige Antworten haben; Wenn der Python-Port gut ist, sollten sie vernünftig sein. - tripleee
Sie können nicht, weil einige Dateisysteme nicht auferlegen irgendwelche Grenzen. Es würde eher mit einem Speicherfehler fehlschlagen, von dem jedes Programm sich schwer erholen könnte. - Björn Lindqvist
Dies ist die richtige Antwort, außer dass dies auf @ BjörnLindqvist-Kommentar zurückzuführen ist. PATH_MAX ist nur eine Richtlinie, und 99% der Dateien werden wahrscheinlich innerhalb dieser Grenze liegen. - Rahly


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

Es sollte jedoch beachtet werden, dass viele der aufgelisteten Grenzwerte nicht invariant sind und dass der Wert des Limits zur Laufzeit von den in diesem Header angegebenen Werten abweichen kann, und zwar aus den folgenden Gründen:

  • Das Limit ist pfadnameabhängig.

  • Das Limit unterscheidet zwischen den Kompilier- und Laufzeitmaschinen.

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


1
2017-12-05 01:49





Es ist im System angegeben Grenzen.h Header-Datei.

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 Werte, die sie definieren:

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