Création d'un file "faux" arbitrairement volumineux

Je voudrais créer un file spécial similaire à /dev/null ou /dev/random , où le file n'existe pas, mais vous pouvez tout de même le lire, sauf que je pourrais définir un plafond sur la taille apparente du file.

Pour le dire autrement, je veux créer un file spécial où (en supposant que je règle le plafond à 500 Go) quand je "chat" le file, il sortira tous les 500 Go du file, puis arrêtera. Il doit agir de la même manière qu'un file de 500 Go, mais sans prendre de place. Le contenu de ce file n'a pas d'importance, il peut s'agir de tous les \0 comme /dev/null , ou simplement d'une petite string renvoyée encore et encore, ou peu importe.

Est-ce quelque chose qui est faisable? La seule chose à distance que j'ai pu find est les pages man qui parlent de mknod , mais celles-ci n'étaient pas très utiles.

Vous pouvez créer un file fragmenté sur certains filesystems, qui semblera avoir une certaine taille, mais n'utilisera pas beaucoup d'espace sur le disque .

 $ dd if=/dev/null of=sparse bs=1024 count=1 seek=524288000 0+0 records in 0+0 records out 0 bytes (0 B) copyd, 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 

Au-delà de la solution portable dd / seek déjà mentionnée, certains Unix ont des commands spécialisées:

Au less sur Solaris , MacOS / X et Irix :

 mkfile -n 500m sparseFile 

Sur HP-UX prealloc , sur AIX lmktemp. et de nombreuses dissortingbutions Linux ont tronqué

Si vous n'avez pas besoin de chercher dans le file, vous pouvez utiliser un canal nommé:

 mkfifo my_special_file yes | head -n 100 > my_special_file& cat my_special_file 

Bien sûr, vous pouvez utiliser n'importe quelle autre command, y compris un script complexe, pour générer des données dans le pipeline.

Eh bien, avec dd, vous pouvez spécifier une taille de bloc et un nombre, et ainsi limiter la taille comme ceci:

 dd if=/dev/urandom count=5 bs=1024 > nullfile 

Si vous voulez en lire, il suffit de le faire:

 dd if=/dev/urandom count=5 bs=1024 | yourReadingProcess 

Autrefois, chaque installation de linux que je faisais est venue avec quelques outils de réseau, portmap, inet.d et ainsi, et dans inet.d, là où certains services ont toujours spécifié, l'un d'eux a été décrit / nommé chargen, si je me souviens bien.

(… une minute plus tard …)

Oui. Dans / etc / services, vous trouvez

 chargen 19/tcp ttytst source chargen 19/udp ttytst source 

Je suppose donc que c'est un service de tester quelque chose, et qui envoie des caractères – peut-être randoms – sur le réseau. Je ne trouve /etc/xinet.d/chargen sur mon PC. Il y a plus d'infos:

 # 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. 

Cependant, je ne sais pas comment l'utiliser pour votre but.