この章は少し手ごわい内容にふれます。ここで述べる特徴を学べば、 「 Linux について何かを知り得た」と言えると思いますよ。
ファイルとディレクトリには、VMS と同じようにパーミッション(保護)と所有権が 存在します。許可されていなければ、プログラムを走らせたり、ファイルを 修正したり、あるいはディレクトリにアクセスすることもできません。ファイル があなたの権限下にないからです。つぎの例を見てみましょう。
$ ls -l /bin/ls
-rwxr-xr-x 1 root bin 27281 Aug 15 1995 /bin/ls*
最初のフィールドは、ファイル ls
のパーミッションを表示しています(オーナは root でグループは bin)。所有権には オーナ (owner) 、グループ (group) 、その他 (other) の3種類があります
(VMS の owner,group,world に似てますね)。
パーミッションには 読み取り許可 (read) 、書き込み許可 (write 、削除許可も含む)、
実行許可 (execute) の3種類があります。
左から右に見ていきましょう。-
はファイルの種類です( -
は一般ファ
イル、d
はディレクトリ、l
はリンク等を示します)。
rwx
はファイルの所有者に対するパーミッション( read, write, execute )で
す。次の r-x
はファイル所有者の属するグループに対するパーミッション(read, execute) で、最後の r-x
はそれ以外のユーザに対するパーミッションを(read, execute)を表しています。
ファイルのパーミッションを変更するには、
$ chmod <whoXperm> <file>
とし、who には u
(user、オーナのこと)、g
(group) あるいは o
(other) を指定し、X には +
か -
のどちらかを指定します。また、
perm には r
(read), w
(write), あるいは x
(execute) を指
定します。例えば、
$ chmod u+x file
は、ファイルの所有者に実行許可を与えるもので 、chmod +x file
と短縮できます。
$ chmod go-wx file
これは、ファイルの所有者以外から書き込み許可と実行許可を取り消します。
$ chmod ugo+rwx file
これは全てのユーザに読み込み許可、書き込み許可、実行許可を与えています。
パーミッションは、短縮して数字で示すことがあります。rwxr-xr-x
は手っ取り早く、755 と指定できます(各文字はビットに対応します。---
は0、--x
は 1、-w-
は 2 などのように)。
ディレクトリに対する rx
は、 cd
を使ってそのディレクトリに移
動できることを意味し、w
はディレクトリ内のファイルの削除(もちろん、
ファイルのパーミッションに従いますが)や、そのディレクトリ自体を削除できることを意味します。これらのことは、ほんの一部です - RMP。
ファイルの所有者を変更するには:
$ chown username file
要約すれば、次の表になります。
VMS Linux Notes
------------------------------------------------------------------------------
SET PROT=(O:RW) file.txt $ chmod u+rw file.txt
$ chmod 600 file.txt
SET PROT=(O:RWED,W) file $ chmod u+rwx file
$ chmod 700 file
SET PROT=(O:RWED,W:RE) file $ chmod 755 file
SET PROT=(O:RW,G:RW,W) file $ chmod 660 file
SET FILE/OWNER_UIC=JOE file $ chown joe file
SET DIR/OWNER_UIC=JOE [.dir] $ chown joe dir/
プログラムの実行についてさらに説明しましょう。これまで使ってきた「バッチキュー」は Linux には存在せず、違った方法で扱われます。再び、典型的なコマンドラインを示します。
$ command -s1 -s2 ... -sn par1 par2 ... parn < input > output &
-s1
, ..., -sn
はプログラムスイッチで、par1
, ...,
parn
はプログラムに渡される引数です。
マルチタスク処理がどのように働くか見ていきましょう。フォアグランドやバッ クグランドで動くプログラムを「プロセス」と呼びます。
$ progname [-switches] [parameters] [< input] [> output] &
[1] 234
シェルはプロセスの「ジョブNo」(最初の数字です:以下を参照)とプロセスの
PID (プロセスID) を通知します。各プロセスは PID で一意に識別できます。
$ ps -ax
今現在実行中プロセスの一覧を出力します。
$ kill <PID>
プロセスを正規の手段で終了させる方法が判らなくても、あなたはプロセスを終
了させる必要があると思います ... ;-)
時々、以下のどちらかでのみ終了させる場合があるでしょう(訳注:数字はシグナル番号で、9 は kill シグナル、15 は終了シグナルとして定義されています。 killall なら
プロセス名を指定して終了させることができます)。
$ kill -15 <PID>
$ kill -9 <PID>
付け加えると、シェルはプロセスの終了や一時停止、また、プロセスをバックグ ランドへ移したり、フォアグランドへ戻したりすることができます。このような 環境下で、プロセスを「ジョブ」と呼びます。
$ jobs
ジョブはシェルによって採番された番号で識別され、PID では識別されません。
$ CTRL-C
(いつも効果があるとは限りません)
$ CTRL-Z
(同上)
$ bg <job>
$ fg <job>
$ kill <%job>
ファイルについてのさらに詳しい情報です。
stdin
(標準入力 - 通常はキーボード)と呼ぶ「ファイル」から入力を得
て、stdout
(標準出力 - 通常は画面)と呼ぶ「ファイル」へ出力し、エラー
メッセージは stderr
(通常は画面)と呼ぶ「ファイル」へ出力します。
<
と >
を使えば、入出力を別なファイルにリダイレクトできま
す。さらに、>>
は上書きする代りにファイルを追記します。
2>
はエラーメッセージ( stderr )をリダイレクトします。2>&1
は stderr を stdout にリダイレクトし、1>&2 は stdout を stderr に
リダイレクトします。/dev/null
はブラックホールと呼ばれ、ここに
リダイレクトすると、どんなものも消えてしまいます。
*
' はほぼ同じ働きです。用法: * は、隠しファ
イルを除く全てのファイルにマッチします。.* は全ての隠しファイルにマッチ
します。*.* は文字列中に . を含む文字にマッチします。p*r は「peter」や
「piper」にマッチします。*c* は「picked」と「peck」にマッチします。
「%
」は「?
」になります(訳注:一文字のみにマッチ)。ワイ
ルドカードとして他に、[]
があります。用法:[abc]*
は a か b か
c で始まる文字列にマッチします。*[I-N,1,2,3]
は最後が I,
J, K, L, M, N, 1, 2, 3 で終るファイルにマッチします。
mv
( RENAME
) は複数のファイルに対して使えません。
mv *.xxx *.yyy
は思った通りに動かないでしょう。
cp -i
と mv -i
はファイルが上書きされることを警告してく
れます。
VMS でもそうだったように、印刷要求はキューイングされます。プリントコマン ドを発行する場合、プリンタ名を指定しても構いません。例:
$ lpr file.txt # this goes to the standard printer
$ lpr -Plaser file.ps # this goes to the printer named 'laser'
プリンタキューを扱うために、次のようなコマンドがあります。
VMS Linux
------------------------------------------------------------------------------
$ PRINT file.ps $ lpr file.ps
$ PRINT/QUEUE=laser file.ps $ lpr -Plaser file.ps
$ SHOW QUEUE $ lpq
$ SHOW QUEUE/QUEUE=laser $ lpq -Plaser
$ STOP/QUEUE $ lprm <item>