שאלה אורך שם הקובץ על לינוקס?


האם יש אורך קובץ או אורך נתיב לינוקס?


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 (למעט כמה FS מוזר כמו 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



סליחה, אבל I'am חדש כאן אפילו לא יכול להגיב, לשמור הצבעה. התשובה הקודמת (על ידי sfp) צריך להיות upped, כפי שהוא עונה על השאלה לחלוטין, בעוד אחרים הם חלקית. שוב, מצטער על הולך מעבר לחוקים, אבל אני לא יכול להיות שקט כאשר התשובה הטובה ביותר היא בתחתית. - David Balažic
רק הצבעה: בתים! = תווים, במיוחד אם אתה משתמש ב- UTF-8. ראה כאן. - Kris
@ DavidBalažic: אמנם נכון, PATH_MAX תחת לינוקס הוא רק קו מנחה, רוב מערכות הקבצים הבסיסית אין הגבלה. זה עושה את זה קשה התייחסות נתיבים כי גדול יותר מאשר גודל. אני בדרך כלל להשתמש "chunks" של PATH_MAX כגודל. - Rahly


אני מתכוון לתשובות אחרות, בבקשה להעיר אותם.

האם יש אורך קובץ או אורך נתיב לינוקס?

כן, שם הקובץ ואורכי השמות מוגבלים על ידי:

כדי לקבל באופן דינמי מאפיינים אלה:

  • השתמש בפונקציות 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


אלה הם שם מערכת הקבצים אורכי. "לינוקס" עצמו יש יותר מדי. לדוגמה, מתוך bits / stdio_lim.h:

# define FILENAME_MAX 4096

6
2018-03-22 18:31



לכן, מאחר שמערכות הקבצים של ה- extX הן בעלות שם קובץ נמוך יותר ממה שהוגדר בגרעין, לעולם לא היית פוגע במגבלה זו, אלא אם כן היא מכילה גם שמות נתיבים, נכון? - Ivan
ככה זה נראה לי. יש גם PATH_MAX עבור הנתיב, שהוא 4096, כך שזה ייפגע לפני גודל נתיב "בלתי מוגבל" על exts ... אני לא בטוח איך מערכת ההפעלה פותר הגבלות הפנימיים שלה ואת אלה של FS, מעולם לא היה זרועותי בעומק. אבל השאלה מעניינת. - 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() מודול יהיה כמה תשובות; אם נמל Python הוא טוב, הם צריכים להיות סבירים. - tripleee
אתה לא יכול בגלל כמה מערכות קבצים לא להטיל כל מגבלות. זה יהיה מוקדם יותר להיכשל עם טעות זיכרון מתוך כל תוכנית יהיה קשה להתאושש מ. - Björn Lindqvist
זוהי התשובה הנכונה, אלא זה נובע תגובה @ BjörnLindqvist. PATH_MAX הוא רק קו מנחה, ו -99% מהקבצים יהיו ככל הנראה בתוך אותו גבול. - Rahly


אתה תמיד צריך להשתמש נתיב או פונקציה כזו כדי לקבל את ערך הריצה על הפריטים שצוין, כמו זה עמוד אמר את זה:

יש לציין, עם זאת, שרבים מהגבולות המפורטים אינם קבועים, ובזמן הריצה, ערך הגבול עשוי להיות שונה מאלה המופיעים בכותרת זו, וזאת מהסיבות הבאות:

  • הגבול תלוי בשמות נתיב.

  • הגבול שונה בין מכונות הידור לבין זמן ריצה.

מסיבות אלה, יישום עשוי להשתמש בפונקציות fpathconf (), pathconf () ו- sysconf () כדי לקבוע את הערך בפועל של מגבלה בזמן ריצה.


1
2017-12-05 01:49