bind遊び
なかなか先に進まない名前空間のコード読みだが,具体的なイメージをつけるために,実際にコマンドを使って挙動を追ってみる.
例としてディレクトリaとbを作り,それぞれの直下にhello.txtというファイルを用意する.a/hello.txtには"Hello,world!\n"と書き込み,b/hello.txtは空ファイルとする.
term% mkdir a b term% cat > a/hello.txt Hello,world term% touch b/hello.txt term% ls -l a --rw-rw-r-- M 8 oraccha oraccha 13 Apr 6 11:17 a/hello.txt term% ls -l b --rw-rw-r-- M 8 oraccha oraccha 0 Apr 6 11:17 b/hello.txt
ここで,bind(1)コマンドを使ってbをaで置きかえる.
term% bind a b term% ls -l a --rw-rw-r-- M 8 oraccha oraccha 13 Apr 6 11:17 a/hello.txt term% ls -l b --rw-rw-r-- M 8 oraccha oraccha 13 Apr 6 11:17 b/hello.txt term% cat b/hello.txt Hello,world! term% unmount a b
予想通りの結果だ.
続いて,ユニオンディレクトリを試してみる.bよりaのファイルを優先する場合は-bオプションをつける.
term% bind -b a b term% ls -l a --rw-rw-r-- M 8 oraccha oraccha 13 Apr 6 11:17 a/hello.txt term% ls -l b --rw-rw-r-- M 8 oraccha oraccha 0 Apr 6 11:17 b/hello.txt --rw-rw-r-- M 8 oraccha oraccha 13 Apr 6 11:17 b/hello.txt term% cat b/hello.txt Hello,world! term% unmount a b
catの結果は予想通りだけど,b/hello.txtが二つ見える!へぇ.
も一つ,-aオプションの場合も.
term% bind -b a b term% ls -l a --rw-rw-r-- M 8 oraccha oraccha 13 Apr 6 11:17 a/hello.txt term% ls -l b --rw-rw-r-- M 8 oraccha oraccha 13 Apr 6 11:17 b/hello.txt --rw-rw-r-- M 8 oraccha oraccha 0 Apr 6 11:17 b/hello.txt term% cat b/hello.txt term% unmount a b
lsの表示が逆になったな.名前空間の検索順序とlsの表示は対応しているんだろうか?
ちなみにこの状態にディレクトリbにファイルを生成しようとすると,許可できないとエラーになる.もちろんディレクトリaにファイルを生成することはできる.
term% touch b/foo touch: b/foo: cannot create: 'b/foo' mounted directory forbids creation
ユニオンディレクトリにおいてファイル生成を許すためには,-cオプションを指定する必要がある.
term% bind -bc a b
蛇足だが,rmdirというコマンドは存在せず,ディレクトリを消すときもrm(1)だ.