Vraag Lengte bestandslimieten voor linux?


Zijn er limieten voor bestandsnaam of padlengte voor Linux?


110
2018-05-18 17:27


oorsprong




antwoorden:


Zie de Wikipedia-pagina over vergelijken van bestandssystemen, vooral in kolom Maximale lengte bestandsnaam.

Hier zijn een paar bestandsnaamlengtegrenzen in populaire bestandssystemen:

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



antwoord is: limiet is meestal 255 tekens (voor diegenen die te lui zijn om op deze link te klikken) - rahmanisback
Uw antwoord moet op zijn minst een samenvatting van de relevante informatie in de verstrekte link bevatten. Niet alleen een link. - zrajm
@rahmanisback is goed voor bestandsnaamlimieten, terwijl padlimieten meestal worden gedefinieerd door het besturingssysteem, niet door FS (behalve voor sommige vreemde FS's zoals iso of ntf's) en, op Linux, 4K - nonchip
Eigenlijk ging het om beide: D - nonchip
Gewoon wijzen: bytes! = Tekens, vooral als u UTF-8 gebruikt. Zien hier. - Kris


Ik heb gelezen hier die padlengtegrens bevindt zich in systeemheaders. De lengte limiet voor bestandsnamen is er ook. Op mijn systeem is het bestand:

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

en C-lang definieert:

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

en nog wat meer.


81
2017-08-31 08:58



Sorry, maar ik ben hier nieuw en kan zelfs geen commentaar geven, behalve stemmen. Het vorige antwoord (door sfp) moet worden verhoogd, omdat het de vraag volledig beantwoordt, terwijl de anderen gedeeltelijk uit zijn. Nogmaals, sorry voor het gaan naast de regels, maar ik kan niet stil zijn wanneer het beste antwoord onderaan is. - David Balažic
Gewoon wijzen: bytes! = Tekens, vooral als u UTF-8 gebruikt. Zien hier. - Kris
@ DavidBalažic: Hoewel waar, PATH_MAX onder Linux is slechts een richtlijn, de meeste onderliggende bestandssystemen hebben geen beperking. Dit maakt het moeilijk om naar paden te verwijzen die groter zijn dan die grootte. Ik gebruik meestal "chunks" van PATH_MAX als een maat. - Rahly


Ik verwijs naar andere antwoorden, stuur ze alsjeblieft upvote.

Zijn er limieten voor bestandsnaam of padlengte voor Linux?

Ja, bestandsnaam en padlengte worden beperkt door:

Om deze eigenschappen dynamisch te krijgen:

  • Gebruik functies pathconf en fpathconf zoals voorgesteld door Michael Aaron Safyan
  • Maak een bestandsnaam (of padnaam) langer en langer zoals uitgelegd door dogbane
  • Gebruik de opdracht getconf zoals voorgesteld door tim dat is ook beschikbaar op Linux:

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

20
2018-05-24 07:35





En om tijd te besparen (en te verankeren in het geheugen):

ext2, ext3, ext4, zfs: geen padnaamlimieten; 255 bytes bestandsnaam limiet.


17
2018-05-18 18:15



De meeste programma's zijn gelimiteerd met absolute paden naar PATH_MAX = 4096. Dat kan worden opgelost als uw programma relatieve paden kan gebruiken en u uw werkdirectory als eerste wijzigt. - Mikko Rantalainen


Dat zijn bestandsnaamlengten van het bestandssysteem. "linux" zelf heeft ook wat. Bijvoorbeeld, van bits / stdio_lim.h:

# define FILENAME_MAX 4096

6
2018-03-22 18:31



Dus omdat de extX-bestandssystemen een lagere bestandsnaamlimiet hebben dan wat in de kernel is gedefinieerd, zou je nooit die limiet bereiken, tenzij het ook padnamen omvat, toch? - Ivan
zo ziet het er voor mij uit. Er is ook PATH_MAX voor het pad, dat is 4096, dus het zou worden geraakt vóór de "onbeperkte" padgrootte op de exten ... Ik ben niet zeker hoe het besturingssysteem zijn eigen interne beperkingen en die van de FS oplost, nooit had mijn armen in die diepte. interessante vraag hoor. - jj33
4096 tekens is een helluva padnaam. Ik weet zeker dat het kan worden verhoogd met een nieuwe compilatie, maar eerlijk gezegd, / waarom zou je padnamen nodig hebben die lang duren? / - Avery Payne
Ik weet niet zeker of je het nodig hebt of niet. Ik beschouw het meer als een bescherming tegen kwaadwillende of nalatige programma's (ik zou gemakkelijk een script kunnen zien dat zich slecht gedraagt ​​en begint hetzelfde recursief te creëren. Eigenlijk, ik heb dat script gemaakt, maar het was een website aan het omleiden, niet aan het creëren van dirs ...). - jj33
@AveryPayne Tags toevoegen aan bestanden zodat ze konden worden doorzocht met behulp van een eenvoudige locate. - Hubert Kario


Er bestaat echt niet om de maximale lengte van paden op Linux op een draagbare manier te bepalen. Op mijn systeem:

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

Maar ik kan gemakkelijk paden maken die veel langer zijn dan 4096 tekens. In plaats daarvan zien PATH_MAX als een ondergrens. Je kunt gegarandeerd al heel lang paden maken, maar je kunt ook veel langere paden maken.


3
2018-01-16 02:17



Een eenvoudige, draagbare manier om empirisch de maximale lengte te vinden, is door een programma te schrijven dat langere en langere directoryketens creëert en ziet waar het faalt. U zult niet precies weten waarom het mislukt (hoewel u op een suggestieve door mensen leesbare foutmelding zou hopen), maar u zult weten hoe ver u veilig kunt gaan. Vergeet niet om zowel de individuele directorylengte, relatieve padnaamlengte en absolute padnaamlengte te controleren. - tripleee
Ook b.v. de Python os.pathconf() module zal enkele antwoorden hebben; als de Python-poort goed is, moeten ze redelijk zijn. - tripleee
Dat kan niet omdat sommige bestandssystemen niet opleggen elke limiet. Het zou eerder mislukken met een geheugenfout die bij een programma moeilijk te herstellen is. - Björn Lindqvist
Dit is het juiste antwoord, behalve dat dit het gevolg is van de reactie @ BjörnLindqvist. PATH_MAX is slechts een richtlijn en 99% van de bestanden zal waarschijnlijk binnen die limiet vallen. - Rahly


Je moet altijd gebruiken pathconf of een functie als deze om de runtime-waarde te krijgen over de opgegeven items, zoals deze pagina zei dat:

Er moet echter worden opgemerkt dat veel van de vermelde limieten niet onveranderlijk zijn en dat tijdens runtime de waarde van de limiet kan verschillen van de waarden in deze kop, om de volgende redenen:

  • De limiet is padnaamafhankelijk.

  • De limiet verschilt tussen de compileer- en runtime-machines.

Om deze redenen kan een toepassing de functies fpathconf (), pathconf () en sysconf () gebruiken om de werkelijke waarde van een limiet tijdens runtime te bepalen.


1
2017-12-05 01:49