Linuxでコマンドラインを操作しているときに、データ/テキストが宛先に書き込まれる前にフォーマットされるようにコピー操作を実行する必要がある場合があります。簡単な例として、ファイルからテキストをコピーし、大文字と小文字を変更したバージョン(下から上、または上から下)を宛先ファイルに書き込むことができます。
これを行う方法を探している場合は、 ddと呼ばれるコマンドラインユーティリティが存在することを知って喜ぶでしょう。 -それはこの目的のために作られました。このチュートリアルでは、わかりやすい例を使用して、ツールがどのように機能するかについて説明します。ただし、その前に、ここで説明するすべての例がUbuntu18.04LTSでテストされていることを言及する価値があります。
Linuxddコマンド
つまり、 dd コマンドを使用すると、ファイルをコピーして変換できます。このツールは、必要なフォーマットの種類を指定するために使用できるいくつかのオペランドを提供します。マニュアルページで説明されているコマンドの一般的な構文は次のとおりです。
dd [OPERAND]...
dd OPTION
次のQ&Aタイプの例は、ddコマンドがどのように機能するかについての良いアイデアを与えるはずです。
Q1。 ddコマンドを使用して入力テキストの大文字と小文字を変更するにはどうすればよいですか?
小文字で書かれたテキストの行がいくつかあり、それらをすばやく大文字に変換する必要があるとします。 convを使用してそれを行うことができます コマンドラインオプション( ucase を使用) その値として)。
次に例を示します:
上のスクリーンショットは、コマンドと入力テキストを示しています。キーの組み合わせCtrl+ d 入力の入力が完了したことをddに通知するために使用されました。入力が完了するとすぐに、コマンドは次の出力を生成しました。
これで、入力テキストが小文字から大文字に変換されたことがわかります。最後の3行は、操作に関連する統計の一部です。
注 :同様に、値 lcaseを使用できます 大文字のテキストを小文字に変換します。
Q2。代わりにファイルの読み取りと書き込みを行う方法は?
上記の最初の例では、stdin(標準入力)を使用してテキストを入力しました。ただし、入力ファイルと出力ファイルはいつでも使用できます。入力ファイルと出力ファイルの名前を指定するには、 ifを使用します およびの コマンドラインオプション。
たとえば、file1のテキストの大文字と小文字を変換してから、file2に書き込む場合は、次の方法でこれを行うことができます。
dd if=file1 of=file2 conv=ucase
Q3。入力を読みながらテキストをスキップするにはどうすればよいですか?
必要に応じて、入力テキストの読み取り中に最初のバイトをスキップするようにddに要求できます。これは、スキップを使用して実行できます 数値が必要なオプション。たとえば、この値が「N」の場合、ddは入力の開始時にNibsサイズのブロックをスキップします。これにより、「ibs」が表示されます。これも、ツールが一度に読み取るバイト数を指定する値を持つ別のコマンドラインddオプションです(デフォルトは512)。
したがって、入力ファイルの最初の4バイトをスキップしたい場合は、最初に ibsを設定する必要があります。 4に変更し、 skipの値として1を使用します 。これにより、ツールは入力ファイルの読み取り中に4バイトの1ブロックをスキップします。
つまり、テキストがねえ file1の読み取り中にスキップされました-そのため、file2には表示されませんでした。
Q4。出力の入力バイトの各ペアを交換するにはどうすればよいですか?
このような要件がある場合は、ddを使用して入力バイトのすべてのペアを交換することもできます。これは、スワブを使用して実現できます convの値として コマンドラインオプション。次のスクリーンショットは、物事をより明確にします:
Q5。出力ファイルがまだ存在しない場合にのみddを機能させるにはどうすればよいですか?
出力ファイルがすでに存在するときにddコマンドが何も実行しないことが要件である場合、この条件は exclを使用して強制できます。 convの値 オプション。
次のスクリーンショットは、実際のユースケースを示しています。
Q6。出力ファイルが追加モードで更新されていることを確認するにはどうすればよいですか?
デフォルトでは、ddは出力ファイル(存在する場合)を上書きするだけです。ただし、代わりにテキストを追加する場合は、値 append を使用します oflag FLAGとnotrunc convの場合 オプション。
例:
dd if=file1 of=file3 oflag=append conv=notrunc
上記のコマンドの動作は次のとおりです。
Q7。 ddが出力ファイルを作成しないようにするにはどうすればよいですか?
必要に応じて、コマンドで指定されたファイルがまだ存在しない場合に、ddコマンドに出力ファイルを作成しないように強制することもできます。これは、 nocreatを使用して実行できます convの値 コマンドラインオプション。
例:
Q8。 stderrに出力される情報のレベルを制御するにはどうすればよいですか?
必要に応じて、コマンドがstderrに出力する情報の量を制限することもできます。これは、ステータスを使用して実行できます コマンドラインオプション。たとえば、エラーメッセージ以外のすべてを抑制したい場合は、値 noneを渡すことができます。 このコマンドラインオプションへ:
dd if=file1 of=file3 status=none
その他の利用可能な値はnoxfer および進捗状況 。 ステータスについてのマニュアルページの内容は次のとおりです。 オプション:
status=LEVEL
The LEVEL of information to print to stderr; 'none' suppresses
everything but error messages, 'noxfer' suppresses the final
transfer statistics, 'progress' shows periodic transfer statis?
tics
このチュートリアルで説明する例は、すべてのddコマンドで何ができるかを調べるときに、表面をかじっただけです。アイデアを与えるために、このツールを使用して、仮想ファイルシステムを作成したり、ハードドライブやシステムパーティションのバックアップを作成したりできます。 ddの詳細については、そのマニュアルページにアクセスしてください。