লিনাক্সে ফাইলের নাম দৈর্ঘ্য সীমা?


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 টি অক্ষর হয় (যারা এই লিঙ্কটি ক্লিক করতে খুব অলস তাদের জন্য)
ডকমেড

11
আপনার উত্তরে প্রদত্ত লিঙ্কটিতে প্রাসঙ্গিক তথ্যের একটি সংক্ষিপ্তসার থাকতে হবে। শুধু একটি লিঙ্ক নয়।
zrajm

2
@ রহমানিসব্যাক ফাইলের সীমাবদ্ধতার জন্য এটি সঠিক, যখন পাথ সীমাগুলি সাধারণত ওএস দ্বারা সংজ্ঞায়িত করা হয়, কিছু আইসো বা এনটিএফএসের মতো অদ্ভুত এফএস ছাড়া, এবং লিনাক্স-এ 4K হয়
ননচিপ

2
আসলে এটি উভয়ের সম্পর্কেই ছিল: ডি
ননচিপ

7
কেবল দেখানো হচ্ছে: বাইটস! = অক্ষর, বিশেষত আপনি যদি ইউটিএফ -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
দুঃখিত, তবে আমি এখানে নতুন একজন মন্তব্য করতেও পারি না, ভোট বাঁচাতে পারি। পূর্ববর্তী উত্তর (এসএফপি দ্বারা) আপ করা উচিত, কারণ এটি প্রশ্নের সম্পূর্ণরূপে উত্তর দেয়, যখন অন্যগুলি আংশিক বন্ধ থাকে। আবার, নিয়মগুলি ছাড়াও যাওয়ার জন্য দুঃখিত, তবে যখন সেরা উত্তরটি নীচে থাকে তখন আমি চুপ থাকতে পারি না।
ডেভিড বালাইচ

1
কেবল দেখানো হচ্ছে: বাইটস! = অক্ষর, বিশেষত আপনি যদি ইউটিএফ -8 ব্যবহার করেন। এখানে দেখুন ।
ক্রিস

1
@ ডেভিডবালাইক: যদিও সত্য, লিনাক্সের অধীনে প্যাথ_ম্যাক্স কেবল একটি গাইডলাইন, তবে বেশিরভাগ অন্তর্নিহিত ফাইল সিস্টেমের সীমাবদ্ধতা নেই। এটি সেই আকারের চেয়ে বড় পাথগুলিকে উল্লেখ করা শক্ত করে তোলে। আমি সাধারণত PATH_MAX এর "অংশগুলি" আকার হিসাবে ব্যবহার করি।
রাহলি

23

আমি অন্যান্য উত্তরগুলি উল্লেখ করি, দয়া করে সেগুলি উঁচু করুন।

লিনাক্সে কোনও ফাইল নাম বা পাথ দৈর্ঘ্যের সীমা আছে?

হ্যাঁ, ফাইলের নাম এবং পথের নামগুলি এর দ্বারা সীমাবদ্ধ:

গতিশীলভাবে এই বৈশিষ্ট্যগুলি পেতে:


এখানে সি pathconf উদাহরণ রয়েছে: stackoverflow.com/questions/16285623/...
সিরো Santilli新疆改造中心法轮功六四事件

20

এবং সময় সাশ্রয় করার জন্য (এবং এটি স্মৃতিতে অ্যাঙ্কর করে):

ext2, ext3, ext4, zfs: কোনও নামের সীমা নেই; 255 বাইট ফাইলের নাম সীমা।


1
PATH_MAX = 4096যদিও বেশিরভাগ প্রোগ্রামগুলি নিখুঁত পথে সীমাবদ্ধ থাকে । যদি আপনার প্রোগ্রামটি আপেক্ষিক পাথগুলি ব্যবহার করতে সক্ষম হয় এবং আপনি প্রথমে আপনার কার্যনির্বাহী ডিরেক্টরি পরিবর্তন করেন তবে এটি কাজ করা যেতে পারে।
মিক্কো রেন্টালাইনেন

কারণ যেমন বিভিন্ন POSIX API গুলি এটা getcwdএবং realpath(যা আপনি করতে পারেন ইউজার-স্পেস কোডে reimplement জন্য মেটাডাটা পড়া .এবং তারপর পরিবর্তন ..এবং যতক্ষণ না আপনি ফাইলসিস্টেম রুট আঘাত পুনরাবৃত্তি) উপর নির্ভর PATH_MAX। ( উত্স )
সোসোকলো

6

এগুলি ফাইল সিস্টেমের নাম দৈর্ঘ্য। "লিনাক্স" নিজেই কিছু আছে। উদাহরণস্বরূপ, বিট / stdio_lim.h থেকে:

# define FILENAME_MAX 4096

সুতরাং যেহেতু এক্সটেক্স ফাইল সিস্টেমে কার্নেলের সংজ্ঞায়িত সংখ্যার চেয়ে কম ফাইলের নাম সীমা রয়েছে, আপনি যদি কখনও এই সীমাটি আঘাত করেন না, যদি না এটি পথের নামগুলিও অন্তর্ভুক্ত করে, তাই না?
ইভান

1
এটাই আমার কাছে দেখে মনে হচ্ছে পথের জন্য PATH_MAXও রয়েছে, যা 4096, সুতরাং প্রস্থানগুলিতে "সীমাহীন" পাথ আকারের আগে এটি আঘাত হানাবে ... আমি নিশ্চিত নই যে ওএস কীভাবে তার নিজস্ব অভ্যন্তরীণ বিধিনিষেধগুলি সমাধান করে এবং এফএস এর মতো কখনও হয়নি, আমার বাহুতে গভীর আকর্ষণীয় প্রশ্ন যদিও।
jj33

4096 টি অক্ষর একটি হেলুভা পথের নাম। আমি নিশ্চিত যে এটি একটি পুনঃসংযোগ দিয়ে উত্থাপিত হতে পারে, তবে সত্যই, / আপনার এত দীর্ঘ পথের নাম কেন লাগবে? /
অ্যাভারি পেইন

আমি নিশ্চিত না যে আপনার এটির প্রয়োজন হবে বা হবে না। আমি এটিকে দূষিত বা গাফিলতিমূলক কর্মসূচির বিরুদ্ধে সুরক্ষা হিসাবে দেখি (আমি সহজেই এমন স্ক্রিপ্ট দেখতে পেতাম যা খারাপ আচরণ করে এবং একই দির পুনরাবৃত্তভাবে তৈরি করা শুরু করে Act আসলে, আমি সেই স্ক্রিপ্টটি তৈরি করেছি, তবে এটি কোনও ওয়েবসাইটকে পুনর্নির্দেশ করছিল, ডায়ার তৈরি করছিল না ...)।
jj33

@ অ্যাভারপেইন ফাইলগুলিতে ট্যাগ যুক্ত করার জন্য যাতে একটি সাধারণ ব্যবহার করে তাদের অনুসন্ধান করা যায় locate
হুবার্ট কারিও

3

নেই কোন উপায় পোর্টেবল ভাবে লিনাক্স পাথ সর্বাধিক দৈর্ঘ্য নির্ধারণ। আমার সিস্টেমে:

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

তবে আমি সহজেই 4096 টি অক্ষরের চেয়ে দীর্ঘ পথ তৈরি করতে পারি। পরিবর্তে PATH_MAXনিম্ন সীমা হিসাবে দেখুন । আপনি দীর্ঘ এই পথ তৈরি করতে সক্ষম হতে গ্যারান্টিযুক্ত, কিন্তু আপনি আরও দীর্ঘতর তৈরি করতে সক্ষম হতে পারে।


বর্ধিতভাবে সর্বোচ্চ দৈর্ঘ্য সন্ধান করার একটি সহজ পোর্টেবল উপায় হ'ল একটি প্রোগ্রাম লিখুন যা দীর্ঘ এবং দীর্ঘ ডিরেক্টরি চেইন তৈরি করে এবং কোথায় ব্যর্থ হয় তা দেখুন। কেন এটি ব্যর্থ হয় ঠিক তা আপনি জানতে পারবেন না (যদিও আপনি কোনও প্রস্তাবিত মানব-পঠনযোগ্য ত্রুটি বার্তার জন্য আশা করতেন) তবে আপনি কীভাবে নিরাপদে যেতে পারবেন তা জানবেন। পৃথক ডিরেক্টরি দৈর্ঘ্য, আপেক্ষিক পথের দৈর্ঘ্য এবং পরম পথের দৈর্ঘ্য উভয়ই পরীক্ষা করে দেখুন।
ট্রিপলি

এছাড়াও, উদাহরণস্বরূপ পাইথন os.pathconf()মডিউলের কিছু উত্তর থাকবে; পাইথন বন্দরটি যদি ভাল হয় তবে সেগুলি যুক্তিসঙ্গত হওয়া উচিত।
ট্রিপলি

2
আপনি পারবেন না কারণ কিছু ফাইল সিস্টেম কোনও সীমাবদ্ধতা আরোপ করে না । এটি শীঘ্রই মেমরির ত্রুটি থেকে ব্যর্থ হবে যা কোনও প্রোগ্রাম থেকে পুনরুদ্ধার করতে খুব কঠিন সময় আসবে।
বিজন লিন্ডকভিস্ট

এটি সঠিক উত্তর, বাদে এটি @ বিজেআরএন লিন্ডকভিস্ট মন্তব্যের কারণে। PATH_MAX কেবল একটি গাইডলাইন এবং 99% ফাইল সম্ভবত সেই সীমাতে থাকবে।
রাহলি

1

নির্দিষ্ট পৃষ্ঠাগুলি সম্পর্কে রানটাইম মান পেতে আপনার সর্বদা প্যাথকনফ বা এর মতো কোনও ফাংশন ব্যবহার করা উচিত , যেমন এই পৃষ্ঠাটি বলেছিল:

তবে এটি লক্ষ করা উচিত যে তালিকাবদ্ধ সীমাবদ্ধতার অনেকগুলিই অদল নয়, এবং রানটাইমের সময় সীমাটির মান নিম্নলিখিত শিরোনামে এই শিরোনামে দেওয়া থেকে পৃথক হতে পারে:

  • সীমাটি পথ-নির্ভর name

  • সংকলন এবং রানটাইম মেশিনের মধ্যে সীমাটি পৃথক হয়।

এই কারণে, কোনও অ্যাপ্লিকেশন রানটাইমের সময়সীমাটির প্রকৃত মান নির্ধারণ করতে fpathconf (), pathconf (), এবং sysconf () ফাংশন ব্যবহার করতে পারে।


0

এটি সিস্টেমের সীমাগুলিতে নির্দিষ্ট করে .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 */
...
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.