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

7-2. バイナリ処理


アニメ『Charlotte』(シャーロット)(2015)

特殊能力を持つ高校生たちが悩みます。一話目から主人公悪い奴だったので、期待して見ていたのですが、だんだん良い奴になってきました。

やはり、パワーを手にいれてたら普通の人間は、良くないことに使うような気がしまうので、主人公はダークな方が共感できます。
特殊能力の中で最強なのは、能力のコピーでしょうか。奥義、水影心で、一度戦った相手の拳法が使えるようになってしまう、北斗神拳のケンシロウのように、コピースキルってずるくて最強です。
ケンシロウは、強いのにぜんぜんダークじゃないですね。ストイックなところに憧れます。

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

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

リダイレクトでコピー。

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

ddコマンドでコピー。

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

perlでコピー

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

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

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

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

takk~$ time cp a b

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

リダイレクト。

takk~$ rm b
takk~$ time cat a > b

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

perl。

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

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

最後にddコマンド。

takk~$ rm b
takk~$ 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
takk~$ 

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

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

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

takk~$ 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
takk~$ 

0.183sです。

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

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

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

もっと早くなりました。

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

コメント

タイトルとURLをコピーしました