Linuxでファイル名やパスの長さの制限はありますか?
ファイルシステムの比較に関するウィキペディアのページ を参照してください。特に、列の最大ファイル名長を参照してください。
一般的なファイルシステムにおけるファイル名の長さ制限は次のとおりです。
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
私は読みました ここ パスの長さの制限はシステムヘッダーにあります。ファイル名の長さ制限もあります。私のシステムではそれはファイルです:
/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 */
そしていくつか。
私は他の回答を参照します、それらに賛成投票してください。
Linuxでファイル名やパスの長さの制限はありますか?
はい、ファイル名とパス名の長さは以下によって制限されます:
linux/limits.h
で定義されている定数.これらのプロパティを動的に取得するには:
pathconf
およびfpathconf
を使用しますLinuxでも利用可能な tim によって提案されたコマンドgetconf
を使用します。
$ getconf NAME_MAX /mnt/sda2/
255
$ getconf PATH_MAX /mnt/sda3/
4096
そして時間を節約するために(そしてそれをメモリに固定するために):
ext2、ext3、ext4、zfs:パス名の制限なし。 255バイトのファイル名制限。
それらはファイルシステム名の長さです。 「linux」自体にもいくつかあります。たとえば、bits/stdio_lim.hから:
# define FILENAME_MAX 4096
Linux上のパスの最大長をポータブルな方法で決定するためのno wayがあります。私のシステムでは:
$ getconf PATH_MAX /
4096
$ getconf _POSIX_PATH_MAX /
4096
しかし、4096文字よりはるかに長いパスを簡単に作成できます。代わりに、下限としてPATH_MAX
を参照してください。この長さでパスを作成できることが保証されていますが、はるかに長いパスを作成できる場合もあります。
page が言っているように、指定されたアイテムに関するランタイム値を取得するには、常にpathconfまたはこのような関数を使用する必要があります:
ただし、以下の理由により、リストされている制限の多くは不変ではなく、実行時に制限の値がこのヘッダーで指定されている値と異なる場合があることに注意してください。
制限はパス名に依存します。
制限はコンパイルマシンとランタイムマシンで異なります。
これらの理由により、アプリケーションはfpathconf()、pathconf()、およびsysconf()関数を使用して、実行時の制限の実際の値を決定する場合があります。
これは、システム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 */
...