Metadata
Title
17.6.4. パーミッションと実行ファイル
Category
general
UUID
39c1b88555d74b5ca5099e9213855f05
Source URL
https://hwb.ecc.u-tokyo.ac.jp/hwb2023/applications/shell/fs/permission/
Parent URL
https://hwb.ecc.u-tokyo.ac.jp/hwb2023/literacy/email/
Crawl Time
2026-03-23T10:18:54+00:00
Rendered Raw Markdown

17.6.4. パーミッションと実行ファイル

Source: https://hwb.ecc.u-tokyo.ac.jp/hwb2023/applications/shell/fs/permission/ Parent: https://hwb.ecc.u-tokyo.ac.jp/hwb2023/literacy/email/

それぞれのファイルやフォルダ (ディレクトリ) にはパーミッション、つまり「ユーザが閲覧や上書き、実行するための権限」が設定されています。ここではパーミッションを確認したり変更する方法とともに、実行ファイルについて説明します。Finder で対応する操作は、11.7. 詳細情報とアクセス権 に説明があります。

パーミッションの意味・表示方法 #

ファイルやディレクトリのパーミッションを確認するには、ls コマンドを -l オプション付きで実行します(17.6.2. ディレクトリの操作 )。

ls -l

total 38
drwx------ 4 0000000000 student 3072 3 12 15:13 Desktop
drwx------@ 4 0000000000 student 1024 3 6 11:21 Documents
drwx------ 2 0000000000 student 4096 3 2 13:09 Downloads
drwx------ 5 0000000000 student 1024 4 14 2005 ECC
drwx------@ 35 0000000000 student 3072 3 2 09:14 Library
drwx------ 7 0000000000 student 1024 6 23 2005 Mail
drwx------@ 2 0000000000 student 1024 6 30 2005 Movies
drwx------@ 2 0000000000 student 80 1 14 2004 Music
drwx------@ 2 0000000000 student 1024 5 19 2005 Pictures
drwxr-xr-x@ 3 0000000000 student 1024 4 21 2005 Public
drwxr-xr-x@ 3 0000000000 student 1024 4 21 2005 Sites
drwxr-xr-x 2 0000000000 student 1024 3 12 14:36 tex
drwx--x--x 4 0000000000 student 80 6 20 2005 windows

ここで、特に

drwxr-xr-x@  3 0000000000 student 1024 4 21  2005 Sites

について、左の文字から順に見てみます。

項目 意味
d ディレクトリであることを表す
rwx(2〜4文字目) ファイルの所有者 (user) に対するパーミッション
r-x(5〜7文字目) ファイルの所属するグループ (group) に対するパーミッション
r-x(8〜10文字目) その他 (others) に対するパーミッション
0000000000 ファイルまたはディレクトリの所有者
student そのファイルまたはディレクトリの所属するグループ
1024 サイズ(バイト単位)
4 21 2005 作成日時(2005年4月21日を表している)
Sites 名称

rwx, r-xといった3文字の意味は、次のようになっています。

例えば所有者 0000000000、グループ student であるファイル a.sh に対する

rwxrw-r-x

というパーミッションは、

ということを表していることになります。ディレクトリに対する「x」許可がないとどうなるかの例を示します。

ls -l piyo

total 1
-rw-r--r-- 1 0000000000 student 42 3 7 14:29 bar.txt
drw-r--r-- 2 0000000000 student 80 3 7 14:04 fuga

cd piyo/fuga

-bash: cd: piyo/fuga: Permission denied

数字による表記法 #

パーミッションはしばしば 644, 755 などと、8 進法による 3〜4 桁の数字で表されることがあります (8 進法については12.3. bit列と2進数 を参照)。各桁はそれぞれ user, group, others に対応するパーミッションに対応し、また各数字は、2 進法に直したときの「1の位」が実行許可、「2の位」が変更許可、「4の位」が読み取り許可を表しています。

例えば、

rwxrw-r-x, rwxr-----

というパーミッションを数字で表してみます。rwx は 2 進法の 111 に対応するので、8 進法で表すと 7 になります。また rw- は 2 進法の 110 に対応するので、8 進法では 6 です。同様のことを続けて上のパーミッションを 3 桁の数字で表すと、それぞれ 765, 740 となります。

パーミッションの変更 #

パーミッションを変更するには、chmod コマンドを利用します。

chmod (パーミッションの指定) (対象とするファイル・ディレクトリ)

第 1 引数 (パーミッションの指定) には、次のいずれかを指定します:

例1 #

次の(意味のない)例では、chmod が 4つありますが、それによって test.tex のパーミッションは次のように変わっていきます。

rw-r--r-(最初)→ rwxr-xr-- → rwx--x--- → rwx--x-w- → rwxrwxrw-

chmod ug+x test.tex

chmod go-r test.tex

chmod o+w test.tex

chmod ugo+w test.tex

例2:書き込み許可の活用 #

大事なファイルが上書きされたり、削除されたりするのを防ぐため、書き込み許可を変更しておくという方法があります。

ls -l

total 8
-rw------- 1 0000000000 student  6 3 13 20:42 memo.txt
-rw------- 1 0000000000 student 10 3 13 20:45 test.txt

chmod -w memo.txt

ls -l

total 8
-r-------- 1 0000000000 student  6 3 13 20:42 memo.txt
-rw------- 1 0000000000 student 10 3 13 20:45 test.txt

このようにすると、rm コマンドに対して、「パーミッションでは書き込み許可がないが、本当にやって大丈夫か」という問い合わせがあります。

rm memo.txt

override r-------- 0000000000/student for memo.txt?
^C

ls -l

total 8
-r-------- 1 0000000000 student  6 3 13 20:42 memo.txt
-rw------- 1 0000000000 student 10 3 13 20:45 test.txt

さらに、cp コマンドによる上書きや、エディタなどによって中身を変更しようとすると、「Permission denied」のエラーが出ることになります。

例3:シェルスクリプト #

コマンドを順番に並べたシェルスクリプト17.3. シェルスクリプト 参照)と呼ばれるプログラムがあります。例として、ここでは次の中身を持った test.sh を考えます:

#!/bin/sh
echo 3-8-1 Komaba Meguroku Tokyo
echo Todai Taro

echo コマンドは、それに続く文字列を出力するコマンドです。

しかし、ただ test.sh を作って保存しただけでは、実行できません。前にも書いたように、実行許可がないファイルは実行できないからです。

ls -l test.sh

-rw-r--r-- 1 0000000000 student 60 3 13 21:04 test.sh

./test.sh

bash: ./test.sh: Permission denied

実行許可を与えれば、実行できるようになります。

chmod +x test.sh

ls -l test.sh

-rwxr-xr-x 1 0000000000 student 60 3 13 21:04 test.sh

./test.sh

3-8-1 Komaba Meguroku Tokyo
Todai Taro

実行ファイル #

実行許可があるファイルを実行ファイルといいます。普通は実行ファイルは意味のあるプログラムですが、そうでなければならないという規定はありません。中身が空のファイルだって、実行許可があれば実行ファイルです。

実行ファイルを実行するには、その実行ファイルのパス名を指定すればよいです。例えば /home01/0000000000/bin がカレントディレクトリのとき、その中にある a.out という実行ファイルは

./a.out

/home01/0000000000/bin/a.out

のどちらででも実行できます。

これまで説明してきたいろいろなコマンドも実行ファイルの形になっているものが多いです。例えば、ls, mv コマンドは、実際には /bin/ls, /bin/mv という実行ファイルです。コマンドが実際にはどの実行ファイルであるかは、which コマンドを使って調べることができます。

which ls

/bin/ls

実行ファイルのパス #

ls コマンドが /bin/ls という実行ファイルであるならば、なぜ ls コマンドはパス名の指定をしなくても(コマンド名だけで)実行できるのでしょうか?

これは、実行パスで指定されているディレクトリの中に /bin/ls があるからです。現在の実行パスの値は、環境変数 PATH に格納されています(参考:17.2. 環境変数 )。ECCS iMac 環境では、PATH の標準値は次に似たものになっています。

PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/MacGPG2/bin

コマンドをパス名の指定なしに実行しようとすると、PATH に指定されている順番で、それぞれのディレクトリにコマンドが存在しているかが調べられ、最初に見つかった実行ファイルが実行されます。

なお、上の PATH の値にカレントディレクトリの . が含まれていないことに注意して下さい。このため17.6.1. パスの表記 で触れたように、カレントディレクトリの実行ファイルであってもファイル名だけでは実行できず、./ を前置する必要があります。

拡張ファイル属性 #

-rw-------@ のように最後に @ のついたファイルは拡張ファイル属性という、メタデータを持ちます。たとえば関連付けたアプリケーションやフォルダのアイコンなどを保存します。 これらは今のところ、互換性があまりありません。

ECCS iMac端末では以下のような操作を、コマンドから可能です。

詳細は man xattr などで確認できます。