「sysdiagnose」の実態
開発者を中心に利用される「sysdiagnose」は、いわゆるバグレポートを提出するときに添えられる参考資料だ。コマンドの実行から約4分で一連の処理は完了、結果はTAR+GZ形式の書庫ファイルとして/var/tmpディレクトリに出力される。
その書庫ファイルには膨大な量のログが納められており、機種やタイミングにもよるがTAR+GZで圧縮された状態で約140MB。展開すると400MB近くにもなるため、読み解くのはひと苦労だ。逆にいえば、読み解くための指針がないかぎりログはただの巨大なテキストファイルとなってしまう。
しかし、展開したフォルダにあるファイル名は「thermal.txt」や「diskutil_list.txt」など、名前から内容を推測できるもの。バグレポートとは関係なしにsysdiagnoseを実行した場合、このコマンドの情報が欲しかったんだ、ということもあるだろう。そう、sysdiagnoseで生成される書庫ファイルは"いろいろなコマンドを実行して出力したログの寄せ集め"なのだ。
ということは、sysdiagnoseが処理される課程でどのようなコマンドラインを実行しているかがわかれば、巨大なログ群と格闘する必要はなくなる。
以下に挙げる項目は、sysdiagnoseに含まれるログを出力するコマンドラインの抜粋だ。すべてではないが、非開発者にとっても有用な情報であり、システム管理/Macメンテナンスの参考になるはず。タネを明かせば「sysdiagnose.log」を読み解いただけのことだが、意外なほど有用なこと請け合いだ。なお、「○○○.txt」はファイルにリダイレクトして生成されているが、コマンド実行例ではその部分を省略しているため、標準出力へアウトプットされるかデフォルトの領域へ書き出されることになる。
- 1. night-shift.log
ディスプレイの色味を暖色系に自動切り替えする「Night Shift」について、どのような仕組みで動作するか想像を巡らせたことはあるだろうか? このログファイルは、それに対する答えを提示してくれる。以下のとおりコマンドラインを実行すれば、時刻情報と位置情報をもとに算出された日の出/日の入時刻を確認できる。Macはこの情報を頼りに、Night Shiftのタイミングを日々決定しているのだ。
$ corebrightnessdiag nightshift-internal
- 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