回答:
ファイルは(大体)3つの別個のものです。
空のファイルを作成すると、iノードとそのiノードを指すディレクトリエントリのみが作成されます。スパースファイルについても同じです(dd if=/dev/null of=sparse_file bs=10M seek=1
)。
既存のファイルへのハードリンクを作成するときは、同じiノードを指す追加のディレクトリエントリを作成するだけです。
ここでは簡単に説明しましたが、アイデアはわかります。
touch
作成するinodeをし、ls -i
またはstat
iノードに関する情報を表示します。
$ touch test
$ ls -i test
28971114 test
$ stat test
File: ‘test’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fc01h/64513d Inode: 28971114 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/1000) Gid: ( 1000/1000)
Access: 2017-03-28 17:38:07.221131925 +0200
Modify: 2017-03-28 17:38:07.221131925 +0200
Change: 2017-03-28 17:38:07.221131925 +0200
Birth: -
test
0ブロックを使用していることに注意してください。表示されたデータを保存するために、iノードはいくつかのバイトを使用します。これらのバイトはiノードテーブルに格納されます。iノード構造の例については、ext2ページを参照してください。
ファイル自体はスペースを占有しませんが、ファイルシステムはファイル名、場所、ファイルへのアクセス権などを保存します。
簡単な答え:それはそのように定義されているからです。
長い回答:一部の操作は概念的に単純であるため、そのように定義されています。
さらに多くのことができます:*エラーログファイルは空で作成される傾向があり、エラーが発生した場合にのみ満たされる。*発生したエラーの数を調べるには、ログファイルの行数を数えます。ログファイルが空の場合、エラーの数はゼロであり、完全に理にかなっています。*時々、関連するすべてのテキストがファイル名に含まれているファイルが表示されますthis-is-the-logging-directory
。これにより、過剰な管理者がインストール後に空のディレクトリを削除することを防ぎます。また、プログラムやユーザーが誤ってディレクトリを表示したいファイルを誤って作成するバグを防ぎます。git
プログラム(その他)は空のディレクトリを無視する傾向があり、プロジェクト/管理者/ユーザーがディレクトリが存在するという記録を持っているしたい場合には有用なコンテンツ(まだ)を持っていないにも関わらず、あなたは、名前の空のファイルを見ることができますempty
またはempty.directory
。
より複雑になる操作はありません。
ファイルの場合、「どこかに記録されたファイルがあります」という側面(inodeやファイル名)が上記の考慮事項に優先しますが、空のファイルが役に立たない場合、ファイルシステムはそれを行いません。
一般に、ファイル名に関連するものを除く上記の理由はすべて、シーケンスに適用されます。最も顕著なのは文字列であり、文字列は文字列です。長さゼロの文字列はプログラム内では一般的です。文字列は通常、意味をなさない場合はユーザーレベルで許可されません。ファイル名は文字列であり、ほとんどのファイルシステムではファイル名として空の文字列を許可しません。内部的には、フラグメントからファイル名を作成するとき、プログラムはフラグメントの1つとして空の文字列を持つ場合があります。
最も単純なアナロジーを使用して:
ファイルをたとえばコップ1杯の水と比較してみましょう。
「touch / tmp / test」は、水が入っていない空のガラスを作成するのに非常によく似ています。ガラスは空なので、サイズはゼロです。しかし、ガラスは存在します。
ファイルシステムの用語では、ガラスはメタデータであり、ガラスの内容はデータです。メタデータには、以前の投稿で述べたようにあらゆる種類のものが含まれています。
サイズがゼロのファイルが便利です。1つの例は、それらをブレッドクラムとして使用することです。そこでは、単なる存在を使用して何らかの状態を示すことができます(つまり、ファイルが存在する場合:次に何かを行い、そうでない場合:無視)。
このように考えてください。サーバーに送信されたSQLクエリをプログラムが追跡しているとします。プログラムは、要求をプレーンテキストファイルに記録していることを示したいが、要求はまだ記録されていない。それはどのように見えるべきですか?でサイズがゼロのファイルであると主張します/var/log/acme-sql-server/queries.log
。そうすれば、ロギングの開始時(ファイルの作成時間)、最終更新時(作成時)、記録されたクエリの数(ファイル内の改行数= 0)、および誰がロギングを行っているかを把握できます。 (Acme SQL Server)。このような場合、特定の場所に存在する空のファイルの概念を使用すると便利です。