「sysdiagnose」の実態

開発者を中心に利用される「sysdiagnose」は、いわゆるバグレポートを提出するときに添えられる参考資料だ。コマンドの実行から約4分で一連の処理は完了、結果はTAR+GZ形式の書庫ファイルとして/var/tmpディレクトリに出力される。

その書庫ファイルには膨大な量のログが納められており、機種やタイミングにもよるがTAR+GZで圧縮された状態で約140MB。展開すると400MB近くにもなるため、読み解くのはひと苦労だ。逆にいえば、読み解くための指針がないかぎりログはただの巨大なテキストファイルとなってしまう。

しかし、展開したフォルダにあるファイル名は「thermal.txt」や「diskutil_list.txt」など、名前から内容を推測できるもの。バグレポートとは関係なしにsysdiagnoseを実行した場合、このコマンドの情報が欲しかったんだ、ということもあるだろう。そう、sysdiagnoseで生成される書庫ファイルは"いろいろなコマンドを実行して出力したログの寄せ集め"なのだ。

ということは、sysdiagnoseが処理される課程でどのようなコマンドラインを実行しているかがわかれば、巨大なログ群と格闘する必要はなくなる。

以下に挙げる項目は、sysdiagnoseに含まれるログを出力するコマンドラインの抜粋だ。すべてではないが、非開発者にとっても有用な情報であり、システム管理/Macメンテナンスの参考になるはず。タネを明かせば「sysdiagnose.log」を読み解いただけのことだが、意外なほど有用なこと請け合いだ。なお、「○○○.txt」はファイルにリダイレクトして生成されているが、コマンド実行例ではその部分を省略しているため、標準出力へアウトプットされるかデフォルトの領域へ書き出されることになる。

  • 管理者権限で「sysdiagnose」を実行し、5分ほど待てば多数のログが含まれた書庫ファイルが生成される

  • ログファイル群のサイズは圧縮後でもゆうに100MBを超える

  • 1. night-shift.log

ディスプレイの色味を暖色系に自動切り替えする「Night Shift」について、どのような仕組みで動作するか想像を巡らせたことはあるだろうか? このログファイルは、それに対する答えを提示してくれる。以下のとおりコマンドラインを実行すれば、時刻情報と位置情報をもとに算出された日の出/日の入時刻を確認できる。Macはこの情報を頼りに、Night Shiftのタイミングを日々決定しているのだ。

$ corebrightnessdiag nightshift-internal
  • Night Shiftの実行タイミングがわかる

  • 2. airport_info.txt

コマンド実行時点で接続しているWi-Fiアクセスポイントの情報を出力したもの。Wi-Fiで使用するフレームワーク内部のコマンド「airport」に「--getinfo」オプションをくわえて実行すると、まったく同じ情報を手動で入手できる。

$ /System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport --getinfo 
  • 3. SystemProfiler/○○○.spx

書庫のSystemProfilerフォルダに多数生成されている「○○○.spx」というXML形式のログは、「このMacについて」のシステムレポートから起動できる「システム情報」で表示されるものと同じ。system_profilerコマンドはそのためのもので、システム情報画面に表示されるデータをテキストで出力できる。たとえば、USBデバイスの情報を確認したければ以下のとおりコマンドラインを実行すればいい。

$ system_profiler SPUSBDataType
  • 4. iCloud Drive関連ログ

iCloud Driveに保存されている書類/データの情報を出力したもの。以下のコマンドを実行すると、/var/tmpに「clouddocs-コンピュータ名-日付」ディレクトリが作成され、そこにさまざまなログが書き出される。iCloud Driveのデータベースをダンプした「brctl-dump.txt」の内容を見れば、接続しているMac/iOSデバイスや、Numbers/Keynoteといったアプリで作成した書類のリストまで、ありとあらゆる情報を確認できる。

$ brctl diagnose --sysdiagnose
  • 5. acdiagnose-○○○.txt

sysdiagnoseが出力するログは"ありのまま"だが、中でも赤裸々すぎるのではと感じたのがこのファイル。以下のコマンドラインで出力できるのだが、中身を見ると……「メール」に登録しているメールアカウント情報が目に飛び込んできた。ほかにも、TwitterやFacebook、Game Centerなどなど、システム環境設定「インターネットアカウント」パネルと関係がある情報がズラリ。iCloudの情報も出てくるので、筆者が使うiPhoneの電話番号も確認できた。これ、バグレポートといえど無闇に表へ出してはいけないヤツなのではと思うのだが、いかに。

$ /System/Library/Frameworks/Accounts.framework/Versions/A/Support/acdiagnose
  • acdiagnose-○○○.txt(○部分はユーザID、多くのMacユーザは「501」になるはず)には、このパネルに登録した情報が出力される