GNU/Linux >> Linux の 問題 >  >> Linux

なぜ(そしてどのように)バイナリファイルでCatを使用したのですか?

catを理解していれば 正しくマニュアル:

ファイルを連結し、標準出力に出力します

cat 引数としてファイルを受け取り、それらを標準出力に出力します。
次のコマンドを使用した場合、取得できません:

cat img.png > copy.png

同一のpngファイルを2つ取得しますが、

cat img.png  

端末がめちゃくちゃになって、入力内容を誤解する可能性があります。

  • それはどのように可能ですか?
  • バイナリ値は引き続きバイナリデータです。一連の0と1、またはそれらのバイナリデータのASCIIでの解釈、または端末でのエンコーディングが何であれ、単純に表示されないのはなぜですか?
  • この動作はcatでも可能ですか? 奇妙な文字を含むテキストファイルを作成しますか?
  • try {} catch {}ステートメントのようなこの動作を防ぐメカニズムを実装する必要がありますか?

承認された回答:

cat コマンドラインで引数として指定されたファイルを標準出力に連結します。一度にバイトを読み取ります。デフォルトでは、読み取ったバイトの解釈は実行されません。

最初の例では、stdoutをファイルにリダイレクトしているため、新しいファイルを取得します。

2番目の例では、バイトが端末に書き込まれ、文字のシーケンスを端末の制御シーケンスとして解釈しているのは端末です。これが、端末で異常な動作をする理由です。 catとは何の関係もありません そのため、cat 出力をどうするかわかりません。 「雨の中で歌う」を解釈/処理/印刷または再生するために、パイプを介して別のプログラムに送信している可能性があります。

したがって、UNIX哲学に従って

一つのことをしなさい、一つのことだけをしなさい、しかしそれをうまくやりなさい

cat 何をしようとしているのかを二度と推測しようとしないでください。

以下の@kiwyの最初のコメントへの返信を1つ編集してください。

はい、いいえ、説明させてください

いいえ、catの場合 これは、端末(端末ソフトウェア)が出力を画面に送信したり、制御シーケンスを解釈したりするためです(古いハードウェア、つまりテレタイプデバイスをエミュレートしているためです。 。

しかし、

はい、パイプに猫を連れて行き、受信するプログラムが文字をコマンドとして解釈できる場合。

関連:ターミナルでマスクごとにすべてのファイルのリストを取得しますか?

例としてcatthisを見てください。cat anyOldShellScript | bash bashは、取得したものをコマンドとして解釈します。


Linux
  1. Linuxターミナルでファイルとフォルダを削除します

  2. TarとOpenSSLを使用してファイルとディレクトリを暗号化および復号化する方法

  3. Linuxでtarコマンドを使用してファイルを圧縮および抽出する方法は?

  1. Linuxを使用してディレクトリとファイルを削除する方法

  2. wget vs curl:wget と curl を使用してファイルをダウンロードする方法

  3. Linux コマンドを使用して OS とバージョンを確認する方法

  1. Linuxコマンドラインを使用してファイルとディレクトリを削除する方法

  2. Linuxでターミナルからファイルを検索する方法

  3. LinuxでDejaDupを使用してファイルをバックアップおよび復元する方法