लिनक्स पर फ़ाइल नाम की लंबाई सीमा?


122

क्या लिनक्स पर कोई फ़ाइल नाम या पथ लंबाई सीमाएं हैं?

जवाबों:


126

फ़ाइल सिस्टम तुलना के बारे में विकिपीडिया पृष्ठ देखें , विशेष रूप से कॉलम में अधिकतम फ़ाइल नाम लंबाई

यहाँ लोकप्रिय फ़ाइल सिस्टम में कुछ फ़ाइल नाम की सीमाएँ दी गई हैं:

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
उत्तर है: सीमा आमतौर पर 255 वर्ण है (उन लोगों के लिए जो इस लिंक पर क्लिक करने के लिए बहुत आलसी हैं)
doc_id

11
आपके उत्तर में दिए गए लिंक में कम से कम प्रासंगिक जानकारी का सारांश होना चाहिए। सिर्फ एक कड़ी नहीं।
zrajm

2
@rahmanisback फ़ाइल नाम सीमाओं के लिए सही है, जबकि पथ सीमाएँ आमतौर पर OS द्वारा परिभाषित की जाती हैं, FS नहीं (आइसो या ntfs जैसे कुछ अजीब FS के लिए) को छोड़कर, और, linux पर, 4K
nonchip

2
वास्तव में यह दोनों के बारे में था: डी
नॉनचिप

7
केवल इंगित करते हुए: बाइट्स! = वर्ण, खासकर यदि आप UTF-8 का उपयोग करते हैं। देखें यहाँ
क्रिश

87

मैंने यहां पढ़ा है कि सिस्टम हेडर में पथ की लंबाई सीमा है। फ़ाइल नाम की लंबाई सीमा भी है। मेरे सिस्टम पर यह फ़ाइल है:

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

और सी-लैंग परिभाषित करता है:

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

और कुछ और।


10
क्षमा करें, लेकिन मैं यहाँ नया हूँ, टिप्पणी भी नहीं कर सकता, वोट बचाओ। पिछले उत्तर (sfp द्वारा) को ऊपर ले जाना चाहिए, क्योंकि यह पूरी तरह से प्रश्न का उत्तर देता है, जबकि अन्य आंशिक रूप से बंद होते हैं। फिर से, नियमों के अलावा जाने के लिए खेद है, लेकिन मैं शांत नहीं हो सकता जब सबसे अच्छा जवाब नीचे हो।
डेविड बालाजी 23

1
केवल इंगित करते हुए: बाइट्स! = वर्ण, खासकर यदि आप UTF-8 का उपयोग करते हैं। देखें यहाँ
क्रिश

1
@ DavidBalažic: हालांकि सच है, लिनक्स के तहत PATH_MAX सिर्फ एक दिशानिर्देश है, अधिकांश अंतर्निहित फ़ाइल सिस्टम में सीमा नहीं है। इससे उन रास्तों को संदर्भित करना कठिन हो जाता है जो उस आकार से अधिक हैं। मैं आमतौर पर एक आकार के रूप में PATH_MAX के "विखंडू" का उपयोग करता हूं।
राहली

23

मैं अन्य उत्तरों का संदर्भ देता हूं, कृपया उन्हें बढ़ाएं।

क्या लिनक्स पर कोई फ़ाइल नाम या पथ लंबाई सीमाएं हैं?

हां, फ़ाइल नाम और पाथने की लंबाई सीमित है:

इन गुणों को गतिशील रूप से प्राप्त करने के लिए:

  • फ़ंक्शंस का उपयोग करें pathconfऔरfpathconf जैसा कि माइकल आरोन सफ़्यान द्वारा प्रस्तावित किया गया है
  • Dogbane द्वारा समझाया गया लंबा और लंबा फ़ाइल नाम (या pathname) बनाएँ
  • लिनक्स पर उपलब्ध टिमgetconf द्वारा प्रस्तावित कमांड का उपयोग करें :

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


20

और समय बचाने के लिए (और इसे स्मृति में लंगर डालना):

ext2, ext3, ext4, zfs: कोई पथनाम सीमा नहीं; 255 बाइट्स फ़ाइल नाम सीमा।


1
अधिकांश कार्यक्रम PATH_MAX = 4096हालांकि, पूर्ण पथ के साथ सीमित हैं । यदि आपके कार्यक्रम को सापेक्ष पथों का उपयोग करने में सक्षम है और आप अपनी कार्यशील निर्देशिका को पहले बदलते हैं, तो इसके आसपास काम किया जा सकता है।
मिकको रैंटलैनेन

ऐसा इसलिए है क्योंकि विभिन्न POSIX API जैसे getcwdऔर realpath(जिसे आप मेटाडेटा पढ़ने के लिए और फिर फाइल सिस्टम रूट पर तब तक बदलते और दोहराते हुए यूजर्स कोड में पुन: लागू कर सकते हैं ) भरोसा करते हैं । ( स्रोत )...PATH_MAX
ssokolow

6

उन फ़ाइल सिस्टम नाम लंबाई हैं। "linux" में खुद भी कुछ है। उदाहरण के लिए, बिट्स / stdio_lim.h से:

# define FILENAME_MAX 4096

चूंकि एक्सएक्सएक्स फाइल सिस्टम में कर्नेल में परिभाषित की तुलना में कम फ़ाइल नाम की सीमा होती है, इसलिए आप कभी भी उस सीमा को नहीं मारेंगे, जब तक कि यह मार्गनाम भी नहीं भरता है, है ना?
इवान

1
यह मेरे जैसा दिखता है। पथ के लिए PATH_MAX भी है, जो कि 4096 है, इसलिए इसे एक्सटेस पर "असीमित" पथ आकार से पहले मारा जाएगा ... मुझे यकीन नहीं है कि ओएस अपने स्वयं के आंतरिक प्रतिबंधों और एफएस के उन लोगों को कैसे हल करता है, कभी नहीं था उस गहरी में मेरी बाहों दिलचस्प सवाल हालांकि।
jj33

4096 अक्षर एक नरकुवा पथ नाम है। मुझे यकीन है कि इसे एक recompile के साथ उठाया जा सकता है, लेकिन ईमानदारी से, / आपको उस लंबे नाम की आवश्यकता क्यों होगी? /
Avery Payne

मुझे यकीन नहीं है कि आपको इसकी आवश्यकता होगी या नहीं। मैं इसे दुर्भावनापूर्ण या लापरवाह कार्यक्रमों के खिलाफ सुरक्षा के रूप में अधिक देखता हूं (मैं आसानी से एक स्क्रिप्ट देख सकता हूं जो खराब व्यवहार करता है और एक ही डीआईआर को पुनरावर्ती रूप से बनाना शुरू करता है। वास्तव में, मैंने वह स्क्रिप्ट बनाई है, लेकिन यह एक वेब साइट को रीडायरेक्ट कर रहा है, डायर नहीं बना रहा है। ...)।
jj33

@AveryPayne फ़ाइलों में टैग जोड़ने के लिए ताकि उन्हें एक साधारण का उपयोग करके खोजा जा सके locate
ह्यूबर्ट करियो

3

पोर्टेबल तरीके से लिनक्स पर पथों की अधिकतम लंबाई निर्धारित करने का कोई तरीका नहीं है । मेरे सिस्टम पर:

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

लेकिन मैं आसानी से 4096 पात्रों की तुलना में बहुत लंबे समय तक पथ बना सकता हूं। इसके बजाय PATH_MAXएक निचली सीमा के रूप में देखें । आपको गारंटी है कि यह लंबे समय तक पथ बनाने में सक्षम हैं, लेकिन आप बहुत लंबे समय तक बनाने में सक्षम हो सकते हैं।


आनुभविक रूप से अधिकतम लंबाई खोजने का एक सरल पोर्टेबल तरीका एक प्रोग्राम लिखना है जो लंबी और लंबी निर्देशिका श्रृंखला बनाता है, और देखें कि यह कहाँ विफल रहता है। आपको ठीक-ठीक पता नहीं होगा कि यह क्यों विफल हो जाता है (हालाँकि आप एक विचारोत्तेजक मानव-पठनीय त्रुटि संदेश की आशा करते हैं), लेकिन आपको पता होगा कि आप कितनी दूर सुरक्षित रूप से जा सकते हैं। व्यक्तिगत निर्देशिका लंबाई, सापेक्ष पथनाम लंबाई और पूर्ण पथनाम लंबाई दोनों की जांच करना याद रखें।
ट्रिपलए

इसके अलावा, उदाहरण के लिए पायथन os.pathconf()मॉड्यूल के कुछ उत्तर होंगे; यदि पायथन पोर्ट कोई अच्छा है, तो वे उचित होना चाहिए।
ट्रिपलए

2
आप नहीं कर सकते क्योंकि कुछ फाइल सिस्टम किसी भी सीमा को लागू नहीं करते हैं । यह मेमोरी की त्रुटि से जल्द ही विफल हो जाएगा जिससे किसी भी कार्यक्रम को ठीक होने में मुश्किल समय होगा।
ब्योर्न लिंडक्विस्ट

यह सही उत्तर है, सिवाय इसके कि @ BjörnLindqvist टिप्पणी के कारण। PATH_MAX केवल एक दिशानिर्देश है, और 99% फाइलें संभवतः उस सीमा के भीतर होंगी।
राहली

1

आपको निर्दिष्ट आइटम के बारे में रनटाइम मान प्राप्त करने के लिए हमेशा इस तरह से pathconf या कुछ फ़ंक्शन का उपयोग करना चाहिए , जैसा कि इस पृष्ठ ने कहा है कि:

हालांकि, यह ध्यान दिया जाना चाहिए कि कई सूचीबद्ध सीमाएं अपरिवर्तनीय नहीं हैं, और रनटाइम के दौरान, सीमा के मूल्य इस हेडर में दिए गए कारणों से भिन्न हो सकते हैं, निम्नलिखित कारणों से:

  • सीमा pathname- निर्भर है।

  • कम्पाइल और रनटाइम मशीनों के बीच सीमा भिन्न होती है।

इन कारणों से, एक एप्लिकेशन रनटाइम में एक सीमा के वास्तविक मूल्य को निर्धारित करने के लिए fpathconf (), pathconf (), और sysconf () फ़ंक्शन का उपयोग कर सकता है।


0

यह सिस्टम लिमिट्स में निर्दिष्ट है । हेडर फाइल।

यहाँ इन फ़ाइलों में से एक है:

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

यहां इस फ़ाइल की प्रतियां स्थित हैं और वे जिन मूल्यों को परिभाषित करते हैं:

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

आउटपुट:

...
/usr/include/linux/limits.h:#define NAME_MAX         255        /* # chars in a file name */
...
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.