리눅스에서 파일 이름 길이 제한?


답변:


126

파일 시스템 비교 , 특히 최대 파일 이름 길이 열 에서 Wikipedia 페이지를 참조하십시오 .

다음은 널리 사용되는 파일 시스템에서 일부 파일 이름 길이 제한 입니다.

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

45
대답은 다음과 같습니다. 한도는 보통 255 자입니다 (이 링크를 클릭하기에는 너무 게으른 사람들을위한 것)
doc_id

11
귀하의 답변에는 제공된 링크의 관련 정보가 최소한 요약되어 있어야합니다. 링크 만이 아닙니다.
zrajm

2
@rahmanisback은 파일 이름 제한에 적합하지만 경로 제한은 일반적으로 FS가 아닌 OS에 의해 정의되며 (iso 또는 ntfs와 같은 이상한 FS 제외) Linux에서는 4K
nonchip

2
D : 사실 그것은 모두에 대해이었다
nonchip

7
그냥 지적하십시오 : bytes! = 문자, 특히 UTF-8을 사용하는 경우. 여기를 참조 하십시오 .
Kris

87

내가 읽은 여기에 해당 경로 길이 제한 시스템 헤더입니다. 파일 이름 길이 제한도 있습니다. 내 시스템에서는 파일입니다.

  /usr/src/linux-headers-2.6.38-10/include/linux/limits.h

C-lang은 다음을 정의합니다.

  #define NAME_MAX         255    /* # chars in a file name */
  #define PATH_MAX        4096    /* # chars in a path name including nul */

그리고 더 많은.


10
죄송하지만 여기에 의견이 없습니다. 투표를 저장하지 않아도됩니다. 이전 답변 (sfp)은 질문에 완전히 대답하는 반면 다른 답변은 부분적으로 꺼져 있기 때문에 업데이트되어야합니다. 다시 말하지만 규칙 외에는 죄송하지만 최선의 답변이 맨 아래에있을 때는 조용히 할 수 없습니다.
David Balažic

1
그냥 지적하십시오 : bytes! = 문자, 특히 UTF-8을 사용하는 경우. 여기를 참조 하십시오 .
Kris

1
@ DavidBalažic : 사실이지만, 리눅스에서의 PATH_MAX는 지침 일 뿐이지 만, 대부분의 기본 파일 시스템에는 제한이 없습니다. 따라서 해당 크기보다 큰 경로를 참조하기가 어렵습니다. 나는 보통 PATH_MAX의 "청크"를 크기로 사용합니다.
Rahly

23

다른 답변을 참조하십시오.

Linux에 파일 이름 또는 경로 길이 제한이 있습니까?

예, 파일 이름 및 경로 이름 길이는 다음으로 제한됩니다.

이러한 속성을 동적으로 가져 오려면

  • 함수를 사용 pathconf하고fpathconf 제안한 마이클 아론 SAFYAN
  • dogbane의 설명에 따라 길고 긴 파일 이름 (또는 경로 이름)을 만드십시오.
  • Linux에서도 사용할 수있는 timgetconf 에서 제안한대로 명령 을 사용하십시오 .

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


20

그리고 시간을 절약하고 메모리에 고정시키기 위해 :

ext2, ext3, ext4, zfs : 경로명 제한 없음; 255 바이트 파일 이름 제한


1
그러나 대부분의 프로그램은에 대한 절대 경로로 제한됩니다 PATH_MAX = 4096. 프로그램이 상대 경로를 사용할 수 있고 작업 디렉토리를 먼저 변경하면 해결할 수 있습니다.
Mikko Rantalainen

같은 다양한 POSIX API를 때문이다 getcwdrealpath(당신이 할 수있는 사용자 공간 코드에 재 구현에 대한 메타 데이터를 읽어 .다음으로 변경 ..하고 파일 시스템 루트에 충돌 할 때까지 반복이)에 의존 PATH_MAX. ( 출처 )
ssokolow

6

그것들은 파일 시스템 이름 길이입니다. "리눅스"자체도 일부 있습니다. 예를 들어 bits / stdio_lim.h에서 :

# define FILENAME_MAX 4096

따라서 extX 파일 시스템은 커널에 정의 된 것보다 파일 이름 제한이 낮기 때문에 경로 이름을 포함하지 않는 한 해당 제한에 도달하지 않습니다.
Ivan

1
그것이 저에게 보이는 모습입니다. 경로에 대한 PATH_MAX도 있습니다 (4096) .ext에서 "무제한"경로 크기보다 먼저 도달합니다 ... OS가 자체 내부 제한과 FS의 제한을 어떻게 해결하는지 확실하지 않습니다. 그 깊은 내 팔. 흥미로운 질문입니다.
jj33

4096자는 헬 루바 경로 이름입니다. 나는 그것이 재 컴파일과 함께 제기 될 수 있다고 확신하지만, 솔직히 / 왜 당신은 그렇게 긴 경로명이 필요할까요? /
Avery Payne

당신이 그것을 필요로 할 것인지 확실하지 않습니다. 나는 그것을 악의적이거나 무시하는 프로그램에 대한 보호로 더 많이 본다. ...).
jj33

@AveryPayne 간단한 태그를 사용하여 검색 할 수 있도록 파일에 태그를 추가합니다 locate.
Hubert Kario

3

이식 가능한 방식으로 Linux에서 경로의 최대 길이를 결정할 방법없습니다 . 내 시스템에서 :

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

그러나 4096 자보다 훨씬 긴 경로를 쉽게 만들 수 있습니다. 대신 PATH_MAX하한으로 간주 하십시오 . 이 경로를 길게 만들 수는 있지만 더 긴 경로를 만들 수도 있습니다.


경험적으로 최대 길이를 찾는 간단한 이식 가능한 방법은 더 길고 더 긴 디렉토리 체인을 만드는 프로그램을 작성하여 실패한 위치를 확인하는 것입니다. 오류가 발생한 이유를 정확히 알지 못하지만 (인간이 읽을 수있는 오류 메시지를 원할지라도) 얼마나 멀리 갈 수 있는지 알 수 있습니다. 개별 디렉토리 길이, 상대 경로 이름 길이 및 절대 경로 이름 길이를 모두 확인하십시오.
tripleee

또한, 예를 들어 파이썬 os.pathconf()모듈은 몇 가지 답을 가질 것입니다. 파이썬 포트가 좋다면 합리적이어야합니다.
tripleee

2
일부 파일 시스템에는 제한 이 없기 때문에 할 수 없습니다 . 모든 프로그램에서 복구하는 데 어려움이있는 메모리 부족 오류로 더 빨리 실패합니다.
Björn Lindqvist

이것은 @ BjörnLindqvist 주석으로 인한 것 외에는 정답입니다. PATH_MAX는 지침 일 뿐이며 파일의 99 %가 해당 제한 내에있을 것입니다.
Rahly

1

페이지 에서 다음과 같이 지정된대로 항상 pathconf 또는 이와 같은 함수를 사용 하여 지정된 항목에 대한 런타임 값을 가져와야 합니다.

그러나 나열된 제한의 대부분은 변하지 않으며 런타임에 다음과 같은 이유로 제한 값이이 헤더에 제공된 값과 다를 수 있습니다.

  • 제한은 경로 이름에 따라 다릅니다.

  • 컴파일 머신과 런타임 머신의 한계가 다릅니다.

이러한 이유로 응용 프로그램은 fpathconf (), pathconf () 및 sysconf () 함수를 사용하여 런타임시 제한의 실제 값을 확인할 수 있습니다.


0

시스템 limits.h 헤더 파일에 지정되어 있습니다.

다음 파일 중 하나입니다.

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 */
...

다음은이 파일의 사본이있는 위치와 파일이 정의한 값입니다.

find /usr | grep limits.h | xargs -I {} grep -H 'NAME_MAX' {}

산출:

...
/usr/include/linux/limits.h:#define NAME_MAX         255        /* # chars in a file name */
...
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.