odpowiedź brzmi: limit to zwykle 255 znaków (dla tych, którzy są zbyt leniwi, aby kliknąć ten link)
doc_id
11
Twoja odpowiedź powinna zawierać przynajmniej streszczenie odpowiednich informacji w podanym linku. Nie tylko link.
zrajm
2
@rahmanisback, który jest odpowiedni dla limitów nazw plików, podczas gdy ograniczenia ścieżek są zwykle definiowane przez system operacyjny, a nie FS (z wyjątkiem niektórych dziwnych FS, takich jak iso lub ntfs), a na Linuksie są 4K
nonchip
2
Właściwie chodziło o oba: D
nonchip
7
Po prostu wskazując: bajty! = Znaki, szczególnie jeśli używasz UTF-8. Zobacz tutaj .
Kris,
87
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:
Przepraszam, ale jestem tu nowy i nawet nie mogę komentować, zapisz głos. Poprzednia odpowiedź (sfp) powinna zostać podniesiona, ponieważ całkowicie odpowiada na pytanie, podczas gdy inne są częściowo wyłączone. Znowu przepraszam, że nie przestrzegam zasad, ale nie mogę być cicho, kiedy najlepsza odpowiedź jest na dole.
David Balažic
1
Po prostu wskazując: bajty! = Znaki, szczególnie jeśli używasz UTF-8. Zobacz tutaj .
Kris,
1
@ DavidBalažic: Chociaż prawda, PATH_MAX pod Linuksem jest tylko wytyczną, większość bazowych systemów plików nie ma ograniczeń. Utrudnia to odniesienie ścieżek większych niż ten rozmiar. Zwykle używam „fragmentów” PATH_MAX jako rozmiaru.
Rahly,
23
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:
Jednak większość programów jest ograniczona ścieżkami bezwzględnymi 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.
Mikko Rantalainen
Dzieje się tak, ponieważ różne interfejsy API POSIX, takie jak getcwdi 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 )
ssokolow
6
Są to długości nazw systemów plików. Sam „linux” też ma trochę. Na przykład z bits / stdio_lim.h:
A zatem, ponieważ systemy plików extX mają niższy limit nazw niż ten, który jest zdefiniowany w jądrze, nigdy nie osiągnąłbyś tego limitu, chyba że obejmuje on także ścieżki, prawda?
Ivan
1
tak mi to wygląda. Istnieje również PATH_MAX dla ścieżki, która wynosi 4096, więc zostałaby trafiona przed „nieograniczonym” rozmiarem ścieżki na wyjściach ... Nie jestem pewien, jak system operacyjny rozwiązuje swoje własne ograniczenia wewnętrzne i FS, nigdy nie miał moje ramiona w tak głęboko. ciekawe pytanie.
jj33
4096 znaków to nazwa ścieżki helluva. Jestem pewien, że można go podnieść za pomocą ponownej kompilacji, ale szczerze mówiąc / dlaczego miałbyś potrzebować tak długich ścieżek? /
Avery Payne
Nie jestem pewien, czy będziesz go potrzebować czy nie. Widzę to bardziej jako ochronę przed złośliwymi lub niedbałymi programami (mogłem łatwo zobaczyć skrypt, który źle się zachowuje i zaczyna rekurencyjnie tworzyć ten sam katalog. Właściwie to zrobiłem ten skrypt, ale przekierowywałem stronę internetową, nie tworząc katalogów ...)
jj33
@AveryPayne Aby dodać tagi do plików, aby można je było przeszukiwać za pomocą prostego locate.
Hubert Kario
3
Nie ma sposobu na określenie maksymalnej długości ścieżek w systemie Linux w przenośny sposób. W moim systemie:
Ale mogę łatwo tworzyć ścieżki dłuższe niż 4096 znaków. Zamiast tego patrz PATH_MAXjako 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.
Prostym przenośnym sposobem na znalezienie maksymalnej długości empirycznie jest napisanie programu, który tworzy coraz dłuższe łańcuchy katalogów i zobaczenie, gdzie się nie powiedzie. Nie będziesz wiedział dokładnie, dlaczego zawodzi (choć miałbyś nadzieję na sugestywny, czytelny dla człowieka komunikat o błędzie), ale będziesz wiedział, jak daleko możesz bezpiecznie posunąć się. Pamiętaj, aby sprawdzić zarówno indywidualną długość katalogu, względną długość ścieżki, jak i bezwzględną długość ścieżki.
tripleee 12.04.16
Także np. os.pathconf()Moduł Python będzie miał kilka odpowiedzi; jeśli port Pythona jest dobry, powinny być rozsądne.
tripleee
2
Nie możesz, ponieważ niektóre systemy plików nie nakładają żadnych ograniczeń . Wcześniej zakończy się niepowodzeniem z powodu błędu braku pamięci, z którego każdy program miałby trudności z odzyskaniem.
Björn Lindqvist
To poprawna odpowiedź, ale wynika to z komentarza @ BjörnLindqvist. PATH_MAX to tylko wskazówka, a 99% plików prawdopodobnie będzie w tym limicie.
Rahly,
1
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:
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:
źródło
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:
a C-lang określa:
i trochę więcej.
źródło
Odnoszę się do innych odpowiedzi, proszę je głosować.
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:źródło
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.
źródło
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
irealpath
(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ą naPATH_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:
źródło
locate
.Nie ma sposobu na określenie maksymalnej długości ścieżek w systemie Linux w przenośny sposób. W moim systemie:
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.źródło
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:
źródło
Jest to określone w pliku nagłówkowym limit.h systemu .
Oto jeden z tych plików:
Oto, gdzie znajdują się kopie tego pliku i definiowane przez nie wartości:
Wynik:
źródło