ความยาวสูงสุดของพา ธ ไฟล์ใน Ubuntu คือเท่าใด


9

เมื่อใช้ระบบ Windows มานานฉันรู้ว่า ณ จุดหนึ่งหน้าต่างข้อผิดพลาดอาจปรากฏขึ้นเมื่อไฟล์และชื่อโฟลเดอร์ยาวเกินไป

สิ่งนี้เกิดขึ้นกับฉันเมื่อฉันพยายามสำรองไฟล์ด้วย SFTP จากเซิร์ฟเวอร์ไปยังโฟลเดอร์ใน (ตัวอย่าง):

D:(Windows drive partition)/Temporary/Projects/2015-06/Websites/Guitar-Site/Images/Logos/Manufacturers/Instruments/Basses/(long file name).png

อย่างที่คุณเห็นฉันมักจะสร้างเส้นทางโฟลเดอร์ที่ระบุไว้เป็นบางครั้งและหากชื่อไฟล์ยาวเกินไป NTFS อาจไม่สามารถบันทึกด้วยวิธีนี้ได้

ขณะนี้ฉันกังวลเกี่ยวกับการสำรองข้อมูลทางกายภาพของฉันเนื่องจากเส้นทางโฟลเดอร์ในไดรฟ์สำรองของฉันจะเพิ่มลง/backups/(drive name)/...ในทุกเส้นทางของไฟล์

มีขีด จำกัด ดังกล่าว (หรือคล้ายกัน) ใน ext4 / Ubuntu ที่ฉันจะต้องระวัง?


2
ตอบรับบน ServerFault: 4k เป็นขีด จำกัด ของระบบปฏิบัติการไม่ใช่ขีด จำกัด FS serverfault.com/questions/9546/…
John N

คำตอบ:


15

ความยาวชื่อไฟล์สูงสุดคือ 255 ไบต์ พบในหน้าวิกิพีเดียสำหรับ ext4

และเส้นทางสูงสุด 4096 ตัวอักษร พบในคำถาม Unix & Linux SEนี้

แม้ว่าฉันพบบทความวิกินี้ที่ไม่ได้ระบุพา ธ ไฟล์สูงสุดใน ext4


สวัสดี jtoscarson ขอบคุณสำหรับคำตอบของคุณ ฉันอาจลองค้นหาดู แต่คุณอยากอธิบายความยาวของ "255 ไบต์" หมายความว่าอย่างไร ฉันคิดว่าตัวละครทุกตัวไม่จำเป็นต้องใช้ถึง 8 บิตดังนั้นทั้งหมดจะมีมากกว่า 255 ตัวอักษรฉันถือว่า? หรืออาจจะน้อยกว่าการพิจารณาว่าสามารถใช้ชุดอักขระที่แตกต่างกันได้
Prototype700

โดยทั่วไปการพูดอักขระเดียวคือหนึ่งไบต์ ฉันไม่ได้มองหาเอกสาร แต่นี่คือการทดสอบอย่างง่าย: jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -c 7 jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -m 7 -m กำลังนับอักขระและ -c กำลังนับไบต์ สาเหตุที่เป็น 7 แทน 6 คือจุดสิ้นสุดของอักขระบรรทัดที่ไม่ได้พิมพ์ ดังนั้นอักขระทั้งหมดในชื่อไฟล์จะเป็น 255
jtoscarson

1
ใช้ UTF-8 ผลตอบแทนสถานที่สำหรับ4 echo -n "💩" | wc -cการสร้างชื่อไฟล์ที่เรียกด้วยชื่อนั้นจะใช้เวลา 4 ไบต์แม้ว่าชื่อไฟล์นี้จะมีความยาว 1 กราฟ "ตัวละคร" ไม่ได้กำหนดแนวความคิดที่ชัดเจน (โดยปกติจะหมายถึงไบต์, กราฟหรือจุดรหัส UNICODE)
Mikko Rantalainen

ในระบบไฟล์ที่เข้ารหัสความยาวชื่อไฟล์สูงสุดคือ 143 ไบต์ ในการตัดสินใจว่าชื่อไฟล์นั้นสั้นพอคุณสามารถค้นหาความยาวไบต์ของเขาใน Python len(filename.encode())ได้
Marvo

0

ฉันเชื่อว่าวิธีที่น่าเชื่อถือที่สุดในการพิจารณาว่านี่คือpathconf(".", _PC_PATH_MAX);ฟังก์ชั่น POSIX ซึ่งกำหนดเส้นทางสูงสุดสำหรับเส้นทางที่กำหนด

ตามฟังก์ชั่นที่แนะนำสิ่งนี้อาจแตกต่างกันระหว่างระบบไฟล์

ฉันไม่ทราบว่าอรรถประโยชน์บรรทัดคำสั่งที่แสดงถึงมัน นี่คือตัวอย่าง C ที่น้อยที่สุด: /programming/16285623/how-to-get-the-to-get-path-to-the-current-file-pwd-in-linux-from-c / 54155296 # 54155296


1
สิ่งนี้อาจเป็นที่สนใจ: zsh.org/mla/workers/2000/msg03393.html
Sergiy Kolodyazhnyy

0

ขีด จำกัด ชื่อพา ธ ขึ้นอยู่กับระบบไฟล์ที่ใช้งาน คำตอบของ jtoscarsonครอบคลุม ext4 ซึ่งเป็นค่าเริ่มต้นบน Ubuntu อย่างไรก็ตามคุณสามารถใช้ระบบไฟล์ที่หลากหลายบน Ubuntu ได้ หากต้องการอ้างถึงคำตอบของ WerkkreWบน serverfault นี่คือระบบไฟล์และข้อ จำกัด บางประการ:

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

โปรดทราบว่าระบบไฟล์ต่างๆมีข้อ จำกัด เกี่ยวกับประเภทของอักขระที่สามารถแสดงในชื่อไฟล์ ยกตัวอย่างเช่นชื่อไฟล์ในกระป๋องไม่ประกอบด้วยโมฆะและext4 /ดูเพิ่มเติมบทความวิกิพีเดียสำหรับการเปรียบเทียบระบบแฟ้ม

โปรดทราบว่าระบบไฟล์ Linux ต้องคำนึงถึงคำจำกัดความของ POSIX :

3.266 ชื่อพา ธ

สตริงอักขระที่ใช้เพื่อระบุไฟล์ ในบริบทของ IEEE Std 1003.1-2001 ชื่อพา ธ ประกอบด้วยไบต์ {PATH_MAX} มากที่สุดรวมถึงการยกเลิกไบต์ null มันมีเครื่องหมายทับเริ่มต้นเผื่อเลือกตามด้วยชื่อไฟล์ตั้งแต่ศูนย์หรือมากกว่าคั่นด้วยเครื่องหมายทับ ชื่อพา ธ อาจมีเครื่องหมายทับอย่างน้อยหนึ่งรายการ หลายสแลชที่ต่อเนื่องกันจะถือว่าเป็นสแลชเดียวกัน

จากlimit.h :

{PATH_MAX}

จำนวนไบต์สูงสุดในชื่อพา ธ รวมถึงการยกเลิกอักขระ null ค่าต่ำสุดที่ยอมรับได้: {_POSIX_PATH_MAX}

{_POSIX_PATH_MAX}

จำนวนไบต์สูงสุดในชื่อพา ธ ค่า: 256


0

ดังที่ @ sergiy-kolodyazhnyy กล่าวว่าความยาวชื่อไฟล์สูงสุดจะขึ้นอยู่กับระบบไฟล์และความยาวส่วนใหญ่ของชื่อไฟล์ที่ จำกัด คือ 255 ไบต์

การละเว้นที่น่าทึ่งจากแผนภูมิของเขาคือสื่อออปติคัล ในขณะที่ส่วนขยาย UDF และ Rock Ridge นั้นมีขีด จำกัด 255 ตัวอักษรสำหรับชื่อไฟล์ ISO9660 ที่ไม่มี Rock Ridge และ Joliet ต่างก็มีข้อ จำกัด ที่เข้มงวดกว่าซึ่งคุณอาจเรียกใช้งานได้จริงหากคุณกำลังสำรองข้อมูลการyoutube-dlดาวน์โหลด

ชื่อไฟล์โจเลียตถูก จำกัด ไว้ที่ 64 UTF-16 codepoints หรือ 103 ไฟล์หากโปรแกรมการควบคุมดิสก์ของคุณมีตัวเลือกที่จะแยกจากสเป็คในลักษณะที่ดูเหมือนจะไม่ก่อให้เกิดอันตรายในทางปฏิบัติ

ในทำนองเดียวกัน ISO 9660 ระดับ 2 และ 3 ที่ไม่มีส่วนขยาย Rock Ridge จะถูก จำกัด ชื่อไฟล์ที่มีอักขระ 31 ตัวหรือ 37 ตัวหากคุณเล่นเร็วและหลวมด้วยสเป็ค

การรับรองมาตรฐาน ISO 9660: 1999 ซึ่งจะได้รับการสนับสนุนโดย genisoimage แต่ไม่ frontends เช่น K3B มีขีด จำกัด ของทั้ง 207 ไบต์ (โดยไม่ต้องร็อคริดจ์) หรือ 197 ไบต์ (กับร็อคสัน)

(ที่มา: genisoimagemanpage)

สำหรับความยาวเส้นทางสูงสุดนั่นเป็นความเข้าใจผิดที่ยิ่งใหญ่ ไม่มีหนึ่งสำหรับระบบไฟล์ Linux ส่วนใหญ่

มีชื่อคงเป็นPATH_MAXแต่มันก็เป็นเพียงสูงสุดสำหรับบาง POSIX API ที่ซึ่งคุณสามารถทำงาน รอบ

ข้อยกเว้นที่ตามมาเพียงอย่างเดียวสำหรับการประชุม "ไม่ จำกัด ความยาวเส้นทาง" นี้คือ FAT32 และ exFAT (32,760 อักขระ Unicode), NTFS และ ReFS (32,767 อักขระ Unicode), UDF (1,023 ไบต์) และ ISO 9660 (ไม่ชัดเจน แต่ฉันเห็นแล้ว มันระบุว่าเป็น 180, 207, 212 หรือ 222 ไบต์)

สิ่งนี้สามารถแสดงให้เห็นได้อย่างง่ายดายโดยการเรียกใช้โปรแกรม Python ขนาดเล็กแล้วสำรวจไดเรกทอรีผลลัพธ์

import os
for X in range(20):
    os.mkdir('x' * 255)
    os.chdir('x' * 255)

ฉันbashซึ่งแสดงเส้นทางทั้งหมดในพร้อมท์จะมีปัญหากับมัน อย่างไรก็ตามของฉันzshซึ่งแสดงเฉพาะโฟลเดอร์ปัจจุบันในพรอมต์จะไม่มีปัญหาและยังมีpwdbuiltin ที่สามารถแสดงพา ธ 5000 + -byte ทั้งหมดโดยไม่มีปัญหา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.