コマンドラインインターフェイスを使用して内部からディレクトリを削除する

コマンドラインインターフェイスを使用して内部からディレクトリを削除する

/home/user/ ディレクトリの次の簡単なファイル構造を想像してみてください。

/home/user 
       |--dir0 
           |--dir1
               |--file1

私の現在のディレクトリは "dir1"であり、以下を使用して内部的に削除します。

rm -r ../dir1

その後も(端末でエラーが発生しません)、作業ディレクトリはまだ同じであり、コマンドを使用するときパスワード出力は次のとおりです

user@ubuntu:~/dir0/dir1$ pwd
/home/user/dir0/dir1
user@ubuntu:~/dir0/dir1$

ジョブディレクトリがファイルシステムから削除された場合、オペレーティングシステムがジョブディレクトリを "dir1"として返すのはなぜですか?

答え1

pwd組み込みbashシェルを実行していると思います。ファイルシステムを検索せずにメモリ内のパスのみを印刷します。

$ type pwd
pwd is a shell builtin
$ /bin/pwd
/bin/pwd: couldn't find directory entry in '..' with matching i-node

答え2

映画が削除された後でも映画を見続けることができるのはなぜですか?

ファイル記述子は消えるかもしれませんが、inodeはまだ存在するためです! inodeが削除されると、ファイルは永遠に消えます!

したがって、あなたの場合、そのツリー内のすべてのファイルをcd閉じると/inodeがリサイクルされ、ディレクトリは永久に消えます。

覚えておいてください:これはWindowsではありません。プロのオペレーティングシステム!

;-)

リサイクル前に削除をキャンセルしない限り。

答え3

オペレーティングシステムは作業ディレクトリを"dir1"として返しませんが、シェルは返します。シェルは現在作業ディレクトリを追跡し、実行中の「pwd」コマンドはシェルに組み込まれているコマンドです。シェルは、「rm」コマンドがディレクトリを削除したことを知りません。

$ type pwd
pwd is a shell builtin

代わりに /bin/pwd を実行してみてください。

$ /bin/pwd
/bin/pwd: couldn't find directory in .. with matching i-node

答え4

ファイル(ディレクトリ)が開いています。これにより、rmオペレーティングシステムは実際に削除せずに削除済みとしてマークされます。別のシェルインスタンスでこのディレクトリに入ろうとすると、権限cdが拒否されます。cdディレクトリを終了すると、ディレクトリは実際に削除されます。

関連情報