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


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


110
2018-05-18 17:27


मूल




जवाब:


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

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

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



जवाब है: सीमा आमतौर पर 255 वर्ण (उन लोगों के लिए जो इस लिंक पर क्लिक करने के लिए बहुत आलसी हैं) - rahmanisback
आपके उत्तर में प्रदान किए गए लिंक में प्रासंगिक जानकारी का कम से कम सारांश होना चाहिए। सिर्फ एक लिंक नहीं। - zrajm
@rahmanisback जो फ़ाइल नाम सीमाओं के लिए सही है, जबकि पथ सीमा आमतौर पर ओएस द्वारा परिभाषित की जाती है, एफएस नहीं (कुछ अजीब एफएस जैसे आईएसओ या एनटीएफएस को छोड़कर), और लिनक्स पर, 4K - nonchip
दरअसल यह दोनों के बारे में था: डी - nonchip
बस इंगित करें: बाइट्स! = वर्ण, विशेष रूप से यदि आप यूटीएफ -8 का उपयोग करते हैं। देख यहाँ। - Kris


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

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

और कुछ और।


81
2017-08-31 08:58



क्षमा करें, लेकिन मैं यहां नया हूं, यहां तक ​​कि टिप्पणी भी नहीं कर सकता, वोट बचा सकता हूं। पिछला उत्तर (एसएफपी द्वारा) ऊपर उठाया जाना चाहिए, क्योंकि यह पूरी तरह से सवाल का जवाब देता है, जबकि अन्य आंशिक रूप से बंद होते हैं। दोबारा, नियमों के अलावा जाने के लिए खेद है, लेकिन सबसे अच्छा जवाब नीचे होने पर मैं चुप नहीं रह सकता। - David Balažic
बस इंगित करें: बाइट्स! = वर्ण, विशेष रूप से यदि आप यूटीएफ -8 का उपयोग करते हैं। देख यहाँ। - Kris
@ डेविडबालाज़िक: हालांकि सच है, लिनक्स के तहत PATH_MAX सिर्फ एक दिशानिर्देश है, अंतर्निहित फाइल सिस्टम में से अधिकांश की सीमा नहीं है। इससे उस आकार से अधिक पथों को संदर्भित करना मुश्किल हो जाता है। मैं आमतौर पर आकार के रूप में PATH_MAX के "भाग" का उपयोग करता हूं। - Rahly


मैं अन्य उत्तरों का उल्लेख करता हूं, कृपया उन्हें ऊपर उठाएं।

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

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

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

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

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

20
2018-05-24 07:35





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

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


17
2018-05-18 18:15



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


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

# define FILENAME_MAX 4096

6
2018-03-22 18:31



इसलिए जब से extx फाइल सिस्टम में कर्नेल में परिभाषित की तुलना में कम फ़ाइल नाम सीमा है, तो आप कभी भी उस सीमा को नहीं दबाएंगे, जब तक कि यह पथनाम भी शामिल न करे, है ना? - Ivan
यह मेरे जैसा दिखता है। पथ के लिए PATH_MAX भी है, जो 4096 है, इसलिए इसे एक्स्ट्स पर "असीमित" पथ आकार से पहले मारा जाएगा ... मुझे यकीन नहीं है कि ओएस अपने आंतरिक प्रतिबंधों और एफएस के उन लोगों को कैसे हल करता है, कभी नहीं उस गहरे में मेरी बाहें। हालांकि दिलचस्प सवाल है। - jj33
40 9 6 वर्ण एक हेलुवा पथ नाम है। मुझे यकीन है कि इसे एक पुनर्मूल्यांकन के साथ उठाया जा सकता है, लेकिन ईमानदारी से, / आपको लंबे समय तक पथनामों की आवश्यकता क्यों होगी? / - Avery Payne
मुझे यकीन नहीं है कि आपको इसकी आवश्यकता होगी या नहीं। मैं इसे दुर्भावनापूर्ण या लापरवाह कार्यक्रमों के खिलाफ सुरक्षा के रूप में और अधिक देखता हूं (मैं आसानी से एक ऐसी स्क्रिप्ट देख सकता हूं जो खराब व्यवहार करता है और उसी हिरण को दोबारा शुरू करना शुरू कर देता है। असल में, मैंने यह स्क्रिप्ट बनाई है, लेकिन यह एक वेबसाइट को रीडायरेक्ट कर रहा था, डीआईआर नहीं बना रहा था ...)। - jj33
@AveryPayne फ़ाइलों में टैग जोड़ने के लिए ताकि उन्हें सरल उपयोग करके खोजा जा सके locate। - Hubert Kario


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

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

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


3
2018-01-16 02:17



अधिकतम लंबाई को अनुभवी रूप से ढूंढने का एक सरल पोर्टेबल तरीका एक प्रोग्राम लिखना है जो लंबी और लंबी निर्देशिका श्रृंखला बनाता है, और देखें कि यह कहां विफल रहता है। आपको पता नहीं चलेगा कि यह क्यों विफल रहता है (हालांकि आप एक मानवीय पठनीय त्रुटि संदेश के लिए आशा करेंगे) लेकिन आपको पता चलेगा कि आप कितनी दूर सुरक्षित रूप से जा सकते हैं। व्यक्तिगत निर्देशिका लंबाई, सापेक्ष पथनाम लंबाई, और पूर्ण पथनाम लंबाई दोनों की जांच करना याद रखें। - tripleee
इसके अलावा, उदा। पायथन os.pathconf() मॉड्यूल के कुछ जवाब होंगे; अगर पाइथन बंदरगाह अच्छा है, तो वे उचित होना चाहिए। - tripleee
आप इसलिए नहीं कर सकते क्योंकि कुछ फाइल सिस्टम लागू नहीं होते हैं कोई सीमा। यह जल्द ही स्मृति त्रुटि से बाहर असफल हो जाएगा जो किसी भी प्रोग्राम से पुनर्प्राप्त करने में कठिन समय होगा। - Björn Lindqvist
यह सही जवाब है, सिवाय इसके कि यह @ BjörnLindqvist टिप्पणी के कारण है। PATH_MAX सिर्फ एक दिशानिर्देश है, और 99% फाइलें शायद उस सीमा के भीतर होंगी। - Rahly


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

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

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

  • संकलन और रनटाइम मशीनों के बीच सीमा अलग है।

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


1
2017-12-05 01:49





यह सिस्टम में निर्दिष्ट है limits.h शीर्ष लेख फ़ाइल।

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

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

0