Zerowanie plików

Ostatnio ktoś napisał, że zerowanie pliku za pomocą

cat /dev/null > plik

to lamerskie. Jak się zapytałem dlaczego, dostałem informację że duże pliki długo będą się zerowały. Czy to prawda?

Zacząłem od testowania.

cat /dev/null > /home/dysk/testdaniel.l1

root@Daniel-Dell:/home/dysk# ls -l testdaniel.l1
-rw-r--r-- 1 root root 6451625984 cze 19 23:05 testdaniel.l1
root@Daniel-Dell:/home/dysk# cat test1.sh
#!/bin/bash
cat /dev/null > /home/dysk/testdaniel.l1
exit 0
root@Daniel-Dell:/home/dysk# time ./test1.sh

real 0m0.708s
user 0m0.004s
sys 0m0.696s
root@Daniel-Dell:/home/dysk# ls -l testdaniel.l1
-rw-r–r– 1 root root 0 cze 19 23:06 testdaniel.l1

echo ' ' > /home/dysk/testdaniel.l1

root@Daniel-Dell:/home/dysk# ls -l testdaniel.l1
-rw-r--r-- 1 root root 6451625984 cze 19 23:11 testdaniel.l1
root@Daniel-Dell:/home/dysk# cat test1.sh
#!/bin/bash
echo ' ' > /home/dysk/testdaniel.l1
exit 0
root@Daniel-Dell:/home/dysk# time ./test1.sh

real 0m0.712s
user 0m0.004s
sys 0m0.700s
root@Daniel-Dell:/home/dysk# ls -l testdaniel.l1
-rw-r–r– 1 root root 2 cze 19 23:13 testdaniel.l1

> /home/dysk/testdaniel.l1

root@Daniel-Dell:/home/dysk# ls -l testdaniel.l1
-rw-r--r-- 1 root root 6451625984 cze 19 23:18 testdaniel.l1
root@Daniel-Dell:/home/dysk# cat test1.sh
#!/bin/bash
> /home/dysk/testdaniel.l1
exit 0
root@Daniel-Dell:/home/dysk# time ./test1.sh

real 0m0.701s
user 0m0.000s
sys 0m0.696s
root@Daniel-Dell:/home/dysk# ^C
root@Daniel-Dell:/home/dysk# ls -l testdaniel.l1
-rw-r–r– 1 root root 0 cze 19 23:19 testdaniel.l1

cp /dev/null /home/dysk/testdaniel.l1

root@Daniel-Dell:/home/dysk# ls -l testdaniel.l1
-rw-r--r-- 1 root root 6451625984 cze 19 23:26 testdaniel.l1
root@Daniel-Dell:/home/dysk# cat test1.sh
#!/bin/bash
cp /dev/null /home/dysk/testdaniel.l1
exit 0
root@Daniel-Dell:/home/dysk# time ./test1.sh

real 0m0.721s
user 0m0.000s
sys 0m0.708s

Zatem jak widać nie ma znaczenia jak wykonany zerowanie pliku, czas wykonania jest taki sam. Nie ważne jakiej wielkości plik zerujemy.

Co innego jak byśmy chcieli skopiować duży plik, wtedy wielkość kopiowanego pliku ma znaczenie.