コマンドラインの出力をコンソールに表示し、出力をテキストファイルに保存する方法は?


25

どのようにして実行することができますsudo apt-get installによってBOTH(長い私の場合)インストールの過程を見てテキストファイルにその出力を保存しますか?


のみについてですapt-getよね?
Braiam 14年

@Braiam私が受け入れた解決策は他のすべてのコマンドに適用できると思います、そう思いますか?

回答:


17

scriptコマンドを使用します。画面に表示されるすべてのものをファイルにコピーします

script -c "sudo apt-get install things" script-file.script

scriptコマンド出力をファイルに送信しますが、画面には表示しません。
アーロン14年

2
@ BryceAtNetwork23。コマンドを試しましたか?スクリプト画面に出力を送信します。
14年

1
やった。私は走ったscript -c "history" ~/hist.txtと鋸出力が示すScript startedScript done、私は、画面上の実際のコマンドの出力を見ていません。
アーロン14年

10
@ BryceAtNetwork23 historyは、シェルの組み込みコマンドであり、外部コマンドではありません。何が起こるかです:1)スクリプトが起動し、2)スクリプトが履歴コマンドを検索し、それを見つけられないので、シェルを介してこれを実行する必要があると推測します。3)スクリプトはhistory シェルを介してコマンド実行します 4)新しいシェルが起動し、history internalコマンドを実行します。これは新しい非対話型シェルであるため、履歴には何も言うことはありません。
14年

1
scriptインタラクティブに実行することもできます。入力するだけでscript、コマンドプロンプトで。新しいシェルが表示され、入力したコマンドには出力が保存されます。入力exitしてシェルを終了し、ファイルを保存します。デフォルトでは、出力が呼び出されtypescript、入力したかコマンドの出力であるかに関係なく、画面に表示されるすべてが含まれます。このhistoryコマンドは、新しいシェルでも引き続き使用できるはずです。
ブライアンミントン14年

52

teeコマンドを使用してこれを実現できます。

sudo apt-get install someapp 2>&1 | tee ~/someappInstall.txt

詳細こちらをご覧ください、または実行してくださいman tee

注:他の人が述べたように、2>&1STDERRをSTDOUTにリダイレクトしてエラーをキャッチする必要があります。実際に何が行われるかについての良い説明については、このStackOverflowの質問をご覧ください2>&1


「|」の前に「2>&1」を追加します
オリビエデュラック14年

2
scriptコマンドを引用する必要がないため、これは実用的です。そのため、bash補完などの利点を簡単に実現できます。
ダン14年

2
@Dan:スクリプトは必要ありません-c "something ...":ifはシェルにドロップし、シェルを終了すると終了します。複数のコマンドなどを許可します。さらに、より多くの「フォーマット」情報を保持し、より多くのもの(画面のクリアなど)の再生を許可します(ただし、出力を台無しにすることもあります... ymmv)
Olivier Dulac

2
@Dan +は、関数、エイリアス、ビルトイン、さらにはコマンドグループやサブシェルでも機能します。これは受け入れられた回答IMOである必要があります。
ダークホッグ14年

1
あなたが使用できる|&の代わりに2>&1 |bashで
JFS

15

tee 必要に応じてジョブを実行します。

出力をファイルにキャプチャするには、次を使用します。

sudo apt-get install your_software | tee log_file.txt

これは出力のみをキャプチャし、エラーメッセージはキャプチャしません。エラーメッセージも記録する場合は、コマンドを次のように変更します。

sudo apt-get install your_software 2>&1  | tee log_file.txt

または、演算子をbash サポートし|&いるためstdoutstderrのsudo apt-get install your_software |& tee log_file.txt両方をにパイプします。(他の場所でこれ提案したJFセバスチャンtee
称賛

9

apt-get(および一般的なAPT)の利点の1つは、ほとんどすべてのログファイルを保存することです/var/log/apt。たとえば、これはmyの最後のエントリです/var/log/apt/term.log

Log started: 2014-06-20  16:46:08
(Reading database ... 252472 files and directories currently installed.)
Removing xdotool (1:3.20130111.1-3.1) ...
Processing triggers for man-db (2.6.7.1-1) ...
Log ended: 2014-06-20  16:46:33

次に、実際の出力と比較します。

➜  ~  sudo apt-get remove xdotool 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following package was automatically installed and is no longer required:
  libxdo3
Use 'apt-get autoremove' to remove it.
The following packages will be REMOVED:
  xdotool
0 upgraded, 0 newly installed, 1 to remove and 2 not upgraded.
After this operation, 135 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 252472 files and directories currently installed.)
Removing xdotool (1:3.20130111.1-3.1) ...
Processing triggers for man-db (2.6.7.1-1) ...

ほとんどの場合、関係のないいくつかの行が保存され、自動的に実行されます。ですから、やりたいことをするのに余分なコマンドは必要ありません。apt-getがあなたのためにそれをします。


1

teeコマンドを試してください。ここにいくつかの例を見つけることができます。

簡単な使用法:

  <command> | tee file

例:

  sudo apt-get install whatYouWant | tee outputFile
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.