macOSはUNIX/POSIXで一般的なディレクトリ構造を持つため、コマンドの役割/性格をザックリと知りたいとき、そのパスを見ればおよその察しがつく。たとえば、OS標準装備のシェルやファイル操作関連など、ごく基本的なコマンドは「/bin」、システム管理において重要な役割を果たすコマンドは「/sbin」。「/usr」のサブディレクトリにも「bin」と「sbin」はあるが(/usr/bin、/usr/sbin)、システムにおいては補完的な位置付けで、重要度/必須度は「/bin」、「/sbin」よりランクが下がる……といった具合だ。

OSのメジャーアップデート後には、CUIレベルでの変更点を調べるべくそれらディレクトリの内容を一通り調べるが、どうしてもパス(コマンドサーチパス)の通ったディレクトリを優先してしまい、パスの通っていないディレクトリは後回しになってしまう。そのひとつが「/usr/libexec」だ。

この「/usr/libexec」は、BSD系システムにおいて補助的な役割を行うバイナリが置かれるディレクトリ。大半はシステムのバックグラウンドで動作する「サービス」や「デーモン」であり、ファイル名の末尾が「d」で終わるもの -- httpdやftpdのように、UNIX系OSにはデーモンとして動作するバイナリの末尾を「d」とする慣習がある -- がほとんどだ。シェルを介して(対話的に)処理することを想定されたバイナリは少なく、初期設定ではパスも通っていないため、Terminalから実行するときは「/usr/libexec/○○○○」のようにフルパスを指定することがお約束だ。

  • /usr/libexecディレクトリには、システムを補助する役割のバイナリが置かれている

しかし、丁寧に/usr/libexcの内容を見てみると、新たな発見もある。/usr/libexecに限らず、パスが通っていない他のシステム領域にも、知られていないだけで有用なコマンドは存在する。今回は、そんな知られざるコマンドを紹介しよう。

ファームウェアを手動でチェックする

macOS High Sierraから、/usr/libexecには「firmwarecheckers」というディレクトリが新設された。ここには「eficheck」などファームウェアの異常を確認するコマンドが収録され、週に1度(正確には604800秒に1度)のペースで自動実行される。

このコマンドが実行されると、ファームウェアの情報がAppleのサーバへアップロードされ正しいものかチェックされる。異常が発見された場合は、ダイアログでユーザに警告し、Appleへ報告するよう促すしくみだ。

もし、マルウェア感染を疑うような事態がある場合には、Terminalからeficheckコマンドを手動で実行してみよう。オプション/引数なしで実行しても何も起こらず、用例が表示されるだけなので、週1で実行されるコマンドラインと同じ「--integrity-check」オプションを指定すること。

  • 手動でファームウェアをチェックする

「パス」の設定を書き出す

UNIX系OS(正確には「シェル」)に馴染みのないユーザが躓きがちな「パス」。macOSの場合、/etc/pathsファイルに優先度の高いパスを記述し、/etc/paths.dディレクトリ以下に優先度の低いパスだけを情報として持つファイルを作成しておくと、利用するシェルにあわせたPATH環境変数の定義を自動作成できるようになる。そのためのコマンドが「path_helper」だ。

このコマンド、CシェルとBシェルどちらの記述スタイルにも対応しており、Bシェルに分類されるbashの場合「-s」オプションを付けて実行する。すでにPATH環境変数が定義済みの状態で実行すると、そのパスを含む形でPATH環境変数の定義が作成される点には注意しよう。

$ /usr/libexec/path_helper -s

なお、シェルの起動方法に関係なく確実にパスを設定するためか、現行のmacOSではbashのシステムワイドな起動スクリプト「/etc/profile」でpath_helperコマンドを利用している。「~/.bash_profile」などユーザ別の起動スクリプトでパスの定義を行う旧来のスタイルもいいが、/etc/pathsや/etc/paths.dにパスを記述するのもなかなか合理的だ。

  • 「path_helper」をパスの設定に活用しよう

TFTPサーバを使う

macOSからFTPサーバは消えたが、トランスポート層にUDPを使用するTFTPサーバは「/usr/libexec/tftpd」としていまも健在だ。以下のコマンドラインを実行すれば、UDP/69番ポートを利用してTFTPサーバが起動する。TFTPクライアント(/usr/bin/tftp)も残されているので、Mac間で効率よくファイル転送したいときに利用できる。

$ sudo launchctl load -w /System/Library/LaunchDaemons/tftp.plist

ただし、TFTPサーバは用事が済み次第終了すること。ユーザ認証なしのサービスなだけに、常時稼働するのは危険だ。

$ sudo launchctl unload -w /System/Library/LaunchDaemons/tftp.plist
  • macOS High SierraでもTFTPサーバ/クライアントを利用できる