/dev/null
または/dev/random
に類似した特別なファイルを作成したいと思います。ファイルは実際には存在しませんが、実際に読み取ることができますが、実際にはファイルの見かけのサイズ。
別の言い方をすれば、(キャットを500GBに設定したと仮定して)特別なファイルを作成して、ファイルを「キャット」すると、500GBのファイルがすべて出力されて停止します。実際の500GBファイルと同じように動作する必要がありますが、スペースを占有しません。このファイルの内容は重要ではありません。すべての\0
が/dev/null
のようになっている場合や、小さな文字列が繰り返し送信されている場合などがあります。
これはできることですか?私が見つけることができたのは、mknod
に関するmanページだけです。しかし、それらはあまり役に立ちませんでした。
sparse file を特定のファイルシステムに作成できますappearは特定のサイズになります、しかし実際にはそれほど多くのスペースを使用しませんon disk。
$ dd if=/dev/null of=sparse bs=1024 count=1 seek=524288000
0+0 records in
0+0 records out
0 bytes (0 B) copied, 2.4444e-05 s, 0.0 kB/s
$ ls -l sparse
-rw-rw-r--. 1 ignacio ignacio 536870912000 May 9 22:25 sparse
$ du -h sparse
0 sparse
ファイルをシークする必要がない場合は、名前付きパイプを使用できます。
mkfifo my_special_file
yes | head -n 100 > my_special_file&
cat my_special_file
もちろん、複雑なスクリプトを含む他のコマンドを使用して、パイプ内にデータを生成できます。
まあ、ddを使用すると、ブロックサイズとカウントを指定できるため、次のようにサイズを制限できます。
dd if=/dev/urandom count=5 bs=1024 > nullfile
そこから読みたい場合は、パイプしてください:
dd if=/dev/urandom count=5 bs=1024 | yourReadingProcess
以前は、私が作成したすべてのLinuxインストールには、いくつかのネットワークツール、portmap、inet.dなどが付属しており、inet.dでは、いくつかのサービスが常に指定されていました。
(... 1分後...)
はい。/etc/servicesには、
chargen 19/tcp ttytst source
chargen 19/udp ttytst source
つまり、何かをテストするサービスであり、ネットワークを介して文字(おそらくランダム)を送信するサービスだと思います。私のPCでは/etc/xinet.d/chargenしか見つかりません。より多くの情報があります:
# default: off
# description: An xinetd internal service which generate characters. The
# xinetd internal service which continuously generates characters until the
# connection is dropped. The characters look something like this:
# !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg
# This is the tcp version.
しかし、私はあなたの目的のためにそれを使用する方法を知りません。