มีการ จำกัด ชื่อไฟล์หรือความยาวเส้นทางบน Linux หรือไม่?
มีการ จำกัด ชื่อไฟล์หรือความยาวเส้นทางบน Linux หรือไม่?
คำตอบ:
ดูหน้าวิกิพีเดียเกี่ยวกับการเปรียบเทียบระบบไฟล์โดยเฉพาะอย่างยิ่งในคอลัมน์ยาวชื่อไฟล์สูงสุด
ต่อไปนี้เป็นข้อจำกัดความยาวของชื่อไฟล์ในระบบไฟล์ยอดนิยม:
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
ฉันได้อ่านที่นี่ว่าขีดจำกัดความยาวของเส้นทางอยู่ในส่วนหัวของระบบ มีการจำกัดความยาวชื่อไฟล์ด้วย ในระบบของฉันมันเป็นไฟล์:
/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 */
และอีกมากมาย
ฉันหมายถึงคำตอบอื่น ๆ โปรด upvote พวกเขา
มีการ จำกัด ชื่อไฟล์หรือความยาวเส้นทางบน Linux หรือไม่?
ใช่ความยาวชื่อไฟล์และชื่อพา ธ ถูก จำกัด โดย:
linux/limits.h
ที่ระบุไว้โดยSFPในการรับคุณสมบัติเหล่านี้แบบไดนามิก:
pathconf
และfpathconf
ตามที่เสนอโดยMichael Aaron Safyanใช้คำสั่งgetconf
ตามที่เสนอโดยทิมที่มีอยู่ใน Linux ด้วย:
$ getconf NAME_MAX /mnt/sda2/
255
$ getconf PATH_MAX /mnt/sda3/
4096
และเพื่อประโยชน์ในการประหยัดเวลา (และยึดกับหน่วยความจำ):
ext2, ext3, ext4, zfs: ไม่ จำกัด ชื่อพา ธ ; ขีด จำกัด ชื่อไฟล์ 255 ไบต์
PATH_MAX = 4096
แม้ว่า สิ่งนี้สามารถแก้ไขได้หากโปรแกรมของคุณสามารถใช้เส้นทางสัมพัทธ์และคุณเปลี่ยนไดเรกทอรีการทำงานก่อน
เหล่านี้คือความยาวชื่อระบบไฟล์ "linux" เองก็มีบ้างเช่นกัน ตัวอย่างเช่นจาก bits / stdio_lim.h:
# define FILENAME_MAX 4096
locate
การเพิ่มแท็กไปยังไฟล์เพื่อพวกเขาจะได้รับการค้นหาโดยใช้ที่เรียบง่าย
นอกจากนี้ไม่มีทางที่จะกำหนดความยาวสูงสุดของเส้นทางบน Linux ในทางแบบพกพา ในระบบของฉัน:
$ getconf PATH_MAX /
4096
$ getconf _POSIX_PATH_MAX /
4096
แต่ฉันสามารถสร้างเส้นทางที่ยาวกว่า 4096 ตัวอักษรได้อย่างง่ายดาย แทนที่จะมองPATH_MAX
ว่าเป็นขอบล่าง คุณรับประกันว่าจะสามารถสร้างเส้นทางที่ยาวนี้ แต่คุณอาจสร้างเส้นทางที่ยาวกว่าได้อีกมาก
os.pathconf()
โมดูลPython จะมีคำตอบบางอย่าง; ถ้าพอร์ต Python ดีใด ๆ ก็ควรจะสมเหตุสมผล
คุณควรใช้pathconfหรือฟังก์ชั่นบางอย่างเช่นนี้เพื่อรับค่ารันไทม์เกี่ยวกับรายการที่ระบุตามที่หน้านี้บอกว่า:
อย่างไรก็ตามควรสังเกตว่าข้อ จำกัด ที่ระบุไว้หลายรายการนั้นไม่คงที่และ ณ เวลารันไทม์ค่าของขีด จำกัด อาจแตกต่างจากที่ให้ไว้ในส่วนหัวนี้ด้วยเหตุผลดังต่อไปนี้:
ขีด จำกัด ขึ้นอยู่กับชื่อพา ธ
ขีด จำกัด แตกต่างกันระหว่างเครื่องคอมไพล์และรันไทม์
ด้วยเหตุผลเหล่านี้แอปพลิเคชันอาจใช้ฟังก์ชั่น fpathconf (), pathconf () และ sysconf () เพื่อกำหนดมูลค่าที่แท้จริงของข้อ จำกัด ที่รันไทม์
มันระบุไว้ในไฟล์ส่วนหัวของระบบlimit.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 */
...