web-dev-qa-db-ja.com

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

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

130
ro.

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

一般的なファイルシステムにおけるファイル名の長さ制限は次のとおりです。

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
134
WerkkreW

私は読みました ここ パスの長さの制限はシステムヘッダーにあります。ファイル名の長さ制限もあります。私のシステムではそれはファイルです:

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

そしていくつか。

90
sfp

私は他の回答を参照します、それらに賛成投票してください。

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

はい、ファイル名とパス名の長さは以下によって制限されます:

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

  • Michael Aaron Safyan によって提案された関数 pathconfおよびfpathconf を使用します
  • dogbane の説明に従って、ファイル名(またはパス名)をどんどん長く作成します
  • Linuxでも利用可能な tim によって提案されたコマンドgetconfを使用します。

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

そして時間を節約するために(そしてそれをメモリに固定するために):

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

20
Ivan

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

# define FILENAME_MAX 4096
6
jj33

Linux上のパスの最大長をポータブルな方法で決定するためのno wayがあります。私のシステムでは:

$ getconf PATH_MAX / 
4096
$ getconf _POSIX_PATH_MAX / 
4096

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

3

page が言っているように、指定されたアイテムに関するランタイム値を取得するには、常にpathconfまたはこのような関数を使用する必要があります:

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

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

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

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

1
andy

これは、システム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 */
...
0
Bohdan Voloshyn