it-swarm-vi.tech

Giới hạn độ dài tên tệp trên linux?

Có bất kỳ giới hạn tên tệp hoặc độ dài đường dẫn trên Linux không?

130
ro.

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
134
WerkkreW

Tôi đã đọc ở đây rằng giới hạn độ dài đường dẫn nằm trong các tiêu đề hệ thống. Giới hạn độ dài tên tập tin là có. 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.

90
sfp

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:

Để tự động có được các tính chất này:

  • Sử dụng các hàm pathconffpathconf theo đề xuất của Michael Aaron Safyan
  • Tạo tên tệp (hoặc tên đường dẫn) dài hơn và dài hơn như được giải thích bởi dogbane
  • Sử dụng lệnh getconf như được đề xuất bởi tim cũng có sẵn trên Linux:

    $ getconf NAME_MAX /mnt/sda2/
    255
    $ getconf PATH_MAX /mnt/sda3/
    4096
    
24
olibre

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.

20
Ivan

Đó 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
6
jj33

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 đó hãy xem PATH_MAX như một giới hạn dưới. 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.

3
Björn Lindqvist

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 đã chỉ định, vì điều này trang 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.

1
andy

Nó được chỉ định trong hệ thống giới hạn.h tệp tiêu đề.

Đâ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 */
...
0
Bohdan Voloshyn