ターミナルはLinuxシステムの心臓部です。Linuxで動作するすべてのプログラムは、ターミナルのコマンドラインの下で動作しています。これには、ウェブブラウザのような巨大なプログラムから、テキストエディタのような単純なものまで含まれます。そのため、ターミナルを正しく使えるようになることは、オペレーテ ィングシステムの仕組みを理解する上で重要なステップとなります。

それに伴い、Linuxのターミナルで作業しているときに、コマンドのターミナル出力をファイルに保存したいと思うかもしれません。このファイルは、別の操作のための情報として使用されるかもしれませんし、単にターミナルの活動を記録するために使用されるかもしれません。この記事では、端末の出力をファイルに保存する5つの方法について説明します。

1. 特定の端末を使用する

この問題に対処する最初の方法は、出力をファイルに保存することをサポートするターミナルを使用することです。例えば、KDE の標準インストールに付属している Konsole ターミナルには、出力をファイルに書き出すオプションがあります。

これを行うには、メニューバーの「File」ボタンを押し、「Save output as …」をクリックします。

をクリックします。 ターミナル出力を保存するためのウィンドウダイアログが表示されます。ここから、ファイルを保存する場所を選ぶことができます。

GNOME 端末のコマンドの出力を保存することもできます。ターミナルを右クリックして、 “Copy output as HTML” を押すだけです。そうすると、ターミナルのテキストがクリップボードに読み込まれます。そこから、任意のテキストエディタに貼り付けることができます。

2. 出力のリダイレクション

もう一つの対処法は、UNIXシェルの組み込み演算子を使うことです。これらはLinuxのデフォルト関数で、プログラムのテキスト出力をファイルにリダイレクトすることができます。これを実現する演算子は3つあります。

  • > オペレータは、ファイルの内容をプログラムの出力で作成するか、置き換えます。これは、プログラムの現在の結果を同じファイルにダンプして表示したい場 合に便利です。
  • また、>> 演算子もプログラムの出力をファイルとして作成します。しかし、この演算子は出力を置き換えるのではなく、追加するだけです。これは、プログラムの結果を連続して一つのファイルにダンプしたい場合 に便利です。
  • 最後に、2> 演算子は特別なタイプの演算子で、エラーを出力し、それを報告します。これは、プログラムがクラッシュする前に遭遇した問題を表示するため、デバッグの際に非常に便利です。

それを知った上で、これらの演算子を使う方法は、プログラムの末尾に追加することです。次のような例を考えてみましょう。

echo "maketecheasier" > hello.txt

echoプログラムに "maketecheasier" という単語を出力するように指示し、次に>` 演算子とファイル名を追加しました。これはUNIXシェルに、出力を画面に印刷するのではなく、“hello.txt “ファイルに書き出すように指示したのです。

3. ティー

出力のリダイレクトとは別に、teeというプログラムを使って、ターミナルコマンドの 出力を保存することができます。これは標準入力からの読み込みと標準入力への書き込みを可能にする GNU プログラムです。このプログラムをUNIXのパイプと一緒に使って、コマンドの出力をファイルに書き出すことができます。

次のような例を考えてみましょう。

echo "maketecheasier" | tee hello.txt

ここでは、出力リダイレクトを使う代わりに、出力を tee にパイプ(|)しています。

注意: パイプは、あるプログラムの出力を別のプログラムの入力に取り込みます。注意**: パイプはあるプログラムの出力を別のプログラムの入力に取り込みます。これによって、複数のプログラムが標準的な入出力を使っている限り、複数のプログラムを結合することができます。

4. スクリプト

ターミナルから出力を引き出すもう一つの方法は script を使うことです。これは、ターミナルにタイプしたものすべてと、その出力を記録する Linux 組み込みのプログラムです。

スクリプトを使うと、ターミナルセッションのログを解析可能なテキスト 形式で記録することができます。これは、他の人からサポートを受けるために、エラーログをオンラインに送信したい場合に非常に便利です。

これを使うには、以下のコマンドを実行します。

スクリプト filename.txt

これでスクリプト環境が起動し、コマンドを実行し始めることができます。しかし、注意すべき重要なことは、script はそのセッションであなたが行ったすべてのことを記録するということです。次の例を見てください。

Script started on 2022-03-27 18:02:29+08:00 [TERM="rxvt-unicode-256color" TTY="/dev/pts/2" COLUMNS="77" LINES="22"] スクリプトは2022-03-27 18:02:29+08:00に始まりました。
[?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;34mstmp [0m [01;34mvids[0m
[?2004h[[1;31m balaraw:[1;35m~ [0m]$ exit
[?2004l
終了
 
Script done on 2022-03-27 18:03:19+08:00 [COMMAND_EXIT_CODE="0"] こんな感じです。

スクリプトには、押したキー操作と制御文字がすべて含まれます。私の場合、TabキーやBackspaceキーなど、押した「見えない」キーがすべて含まれます。

セッションが終了したら、exitとタイプしてください。これでスクリプトプログラムが終了し、指定したファイルにログが全て書き込まれます。

5. フレームバッファ端末のキャプチャ

最後に、Linuxのフレームバッファから引っ張ってきて、ターミナルの出力を取得することもできます。これはテレタイプで直接作業をしていて、プログラムの出力をキャプチャしたい場合に便利です。

フレームバッファデバイスをキャプチャするには、テレタイプにいる間に次のコマンドを実行します。

cat /dev/fb0 > capture.raw

注意すべき重要なことは、この方法でフレームバッファデバイスをキャプチャするということは、フレームバッファの生のバイトをファイルにダンプしていることになるということです。このファイルを表示するには、画像エディタで読み込んで、色とビット深度を手動で調整する必要があります。この作業は時間がかかるだけでなく、間違えやすいものです。

そこで、fbgrabのようなサードパーティ製のプログラムを使って対処する方法があります。これは、フレームバッファデバイスから現在のテレタイプ画面を取得し、PPMまたはPNGファイルのいずれかにダンプします。

fbgrabのインストールも比較的簡単です。DebianやUbuntuベースのディストリビューションでは、aptを使用することができます。

sudo apt install fbgrab

Arch Linux では、pacman を実行してください。

sudo pacman -S fbgrab

fbgrab を使って端末の出力をキャプチャする

インストールしたら、Control + Shift + Alt + F3 でテレタイプにドロップし、fbcat または fbgrab を実行してください。

Fbcat はよりシンプルなプログラムで、現在のフレームバッファ画面を取得して PPM イメージに保存します。これは低レベルの生画像フォーマットで、画像編集ソフトで読み込んで PNG に変換することができます。Fbcatは主に、正しくキャプチャするためにraw画像形式を必要とする低ビット深度のディスプレイをキャプチャしようとしている場合に便利です。

fbcat プログラムを使ってキャプチャするには、次のコマンドを実行します。

fbcat > capture.ppm

これは、現在表示されている画面を取り込んで、その内容をcapture.ppmファイルにダンプします。

一方、Fbgrab は、より高いビット深度のディスプレイをキャプチャするために設計された、より複雑なプログラムです。ほとんどの場合、テレタイプの画面をキャプチャするために使用します。デフォルトでPNGへの保存をサポートしており、キャプチャするテレタイプを別に選択するオプションもあります。

fbgrab プログラムを使ってキャプチャするには、次のコマンドを実行します。

sudo fbgrab -c 3 capture.png

これで3つ目のテレタイプの画面が取り込まれ、capture.pngファイルに保存されます。

Linux ターミナルに関する他のガイドをお探しの場合は、 コマンドラインからメールを送信する方法について説明しているものをご覧ください。

よくある質問

1. 助けて! Fbgrab がうまくいきません; 画像は黒か空白だけです。

これはおそらく、fbgrab が端末の出力をキャプチャするために別のフレームバッファデバイスを使っているためです。dev” フォルダをリストアップして、システムが現在使っているフレームバッファデバイスをチェックしてください。

ls /dev

そこから、"/dev/fbX” デバイスを探します。通常、Linuxはフレームバッファに"/dev/fb0 “を使用します。しかし、もしあなたのシステムが “/dev/fb1” のような別のフレームバッファを使っているなら、次のコマンドを渡すことで、fbgrab にそのフレームバッファから代わりに取り出すように指示することができます。

fbgrab -d 1 capture.png

2. プログラムの入力として書いたファイルの内容を取り込むことは可能ですか?

はい!できます。上で説明した 3 つの演算子とは別に、< 演算子を使ってファイルからデータを取り出すことができます。この場合、シェルはこれをプログラムへの入力として扱います。

このようにすると、他のプログラムに頼ってテキストを表示させる必要がなくなります。次のような例を考えてみましょう。

[1] cat test.txt | プログラム
[2] プログラム < test.txt
  • 最初の例では、cat プログラムを呼び出してテキストを読み込み、cat の出力を パイプ演算子でロードしてあなたのプログラムへパイプします。
  • 一方、2番目の例では、すぐにプログラムを呼び出し、次の引数を入力とする < 演算子を選択します。

3. 3. スクリプトに、コマンドの出力だけを取り込ませる方法はありますか。

はい、1つのコマンドに対してのみスクリプトを実行することが可能です。これは、トラブルシューティングの際に、1つのプログラムの出力だけをキャプチャしたい場合に非常に便利です。次のコマンドを実行してください。

script -c "あなたのコマンド" test.txt

c** フラグはスクリプトプログラムに your-command というプログラムだけを実行するように指示します。そこから、test.txtと呼ばれるテキストファイルに出力を書き込みます。

画像クレジット: Unsplash

Akira
Akiraは情熱的なゲーマーであり、製品レビュアーです。ゲームをしていないときは、最新のゲーミングアクセサリーを試したり、製品のレビューをしていることが多い。彼の分かりやすいスタイルは、ゲーマーが自分のニーズに最も適した製品を簡単に判断できるようにするものです。また、技術的な問題にも精通しており、その解決方法も知っている。