Linuxでターミナル出力をファイルに保存する方法

ターミナルはLinuxシステムの中心です。Linuxで実行されるすべてのプログラムは、ターミナルコマンドラインの下で実行されています。これには、ウェブブラウザのような大規模なプログラムや、テキストエディタのような単純なプログラムも含まれます。そのため、ターミナルを適切に使用できることは、オペレーティングシステムの仕組みを理解するための重要なステップです。
そのため、Linuxターミナルで作業しているときに、コマンドのターミナル出力をファイルに保存したい場合があります。このファイルは、別の操作の情報として使用したり、単にターミナルのアクティビティを記録するために使用されることがあります。この記事では、ターミナル出力をファイルに保存する5つの方法を紹介します。
目次
- 特定のターミナルを使用する
- 出力リダイレクション
- Tee
- スクリプト
- フレームバッファターミナルキャプチャ
- よくある質問
関連記事: Linuxでddコマンドを使用する方法
1. 特定のターミナルを使用する
この問題に対処する最初の方法は、出力をファイルに保存することをサポートするターミナルを使用することです。たとえば、標準のKDEインストールに付属するKonsoleターミナルには、出力をファイルに書き込むオプションがあります。
そのためには、メニューバーの「ファイル」ボタンを押し、「出力を保存…」をクリックします。

これにより、ターミナル出力を保存できるウィンドウダイアログが開きます。そこから、ファイルを保存したい場所を選択できます。
GNOMEターミナルでもコマンドの出力を保存できます。ターミナルを右クリックし、「出力をHTMLとしてコピー」を押します。これにより、ターミナルのテキストがクリップボードに読み込まれます。そこから、任意のテキストエディタに貼り付けることができます。

関連記事: Linuxでrmコマンドを使用する方法
2. 出力リダイレクション
この問題に対処する別の方法は、UNIXシェルの組み込み演算子を使用することです。これらはLinuxのデフォルト機能であり、プログラムのテキスト出力をファイルにリダイレクトできます。これを行うための演算子は3つあります:
>演算子は、プログラムの出力でファイルの内容を作成または置き換えます。これは、プログラムの現在の結果を同じファイルにダンプして表示したい場合に便利です。>>演算子もプログラムの出力でファイルを作成します。ただし、この演算子は出力を置き換えるのではなく、追加します。これは、プログラムの結果を単一のファイルに継続的にダンプしたい場合に便利です。- 最後に、
2>演算子は、報告されるエラーを印刷する特別なタイプの演算子です。これはデバッグ中に非常に便利で、プログラムがクラッシュする前に遭遇した問題を示します。

これらの演算子を使用する方法は、プログラムの最後に追加することです。次の例を考えてみましょう:
echo "maketecheasier" > hello.txt私はechoプログラムに「maketecheasier」という単語を出力するよう指示し、次に>演算子とファイル名を追加しました。これにより、UNIXシェルは出力を画面に印刷するのではなく、「hello.txt」ファイルに書き込むように指示されました。

3. Tee
出力リダイレクションの他に、teeというプログラムを使用してターミナルコマンドの出力を保存することもできます。これは、標準入力から読み取り、書き込むことを可能にするGNUプログラムです。このプログラムをUNIXパイプと共に使用して、コマンドの出力をファイルに書き込みます。
次の例を考えてみましょう:
echo "maketecheasier" | tee hello.txt
ここでは、出力リダイレクションを使用する代わりに、出力をteeにパイプ(|)しました。
注意: パイプは、1つのプログラムの出力を別のプログラムの入力に供給します。これにより、すべてのプログラムが標準入力と出力を使用している限り、複数のプログラムを結合できます。
関連記事: Linuxでターミナルの入力ができない問題を修正する方法
4. スクリプト
ターミナルから出力を取得する別の方法は、scriptを使用することです。これは、ターミナルで入力したすべての内容とその出力を記録するLinuxの組み込みプログラムです。
スクリプトを使用して、ターミナルセッションのログを解析可能なテキスト形式で記録できます。これは、他の人からサポートを受けるためにエラーログをオンラインで送信したい場合に非常に便利です。
使用するには、次のコマンドを実行します:
script filename.txt
これにより、コマンドを実行し始めることができるスクリプト環境が開始されます。ただし、重要な点は、スクリプトはそのセッションで行ったすべてのことをキャプチャすることです。次の例を考えてみましょう:
Script started on 2022-03-27 18:02:29 +08:00 [TERM="rxvt-unicode-256color" TTY="/dev/pts/2" COLUMNS="77" LINES="22"]
[?2004h[[1;31m balaraw:[1;35m~ [0m]$ ls
[?2004l
[0m[01;34mDesktop[0m [01;34mDownloads[0m [01;34mmail[0m [01;34mNews[0m [01;34mpods[0m [01;34mdocuments[0m [00;32mhello.txt[0m [01;34mMail[0m [01;34mpics[0m [01;34mtmp[0m [01;34mvids[0m
[?2004h[[1;31m balaraw:[1;35m~ [0m]$ exit
[?2004l
exit
Script done on 2022-03-27 18:03:19 +08:00 [COMMAND_EXIT_CODE="0"]スクリプトには、押したすべてのキーと制御文字が含まれます。私の場合、TabやBackspaceキーを含むすべての「見えない」キーが含まれていました。
セッションが終了したら、exitと入力します。これにより、スクリプトプログラムが終了し、指定したファイルに全ログが書き込まれます。

関連記事: Linuxでlpコマンドを使用してターミナルからファイルを印刷する方法
5. フレームバッファターミナルキャプチャ
最後に、Linuxフレームバッファから出力を取得することもできます。これは、テレタイプで直接作業していて、プログラムの出力をキャプチャしたい場合に便利です。
フレームバッファデバイスをキャプチャするには、テレタイプ内で次のコマンドを実行します:
cat /dev/fb0 > capture.raw
この方法でフレームバッファデバイスをキャプチャすると、フレームバッファの生のバイトがファイルにダンプされることに注意してください。そのファイルを表示するには、画像エディタで読み込み、色とビット深度を手動で調整する必要があります。このプロセスは時間がかかるだけでなく、間違えるのも簡単です。
そのため、この問題に対処する方法の1つは、fbgrabのようなサードパーティプログラムを使用することです。これにより、フレームバッファデバイスから現在のテレタイプ画面をキャプチャし、PPMまたはPNGファイルにダンプできます。
fbgrabのインストールも比較的簡単です。DebianおよびUbuntuベースのディストリビューションでは、aptを使用できます:
sudo apt install fbgrabArch Linuxの場合は、pacmanを実行します:
sudo pacman -S fbgrab
fbgrabを使用してターミナル出力をキャプチャする
インストールが完了したら、Control + Shift + Alt + F3を押してテレタイプに移動し、fbcatまたはfbgrabを実行します。
Fbcatは、現在のフレームバッファ画面をキャプチャし、PPM画像として保存するシンプルなプログラムです。これは、画像エディタで読み込んでPNGに変換できる低レベルの生画像形式です。Fbcatは、適切にキャプチャするために生画像形式が必要な低ビット深度のディスプレイをキャプチャしようとする場合に主に便利です。
fbcatプログラムを使用してキャプチャするには、次のコマンドを実行します:
fbcat > capture.ppm
一方、fbgrabは、より高いビット深度のディスプレイをキャプチャするために設計されたより複雑なプログラムです。ほとんどの場合、テレタイプ画面をキャプチャするために使用します。デフォルトでPNGに保存することをサポートしており、キャプチャする異なるテレタイプを選択するオプションがあります。
fbgrabプログラムを使用してキャプチャするには、次のコマンドを実行します:
sudo fbgrab -c3 capture.png
これにより、3番目のテレタイプ画面がキャプチャされ、capture.pngファイルに保存されます。
Linuxターミナルに関する他のガイドを探している場合は、コマンドラインからメールを送信する方法について説明しているガイドをチェックしてください。
よくある質問
1. 助けて! fbgrabが機能しない。画像が黒または空白です。
これは、おそらくfbgrabがターミナル出力をキャプチャするために異なるフレームバッファデバイスを使用しているためです。システムが使用している現在のフレームバッファデバイスを確認するには、「/dev」フォルダをリストします。
ls /devそこから、「/dev/fbX」デバイスを探します。通常、Linuxはそのフレームバッファに「/dev/fb0」を使用します。ただし、システムが「/dev/fb1」などの異なるフレームバッファを使用している場合は、次のコマンドを実行してfbgrabにそのフレームバッファから取得するように指示できます:
fbgrab -d1 capture.png2. プログラムへの入力として書いたファイルの内容を取得することは可能ですか?
はい!上記で説明した3つの演算子の他に、<演算子を使用してファイルからデータを取得することもできます。シェルは、これをプログラムの入力として扱います。
この方法で行うことで、他のプログラムにテキストを印刷させる必要がなくなります。次の例を考えてみましょう:
[1] cat test.txt | program
[2] program < test.txt- 最初の例では、catプログラムを呼び出してテキストを読み込み、次にパイプ演算子を使用してcatの出力をプログラムにパイプします。
- 一方、2番目の例では、すぐにプログラムを呼び出し、次に
<演算子を選択し、次の引数をその入力として扱います。
3. スクリプトを強制してコマンドの出力のみをキャプチャする方法はありますか?
はい、単一のコマンドの出力のみをスクリプトすることは可能です。これは、トラブルシューティング中に単一のプログラムの出力をキャプチャしたい場合に非常に便利です。次のコマンドを実行して行います:
script -c "your-command" test.txt-cフラグは、スクリプトプログラムにプログラム:your-commandのみを実行するように指示します。そこから、出力はtest.txtというテキストファイルに書き込まれます。
画像クレジット: Unsplash