|
HOME > Linux Tips ( 目次 ) > Linux コマンド 一覧表 > p > path_resolution - システムコールの説明 path_resolution - システムコールの説明 - Linux コマンド集 一覧表名前Unix/Linux path resolution - ファイル名で参照されるファイルを見つける 説明
いくつかの Unix/Linux システムコールは、
1 つ以上のファイル名を引き数として持つ。
ファイル名 (またはパス名) は以下のようにして解決される。
ステップ 1: 解決過程を開始する
パス名が '/' 文字で始まっている場合、
ディレクトリ検索の開始点は現在のプロセスのルートディレクトリになる。
(プロセスはルートディレクトリを親プロセスから継承する。
通常は、これがファイル階層のルートディレクトリになる。
プロセスは
chroot
(2) システムコールを使って別のルートディレクトリを取得することもできる。
この場合、そのプロセスと
CLONE_NEWNS フラグを設定して
clone
(2) を呼び出すことによって開始されたそのプロセスの子孫は、
完全にプライベートな名前空間を取得できる。)
パス名の '/' の部分は、このようにして扱われる。
ステップ 2: パスを辿る
現在の検索ディレクトリをディレクトリ検索の開始点とする。
そして、パス名の最後の構成要素 (component) でない各構成要素について、
現在の検索ディレクトリで検索を行う。
ここで構成要素は '/' で区切られた部分文字列である。
ステップ 3: 最後のエントリを見つける
パス名の最後の構成要素の検索は、前のステップで説明した
他の全ての構成要素と同じように実行されるが、2 つの違いがある。
(i) 最後の構成要素はディレクトリである必要がない
(パス解決過程に関する限りはどちらでも構わない \(em
特定のシステムコールが要求するものによって、
ディレクトリでなければならない場合もあるし、
ディレクトリ以外でなければならない場合もある)。
(ii) 構成要素が見つからない場合にエラーにする必要はない \(em
その構成要素を作成するだけでよい場合もある。
最後のエントリの詳細な扱いは、
特定のシステムコールの man ページで説明されている。
. と ..
慣習として、全てのディレクトリはエントリ "." と ".." を持つ。
これらはそれぞれ、そのディレクトリ自身とその親ディレクトリを参照する。
マウント位置
"mount dev path" コマンドを実行した後、
パス名 "path" はデバイス "dev" 上のファイルシステム階層の
ルートディレクトリを参照するようになり、以前の位置を参照しない。
末尾のスラッシュ
パス名が '/' で終わっている場合、
ステップ 2 において、その前にある構成要素の解決法を次のように強制する:
その構成要素が存在しなければならず、ディレクトリとして解決される。
存在しない場合は、末尾の '/' が無視される。
(また同様に、末尾に '/' があるパス名は、
'.' を末尾に加えて得られるパス名と等しい。)
最後がシンボリックリンクのとき
パス名の最後の構成要素がシンボリックリンクである場合、
参照されるファイルをシンボリックリンクとするか、
その内容についてパスを解決した結果とするかは、
システムコールに依存する。
たとえば、システムコール
lstat
(2)はシンボリックリンクに作用する。
一方、
stat
(2) はシンボリックリンクで指されたファイルに作用する。
長さの制限
パス名には最大長がある。
パス名 (またはシンボリックリンクを解決するときに得られる中間パス名) が
長すぎる場合、ENAMETOOLONG エラーが返される ("File name too long")。
空のパス名
元々の Unix では、空のパス名は現在のディレクトリを参照していた。
最近、POSIX では空のパス名を解決するべきではないという決定がなされた。
この場合、Linux は ENOENT を返す。
許可
ファイルの許可ビットは、3 組の 3 ビットから構成される。
chmod
(1) と
stat
(2) を参照すること。
現在のプロセスの実効ユーザ ID がファイルの所有者 ID と等しい場合、
3 つのうち最初のグループが使われる。
ファイルのグループ ID が現在のプロセスの実効グループ ID または
(
setgroups
(2)で設定される) 現在のプロセスの補助 (supplementary) グループ ID と等しい場合、
3 つのうち 2 番目のグループが使われる。
どちらにも当てはまらない場合、3 番目のグループが使われる。
許可の確認をスキップする: スーパーユーザとケーパビリティ
伝統的な Unix システムでは、スーパーユーザ
(
root
,ユーザ ID 0) は非常に強力であり、ファイルアクセス時の
許可による制限を全てスキップする。
関連項目
|
|