우분투에서 파일 경로의 최대 길이는 얼마입니까?


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 제한이 아니라 OS 제한입니다. serverfault.com/questions/9546/…
John N

답변:


15

최대 파일 이름 길이는 255 바이트입니다. ext4위키 페이지에 있습니다.

그리고 최대 경로는 4096 자입니다. 이 유닉스 및 리눅스 SE 질문에서 발견되었습니다 .

ext4에서 최대 파일 경로를 지정하지 않은 이 위키 기사 를 찾았습니다 .


안녕하세요 jtoscarson, 답변 주셔서 감사합니다. 아마 이것을 찾아 볼 수도 있지만 "255 바이트"의 길이가 무엇을 의미하는지 설명하고 싶습니까? 모든 문자가 반드시 8 비트를 사용하는 것은 아니라고 가정하여 총 255자를 초과한다고 가정합니다. 또는 다른 문자 집합을 사용할 수 있다는 점을 고려하면 더 적을 수 있습니다.
프로토 타입

일반적으로 단일 문자는 1 바이트입니다. 설명서를 찾지 않았지만 간단한 테스트가 있습니다. jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -c 7 jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -m 7 -m은 문자를 계산하고 -c는 바이트를 계산합니다. 6이 아닌 7 인 이유는 인쇄되지 않는 줄 끝 문자입니다. 따라서 파일 이름의 총 문자 수는 255입니다.
jtoscarson

1
UTF-8 로케일을 사용하면를 반환 4합니다 echo -n "💩" | wc -c. 이 파일 이름이 1 grapheme이라는 사실에도 불구하고 해당 이름으로 호출 된 파일 이름을 만들려면 4 바이트가 필요합니다. "문자"는 명확하게 정의 된 개념이 아닙니다 (보통 바이트, 그래프 또는 유니 코드 코드 포인트를 의미 함).
Mikko Rantalainen

암호화 된 파일 시스템에서 최대 파일 이름 길이는 143 바이트입니다. 파일 이름이 충분히 짧은 지 결정하려면 파이썬에서 바이트 길이를 찾을 수 있습니다 len(filename.encode()).
Marvo

0

이것을 결정하는 가장 신뢰할 수있는 방법 pathconf(".", _PC_PATH_MAX);은 주어진 경로의 최대 경로를 결정하는 POSIX 기능을 사용하는 것입니다.

함수에서 알 수 있듯이 파일 시스템마다 다를 수 있습니다.

나는 그것을 노출시키는 명령 줄 유틸리티를 모른다. 다음은 최소 C 예입니다. https : //.com/questions/16285623/how-to-get-the-to-get-path-to-the-current-file-pwd-in-linux-from-c # 54155296


1
이것은 또한 관심의 대상이 될 수 있습니다 : zsh.org/mla/workers/2000/msg03393.html
세르지 Kolodyazhnyy

0

경로 이름 제한은 사용중인 파일 시스템에 따라 다릅니다. jtoscarson의 답변 은 우분투에서 기본값 인 ext4를 다루지 만 우분투에서 다양한 파일 시스템을 사용할 수 있습니다. serverfault에 대한 WerkkreW의 답변을 인용하기 위해 다음 과 같은 파일 시스템과 한계가 있습니다.

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

또한 다양한 파일 시스템에는 파일 이름에 어떤 유형의 문자가 존재할 수 있는지에 대한 제한이 있습니다. 예를 들어, 파일 이름은 ext4NULL 및을 포함 할 수 없습니다 /. 파일 시스템 비교는 Wikipedia 기사를 참조하십시오 .

Linux 파일 시스템은 POSIX 정의 를 고려해야 합니다 .

경로명

파일을 식별하는 데 사용되는 문자열입니다. IEEE Std 1003.1-2001의 컨텍스트에서 경로 이름은 종료 널 바이트를 포함하여 최대 {PATH_MAX} 바이트로 구성됩니다. 선택적인 시작 슬래시와 슬래시로 구분 된 0 개 이상의 파일 이름이 있습니다. 경로 이름은 선택적으로 하나 이상의 후행 슬래시를 포함 할 수 있습니다. 여러 개의 연속 슬래시는 하나의 슬래시와 동일한 것으로 간주됩니다.

에서 limits.h :

{PATH_MAX}

종료 널 문자를 포함하여 경로 이름의 최대 바이트 수. 허용되는 최소값 : {_POSIX_PATH_MAX}

{_POSIX_PATH_MAX}

경로명의 최대 바이트 수입니다. 값 : 256


0

@ sergiy-kolodyazhnyy가 말했듯이 최대 파일 이름 길이는 파일 시스템에 따라 다르며 대부분의 파일 이름 길이는 255 바이트로 제한됩니다.

그의 차트에서 눈에 띄는 생략은 광학 미디어입니다. UDF와 Rock Ridge 확장자는 파일 이름에 대해 255 자로 제한되지만 Rock Ridge와 Joliet가없는 ISO9660에는 youtube-dl다운로드 백업과 같은 작업을 수행 할 때 실제로 실행할 수있는 훨씬 더 엄격한 제한이 있습니다 .

디스크 마스터 링 프로그램이 실제로 해를 끼치 지 않는 방식으로 사양에서 벗어날 수있는 옵션이있는 경우 Joliet 파일 이름은 64 UTF-16 코드 포인트 또는 103 개로 제한됩니다.

마찬가지로 Rock Ridge 확장자가없는 ISO 9660 레벨 2 및 3은 스펙으로 빠르고 느슨하게 재생하는 경우 파일 이름이 31 자 또는 37 자로 제한됩니다.

ISO 9660 : 1999 된다 K3b와 같은 프론트 엔드에 의해 genisoimage가 아닌 지원은 (락 리지 제외) 중 207 바이트 또는 197 바이트 한도 (락 능선)을 갖는다.

(출처 : genisoimage맨 페이지)

최대 경로 길이 는 큰 오해입니다. 대부분의 Linux 파일 시스템에는 하나가 없습니다.

이라는 이름의 상수이다 PATH_MAX,하지만 그건 특정 POSIX API 용에만 최대 당신이 할 수 일을 주위에 .

이 "경로 길이 제한 없음"규칙에 대한 유일한 예외 사항은 FAT32 및 exFAT (32,760 유니 코드 문자), NTFS 및 ReFS (32,767 유니 코드 문자), 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프롬프트에 전체 경로를 표시하는 My 에는 문제가 있습니다. 그러나 zsh프롬프트에 현재 폴더 만 표시하는 my 는 pwd문제없이 전체 5000 + 바이트 경로를 표시 할 수 있는 내장 기능을 갖추고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.