Odpowiedzi:
Zobacz stronę Wikipedii na temat porównania systemów plików , szczególnie w kolumnie Maksymalna długość nazwy pliku .
Oto niektóre ograniczenia długości nazw plików w popularnych systemach plików:
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
Przeczytałem tutaj, że limit długości ścieżki znajduje się w nagłówkach systemu. Istnieje również limit długości nazwy pliku. W moim systemie jest to plik:
/usr/src/linux-headers-2.6.38-10/include/linux/limits.h
a C-lang określa:
#define NAME_MAX 255 /* # chars in a file name */
#define PATH_MAX 4096 /* # chars in a path name including nul */
i trochę więcej.
Odnoszę się do innych odpowiedzi, proszę je głosować.
Czy w Linuksie są jakieś ograniczenia długości nazw plików lub ścieżek?
Tak, długości nazw plików i ścieżek są ograniczone przez:
linux/limits.h
jak podano przez sfp .Aby dynamicznie uzyskać te właściwości:
pathconf
ifpathconf
zgodnie z propozycją Michaela Aarona SafyanaUżyj polecenia getconf
zaproponowanego przez tim, które jest również dostępne w systemie Linux:
$ getconf NAME_MAX /mnt/sda2/
255
$ getconf PATH_MAX /mnt/sda3/
4096
A dla oszczędności czasu (i zakotwiczenia go w pamięci):
ext2, ext3, ext4, zfs: bez ograniczeń nazw ścieżek; Limit 255 nazw plików.
PATH_MAX = 4096
. Można to obejść, jeśli Twój program może korzystać ze ścieżek względnych i najpierw zmienisz katalog roboczy.
getcwd
i realpath
(które można ponownie zaimplementować w kodzie przestrzeni użytkownika, czytając metadane dla, .
a następnie zmieniając ..
i powtarzając do momentu trafienia do katalogu głównego systemu plików), polegają na PATH_MAX
. ( Źródło )
Są to długości nazw systemów plików. Sam „linux” też ma trochę. Na przykład z bits / stdio_lim.h:
# define FILENAME_MAX 4096
locate
.
Nie ma sposobu na określenie maksymalnej długości ścieżek w systemie Linux w przenośny sposób. W moim systemie:
$ getconf PATH_MAX /
4096
$ getconf _POSIX_PATH_MAX /
4096
Ale mogę łatwo tworzyć ścieżki dłuższe niż 4096 znaków. Zamiast tego patrz PATH_MAX
jako dolna granica. Na pewno będziesz w stanie tworzyć ścieżki tak długo, ale możesz również być w stanie utworzyć znacznie dłuższe.
os.pathconf()
Moduł Python będzie miał kilka odpowiedzi; jeśli port Pythona jest dobry, powinny być rozsądne.
Zawsze powinieneś używać pathconf lub jakiejś funkcji takiej jak ta, aby uzyskać wartość czasu wykonania dla określonych elementów, ponieważ ta strona mówi:
Należy jednak zauważyć, że wiele z wymienionych limitów nie jest niezmiennych, a w czasie wykonywania wartość limitu może różnić się od wartości podanych w tym nagłówku z następujących powodów:
Limit jest zależny od nazwy ścieżki.
Limit różni się między maszynami kompilującymi i wykonawczymi.
Z tych powodów aplikacja może użyć funkcji fpathconf (), pathconf () i sysconf () w celu ustalenia rzeczywistej wartości ograniczenia w czasie wykonywania.
Jest to określone w pliku nagłówkowym limit.h systemu .
Oto jeden z tych plików:
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 */
...
Oto, gdzie znajdują się kopie tego pliku i definiowane przez nie wartości:
find /usr | grep limits.h | xargs -I {} grep -H 'NAME_MAX' {}
Wynik:
...
/usr/include/linux/limits.h:#define NAME_MAX 255 /* # chars in a file name */
...