Linuxでのファイル名の長さの制限?


回答:


126

ファイルシステムの比較については、特に最大ファイル名の長さの列のウィキペディアのページを参照してください

一般的なファイルシステムでのファイル名の長さの制限を次に示します。

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文字です(このリンクをクリックするのが
面倒

11
回答には、少なくとも提供されたリンクの関連情報の要約が含まれている必要があります。単なるリンクではありません。
zrajm

2
それは、パスの制限は、通常はOSではなく、(ISOまたはNTFSのようないくつかの奇妙なFSesを除く)FSで定義されている一方で、右のファイル名の制限のためだ、と、Linux上で、4Kいる@rahmanisback
nonchip

2
実際には両方についてでした:D
nonchip

7
特にUTF-8を使用している場合は、バイト!= charsを指摘するだけです。こちらをご覧ください
クリス

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による)は質問に完全に回答するので、他の回答は部分的にオフになっているため、アップする必要があります。繰り返しますが、ルール以外に行って申し訳ありませんが、最良の答えが一番下にあるとき、私は静かにすることはできません。
デビッドバラジック

1
特にUTF-8を使用している場合は、バイト!= charsを指摘するだけです。こちらをご覧ください
クリス

1
@DavidBalažic:本当ですが、LinuxでのPATH_MAXは単なるガイドラインであり、基礎となるファイルシステムのほとんどに制限はありません。これにより、そのサイズより大きいパスを参照するのが難しくなります。通常、PATH_MAXの「チャンク」をサイズとして使用します。
ラーリー

23

私は他の答えを参照し、それらに賛成してください。

Linuxにファイル名またはパスの長さの制限はありますか?

はい、ファイル名とパス名の長さは次の制限を受けます。

これらのプロパティを動的に取得するには:



20

また、時間を節約するため(およびメモリに固定するため):

ext2、ext3、ext4、zfs:パス名の制限なし。255バイトのファイル名制限。


1
PATH_MAX = 4096ただし、ほとんどのプログラムはへの絶対パスで制限されています。プログラムが相対パスを使用でき、最初に作業ディレクトリを変更する場合、回避できます。
ミッコランタライネン

getcwdand などのさまざまなPOSIX API realpath(メタデータを読み取り、ファイルシステムルートに到達するまで変更して繰り返すことでユーザースペースコードに再実装できる)に依存しているためです。(ソース...PATH_MAX
ssokolow

6

これらはファイルシステム名の長さです。「linux」自体にもいくつかあります。たとえば、bits / stdio_lim.hから:

# define FILENAME_MAX 4096

extXファイルシステムのファイル名の制限はカーネルで定義されているものよりも低いため、パス名も含めない限り、その制限に達することはありませんか?
イヴァン

1
それは私にはそれがどのように見えるかです。パスのPATH_MAXもあります。これは4096であるため、extの「無制限」パスサイズの前にヒットします。その深いところに私の腕。興味深い質問ですが。
jj33

4096文字は、helluvaパス名です。再コンパイルで発生する可能性はありますが、正直なところ、/なぜそんなに長いパス名が必要なのでしょうか?/
Avery Payne

あなたがそれを必要とするかどうかはわかりません。私はそれを悪意のあるプログラムや過失プログラムに対する保護としてより見ています(動作が悪く、同じディレクトリを再帰的に作成し始めるスクリプトを簡単に見ることができました。 ...)。
jj33 09年

@AveryPayneファイルにタグを追加して、単純なを使用して検索できるようにしますlocate
ヒューバートカリオ

3

Linuxでポータブルな方法でパスの最大長を決定する方法はありません。私のシステムでは:

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

しかし、4096文字よりはるかに長いパスを簡単に作成できます。代わりにPATH_MAX、下限として参照してください。これだけ長いパスを作成できることが保証されていますが、はるかに長いパスを作成できる場合もあります。


経験的に最大長を見つける簡単なポータブルな方法は、ますます長くなるディレクトリチェーンを作成するプログラムを作成し、どこで失敗するかを確認することです。失敗する理由を正確に知ることはできません(ただし、人間が読み取れるような示唆的なエラーメッセージを期待します)が、どこまで安全に進むことができるかはわかります。個々のディレクトリの長さ、相対パス名の長さ、絶対パス名の長さの両方を必ず確認してください。
トリプリー

また、たとえば、Python os.pathconf()モジュールにはいくつかの回答があります。Pythonの移植が良ければ、それは合理的なはずです。
トリプリー

2
一部のファイルシステムは制限を課していないため、できません。プログラムは回復に苦労するメモリ不足エラーですぐに失敗します。
ビョルンリンドクヴィスト

これは、@BjörnLindqvistのコメントによるものを除き、正しい答えです。PATH_MAXは単なるガイドラインであり、ファイルの99%はおそらくその制限内にあります。
ラーリー

1

このページで次のように述べられているように、指定された項目に関するランタイム値を取得するには、常にpathconfまたはこのような関数を使用する必要があります

ただし、リストされている制限の多くは不変ではなく、実行時に、次の理由で制限の値がこのヘッダーで指定された値と異なる場合があることに注意してください。

  • 制限はパス名に依存します。

  • 制限は、コンパイルマシンとランタイムマシンで異なります。

これらの理由により、アプリケーションはfpathconf()、pathconf()、およびsysconf()関数を使用して、実行時の制限の実際の値を決定できます。


0

システムのlimits.hヘッダーファイルで指定されています。

これらのファイルの1つを次に示します。

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.