最近、cat
を使用できることに気付きました dd
と同じくらい 、実際にはdd
よりも高速です
dd
を知っています パフォーマンスだけでなく、ブロックサイズが実際に正確に重要であるテープを処理するのに役立ちました。しかし、最近では、dd
が発生する状況があります。 cat
で何かできる できませんか? (ここでは、20%未満のパフォーマンスの違いは関係ないと見なします。)
具体的な例がいいでしょう!
承認された回答:
外観上、dd
はIBMオペレーティングシステムのツールであり、外観(パラメータの受け渡し)を保持しており、非常にまれにしか使用されない機能(EBCDICからASCIIへの変換やエンディアンの反転など…今日では一般的なニーズではありません)を実行します。
以前はdd
だと思っていました 同じディスクに大きなデータブロックをコピーする方が高速でしたが(バッファリングをより効率的に使用できるため)、少なくとも今日のLinuxシステムではそうではありません。
dd
のいくつかだと思います のオプションは、読み取りが実際にブロックで実行されるテープを処理する場合に役立ちます(テープドライバは、ディスクドライバのようにストレージメディア上のブロックを非表示にしません)。しかし、詳細はわかりません。
1つdd
他のPOSIXツールでは(簡単に)実行できないことを実行できます最初の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
のみ 上書きまたは切り捨てできます いつでもファイル またはシーク ファイル内。 (これはdd
です のユニークな能力、そしてそれは大きな能力です。奇妙なことに、dd
他のツールでできることで最もよく知られています。)
- ほとんどのUnixツールは、出力ファイルを上書きします。つまり、その内容を消去して、最初からやり直します。これは、
>
を使用するとどうなるかです。 シェルでのリダイレクトも同様です。 -
>>
を使用してファイルの内容に追加できます シェルでのリダイレクト、またはtee -a
を使用 。 -
特定の時点以降にすべてのデータを削除してファイルを短縮したい場合 、これは、
truncate
を介して基盤となるカーネルとCAPIによってサポートされます 機能しますが、dd
以外のコマンドラインツールでは公開されません :dd if=/dev/null of=/file/to/truncate seek=1 bs=123456 # truncate file to 123456 bytes
-
ファイルの途中でデータを上書きしたい場合も、下書きの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
ほとんど役に立たないです。テキスト(またはバイナリファイル)処理ツールとして、それは非常に価値があります!