はじめる人のびぎねっと。

プライバシーポリシー

読み物

Linux操作の基本

第10回 パーミッションの基本

Linuxでは、ファイルおよびディレクトリシステムは、全て「パーミッション」で管理されています。この、パーミッションは、「○○出来る」あるいは「○○出来ない」ということを表わしています。○○に当たる事柄は3種類、

  • 読み込み
  • 書き込み
  • 実行

です。また、ファイルとディレクトリでは、それぞれの意味が異なります。それぞれの場合に従って、3つのパーミッションを解説しましょう。

(パーミッションが付与された場合には、以下のことが可能となります。)

ファイルのパーミッション

読み込み

catコマンドなどを利用して、そのファイルを読み込むこと。

書き込み

viエディタなどを使ってファイルを修正(した後にセーブ)すること。

実行

そのファイルがプログラムのバイナリファイルだった場合には、メモリに読み込んでバイナリファイルを実行すること。スクリプトファイルだった場合には、スクリプトを実行するプログラムに読み込み、スクリプトを実行すること。

ただし、スクリプトファイルであることには以下の条件が必要です。

  • テキストファイルである
  • 一番最初の行が'#'で始まり、その後に読み込ませるスクリプト実行のプログラムファイルが指定されている
    Perlのスクリプトの場合) #/usr/bin/perl シェルスクリプトの場合) #/bin/bash

スクリプトファイルを実行できない場合、実行パーミッションが付与されていない、ということがその原因のほとんどです。ご注意ください。

ディレクトリのパーミッション

読み込み

そのディレクトリの中にどのようなファイルがあるのかを見ること。たとえば、lsコマンドをそのディレクトリで実行すること。

書き込み

そのディレクトリにファイルを作成すること。

実行

そのディレクトリをカレントディレクトリとすること。たとえば、cdコマンドでそのディレクトリに移動すること。

ディレクトリの場合、読み込みと実行のパーミッションの動作が特殊なので、ご注意ください。

パーミッションの確認

パーミッションは、lsコマンドに-lオプションを付けて確認することが出来ます。

$ ls -l
total 12
drwx------ 5 tmiyahar beginet 4096 Nov 2 17:24 Maildir/
-rw-rw-r-- 1 tmiyahar beginet 1096 Mar 13 23:07 beginet.pl
-rwxrw-r-- 1 tmiyahar beginet 968 Mar 13 23:07 beginet.sh*
-rw-rw-r-- 1 tmiyahar beginet 1490 Mar 13 23:06 beginet.txt
drwxr-xr-x 2 tmiyahar beginet 4096 Nov 23 11:05 log/
drwxrwxr-x 2 tmiyahar beginet 4096 Mar 13 23:08 public_html/

パーミッションを表しているのは、表示されたうちの一番左にある10文字です。一番左1つと、あとは3つの文字の組み合わせが3つという構成です。

パーミッションの解説

drwxrwxrwx
一番左の d は、ディレクトリかどうかを表しています。

drwxrwxrwx
3文字セットの左の r は、読み込み(Read)パーミッションを表しています。

drwxrwxrwx
3文字セットの真ん中の w は、書き込み(Write)パーミッションを表しています。

drwxrwxrwx
3文字セットの真ん中の x は、実行(eXecute)パーミッションを表しています。

rwxのセットが3つあるのは、それぞれの効果が及ぶ範囲が異なっているからです。

一番左のセットが有効なのはそのファイル(ディレクトリ)の「所有ユーザー」だけです。上の例では左から3番目の項目「tmiyahar」が所有ユーザーに当たります。

真ん中のセットが有効なのはそのファイル(ディレクトリ)の「所有グループ」だけです。上の例では左から4番目の項目「beginet」が所有グループに当たります。

一番右のセットが有効なのは「その他のユーザー」です。

beginet.shというシェルスクリプトファイルのパーミッションを見てみましょう。

-rwxrw-r-- 1 tmiyahar beginet 968 Mar 13 23:07 beginet.sh*

所有ユーザーのパーミッションは「rwx」なので、ユーザーtmiyaharは読み書き実行全てを行うことが出来ます。一方、所有グループのパーミッションは「rw」なので、グループbeginetは読み書きを行うことは出来ますが、実行することは出来ません。その他のユーザーは、中身を読むことだけしか出来ません。

パーミッションを変更する

パーミッションを変更するにはchmodコマンドを使用します。引数で「ユーザー」「グループ」あるいは「その他」に「どのパーミッションを与える(または与えない)」かを指定します。

引数の意味の一覧です。

    所有者
  • u  所有ユーザー(user)
  • g  所有グループ(group)
  • o  その他のユーザー(others)
  • a  全て(all)
    パーミッション
  • r  読み込み(read)
  • w  書き込み(write)
  • x  実行(execute)

所有者とパーミッションの間が + の場合にはそのパーミッションを付与し、- の場合にはそのパーミッションを解除します。所有者とパーミッションは、複数を同時に指定することが出来ます。

$ chmod u+x beginet.pl

beginet.plファイルに、所有ユーザーの実行パーミッションを付与します。

$ chmod u-x beginet.sh

beginet.shファイルに付与されていた所有ユーザーの実行パーミッションを解除します。

$ chmod a+rwx public_html

public_htmlディレクトリに、全てのユーザーの読み書き実行パーミッションを付与します。

このページのTOPへ