「新世代のOS Xユーザへ」シリーズの第3回は、Terminalって怖いかも……という先入観をさらに煽るような(?)テーマとしてみた。切れ味の鋭いナイフのようなもので、慣れればかえって安全なのだが、機能がむき出しな点は事実。特に取り扱い注意のコマンド、一見こわもてだが便利なコマンドを3つピックアップして解説する。
rm
「rm」は、ReMoveから命名されたファイル/ディレクトリを削除するコマンドだ。以下に示すコマンド実行例のように、引数として与えられたファイルを削除する機能を持つ。この場合、あくまで「削除」であり、ゴミ箱への移動ではない点に留意しよう。
$ rm hoge.txt
rmを使う際に覚えておきたい"シェルの約束事"がある。それは、ファイルとディレクトリが明確に区別されない(場合が多い)ということ。前回取り上げた「ls」でも、オプションを指定しないかぎりファイルとディレクトリは一緒くたに表示されていたはずだ。
たとえば、UNIX系OSにはディレクトリを削除するコマンドとして「rmdir」が用意されているが、このコマンドは中身が空のディレクトリしか削除できない。OS Xにかぎっていえば、Finderで表示したディレクトリには「.DS_Store」など不可視ファイルが作成されるため、完全に空のディレクトリは意外に少ない。だから、表面的にはファイル削除用のrmコマンドを使い、"ファイルもディレクトリもまとめて削除"することが効率的なのだ。
そのとき使うrmコマンドのオプションが「-r」と「-f」。前者は再帰的(recursive)の意味で、ディレクトリの内容すべてを削除対象にする。しかし、ファイル/ディレクトリの所有者の関係で、削除途中に確認メッセージを表示することがあるので、対話メッセージを省略する「-f」もあわせて指定する。この2つのオプションを同時に指定するには「-rf」とすればいい。たとえば、以下とおりコマンドを実行すると、「Update」というディレクトリの中身すべてが確認なしに削除される。
$ rm -rf Update
sudo
一般的なUNIX入門書であれば、cpやmvといったファイル操作系コマンドの使い方が先にくるのがスジなのだが、OS XというGUIでほぼ事足りてしまうUNIX環境では、より重要なコマンドがある。それが「sudo」(スードゥー)、使い方次第であらゆる処理が可能になる"諸刃の剣"だ。
OS XなどUNIX系OSには、複数の人間により1台のマシンを共有するための機構(マルチユーザシステム)が採用されている。そしてマルチユーザ環境下では、登録済のアカウントに「管理者」としての権限を与えることで、システム上重要な設定が安易に変更できないようにしている。全ユーザにあらゆる処理を許可した場合、混乱が生じるからだ。
逆にいうと、sudoを使い「管理者」の権限を行使すれば、システム領域を含めあらゆるファイル/フォルダを自由にできる。使い方は以下のとおりで、引数に実行したいコマンドラインそのまま(ここでは「rm /var/vm/swapfile1」)を与えればいい。パスワードを尋ねられるので、現在作業しているユーザ(管理者権限を持つユーザとしてログインしておくこと)のパスワードを入力すれば、作業完了だ。
$ sudo rm /var/vm/swapfile1
Password:
ここでピンと来た方、ご名答。先ほどの「rm -rf」と組み合わせ、起動ディスクの根元の部分(ルートディレクトリ)を対象にしたら? そう、途中システムがフリーズするまでありとあらゆるファイル/ディレクトリを根こそぎ削除し、OSの再インストールを余儀なくしてしまう。もしうかつにも出所の知れないシェルスクリプトを実行し、パスワードを尋ねられたら、このコマンドラインのことを思い出そう。
$ sudo rm -rf
Password:
kill / killall
見るからに物騒な、まさにTerminalの暗黒面を物語るコマンド……ではなく、困った場面を助けてくれる有用なコマンドが「kill」だ。正確には、プロセス(シェル上でのプログラムの最小実行単位)にシグナルを送信することが役目だが、結果的にプロセスを強制終了させることができるため、反応がなくなったコマンド/アプリケーションを止める目的で利用される。
たとえば、iTunesから反応がなくなったと仮定しよう。その場合、iTunesのプロセスID(PID)を割り出し、killコマンドの引数として実行すればいい。PIDは「ps」コマンドを使えば割り出せるが、OS Xに付属の「アクティビティモニタ」でも構わない。たとえば、iTunesのPIDが10169だとすると、以下のとおりコマンドを実行すればいいことになる。
$ kill 10169
ただし、killコマンドが送信するシグナルが初期値のままでは、プロセスを停止できないこともある。その場合には、オプションに「-9」を指定すること。これは「SIGKILL」というシグナルを意味するオプションで、特別な事情がなければこれでプロセスは終了される。
$ kill -9 10169