Bashでのファイル名の長さの制限
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ファイルシステムでファイル名とパスの両方の制限を確認する方法を学びました。 また、制限を超えたファイルを作成して、発生したエラーを確認しようとしました。