私は最近私たちがcat
できるだけ多くを使用できることに気づきました。dd
実際にはそれよりも優れていますdd
私はこれがdd
パフォーマンスだけでなく正確さのために実際にブロックサイズが重要なテープ操作に役立つことを知っています。しかし、最近dd
私たちができる状況cat
とできない状況がありますか? (ここでは20%未満の性能差は重要ではないと思います。)
具体的な例が良いと思います!
ベストアンサー1
ビューには、dd
IBM オペレーティング・システムのツールとして、外観 (パラメーターの受け渡し) を維持し、ほとんど使用されないいくつかの機能 (例えば、EBCDIC から ASCII への変換またはバイト順の逆転...最近では一般的ではない) を実行します。
私一度考える同じディスクに大きなデータブロックをコピーする方がdd
高速ですが(バッファリングをより効率的に使用するため)本当ではない、少なくとも今日のLinuxシステムではそうです。
読み取りが実際にブロック単位で行われるテープを処理する場合、いくつかのオプションが役に立つと思いますdd
(テープドライバはディスクドライバのように記憶媒体のブロックを隠すことはありません)。しかし、具体的な内容はわかりません。
dd
他のPOSIXツールでは(簡単に)実行できないことの1つは最初のNバイトを取得ストリーム。これを行うには多くのシステムを使用できますが、head -c 42
一般的head -c
ですがPOSIXには存在しません(そして現在OpenBSDなどのプラットフォームでは使用できません)。 (tail -c
POSIXです。)head -c
存在していても、ソースからあまりにも多くのバイトを読み取ることができます(内部的にはstdioバッファリングを使用するため)。これは特別なファイルから読むだけで問題になるか、影響を与える可能性があります。残りのデータは、他のプロセスが読み取る必要があるときにパイプから読み取ることです。 (現在、GNU coreutilsは正確な読み取り計算を使用しますhead -c
が、FreeBSDとNetBSDはstdioを使用します。)
より一般的には、dd
Unixツールの中でユニークなネイティブファイルAPIへのインターフェースを提供します。dd
上書きまたは切り取り1つの文書どの時点でもまたは探すファイルから。 (これはdd
ユニークな能力と重要な能力です。奇妙なことに、dd
他のツールが実行できることで最もよく知られています。)
ほとんどのUnixツールは出力ファイルを上書きし、内容を消去して最初から始めます。これは、
>
シェルでリダイレクトを使用する場合にも発生します。>>
シェルでリダイレクトを使用するかtee -a
。すべてのデータを削除してファイルを短縮したい場合特定の時点以降、これはデフォルトのカーネルとC APIで次のように提供されます。
truncate
関数ですが、POSIXコマンドラインツールでは公開されません。とは別にdd
:dd if=/dev/null of=/file/to/truncate seek=1 bs=123456 # truncate file to 123456 bytes
(しかし、多くの現代システムは
truncate
ユーティリティを提供しています。)ファイルの中央にあるデータを上書きするには、次の方法でデフォルトのAPIでこれを実行できます。開く切り捨てなしでファイルに書き込む(および呼び出し
lseek
必要に応じて目的の場所に移動します)、dd
切り取りまたは追加せずにファイルのみを開く探すシェルから(より複雑な例)。# zero out the second kB block in the file (i.e. bytes 1024 to 2047) dd if=/dev/zero of=/path/to/file bs=1024 seek=1 count=1 conv=notrunc
だから…システムツールとしてはdd
ほとんど役に立ちません。でも危険。テキスト(またはバイナリファイル)処理ツールとして非常に価値があります!