第4回. ファイルの属性 Wirtten by Hariru (1) コマンド紹介 まずは今回紹介するコマンドです。 id --- ユーザIDとユーザ名、グループIDとグループ名を出力する。 groups --- ユーザ自身または指定したユーザの所属するグループ名を出力する。 でもこの2つって、そんなに使うコマンドじゃないので覚えなくてもいいですよ。ここ でのメインは、次のコマンドです。 chmod --- ファイルの保護モードを新たな保護モードに変更する。 もちろんここまでに覚えたコマンドも使うかもしれませんので、お忘れなく。 (2) UNIXはマルチユーザシステム ファイルの操作とディレクトリの概念がわかると、UNIXの世界は開けてきたといえるで しょう。ディレクトリの移動ができるとUNIXシステムのどこにでもいけますし、どこの ファイルも覗くこともできるはず。ところが、 Permission denied のように表示されて、見ることができないあるいは変更できないファイルがあります。 これはどういうことのなのか? これはUNIXが、複数の人が使用するマルチユーザシステムだからです。 このため、他人に自分のファイル内容を勝手に書き換えられたりするのを防ぐために、 すべてのファイルに保護モードと呼ばれるものが設定されています。 (この保護モードは単にパーミッションと呼ばれることもあります) (3) ファイルの詳細表示 では、ためしにファイルの保護モードを調べてみましょう。 lsに-lオプションをつけて実行です。 % ls -l total 4 -rw-r--r-- 1 hariru staff 14 Mar 31 12:30 backup -rw-r--r-- 1 hariru staff 14 Mar 31 12:29 morning % このように-lオプションは、個々のファイルに関する詳細な情報を見せてくれます。こ の表示の意味は次のとおりです。 -rw-r--r-- 1 hariru staff 14 Mar 31 12:29 morning ----+----- + --+--- --+-- +- ------+----- ---+--- | | | | | | | | | | | | | +--- ファイル名 | | | | | +--- ファイルの最終更新日時 | | | | +--- ファイルのバイト数 | | | +--- ファイルが属するグループ | | +--- ファイルの所有者 | +--- ファイルへのリンク数 +--- ファイルの情報と保護モード 1番目の項目の説明はこの後でするとして、2番目はファイルへのリンク数です。これは 深く考える必要はないです。気にしないでください。 次のファイルの所有者は、もちろんこのファイルを作ったあなたのユーザ名が表示され ているはずです。これはコマンドを実行してできたファイルも同じです。 その次のファイルが属するグループです。これは、UNIXではユーザは必ずどこかのグル ープに属しているはずで、作成したときにユーザが属していたグループが表示されます。 残りの3項目はいうまでもありませんね。 それからあなたがどんなグループに所属しているか知りたい場合は、idまたはgroupsコ マンドで知ることができます。 % id uid=1234(hariru) gid=10(staff) % groups staff % idで表示されるuidはユーザID、gidはグループIDという意味で、()内がその名前です。 ちなみになぜ2つも紹介したかというと、システムによってどちらかのコマンドがない 場合があるからです。 (4) ファイルの情報と保護モード さて、さっき説明しなかったファイルの情報と保護モードですが、意味不明な文字が並 んでいますね。早速これの説明です。 これは次のように4つに分けて考えます。 - rw- r-- r-- | | | | [1][2] [3] [4] +--------------------------+--------------------------+ | [1] ファイルの種類 | - 通常ファイル | | | d ディレクトリファイル | +--------------------------+--------------------------+ | [2] 所有者に対する保護 | r 読み出しを許可 | +--------------------------+ w 書き込みを許可 | | [3] グループに対する保護 | x 実行を許可 | +--------------------------+ | | [4] 全ユーザに対する保護 | - 不許可 | +--------------------------+--------------------------+ [1]は見てのとおりです。(実際にはこれ以外の種類もあります) [2][3][4]は、誰に対する保護がどのようになっているか記されています。さらにそれ ぞれ3つに分けることができ、順番にファイルの読み出し、書き込み、実行の許可が表 記されます。それらすべては許可されると、 rwx のようになります。そして、-が入るところが不許可になるわけですね。 簡単にさっきのmorningファイルのことを言うと、 -rw-r--r-- 1 hariru staff 14 Mar 31 12:29 morning これはmorningという通常のファイルで、 所有者(hariru)に読み出しと書き込みの許可があり、 グループ(staff)に読み出しの許可があって、 全ユーザに読み出しの許可があるよ。 ってことです。 こうしておけば、所有者以外はこのファイルを読むことはできても、書き換える(書き込 む)ことはできないわけです。 注意)スーパースーザだけはこの規則を無視して読み書きできますので、あまり変な名前 をつけていると消されちゃうかもしれませんよ。 ちなみにファイルを消すという行為も、書き込みの許可が必要になります。 (5) 保護モードの変更(記号編) それでは保護モードの変更です。保護モードの変更にはchmodコマンドを使います。実際 に使うと、次のような感じです。 % ls -l total 4 -rw-r--r-- 1 hariru staff 14 Mar 31 12:30 backup -rw-r--r-- 1 hariru staff 14 Mar 31 12:29 morning % chmod a-r morning % ls -l total 4 -rw-r--r-- 1 hariru staff 14 Mar 31 12:30 backup --w------- 1 hariru staff 14 Mar 31 12:29 morning % backupと同じだったmorningですが、保護モードが変わったことがわかりますね。ただ、 chmodコマンドの次の記号列がなぞですね〜。その次はファイル名をさしているのはわか りますけど。 このなぞの記号列は、次のように3つに分けて説明できます。 a - r | | | | | +--- [rwx] : 指定する保護 | +----- [+-] : 指定される保護モードの変化 +------- [ugoa] : 対象とするファイルのユーザ許可 +---------+--------------------------------+ | [ugoa] | u 所有者に対する許可 | | | g グループに対する許可 | | | o その他のユーザに対する許可 | | | a すべてのユーザに対する許可 | +---------+--------------------------------+ | [+-] | + 保護モードの追加 | | | - 保護モードの削除 | +---------+--------------------------------+ | [rwx] | r 読み込みの許可 | | | w 書き込みの許可 | | | x 実行の許可 | +---------+--------------------------------+ つまり先ほどの % chmod a-r morning は、 morningファイルに対する保護モードを すべてのユーザに対して、 書き込みの許可を、 削除する。 という意味となって、 --w------- 1 hariru staff 14 Mar 31 12:29 morning のように、すべてのユーザがmorningファイルを読み込むことができなくなります。そ れでも根性を入れて、catでファイルの内容を読んでみようとしますと、 % cat morning cat: cannot open morning % のように、catコマンドからmorningファイルを開くことはできないと拒否されてしまい ました。 先ほどまで見ることができていたのに、見ることができなくなってしまいました。保護 モードが変わったことが実感できますね〜。 (6) 保護モードの変更(絶対値編) 先ほどは記号を使った保護モードの変更でしたが、ここでは絶対値を使った方法です。 といっても考え方は同じようなものなので、サクサクいっちゃいましょう。 絶対値で変更とか言われると何のことやらと思うかもしれませんが、思いっきり簡単に 要約しますと3桁の数列によって保護モードを変更しようというものです。 その3桁の数列の求め方ですが、保護モードと3桁の数列との関係を簡単にあらわすと 次のようになります。 所有者 グループ その他 ・・・ 対象のユーザ r w x r - x r - x ・・・ 保護モード 4 2 1 4 2 1 4 2 1 ・・・ -以外の場所にある数字を加える 7 5 5 ・・・ 加えた数字 755 ・・・ 対応する絶対値 では、実際やってみましょう。morningの保護モードをbackupと同じ状態にしますね。 % ls -l total 4 -rw-r--r-- 1 hariru staff 14 Mar 31 12:30 backup --w------- 1 hariru staff 14 Mar 31 12:29 morning % backupの保護モードは、 r w - r - - r - - ですから、これと同じにするためには、 r w - r - - r - - 4 2 1 4 2 1 4 2 1 ・・・ -以外の場所にある数字を加える 6 4 4 644 となり、644という数列が求められます。 絶対値でもchmodの書き方は同じなので、記号列だったところを数列に置き換えて次の ようになります。 % chmod 644 morning % ls -l total 4 -rw-r--r-- 1 hariru staff 14 Mar 31 12:30 backup -rw-r--r-- 1 hariru staff 14 Mar 31 12:29 morning % おお〜、輝くばかりに同じになりましたね。 保護モードの変更する方法として記号と絶対値のどちらを使ってもよいのですが、慣れ てくると絶対値の方がよいと思いますよ。 だって、少なくとも口で説明するときに楽ですからね。 「ここのパーミッションは755だよ」 注意)保護モードの変更は、ファイルの所有者またはスーパーユーザしか変えることが できません。そういうわけですから、見ることができない他人のファイルの保護モード を変更しようとしても無駄ですよ。 いじょ〜、一段落!