GNU/Linux >> Linux の 問題 >  >> Linux

Linuxでゼロバイトのファイルを作成するという概念は何ですか?

ファイルは (大まかに) 3 つの別個のものです:

  • ファイルの所有者、パーミッション、および実際にデータを含むディスク上のブロックのリストを追跡するメタデータ構造である「inode」。
  • その i ノードを指す 1 つ以上のディレクトリ エントリ (ファイル名)
  • データ自体の実際のブロック

空のファイルを作成すると、i ノードとその i ノードを指すディレクトリ エントリだけが作成されます。スパースファイルも同様 (dd if=/dev/null of=sparse_file bs=10M seek=1 ).

既存のファイルへのハードリンクを作成すると、同じ inode を指す追加のディレクトリ エントリが作成されるだけです。

ここでは単純化していますが、お分かりいただけたでしょうか。


touch inode を作成します 、および ls -i または stat inode に関する情報が表示されます:

$ 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 ブロックを使用します。表示されたデータを格納するために、inode は数バイトを使用します。これらのバイトは inode テーブルに格納されます。 inode 構造の例については、ext2 ページを参照してください。


ls (または、stat(2) システム コール) は、コンテンツのサイズを示します ファイルの。簿記のためにファイルシステムが必要とするスペースの量はその一部ではなく、実装の詳細として、一般的なプログラムがすべきものではありません 気にするか、知っていることさえあります。実装の詳細を可視化すると、ファイルシステムの抽象化の有用性が低下します。


Linux
  1. Linuxのiノード番号とは何ですか?

  2. Linux – Gnu / linuxでファイルパーミッションなどを設定するさまざまな方法は何ですか?

  3. Linux上のmysql.sockファイルの正しい場所は何ですか?

  1. inode 番号を使用して Linux でファイルを削除する

  2. Windows の Linux の File コマンドに相当するものは何ですか?

  3. 作成時刻を格納する Linux のファイル システムはどれですか?

  1. findコマンドを使用してLinux上のファイルとディレクトリを検索します

  2. statコマンドを使用してLinuxのファイルステータスを確認します

  3. Linuxtacコマンドの使用を開始する