Câu trả lời:
Xem trang Wikipedia về so sánh hệ thống tệp , đặc biệt là trong cột Độ dài tên tệp tối đa .
Dưới đây là một số giới hạn độ dài tên tệp trong các hệ thống tệp phổ biến:
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
Tôi đã đọc ở đây rằng giới hạn độ dài đường dẫn là trong các tiêu đề hệ thống. Giới hạn độ dài tên tập tin là có quá. Trên hệ thống của tôi, nó là tập tin:
/usr/src/linux-headers-2.6.38-10/include/linux/limits.h
và C-lang định nghĩa:
#define NAME_MAX 255 /* # chars in a file name */
#define PATH_MAX 4096 /* # chars in a path name including nul */
và một vài thứ nữa.
Tôi tham khảo các câu trả lời khác, xin vui lòng upvote chúng.
Có bất kỳ giới hạn tên tệp hoặc độ dài đường dẫn trên Linux không?
Có, độ dài tên tệp và tên đường dẫn bị giới hạn bởi:
linux/limits.h
như đã nêu bởi sfp .Để tự động có được các tính chất này:
pathconf
vàfpathconf
theo đề xuất của Michael Aaron SafyanSử dụng lệnh getconf
theo đề xuất của tim cũng có sẵn trên Linux:
$ getconf NAME_MAX /mnt/sda2/
255
$ getconf PATH_MAX /mnt/sda3/
4096
Và để tiết kiệm thời gian (và neo nó vào bộ nhớ):
ext2, ext3, ext4, zfs: không giới hạn tên đường dẫn; Giới hạn tên tệp 255 byte.
PATH_MAX = 4096
, mặc dù. Điều đó có thể được giải quyết nếu chương trình của bạn có thể sử dụng các đường dẫn tương đối và bạn thay đổi thư mục làm việc trước.
Đó là độ dài tên hệ thống tập tin. "linux" cũng có một số. Chẳng hạn, từ bit / stdio_lim.h:
# define FILENAME_MAX 4096
locate
.
Không có cách nào để xác định độ dài tối đa của các đường dẫn trên Linux theo cách di động. Trên hệ thống của tôi:
$ getconf PATH_MAX /
4096
$ getconf _POSIX_PATH_MAX /
4096
Nhưng tôi có thể dễ dàng tạo các đường dẫn dài hơn 4096 ký tự. Thay vào đó xem PATH_MAX
như một giới hạn thấp hơn. Bạn được đảm bảo có thể tạo các đường dẫn dài như vậy, nhưng bạn cũng có thể tạo các đường dẫn dài hơn nhiều.
os.pathconf()
mô-đun Python sẽ có một số câu trả lời; Nếu cổng Python là tốt, thì chúng phải hợp lý.
Bạn phải luôn luôn sử dụng pathconf hoặc một số chức năng như thế này để nhận giá trị thời gian chạy về các mục được chỉ định, vì trang này nói rằng:
Tuy nhiên, cần lưu ý rằng nhiều giới hạn được liệt kê không phải là bất biến và trong thời gian chạy, giá trị của giới hạn có thể khác với các giới hạn được đưa ra trong tiêu đề này, vì các lý do sau:
Giới hạn phụ thuộc vào tên đường dẫn.
Giới hạn khác nhau giữa các máy biên dịch và thời gian chạy.
Vì những lý do này, một ứng dụng có thể sử dụng các hàm fpathconf (), pathconf () và sysconf () để xác định giá trị thực của giới hạn khi chạy.
Nó được chỉ định trong tệp tiêu đề giới hạn hệ thống .
Đây là một trong những tập tin sau:
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 */
...
Đây là nơi các bản sao của tệp này được đặt và các giá trị chúng xác định:
find /usr | grep limits.h | xargs -I {} grep -H 'NAME_MAX' {}
Đầu ra:
...
/usr/include/linux/limits.h:#define NAME_MAX 255 /* # chars in a file name */
...