- ベストアンサー
ファイルのコピーについて
RHEL6で、ファイルをコピーする際に以下の2通りのコマンドがあります。 --------------------- #x.txt ファイル内容の出力結果をy.txt に出力 cat x.txt > y.txt #x.txt ファイルをy.txt としてコピーする cp x.txt y.txt --------------------- 前者と後者では、効率的にはどちらも同じでしょうか。 cat(もしくはcp )を使う方がよいという場合、その理由を教えていただけますか。 お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
実行時間は#1の方がおっしゃるように誤差の範囲と思いますので極論どちらでもいいとは思いますが、細かいことを言い出せばcpコマンドの方が無駄な処理は少ないです。 ざっくりと処理の流れを追うと、 cat x.txt > y.txt catコマンドがx.txtをO_RDONLYでopen シェルがy.txtをO_WRONLYでopen ーーループここから catコマンドがx.txtからread catコマンドが標準出力にwrite シェルが標準入力からread シェルがy.txtにwrite ーーループここまで catコマンドがx.txtをclose シェルがy.txtをclose cp x.txt y.txt cpコマンドがx.txtをO_RDONLYでopen cpコマンドがy.txtをO_WRONLYでopen ーーループここから cpコマンドがx.txtからread cpコマンドがy.txtにwrite ーーループここまで cpコマンドがx.txtをclose cpコマンドがy.txtをclose ループ内のシステムコールの数が違いますので、cpコマンドの方が効率はいいです。
その他の回答 (2)
- 8ive22ty
- ベストアンサー率52% (770/1479)
> ファイルをコピーする際に以下の2通りのコマンドがあります。 この考え方がおかしいと思います。 むしろ「単純なコピーならcatでもcpでも可能です」ということでしょう。 catとcpでは使用できるパラメータが異なりますので、使い分けるのが普通でしょう。 また、リダイレクト「 > 」での出力とcpとを比較しても意味があるとも思えません。
お礼
回答ありがとうございます。
- entree
- ベストアンサー率55% (405/735)
処理内容が違うので効率的に全く同じということはないでしょうが誤差範囲です。 理由は、処理のボトルネックがcpとcatの処理ではなく、ディスクI/Oだからです。 システムコールで言えばreadとwrite。cpでもcatでもこの部分は共通です。
お礼
ありがとうございます。参考になりました!
お礼
とても丁寧な回答ありがとうございます。 ぜひ参考にします