1. 概要

Unixベースのシステムでは、ファイル名の長さに制限があります。 この制限は、ファイルシステムによって異なります。

このチュートリアルでは、さまざまなファイルシステムの制限を見つける方法を学習します。 さらに、制限がどのように機能するかを確認するために、長い名前のファイルを作成します。

2. ファイル名の長さの制限とUnixファイルシステム

ほとんどのUnixファイルシステムには、同様のファイル名の長さの制限があります。

ファイルシステム ファイル名の最大長
BTRFS 255バイト
exFAT 255UTF-16文字
ext2 255バイト
ext3 255バイト
ext3cow 255バイト
ext4 255バイト
FAT32 8.3(VFAT LFNを備えた255個のUCS-2コードユニット)
NTFS 255文字

ただし、文字のUnicode表現は数バイトを占める可能性があるため、パスとファイル名を構成する文字の最大数は異なる場合があります。

さらに、ファイル名に拡張子が含まれているかどうかにかかわらず、制限は同じままです。 ファイルシステムに応じたファイル名とパスの制限のより網羅的なリストを見ることができます。

最大長の制限を変更する拡張子をファイルシステムに含めることもできます。 この良い例は、 eCryptFS です。これは、下位ファイル名の一部を利用してメタデータを保持し、ファイル名の制限を143文字に設定します。

3. 限界を見つける

Linuxには、システム構成変数を照会するためのgetconfという便利なコマンドがあります。

これを実行して、ファイル名の長さの制限を見つけることができます。

$ getconf -a | grep -i name_max
NAME_MAX                           255
_POSIX_NAME_MAX                    255
LOGNAME_MAX                        256
TTY_NAME_MAX                       32
TZNAME_MAX                         
_POSIX_TZNAME_MAX                  
CHARCLASS_NAME_MAX                 2048
HOST_NAME_MAX                      64
LOGIN_NAME_MAX                     256

ここで、 NAME_MAX 構成は、ファイル名の長さの制限を表します。

同様に、前のコマンドの最後の部分を変更することで、パスの長さの制限を見つけることができます。

$ getconf -a | grep -i path_max
PATH_MAX                           4096
_POSIX_PATH_MAX                    4096

4. 制限の確認

標準のtouchコマンドを使用して、258文字、つまり255の制限を3文字超える名前のファイルを作成してみましょう。

$ touch abcabcabcabcabcabcabc...other characters omitted....abcabcabc

取得した応答は次のとおりです。

touch: cannot touch 'abcabcabcabcabcabcabc...other characters omitted....abcabcabc': File name too long

5. 結論

この記事では、さまざまなLinuxファイルシステムでファイル名とパスの両方の制限を確認する方法を学びました。 また、制限を超えたファイルを作成して、発生したエラーを確認しようとしました。