-v(verbose)を使用するとコマンドが遅くなりますか?


34

この質問では:bashのディレクトリを削除せずに、ディレクトリ内のすべてのファイルとサブディレクトリを削除する方法は?フォルダー自体ではなく、フォルダー内のすべてのファイルを削除する方法を尋ねられます。

Mattの優れた回答には、「rm」コマンドへの-vフラグの使用が含まれています。

rm -rfv dontDeleteMe && mkdir dontDeleteMe

私が残したコマンドは上のコマンドでした。確かに確かに便利ですが、「rm」の-vフラグやコマンドラインで実行されるタスクを一般的に遅くしますか?

.txtファイル(約100.000個)を含むフォルダーがあり、これを自分で数回作成、削除、再作成しました。rmを使用する場合もあれば、ファイルブラウザを使用する場合もありますが、上記のようにrmコマンドを使用するのはさらに遅いと感じます。-vフラグはこれと何か関係がありますか?

回答:


37

はい、-vフラグはコマンドを遅くします。

すべてではないにしても、ほとんどのソフトウェア(またはコマンド)は、フラグが提供されているかどうかを確認し、フラグに関連する一連のコードを実行します。-vフラグの場合は、多くの出力コマンド(echoまたはのようなprintf)を実行する可能性がありますが、フラグなしではスキップします。

これは、プロセッサの命令サイクルが増えるため、実行時間が長くなることを意味します。

メッセージを読んだり、必要としたりしない場合は、-vフラグを使用しない方が良いでしょう。

一方、コマンドを入力してEnterキーを押すのに必要な時間を含めないと仮定すると、CLIはGUIよりも高速です。

このスーパーユーザーのブログからこの画像は遅さを非常によく説明しています

ここに画像の説明を入力してください

問題の特定のコマンドについて、timeコマンドの結果は次のとおりです。

//with -v
real    0m8.753s
user    0m0.816s
sys     0m2.036s

//without -v
real    0m1.282s
user    0m0.124s
sys     0m1.092s

これは、100000の空のファイルを含むディレクトリで行われました


9
「エコーコマンド」については語りません。ほとんどのプログラムはbashスクリプトではないため、echoを呼び出しませ。問題は、それらがstdout(またはstderr)に書き込みを行っていること、言い換えると、I / O操作を実行していることです。より多くのキャッシュミスなど)。
バクリウ14年

23
stdoutへの書き込みに関する主な問題は、そのコンテンツの実際のレンダリングです。stdoutをファイルにリダイレクトする場合、または/dev/null、パフォーマンスは、ターミナルエミュレータでテキストを表示するほどほとんど妨げられません。
ジェイコブクラル14年

グラフからわかるように、人間の観点から応答時間について話している場合、時間の差はごくわずかです。したがって、コマンドを見ている人の効率が心配な場合は、関係ありません。これは、膨大な数のファイル、またはコンピューターの時間が貴重な多くの繰り返し実行(たとえば、忙しいWebサーバーや古いコンピューター)にのみ関係します。
水田ランダウ

最も影響があり、おそらくそれが本当に重要な唯一のケースは、SSHを介してリモートマシンでコマンドを実行する場合です。詳細なログは、ホストからコンソールに送信する必要があるトラフィックを簡単に数十メガバイト生成する場合があります。SSHで実行したスクリプトから過剰なコンソールロギングを削除した後、10倍のスピードアップを経験したことがあります。
セルゲイ

5

自分を見つけてみませんか:時間を使いましょう。

$ time rm -rfv dontDeleteMe && mkdir dontDeleteMe
real    0m0.003s
user    0m0.001s
sys     0m0.002s

$ time rm -rf dontDeleteMe && mkdir dontDeleteMe
real    0m0.002s
user    0m0.001s
sys     0m0.001s

10
これは本当に質問に答えません。各コマンドの1回の実行間の1ミリ秒の差は、多くの要因によって引き起こされる可能性があります。また、-v出力を省略した場合やディレクトリが空だった場合も明確ではありません。

言うまでもなく、スローダウンは余分に実行された命令によるものではなく、ファイルまたは端末に書き込むプロセスによるものです。time' pretty much redirects the output to / dev / null '。
コールジョンソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.