سؤال حدود طول اسم الملف على لينكس؟


هل هناك أي أسماء ملفات أو حدود لطول المسار على Linux؟


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 هذا صحيح لحدود اسم الملف ، في حين يتم تحديد حدود المسار عادة من قبل نظام التشغيل ، وليس FS (باستثناء بعض FSs غريبة مثل ISO أو ntfs) ، وعلى لينكس ، هي 4K - nonchip
في الواقع كان الأمر يتعلق بكل من: D - nonchip
مجرد الإشارة إلى: البايت! = أحرف ، خاصة إذا كنت تستخدم UTF-8. نرى هنا. - Kris


أنا قد قرأت هنا الحد طول هذا المسار في رؤوس النظام. الحد الأقصى لطول اسم الملف موجود أيضًا. على نظام بلدي ملف:

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

ويعرف C-lang:

  #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



عذرا ، لكني جديد هنا لا يمكن حتى التعليق ، حفظ التصويت. يجب أن ترفع الإجابة السابقة (بواسطة sfp) ، حيث أنها تجيب على السؤال بالكامل ، بينما تكون الإجابات الأخرى جزئية. مرة أخرى ، آسف على الذهاب إلى جانب القواعد ، ولكن لا يمكنني أن أكون هادئًا عندما تكون أفضل إجابة في الأسفل. - David Balažic
مجرد الإشارة إلى: البايت! = أحرف ، خاصة إذا كنت تستخدم UTF-8. نرى هنا. - Kris
@ DavidBalažic: على الرغم من صحته ، PATH_MAX تحت لينكس هو مجرد توجيهي ، فإن معظم أنظمة الملفات الأساسية ليس لها قيود. هذا يجعل من الصعب مرجع المسارات التي أكبر من هذا الحجم. عادة ما أستخدم "قطع" من PATH_MAX كحجم. - Rahly


أشير إلى إجابات أخرى ، يرجى تقييمها.

هل هناك أي أسماء ملفات أو حدود لطول المسار على Linux؟

نعم ، يتم تحديد أسماء الملفات وأطوال المسار بواسطة:

للحصول على هذه الخصائص ديناميكيًا:

  • استخدام الوظائف pathconf و fpathconf كما اقترحه مايكل هارون صفيان
  • قم بإنشاء اسم ملف (أو اسم مسار) أطول وأطول كما هو موضح بواسطة شجرة سامة
  • استخدم الأمر getconf كما اقترحه تيم يتوفر أيضًا على نظام التشغيل Linux:

    $ 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 ، لذلك سوف يتم ضربه قبل حجم المسار "غير المحدود" في exts ... لست متأكداً من كيفية حل نظام التشغيل لقيوده الداخلية الخاصة وقيود الخدمة الثابتة ، ذراعي في ذلك العميق. سؤال مثير للاهتمام على الرغم من. - jj33
4096 حرفًا هو اسم مسار helluva. أنا متأكد من أنه يمكن طرحه مع recompile ، ولكن بصراحة ، / لماذا تحتاج إلى أسماء المسارات التي طويلة؟ / - Avery Payne
لست متأكدًا من أنك ستحتاجها أم لا. أنا أعتبرها أكثر كحماية ضد البرامج الخبيثة أو الإهمال (يمكن أن أرى بسهولة برنامج نصي يتصرف بشكل سيئ ويبدأ في إنشاء نفس دير بشكل متكرر. في الواقع ، لقد قمت بعمل ذلك البرنامج النصي ، لكنه كان يعيد توجيه موقع ويب ، وليس إنشاء dirs ...). - 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