最強の特殊能力ってコピー能力だと思う(cp,dd)


アニメ『Charlotte』(シャーロット)(2015)
特殊能力を持つ高校生たちが悩みます。一話目から主人公悪い奴だったので、期待して見ていたのですが、だんだん良い奴になってきました。やはり、パワーを手にいれてたら普通の人間は、良くないことに使うような気がしまうので、主人公はダークな方が共感できます。
特殊能力の中で最強なのは、能力のコピーでしょうか。奥義、水影心で、一度戦った相手の拳法が使えるようになってしまう、北斗神拳のケンシロウのように、コピースキルってずるくて最強です。ケンシロウは、強いのにぜんぜんダークじゃないですね。ストイックなところに憧れます。

コピースキルということで、コピーの方法いろいろです。
まずは普通のコピー、cpコマンドから。

~$ echo AAAAA>a
~$ cat a
AAAAA
~$ cp a b
~$ cat b
AAAAA

リダイレクトでコピー。

~$ rm b
~$ cat a > b
~$ cat b
AAAAA

ddコマンドでコピー。

~$ rm b
~$ dd if=a of=b bs=1 count=6
6+0 レコード入力
6+0 レコード出力
6 バイト (6 B) コピーされました、 0.000385437 秒、 15.6 kB/秒
~$ cat b
AAAAA
~$ 

perlでコピー

~$ time perl -e'open(IN,"<a");open(OUT,">b");while(<IN>){print OUT $_};'
~$ cat b
AAAAA
~$ 

それぞれのコピー時間を確認してみましょう。
比較しやすくするためファイルサイズを大きくしてみます。
ddコマンドでオール0の1MByteのファイルaを作成します。

~$ rm *
~$ dd if=/dev/zero of=a bs=1 count=1M
1048576+0 レコード入力
1048576+0 レコード出力
1048576 バイト (1.0 MB) コピーされました、 1.51342 秒、 693 kB/秒
~$ 

まずはcpコマンドの測定から。

~$ time cp a b

real	0m0.005s
user	0m0.000s
sys	0m0.004s
~$ 

リダイレクト。

~$ rm b
~$ time cat a > b

real	0m0.004s
user	0m0.000s
sys	0m0.000s
~$ 

perl。

~$ rm b
~$ time perl -e'open(IN,"<a");open(OUT,">b");while(<IN>){print OUT $_};'

real	0m0.008s
user	0m0.000s
sys	0m0.004s
~$ 

最後にddコマンド。

~$ rm b
~$ time dd if=a of=b bs=1 count=1M
1048576+0 レコード入力
1048576+0 レコード出力
1048576 バイト (1.0 MB) コピーされました、 1.65015 秒、 635 kB/秒

real	0m1.652s
user	0m0.096s
sys	0m1.552s
~$ 

まとめると、
cp 0.005s
catからリダイレクト 0.004s
perl 0.008s
dd 1.652s

ddコマンドは遅いようです。

オール0のファイルの生成もddは1.5sかかっていましたが、perlでやると、

~$ time perl -e'open(FH,">a");for($i=0;$i<1024*1024;$i++){
print FH "\0"} close(FH)'

real	0m0.183s
user	0m0.180s
sys	0m0.000s
~$ 

0.183sです。

さらに、openを使う必要もないので、

~$ time perl -e'for($i=0;$i<1024*1024;$i++){print "\0"}' > a

real	0m0.133s
user	0m0.132s
sys	0m0.000s
~$ 

もっと早くなりました。

物の上手って最初はどれだけモノマネできるかだと思います。まずは、モノマネして、上手くできるようになったら、自分流に改良していくってやり方が、手っ取り早くスキルアップする方法かと思います。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA