|
これはMacOSXでは時々あることですが、ダウンロードに失敗したとか、ファイルを加工中にアプリが落ちて、テンポラリファイルが残ったりした場合これをゴミ箱に入れて削除しようとしても、
「アプリケーション○○が使用中のため削除できません」
「アクセス権が無いために削除できません」
などのアラートが出て削除できない時があります。
これはOSXで稀に起こるトラブルで、気にしなくても大きな問題は起こしませんが削除できないファイルがゴミ箱に残るというのは気分が悪いものです。
そこでゴミ箱の中身を強制的に削除するコマンドをこのようにタイプします。
ゴミ箱の中身を強制的に削除する
sudo rm -rf ~/.Trash/*
(このコマンドの使用は要注意です。以下に詳しく書きますが、タイプミスをするととんでもない結果になりますので下記の詳細をよく読んでから注意して使って下さい。)
「-rf」は前段でも触れたようにディレクトリを中身もろとも警告無しに削除するというオプションです。
ゴミ箱の実体はユーザディレクトリの直下にある「.Trash」という不可視フォルダです。
その中身を全て削除という意味で「/*」というディレクトリを記述します。
これを忘れるとゴミ箱そのものを削除してしまいます。
(このスラッシュの後のアスタリスク*は任意のファイル名、ディレクトリ名という意味です。
通常UNIXでは操作するファイル名、ディレクトリ名を正確に指定してやる必要があります。1文字でも違っていると操作を受け付けないのですが、それでは多数のファイルを一度に操作する時に不便なので、そういうファイル名を「/の後にある何か」というようなざっくりとした指定の仕方ができます。こういう「何か」に当たる記号が*になります。こういうのをUNIX用語ではワイルドカードと呼んでいます。)
さてこのコマンドの頭についている「sudo」というのが問題です。
UNIXというOSは最初からサーバクライアントという使い方をするシステムとして設計されています。つまり複数のユーザがログインして使うことが前提になっています。
複数というのはある場合は不特定多数ということも考えられます。
そうなると、パソコンを一人で使っている場合には起きなかった問題が起きます。
せっかく作ったファイルを他人が勝手に消してしまったら困ります。
ましてや初心者もログインしてきてわけも判らずにシステムの基幹ファイルを削除してしまったらどうなるでしょうか?
たちまちこのコンピュータにログインする人たちが全員作業に支障をきたしてしまいます。
そこでUNIXでは所有権とアクセス権という考え方を最初から採用していました。
アクセス権というのはあるファイル(またはディレクトリ)を見ることができるか、書き換えることもできるか、見ることも上書きもできないかというふうに設定できます。(他に実行権などというのもありますがここでは説明を省きます)
所有権はオーナー、グループ、その他と別れますがこれはそのファイルを作った人、使うことを許可されたグループ、それ以外の一般ユーザというふうに分かれていると理解して下さい。
それぞれのレベルの所有権の人にどこまでアクセスを許すかというのがこの設定です。
詳細は省きますが、システムが作成したファイルは多くの場合、システムが所有者になっていてユーザは見ることができても書き換えができない、あるいはユーザは触ることができないように設定されています。
もしOSXを一人で使っている管理者ユーザだとしても、その人はUNIX的にはただの管理権のあるユーザに過ぎません。
UNIXの世界ではシステムと同じくすべてを触ることができる権利者を
「root」
と呼びます。これは先ほども書いた管理者ユーザ(またはアドミニストレータ:Administrator)とは別物です。
管理者ユーザは共有の開始、ネットワーク接続などの環境設定を変更することができるユーザというだけで、システムが書き換えを禁じたファイルを書き換えることができないという意味では一般ユーザと同じです。
これでマルチユーザのUNIXシステムは安全を確保していますが、もしシステムの管理者がシステムの不具合を調整したい時に触ることができない領域が広範にあると、今度はシステムのメンテナンスができなくなります。
そこで「root」というユーザが用意されています。
「root」は他のユーザやシステムが書き換えを禁じたファイルでも自由に書き換えたり削除できます。
あらゆるアクセス権の制限を受けないという意味で、UNIXの世界では「root」は全知全能の「神の権限」とよく言われます。
誰もが簡単に神になれたら大変な問題ですから通常「root」はパスワードによって保護されています。
MacOSXのterminal環境では通常デフォルトで「root」でログインすることはできないように設定されています。
「root」はもし破られると、システムを第3者に自由に操られてしまうというセキュリティ上の危険が伴います。
UNIXに対するクラッカーの攻撃は、大抵は「root」権限を乗っ取るために様々なスキャンをかけるというものです。
それぐらいこの「root」というのは絶対的なものなのです。
「root」でログインする方法は後段で書きますが、スキル的に「root」を設定しても大丈夫という人以外はあまりやらない方が良いかも知れません。
しかし権限を制限されたままではシステムの調整をする時に不便です。
先ほどの例のようにゴミ箱に削除できないファイルが残ってしまう場合も「root」権限でないと対処できません。
そこで「root」ではない管理者ユーザでも「root」と同じ権限で作業することができるコマンドが用意されています。
それが
sudo
というコマンドです。
suというのは一般的にはスーパーユーザと言われています。
UNIXのマニュアルを見るとsudoは他のユーザに成り代わってアクセス権、所有権を越えた操作をすると書いてあります。
(注:このsuについてはHiro's Personal PageではHiroさんが「suはselect userの略だ」と書いておられます。また専門サイトを調べていると「suはswitch userの略」と解説しているところもあります。私自身もこれはスーパーユーザーの略ではないという説明を聞いたことがあります。
しかしシェルのmanコマンドで調べてみるとスーパーユーザーという説明が書いてあったりします。
これの語源はなかなか諸説あるのですが、suというコマンドは実はroot以外のアカウントにも自由になれるという意味ではswitch userまたはsubstitute userという用語が正しいのだろうけど、一般的にはsuコマンドはrootになる時ぐらいしか使わないので、スーパーユーザーという理解でも良いんじゃないかと思っています。)
(さらに後日注:このsuの語源について調べると、一応「始まった時はスーパーユーザーという意味でスタートしたが、後にルート以外のユーザにもなりかわれるというコマンドがインストールされ、その世代からサブスティテュートユーザーの略ということに変わった」という定説があるのだそうです。余談ですがそれはあくまで定説だし、いまでもスーパーユーザという用語を使っている人が多いので私も、これに従うことにします。)
先ほどのゴミ箱の中身を強制削除するコマンドの
sudo rm -rf ~/.Trash/*
というコマンドは、「仮設的にルートユーザになってゴミ箱の中身を強制的に削除する」という意味です。
「root」に成り代わるわけですから当然、このコマンドを実行する時は「root」のパスワードを要求されます。
注意!
このコマンドを使う時は注意が必要です。
rm -rfは先にも書いたようにディレクトリを中身ごと警告無しに削除してしまうというコマンドです。これに「root」権限のsudoが組み合わさったわけですから強力かつ危険なコマンドになっていることが容易に想像できると思います。
rm -rf ~/
までタイプした時に、間違えてenterキーを叩いてしまうとユーザディレクトリの中身を全部削除してしまいます。
ユーザディレクトリはブラウザのブックマークやメールのアドレス、メッセージ、一般的には音楽ファイルやこれまで仕事で書いてきたドキュメントファイル、個人の環境設定など重要なファイルが全て入っていますので、消えてしまうと大変なことになります。
それも一瞬にして消えてしまいますのでタイプする時は慎重にやる必要があります。
もっと悲惨なのはsudoコマンドと組み合わせて
sudo rm -rf /
までタイプした時にenterキーを押してしまったときです。
まだ「root」権限をそのセッションの中で行使していなければ、パスワードを訊かれますが行使しているとパスワード無しに一瞬で実行されてしまう可能性があります。
このコマンドの意味は「ハードディスク上の全てのファイル、ディレクトリを確認無しに強制的に削除せよ」という内容になります。
間違ってもこういうふうには打たないことです。
sudo等を最初に実行する時に
「あなたはUNIXについて十分な説明を受けていますね?
タイプする前によく考えるという原則を常に心に留めておいて下さい」
というUNIXの警告が出てきます。
この言葉は深い意味を持っています。
enterキーを叩く前にタイプミスが無いか必ず見直すという習慣をつけて下さい。
|