5

スーパーユーザーとして、Linuxで次のコマンドを実行しました

rm rm

それ自体を削除します。プロセスが実行中の場合、その参照カウントはゼロではないため、削除できません。だから私は困惑しています、どのように、そしてなぜそれが起こるのですか?

私も同じようにしてみchown 0000 chownました。

cp -r Dir1/ Dir2/

上記のコマンドでも、コピーが進行中のときにのみソースディレクトリを削除するとどうなりますか???

4

3 に答える 3

2

一時ファイルと同じです。

一時ファイルを作成する通常の方法は、ファイルをopen(2) (そのファイル記述子を保持) してからunlink(2) (ファイル記述子を開いたままで) であることを思い出してください。その後、プロセスが実行されていて、そのファイル記述子をclose(2) -d していない限り、ファイルのデータはファイル システムに残ります。

これは、ファイルが実際にはinodeであり、ディレクトリ内のファイル名ではないためです。(ディレクトリには、名前を inode に関連付けるエントリが含まれます)。

カーネルは一連の「使用済み」(または「開かれた」) i ノードを管理し、そのセットにはプロセスによって実行される i ノードが含まれます (実際には、 i ノードはmmap(2)execve(2 ) などのアドレス マッピングに関与します) 。

そのため、起動直後に/bin/rm /bin/rm、カーネルはrmプロセスの実行可能ファイルとしてバイナリへの参照を 1 つ持ちます。

syscall を処理するとき、unlink一時的に 2 つの参照 (1 つは実行中のプロセス、もう 1 つはカーネル実装/bin/rmに渡されたパスunlink) を持ち、それを 1 つに減らします。

もちろん、タイピングは避けるべきですが、通常は、システムを修復できる/bin/rm /bin/rmようなスタンドアロン シェルがいくつかあります。sash

于 2013-08-10T19:12:33.567 に答える
1

Windowsでは、あなたが言及した参照カウントのため、「rm rm」はおそらく不可能です。ただし、ほとんどの *nix システムではそうです。「rm」と「chmod」はメモリにロードされ、コマンドラインで指定されたものを実行します。別の例: あるウィンドウでファイルを編集し、そのファイルを編集中に別のウィンドウで削除します。これも、参照カウントに関係なく、ほとんどの *nix システムで可能です。

于 2013-08-11T03:40:18.430 に答える
0

空になるまで rm を使用してディレクトリを削除することはできません..

于 2013-08-14T01:25:02.963 に答える