Ubuntuでのファイルパスの最大長はいくつですか?


9

長い間Windowsシステムを使用してきたため、ある時点で、ファイルやフォルダの名前が長くなりすぎるとエラーウィンドウが表示されることがあります。

これは、SFTPを使用してサーバーから(たとえば)フォルダーにファイルをバックアップしようとしたときに発生しました。

D:(Windows drive partition)/Temporary/Projects/2015-06/Websites/Guitar-Site/Images/Logos/Manufacturers/Instruments/Basses/(long file name).png

ご覧のとおり、私は非常に指定されたフォルダパスを作成することがあり、ファイル名が長い場合、NTFSはこの方法でファイルを保存できない場合があります。

現在、バックアップドライブのフォルダーパス/backups/(drive name)/...がすべてのファイルパスに追加されるため、物理バックアップについて心配しています。

私が注意しなければならないext4 / Ubuntuにそのような制限(または同様の制限)はありますか?


2
ServerFaultで回答済み:4k。これはOSの制限であり、FSの制限ではありません。serverfault.com/questions/9546/...
ジョン・N

回答:


15

ファイル名の最大長は255バイトです。ext4wikiページにあります

また、最大パスは4096文字です。このUnix&Linux SEの質問で見つかりました

しかし、ext4で最大ファイルパスを指定していないこのWiki記事を見つけました。


こんにちはjtoscarson、あなたの答えをありがとう。これを調べてみようと思いますが、「255バイト」の長さの意味を説明してもらえますか?すべての文字が必ずしも8ビットを使用するわけではないので、合計で255文字を超えると思いますか?あるいは、もっと少ないかもしれませんが、さまざまな文字セットを使用できることを考慮してください。
Prototype700

通常、1文字は1バイトです。ドキュメントは探していませんでしたが、簡単なテスト jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -c 7 jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -m 7 があります。-mは文字を数え、-cはバイトを数えます。6ではなく7である理由は、印刷されない行末文字です。ファイル名の総文字数は255になるだろうだから
jtoscarson

1
UTF-8ロケールリターンを使用する4ためecho -n "💩" | wc -c。その名前で呼び出されるファイル名を作成するには、このファイル名が1書記素であるにもかかわらず、4バイト必要です。「文字」は明確に定義された概念ではありません(通常、バイト、書記素、またはUNICODEコードポイントを意味します)。
ミッコランタライネン2018

暗号化されたファイルシステムでは、ファイル名の最大長は143バイトです。ファイル名が十分に短いかどうかを判断するには、Pythonでを使用して彼のバイト長を確認できますlen(filename.encode())
Marvo

0

これを決定する最も信頼できる方法pathconf(".", _PC_PATH_MAX);は、所定のパスの最大パスを決定するPOSIX関数を使用することだと思います。

関数が示唆するように、これはファイルシステムによって異なります。

それを公開するコマンドラインユーティリティについては知りません。これは最小限のCの例です:https : //stackoverflow.com/questions/16285623/how-to-get-the-to-get-path-to-the-current-file-pwd-in-linux-from-c / 54155296#54155296


1
これも興味深いかもしれません:zsh.org/mla/workers/2000/msg03393.html
Sergiy Kolodyazhnyy

0

パス名の制限は、使用中のファイルシステムによって異なります。jtoscarsonの回答はUbuntuのデフォルトであるext4をカバーしていますが、Ubuntuではさまざまなファイルシステムを使用できます。WerkkreWの回答serverfaultで引用するために、いくつかのファイルシステムとその制限を次に示します。

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

また、さまざまなファイルシステムには、ファイル名に使用できる文字のタイプに関して制限があることにも注意してください。たとえば、のファイル名にext4NULLおよびを含めることはできません/ファイルシステムの比較については、ウィキペディアの記事も参照してください。

LinuxファイルシステムはPOSIX定義を考慮する必要があることにも注意してください。

3.266パス名

ファイルを識別するために使用される文字ストリング。IEEE Std 1003.1-2001のコンテキストでは、パス名は最大で{PATH_MAX}バイトで構成され、終端のnullバイトを含みます。オプションの先頭にスラッシュがあり、その後にスラッシュで区切られた0個以上のファイル名が続きます。パス名には、オプションで1つ以上の末尾のスラッシュを含めることができます。連続する複数のスラッシュは、1つのスラッシュと同じであると見なされます。

limits.hから:

{PATH_MAX}

パス名の最大バイト数(終端のnull文字を含む)。最小許容値:{_POSIX_PATH_MAX}

{_POSIX_PATH_MAX}

パス名の最大バイト数。値:256


0

@ sergiy-kolodyazhnyyが言ったように、ファイル名の最大長はファイルシステムによって異なり、大多数はファイル名の長さを255バイトに制限しています。

彼のチャートからの注目すべき脱落は光メディアです。UDFとRock Ridgeの拡張機能では、ファイル名に同じ255文字の制限がありますが、Rock RidgeとJolietを使用しないISO9660には、youtube-dlダウンロードのバックアップなどを行う場合に実際に実行される可能性のある非常に厳しい制限があります。

ディスクマスタリングプログラムに、実際には害を与えないと思われる方法で仕様から逸脱するオプションがある場合、Jolietファイル名は64 UTF-16コードポイントまたはそれらの103に制限されます。

同様に、Rock Ridge拡張なしのISO 9660レベル2および3は、31文字または37のファイル名に制限されています。

ISO 9660:1999 genisoimage サポートされていますが、K3bなどのフロントエンドでサポートされていませんが、207バイト(Rock Ridgeなし)または197バイト(Rock Ridgeあり)の制限があります。

(出典:genisoimageマンページ)

最大パス長に関しては、それは大きな誤解です。ほとんどのLinuxファイルシステムにはありません。

そこ名前付き定数だPATH_MAXが、それはだ、特定のPOSIX APIの唯一最大のあなたがすることができ、仕事 の周り

この「パス長に制限がない」規則の結果として生じる唯一の例外は、FAT32とexFAT(32,760のUnicode文字)、NTFSとReFS(32,767のUnicode文字)、UDF(1,023バイト)、およびISO 9660(不明確ですが、私は見たことがあります) 180、207、212、または222バイトと記載されています)。

これは、この小さなPythonプログラムを実行して、結果のディレクトリを調べることで簡単に確認できます。

import os
for X in range(20):
    os.mkdir('x' * 255)
    os.chdir('x' * 255)

bashプロンプトにパス全体を表示するMy では、問題が発生します。ただし、zshプロンプトに現在のフォルダーのみを表示するmy には問題がなくpwd、5000バイト以上のパス全体を問題なく表示できるビルトインさえあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.