Membuat file "palsu" yang sewenang-wenang

16

Saya ingin membuat file khusus yang mirip /dev/nullatau /dev/random, di mana file tersebut tidak benar-benar ada tetapi Anda dapat membaca semuanya, kecuali bahwa saya benar-benar dapat menetapkan batas pada ukuran file yang terlihat.

Dengan kata lain, saya ingin membuat file khusus di mana (dengan asumsi saya menetapkan batas pada 500GB) ketika saya "cat" file itu akan menghasilkan semua 500GB file dan kemudian berhenti. Perlu bertindak sama dengan file 500GB yang sebenarnya, tetapi tanpa mengambil ruang. Isi file ini tidak masalah, bisa jadi semuanya \0seperti /dev/null, atau hanya string kecil yang dikirim berulang kali, atau apa pun.

Apakah ini sesuatu yang bisa dilakukan? Satu-satunya hal yang dekat dari jarak dekat yang bisa saya temukan adalah halaman manual yang dibicarakan mknod, tetapi itu tidak terlalu membantu.

Gopher yang biasa-biasa saja
sumber

Jawaban:

17

Anda dapat membuat file jarang pada sistem file tertentu, yang akan muncul dengan ukuran tertentu, tetapi tidak akan benar-benar menggunakan banyak ruang pada 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
Ignacio Vazquez-Abrams
sumber
Ini bekerja dengan sempurna. Kasus terbaik saya berharap untuk solusi di mana saya benar-benar bisa skrip keluar apa outputnya (seperti, untuk setiap posisi pencarian Anda melihat data akan ada hash dari posisi itu atau sesuatu di sepanjang garis itu), tapi itu cukup bagus sana. Ini pasti berfungsi untuk saat ini, terima kasih!
Mediocre Gopher
1
@MococreGopher, Anda tentu bisa melakukan hal seperti itu dengan FUSE .
cjm
1

Di luar solusi dd / seek portabel yang telah disebutkan beberapa Unix memiliki perintah khusus:

Setidaknya pada Solaris , MacOS / X dan Irix :

mkfile -n 500m sparseFile

Pada HP-UX prealloc , pada AIX lmktemp. dan banyak distribusi Linux yang terpotong

Jlliagre
sumber
1

Jika Anda tidak perlu mencari kembali dalam file, Anda bisa menggunakan pipa bernama:

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

Tentu saja, Anda dapat menggunakan perintah lain, termasuk skrip yang rumit, untuk menghasilkan data dalam pipa.

jfg956
sumber
0

Nah, dengan dd, Anda dapat menentukan ukuran blok dan hitungan, dan karenanya membatasi ukuran seperti ini:

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

Jika Anda ingin membacanya, sambungkan saja:

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

Di masa lalu, setiap instalasi linux yang saya buat datang dengan beberapa alat jaringan, portmap, inet.d dan semacamnya, dan di inet.d, di sana di mana beberapa layanan selalu ditentukan, salah satunya dijelaskan / bernama chargen, jika saya ingat dengan benar.

(... satu menit kemudian ...)

Iya. Di / etc / services, Anda temukan

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

Jadi saya kira ini adalah layanan untuk menguji sesuatu, dan yang mengirimkan karakter - mungkin acak - melalui jaringan. Saya hanya menemukan /etc/xinet.d/chargen di PC saya. Ada lebih banyak info:

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

Namun, saya tidak tahu bagaimana menggunakannya untuk tujuan Anda.

Pengguna tidak diketahui
sumber