Czy w systemie Linux jest program, który może obliczyć, ile danych mógłby wytworzyć program?
Na przykład, jeśli chciałbym wykonać kopię zapasową bazy danych MySQL, zwykle tak robię
mysqldump > dumpfile.sql
Zamiast tego chciałbym przekierować na, /dev/null
ale obliczyć, ile miejsca na dysku byłoby wykorzystane, na przykład
mysqldump | fancy_space_calc_program
Wydajność:
123456789 Bytes would have been used
Uwaga: kopia zapasowa MySQL jest tylko przykładem. Doskonale zdaję sobie sprawę z tego, jak mogłem wcześniej oszacować rozmiar, więc proszę nie komentować tego.
linux
disk-space
wymyślne majtki
źródło
źródło
Odpowiedzi:
Zaczerpnięte z /programming/13418688/use-pipe-with-du-to-compute-size-of-stdin
Oczywiście to tylko surowe bajty i nie mają nic wspólnego z wielkością sektora itp., Więc weź to z odrobiną soli ...
źródło
wc
odrzuci dane, których nie potrzebuje już tak szybko, jak to możliwe.wc
na moim komputerze z łatwością radzą sobie z danymi standardowymi o wielkości 40 GB i tylko 8 GB pamięci.wc -c
nie liczy znaków - liczy bajty.wc -m
liczy znaki. Najbardziej oczywista różnica polega na znakach wielobajtowych, takich jak UTF-16 lub Windows\r\n
(dwa bajty w ASCII, ale jeden znak). Przez większość czasu niekoniecznie wymaga dużo buforowania, ale Unicode może mieć dowolną liczbę bajtów reprezentujących pojedynczy znak; nie coś, co można zobaczyć w zaufanych danych, ale możliwy wektor przepełnienia bufora.Polecenie pv jest do tego idealne.
Myślę, że powyższe da ci właściwe polecenie, które chcesz, może wymagać pewnych regulacji, takich
pv -b | > /dev/null
jak nie mogę teraz przetestować-b
daje wartość w bajtach.źródło
pv
. Codziennie uczysz się czegoś nowego :)Możesz do tego użyć
dd
, w ten sposóbcat /dev/zero | dd status=progress of=/dev/null bs=4M
.Zapewnia to pewne dane podczas i po wykonaniu o ilości danych, które zostały do niego przekazane, takie jak:
źródło