~$ ls -l 合計 16 drwxr-xr-x 2 takk takk 4096 5月 8 17:41 dir1 drw------- 2 takk takk 4096 5月 8 14:50 dir2 -rwx------ 1 root root 23 5月 8 18:01 file1 -rwxr-xr-x 1 root root 23 5月 8 14:51 file2 ~$
ls -lで表示される情報には、ファイルパーミッションがあります。
各ユーザからのアクセス権限を表している情報です。
rは、リード可能(readable)
wは、ライト可能(writable)
xは、実行可能(executable)
dは、ディレクトリの意味です。
drwxの順序で表します。
ls表示の上から見ていきます。
dir1は、drwxr-xr-xで、所有者の権限としてdrwx、つまりすべての権限が与えられています。所有者は、takkとなっていますので、dir1に関しては、ユーザtakkは何でもできるわけです。
グループユーザと他ユーザに関してはr-xとなっています。つまり所有者以外のユーザはライトができません。また、xは実行権限の意味ですが、付与先がディレクトリの場合は、ディレクトリ切り替え可能の意味となります。
次に、dir2は、所有者の権限としてdrw-となっています。xがついていませんので、所有者であっても、このディレクトリにcdすることはできません。
~$ cd dir2 -su: cd: dir2: 許可がありません ~$
このディレクトリに所有者なのにcdできないのは困りますね。
でも大丈夫です。所有者の権限にwがついています。ライト可能ですから、dir2のパーミッションを変更することができます。では、このディレクトリへcd可能となるようにファイルパーミッションを変更してみましょう。
ファイルパーミッションを変更するには、chmodコマンドを使います。ch(チェンジ)mod(モード)の略です。
~$ chmod 700 dir2 ~$ cd dir2 ~/dir2$
700と指定しましたが、rwx各パーミッションの状態を8進数に読み替えて指定しました。
突然8進数が出てきましたが、コマンドラインにおいて8進数を大いに使うのはこの時ぐらいです。しかも実運用上で、8進数のすべての組み合わせが使われるわけではありません。
ユーザが作成したファイルにおいて、書き込み可能であれば、読み込みも当然可能でしょうし、実行可能なら、リード可能でもあるはずです。パターンとして以下の5種類ぐらいでしょうか。8進表記は覚えてしまいましょう。
よくあるパーミッションパターン
— 2進で000、8進で0
r– 2進で100、8進で4
r-x 2進で101、8進で5
rw- 2進で110、8進で6
rwx 2進で111、8進で7
例
所有者、グループユーザ、他ユーザ
-rwx—— 700 所有者のみ全権限
-rw-r–r– 644 全員が閲覧可能、書き換えは所有者のみ
-rwxr-xr-x 655 全員が実行可能、書き換えは所有者のみ
-rwxrwx— 770 他ユーザだけ何もできない
前置きが長くなりましたが、8進数なら3桁で表現できるのに、ls -lのrwxの表現は9文字。文字数が多いです。
あくまで私見ですが、ほんの少しだけ読み取りづらく感じます。そこで、このパーミッション表記を8進表現するlsを作ってみたいと思います。
~$ ls -l | perl -pe ' s|---|0|g; s|r--|4|g; s|r-x|5|g; s|rw-|6|g; s|rwx|7|g; ' 合計 16 d755 2 takk takk 4096 5月 8 17:41 dir1 d700 2 takk takk 4096 5月 8 14:50 dir2 -700 1 root root 23 5月 8 18:01 file1 -755 1 root root 23 5月 8 14:51 file2 ~$
rwx-の各文字を01に置換して、2進から8進変換する方法もありますが、
パターンが少ないので、置換を並べる形にしました。
置換前文字に-(ハイフン)が使われていますので、s///gの形ではなく、以下のスタイルをとっています。
s|置換前|置換後|g;
コマンドラインの入力を見て分かるように、s|||を使うと、|が罫線に見えて、視認性アップです。
上記ではlsを整形しましたが、statのフォーマット出力を使っても、lsと似たような表示が行えます。
しかもパーミッションの情報はオプションのみで8進指定ができます。
(以下でsedを使っているのは日時の簡潔化のためです)
~$ stat -c"%a %U %G %s %y %n" * | sed s/\\..*900// 755 takk takk 4096 2016-05-08 17:41:17 dir1 700 takk takk 4096 2016-05-08 14:50:53 dir2 700 root root 23 2016-05-08 18:01:12 file1 755 root root 23 2016-05-08 14:51:38 file2 ~$
後は、エイリアスや関数等で、ll等で実行できるようにしておいて、
ls -lの代わりに使えば良いです。
ちなみに、オプションを指定せずにstatを使うと以下のようにたくさんの情報が表示されます。
~$ stat dir1 File: `dir1' Size: 4096 Blocks: 8 IO Block: 4096 ディレクトリ Device: 821h/2081d Inode: 786437 Links: 2 Access: (0755/drwxr-xr-x) Uid: ( 1004/ takk) Gid: ( 1004/ takk) Access: 2016-05-08 17:41:24.981708750 +0900 Modify: 2016-05-08 17:41:17.125709019 +0900 Change: 2016-05-08 17:41:17.125709019 +0900 Birth: -
コメント