2つの殻が開いています。最初はAディレクトリにあります。 2番目は、ディレクトリAを削除して再作成します。最初のシェルに戻り、と入力すると、ls
出力は次のようになります。
ls: cannot open directory .: Stale file handle
なぜ?私は、最初のシェル(存在しないディレクトリに開いているシェル)が次のコマンドを待っている間に「停止」し、ディレクトリが削除され、再作成されたことを「認識」できないと思います。シェルには、文字列に加えて現在の作業ディレクトリへの「より深い」参照がありますか$PWD
?
ベストアンサー1
他のファイルと同様に、ディレクトリは名前で定義されません。名前をディレクトリ名として扱う住所。ディレクトリを移動しても同じディレクトリです。まるで別の家に移動しても、まだ同じ人のようです。ディレクトリを削除して同じ名前で新しいディレクトリを作成すると、以前に住んでいた家に引っ越してきた人があなたではなかったかのように新しいディレクトリになります。
すべてのプロセスにタスクリスト。cd
シェルのコマンドは、シェルの現在の作業ディレクトリを変更します。このpwd
コマンドは、現在の作業ディレクトリのパスを印刷します。
ディレクトリAを削除すると、親ディレクトリにあるAのエントリのみが削除されます。ディレクトリA自体は、ファイルシステムに残っているが名前のない分離状態です。プロセス(つまり、最初のシェル)で使用されているため、まだ削除されていません。最初のシェルでディレクトリを変更すると、そのディレクトリは最終的に削除されます。プロセスが開いている間にファイルを削除すると、同じことが起こります。ファイルのディレクトリエントリは直ちに削除され、ファイル自体は使用が中断されると削除されます。
同様に、ディレクトリを移動するときに何が起こるかを見てください。
mkdir one two
touch one/1 two/2
cd one
ls
他のシェルから:
mv one tmp
mv two one
mv tmp two
最初のシェルでは:
ls
ファイルは元1
の名前のディレクトリにあり、現在は名前のone
ディレクトリにあります。two
2
two
one
より正確には、ㅏパスは、シンボリックリンクやその他の微妙な部分が含まれている場合は一意でない可能性があります。