完全を期すために、これらすべてのエスケープ シーケンスを含むファイルはbootlogdデーモン (debian ファミリの bootlog パッケージ) によって生成されます。このデーモンは、起動中にコンソールに送信されるすべての色分けされたメッセージをキャプチャします。コンソールでは、これらのメッセージは最初に次の行のように表示されます。
[....] Starting periodic command scheduler: cron
次に、サービスまたはコマンドが実行されると、エスケープ シーケンスがコンソールに送信され、カーソルが行の先頭に再配置され、ok、fail、info、warnなどが出力されます。
[ ok ] Starting periodic command scheduler: cron.
これらのメッセージはすべてbootlogdデーモンによってキャプチャされ、再配置を含むすべてのエスケープ シーケンスとともにファイルに書き込まれます。ファイルを正しく表示するには、^[
を 8 進数に置き換える必要があることを除けば問題ありません。033
ただし、キャッチがあるため、デーモンは、カーソルの再配置シーケンスの座標を変更せずに、メッセージの前に日付スタンプも追加します。その結果、ok、failなどのメッセージによって、日付スタンプの一部が上書きされます。よくない。
Fri May 25 17:13:01 2012: [....] Starting periodic command scheduler: cron
becomes...
[ ok ay 25 17:13:01 2012: [....] Starting periodic command scheduler: cron.
解決策は、カーソルの配置順序を変更することです。試行錯誤の結果、そのシーケンスは であることがわかりました^[1G
。次の sed コマンドは、最終的にジョブを完了します。
sed 's/\^\[/\o33/g;s/\[1G\[/\[27G\[/' /var/log/boot
bootlogdデーモンは、コンソール メッセージをファイルに送信する前に、すべてのエスケープ シーケンスを消去する必要があります。これをバグと呼んでもいいですか?
この「バグ」は、Ubuntu、Mint などのすべての Debian 継承者にも存在する可能性があります...