ファイルシステムのセキュリティ(アクセス権限)

unixstuff ディレクトリで次のコマンドを入力してください。

% ls -l

ディレクトリにあるファイルの詳細な情報が表示されるでしょう。

ls コマンド に -l オプションをつけるとファイルの詳細情報が表示される。

ファイルやディレクトリに関連付けられたアクセス権限を見るには ls -l と入力します。 ls -lg はファイルのグループについて追加情報を表示します。

-rwxrw-r-- 1 ee51ab beng95 2450 Sept29 11:52 file1

始めの10文字は d, r, w, x, -, そして時々 s または S で構成されます。1文字目が d なら、それはディレクトリを意味します。ディレクトリでなければ - 記号になります。

残りの9つの記号は許可(すなわちアクセス権限)を示します。1グループが3つの記号で構成されており、全部で3つのグループの情報を表します。

  • 始めのグループはファイルあるいはディレクトリの所有者についての権限を示します
  • 次のグループはファイルあるいはディレクトリを所有しているユーザーグループについての権限を示します
  • 最後のグループはその他のユーザーについての権限を示します

r, w といった記号はファイルとディレクトリでは異なる意味をもっています。

ファイルのアクセス権限

  • r (あるいは-)は、ファイルを読み取り、コピーする許可(あるいは欠如)を示します
  • w (あるいは-)は、ファイルを変更する許可(あるいは欠如)を示します
  • x (あるいは-)は、ファイルを実行する許可(あるいは欠如)を示します

ディレクトリのアクセス権限

  • r はディレクトリ中のファイルをリストアップする許可を示します
  • w はディレクトリ中のファイルを削除あるいは移動する許可を示します
  • x はディレクトリ中のファイルへアクセスできる許可を示します

ファイルを読み取るにはディレクトリに実行を許可する権限(x)が必要です。したがってサブディレクトリへのアクセスはそのディレクトリを含む上位のディレクトリ(親ディレクトリ)に権限が必要になります。

-rwxrwxrwx ファイルに対して誰もが読み取り書き込みそして実行できる
-rw------- ファイルに対して、その所有者だけが読み取りと書き込みができる。その他のユーザーは読むことも書くことも実行することもできない(メールボックスのファイルがこのような権限に設定される)。

アクセス権限の変更

chmod (changing a file mode)

ファイルの所有者だけが chmod コマンドを使ってファイルのアクセス権限を変更できます。 chmod には以下のオプションがあります。

記号 意味
u ユーザー (user)
g グループ (group)
o その他 (other)
a すべて (all)
r 読み取り (read)
w 書き込みと削除 (write)
x 実行。ディレクトリへのアクセス (execute)
+ 許可を与える
- 許可を取り去る

例を示します。次のコマンドは biglist ファイルからグループとその他のユーザーに対する読み取り、書き込み、実行許可を取り除きます。

% chmod go-rwx biglist

他のアクセス許可には影響しません。

次は、すべてのユーザーに対して biglist ファイルの読み取りと書き込み権限を付与します。

% chmod a+rw biglist

練習 5a

backups ディレクトリにある science.txt のアクセス権限を変更してみましょう。 ls -l を使って変更された権限を確認してみましょう。

プロセスとジョブ

プロセスとはユニークな PID によって識別された実行中のプログラムです。あなたのプロセスについて情報を得るには次のように入力してください。

% ps

プロセスはフォアグラウンド、バックグラウンド、あるいはサスペンドの状態を取ります。一般的にシェルは現在のプロセスの実行が完了するまで UNIX プロンプトを返しません。

いくつかのプロセスは、実行に長い時間がかかり、ターミナルを占拠することがあります。プロセスをバックグラウンドで実行するようにすると UNIX プロンプトがすぐに返されるので他のタスクを実行できるようになり効果的です。その間もプロセスは実行され続けます。

プロセスをバックグラウンドで実行する

プロセスをバックグラウンドで実行するにはコマンドの最後に & を付けます。 sleep コマンドは、指定の秒数だけ次の動作を待たせることができます。

% sleep 10

これはコマンドプロンプトが返るまで10秒待つことになります。コマンドプロンプトが返ってくるまで、あなたは待つことになります。

sleep をバックグラウンドで実行してみます。

% sleep 10 &
[1] 6259

& を付けて実行すると、すぐにプロンプトが返ってきますので、 sleep の終了を待つことなく、あなたは他のプログラムを実行することができます。

上記の2行目にはジョブ番号と PID が返されています。 & を付けて実行するとユーザーには角括弧で囲まれたジョブ番号と PID が通知されるようになっています。完了に時間のかかるジョブをバックグラウンドで実行するのが賢いやり方です。

フォアグラウンド プロセスをバックグラウンドで実行する

次のコマンドを入力してください。

% sleep 1000

フォアグラウンドのプロセスを一時停止するには ^Z (コントロールキーを押しながら[z])を押します。一時停止した状態で次のコマンドを入力するとバックグラウンドに移行します。

% bg

Note

vi のようにユーザーと対話を要するプログラムをバックグラウンドで実行してはいけません。

一時停止、バックグラウンドプロセスの一覧表示

一時停止している、あるいはバックグラウンドで実行中のプロセスを見るには次のコマンドを入力してください。

% jobs

ジョブの一覧は次のようなものです。

[1] Suspended sleep 1000
[2] Running netscape
[3] Running matlab

一時停止しているプロセスを再開する(フォアグラウンドで実行する)には次のように入力します。

% fg %ジョブ番号

sleep 1000 を再開するには次のように入力します。

% fg %1

fg でジョブ番号を指定しなければ最後に停止されてジョブがフォアグラウンドで実行されます。

プロセスの中止

kill (terminate or signal a process)

無限ループするプログラムを実行してしまった時など、時々プロセスを中止したいことがあります。

フォアグラウンドで実行しているジョブは ^C (コントロールキー + [c]) を押すとジョブを中断できます。

% sleep 1000
^C

一時停止している、あるいはバックグラウンドで動いているプロセスは次のコマンドで中止できます。

% kill %ジョブ番号

例として次のコマンドを入力してください。

% sleep 100 &
% jobs

仮にジョブ番号が4だとしたら、次のように入力してプロセスを中断します。

% kill %4

プロセスが中断されたかを jobs コマンドで確かめましょう。

ps (process status)

もうひとつの方法としてプロセス番号(PID)を用いて、プロセスを中断することができます。

% sleep 1000 &
% ps

  PID TT S TIME COMMAND
  20077 pts/5 S 0:05 sleep 1000
  21563 pts/5 T 0:00 netscape
  21873 pts/5 S 0:25 nedit

sleep 1000 のプロセスを中断するには次のように入力します。

% kill 20077

もう一度 ps コマンドを実行してプロセスが削除されていることを確認してみましょう。

もしもプロセスが kill で終了しないなら -9 オプションを使います。

% kill -9 20077

Note

他のユーザーのプロセスを中断することはできません。

まとめ

コマンド 解説
ls -lag 全てのファイルのアクセス権限を表示する
chmod [ options ] file file のアクセス権限を変更する
command & command をバックグラウンドで実行する
^C フォアグラウンドで実行中のジョブを中止する
^Z フォアグラウンドで実行中のジョブを一時停止する
bg 一時停止されたジョブをバックグラウンドで実行する
jobs ジョブの一覧を表示する
fg %1 1番目のジョブをフォアグラウンドで実行する
kill %1 1番目のジョブを中止する
ps 実行中プロセスの一覧を表示する
kill 26152 プロセス番号 26152 を中止する


この文書は UNIX Tutorial for Beginners から派生した文書です。 Creative Commons License の下で利用できます。

Creative Commons License


最終更新日: 2011年02月24日(木)


Back to top