Tworzenie dowolnie dużego „fałszywego” pliku


16

Chciałbym utworzyć specjalny plik podobny do /dev/nulllub /dev/random, w którym plik tak naprawdę nie istnieje, ale można go odczytać tak samo, z tym wyjątkiem, że mógłbym ustawić ograniczenie widocznego rozmiaru pliku.

Innymi słowy, chcę utworzyć specjalny plik, w którym (zakładając, że ustawiłem limit na 500 GB), kiedy „cat” plik, wyśle ​​wszystkie 500 GB pliku, a następnie zatrzyma się. Musi działać tak samo jak rzeczywisty plik 500 GB, ale bez zajmowania miejsca. Zawartość tego pliku nie ma znaczenia, może to być wszystko \0jest jak /dev/null, lub po prostu mały ciąg wysyłane w kółko, czy cokolwiek innego.

Czy to jest coś, co można zrobić? Jedyne, co zdalnie zamknąłem, jakie udało mi się znaleźć, to strony podręcznika, o których mówiłem mknod, ale te nie były zbyt pomocne.

Odpowiedzi:


17

Możesz utworzyć rzadki plik w niektórych systemach plików, który będzie wyglądał na określony rozmiar, ale tak naprawdę nie zużyje tyle miejsca na dysku .

$ 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

To działa idealnie. Najlepszy przypadek Miałem nadzieję na rozwiązanie, w którym mógłbym faktycznie wypisać, jaki jest wynik (na przykład, dla każdej pozycji wyszukiwania, na którą patrzysz, pojawiłby się skrót tej pozycji lub coś podobnego), ale to było całkiem nieźle tam. To zdecydowanie działa na teraz, dzięki!
Przeciętny Gopher

1
@MediocreGopher, na pewno możesz zrobić coś takiego z FUSE .
cjm


1

Jeśli nie musisz szukać ponownie w pliku, możesz użyć nazwanego potoku:

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

Oczywiście do generowania danych w potoku można użyć dowolnego innego polecenia, w tym złożonego skryptu.


0

Dzięki dd możesz określić rozmiar bloku i liczbę, a tym samym ograniczyć rozmiar w następujący sposób:

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

Jeśli chcesz z niego czytać, po prostu potokuj:

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

Kiedyś każda instalacja Linuksa, którą wykonałem, zawierała niektóre narzędzia sieciowe, portmap, inet.d i tak dalej, aw inet.d, gdzie niektóre usługi zawsze były określone, jedna z nich została opisana / nazwana chargeen, jeśli dobrze pamiętam.

(... minutę później ...)

Tak. W / etc / services znajdziesz

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

Sądzę więc, że jest to usługa testująca coś, która wysyła znaki - może losowe - przez sieć. Na moim komputerze znajduję /etc/xinet.d/chargen. Jest więcej informacji:

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

Nie wiem jednak, jak go używać do swoich celów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.