ファイルの操作 First Edition 2002.9.14 Last Modified 2003.5.28 UNIX系OSの基本、ファイルのパーミッションの話です。基本の中の基本ですが、実際にはまることが多い部分でもありますので、 細かく見ていきたいと思います。
ファイルの書式ファイルの書式はターミナルで、$ llもしくは $ ls -lと打つと、以下のように出力されます。 -rw----r-- 1 lucky lucky 9143 Sep 4 22:03 version.html (1) (2) (3) (4) (5) (6) (7)(1)ファイルの種類とパーミッション (2)ハードリンク数 (3)所有者 (4)グループ (5)ファイルサイズ (6)作成、更新、変更した日付 (7)名称 それぞれ詳しく見ていきましょう。 ■(1)ファイルの種類とパーミッション - rw- --- r--1文字目は、ファイルの種類を示しています。ファイルの種類は以下のようなものがあります。
シンボリックリンクとは、Windowsで言うところのショートカットです。ファイルとディレクトリのリンクには「ハードリンク」と 「シンボリックリンク」の2つがあります。 キャラクタデバイスとブロックデバイスは/dev/ディレクトリをのぞいてみるとたくさんあることが分かります。例として以下のような ものがあります。
2文字目以降はパーミッションを示しています。パーミッションはファイルとディレクトリで全く意味が異なりますので、 注意が必要です。 ファイルのパーミッション
ディレクトリのパーミッション
Linux問わずUNIX系システムのパーミッションは、大きく分けて3つのグループに分けることが出来ます。 所有者 グループ 他人 それぞれに読みとり、書き込み、実行権限や、一覧表示、ファイルの追加、cdコマンドの許可を設定することが出来ます。 ■(2)ハードリンク数 ハードリンクとは、ファイル、ディレクトリの実体へアクセスすることが出来る数です。 ファイル、ディレクトリはディスク上でi-nodeと呼ばれる番号によって管理されています。ファイル名、ディレクトリ名は最終的には i-node番号を示すために使われるのです。 ファイル、ディレクトリにアクセスするにはi-node番号が分かればよいわけで、たどり着くまでに使われる名称はいくつあっても かまいません。したがって、あるi-node番号にたどり着くための名称を複数作成することを「ハードリンクする」と言います。 試しに以下の操作をしてみましょう。 あるファイルを作成してみます。 $ vi file1.txt中身はabcとでもしておきましょう。次にハードリンクをします。 $ ln file1.txt file2.txtstatコマンドにより、ファイルの詳細を見てみましょう。 $ stat file*.txt File: "file1.txt" Size: 3 Blocks: 8 Regular File Access: (0644/-rw-r--r--) Uid: ( 500/ lucky) Gid: ( 500/ lucky) Device: 30d Inode: 444487 Links: 2 Access: Fri Sep 13 00:29:02 2002 Modify: Fri Sep 13 00:29:02 2002 Change: Fri Sep 13 00:29:09 2002 File: "file2.txt" Size: 3 Blocks: 8 Regular File Access: (0644/-rw-r--r--) Uid: ( 500/ lucky) Gid: ( 500/ lucky) Device: 30d Inode: 444487 Links: 2 Access: Fri Sep 13 00:29:02 2002 Modify: Fri Sep 13 00:29:02 2002 Change: Fri Sep 13 00:29:09 2002このように、ハードリンクをすると、ファイル名は異なってもInode(i-node)が同じファイルが作成されます。 この状態で、file2.txtに変更を加えると、file1.txtの内容も全く同じに変更されます。実体が同じものなので、 当然の動きです。 しかし、ハードリンクより、シンボリックリンクの方が使い勝手がよいので、ハードリンクはほとんど使うことはないでしょう。 ■(3)所有者 ファイル、ディレクトリの所有者を示します。所有者はほとんどすべての権限を持つことが出来ますが、所有者自身を他の所有者に 変更することだけは出来ません。 ■(4)グループ 通常、人がLinuxを操作する場合など、複数のユーザーをまとめたものをグループとします。 それ以外に、デーモン(プログラム)などは1人のユーザーしかいないグループでプログラムが動作します。 ■(5)ファイルサイズ バイト単位のファイルサイズです。 ■(6)作成、更新、変更された日付 ファイル、ディレクトリに対して作成、更新、変更などを行ったときの日と時間です。 ■(7)ファイル名 ファイル名、ディレクトリ名、シンボリックリンク名、キャラクタデバイス名、ブロックデバイス名などです。 ファイルのアクセス権を変更するファイルの書式でお話ししたとおり、ファイルには、「所有者」、「グループ」、「他人」の3つの グループがあることが分かりました。それぞれに対して、「ファイル内容の表示が可能」、「書き込み可能」、「実行可能」の 3つの属性を設定できることも分かりました。では、それらの設定できる属性を変更してみます。適当にテキストファイルを作成してみます。 -rw-r--r-- 1 lucky lucky 6 Sep 23 23:12 test.txt"test.txt"というファイルを作成してみました。すると、上記のようなパーミッションになりました。これは、 所有者:読みとりと書き込み グループ:読みとりのみ 他人:読みとりのみ とう属性が設定されていることになります。「読みとりはすべての人に許可されていますが、所有者以外は変更が不可能」になっています。 デフォルトで設定されるパーミッションは、"umask"という値により制御されています。"umask"については今後書きたいと思います。 パーミッションを変更するには、2つの方法があります。パーミッションは所有者もしくはrootしか変更できません。 1.chmod 640 test.txt 2.chmod o-x text.txt 1.の方法 これは、変更したいパーミッションを16進数で設定する方法です。 所有者、グループ、他人への属性は、以下の数字を足したものを設定します。 r:4 w:2 x:1(例1) $ chmod 777 test.txt $ ll test.txt -rwxrwxrwx 1 lucky lucky 6 Sep 23 23:12 test.txt
(例2) $ chmod 770 test.txt $ ll test.txt -rwxrwx--- 1 lucky lucky 6 Sep 23 23:12 test.txt
(例3) $ chmod 600 test.txt $ ll test.txt -rwx------ 1 lucky lucky 6 Sep 23 23:13 test.txt
これらの例では数が少ないと思いますので、自分でいろいろ試してみるとよく分かります。 2.の方法 これは、変更したいパーミッションを所有者、グループ、他人で分けて設定する方法です。 所有者:u グループ:g 他人:o所有者に実行属性を与えたい場合は、"u+x"というように"+"を使います。逆に実行権を取りたい場合は、"u-x"とします。 これは、今設定されている属性に対して付け加えたり取り外したりする方法です。直接設定するには、"u=rwx"というように "="を使います。 (例1) $ chmod u+x test.txt $ ll test.txt -rwxr--r-- 1 lucky lucky 6 Sep 23 23:14 test.txt
(例2) $ chmod g+x test.txt $ ll test.txt -rwxr-xr-- 1 lucky lucky 6 Sep 23 23:14 test.txt
(例3) $ chmod o-r test.txt $ ll test.txt -rwxr-x--- 1 lucky lucky 6 Sep 23 23:14 test.txt
(例4) $ chmod o=rwx test.txt $ ll test.txt -rwxr-xrwx 1 lucky lucky 6 Sep 23 23:14 test.txt
(例5) $ chmod ugo-rwx test.txt $ ll test.txt ---------- 1 lucky lucky 6 Sep 23 23:14 test.txt
これでは、オーナー自身も全くアクセスできなくなってしまいますが、あくまでも例ということで。 これら以外にも、自分でいろいろ試してみてください。 ファイルの所有者を変更するファイルの所有者を変更するには、ルートでないと変更できません。以下のようにして変更します。# ll test.txt -rw-r--r-- 1 lucky lucky 5 Oct 1 21:37 test.txt # chown hogehoge test.txt # ll test.txt -rw-r--r-- 1 hogehoge lucky 5 Oct 1 21:37 test.txt"chown"コマンドを使います。所有者を変更されて上記のファイルは以下のようなアクセス権になります。
ファイルのグループを変更するファイルのグループを変更するには、ルートもしくは所有者しか変更できません。所有者の場合は、変更後のグループに所有者が所属している必要が あります。$ ll test.txt -rw-r--r-- 1 hogehoge lucky 5 Oct 1 21:37 test.txt $ chgrp hogehoge test.txt $ ll test.txt -rw-r--r-- 1 hogehoge hogehoge 5 Oct 1 21:37 test.txt上記のように"chgrp"コマンドを使います。 [HOME] since 2001.4.22 |