(cp f1.txt f2.txt)と(less f1.txt> f2.txt)の違いは何ですか

(cp f1.txt f2.txt)と(less f1.txt> f2.txt)の違いは何ですか

どちらもf1.txtからf2.txtにデータをコピーすることを知っていますが、実際の違いは何ですか?

(cp f1.txt f2.txt) 

比較:

(less f1.txt > f2.txt)

答え1

違いは、これがcp人間にとってはるかに明確であるということです。これは最適化が必要な最初のことの1つです。

この使い方はlessとても曖昧で、試してみるまでその効果もはっきりしません。もう一つの答えはうまくいかないと言います。これは、ファイルに特定の文字が含まれており、スクリプトの一部などのユーザー操作なしでコマンドを操作したい場合です。この制限は返品あいまいさ(この動作を何度も見たにもかかわらず、少なくとも私はそれを期待していません)。

less速度が遅くなる理由の1つは、データをより小さなチャンクに転送するためです。以下で実行すると、1023バイト(1KiB - 1)の64KiBチャンクがstrace表示されます。less

答え2

less次のように設計されています。携帯用小型無線ポケットベル(例えば次のページ機能)テキスト文書。したがってcp、データコピーを意図したものよりもファイルコピーに最適化が少なくなり、大量のオーバーヘッドが発生し、パフォーマンスが低下する可能性があります。

まず、cp特殊文字(制御など)を含むファイルを処理しても確認メッセージは表示されません。

あなたの例ではcp正確に実行する必要があります一つプログラム(cp)。

less例では、lessコマンドは実際には指定されたファイルの内容のみを出力し、stdoutシェルはstdoutを新しいファイルにリダイレクトするため、実際には2つのプログラム(出力用、入力用)を実行しています。

答え3

  • このバリエーションは、コンテンツを画面にダンプしcpないため、より高速です。f1.txt

    $ time cp f1.txt  f2.txt
    
    real    0m0.002s
    user    0m0.004s
    sys     0m0.000s
    $ rm f2.txt
    $ time less f1.txt > f2.txt
    
    real    0m0.009s
    user    0m0.004s
    sys     0m0.000s
    

0.002対cp0.009 less

  • cpless値に基づくumaskモードで新しいファイルを作成しながら、元のファイルの一部のモードビットを保存できます。
(...) each destination file is created
with the mode bits of the corresponding source file, minus the
bits set in the umask and minus the set-user-ID and set-group-ID
bits.
  • cpタイピング時間が短縮されます。真剣に、これはコマンドラインからほとんどの時間を費やすときに重要です。

答え4

ファイルについて尋ねるものなので、使用すると*.txtいくつかの利点があります。less前処理機能「ファイル内容の表示方法を修正」。設計された例は、圧縮ファイルの内容を出力することです。

less compressed.txt.gz > uncompressed.txt

しかし、もちろんこれはによって行うことができ、おそらく実行する必要がありますzcat -c compressed.txt.gz > uncompressed.txt

しかし、私はこれが正規化された環境を前処理するのに実用的であると思いますless(環境変数を確認してくださいLESSOPEN。通常はファイルを指します/usr/bin/lesspipe.sh)。これにより、スクリプト/コマンドが気にする必要がなくなります。分析する入力ファイルを宛先ファイルに書き込む

私もこれを見つけました。協会より多くのユースケースを示します。上記のようにLinux環境をチェックして、/usr/bin/lesspipe.shどのファイルlessからテキスト情報を抽出できるかを確認してください。

関連情報