ls "dir" が合計 0 を提供する場合、[ -d "dir/proc" ] が true であるのはなぜですか。

ls "dir" が合計 0 を提供する場合、[ -d "dir/proc" ] が true であるのはなぜですか。

私はliveUSB isoファイルを作成し、多くのインストールとchroot scriptスクリプトを実行していますmount -t proc proc /procchroot私は最初に「クリーンアップ」を実行したときにこの問題を発見し、chrootで実行したスクリプトはもう実行されませんでした)。今私の状況は非常に奇妙です。システムはどのようにこのように動作できますか?

$ if [ -d "newdir/proc" ]; then echo 1;fi
1
$ if [ -d "newdir/pro" ]; then echo 1;fi
$ sudo ls -al "newdir"
total 0

umount newdir問題は、「ターゲットが使用中です」という出力にも表示されます。findmnt | grep proc「newdir/proc」行は表示されなくなります。

1を追加:

$ sudo ls -al "newdir/media/root/usb" # another mount
total 0
$ sudo ls -al "newdir/media/root"
total 0
$ sudo ls -al "newdir/media"
total 0

違いがある場合はシステムnewdirにあります。tmpfs

追加2:
@Bartの答えで提案されているように実行して、IIRCスクリプトの結果を見ることができるlsof他の端末があることに気づきました。chroot newdirこれでchrootが終了したので、lsof | grep nwdirbashコマンドのリストは出力されなくなり、警告のみが出力されfuse.gvfsd-fuseますfuse /run/user/1000/doc。次の場合はまだ同じです。

$ sudo ls -al "newdir/media/root"
total 0

しかし、その後、出力でエラーなしで操作を実行できumount newdirましたsudo ls -al "newdir/media/root"no such file

ポリスチレン予期しない動作の原因は、こちらのヘルプで確認されています。 chrootを使用して端末を閉じないでください。しかし、開いているプロセスのハンドルを使ってファイルにアクセスする方法を読みましたが、ここでは「ゴースト」が一般的な実行方法であることを証明します。ls私はこれがなぜ/どのように動作するのかについての説明を見ることができたらと思います。

答え1

実際にはprocfsファイルシステムではなく、メモリ内容と現在実行中のプロセスを表現したものです。あなたが見ているのは、一部のプロセスがchroot Mountedにファイルを生成しましたがproc終了しておらず、まだそのディレクトリでファイル参照を使用していることを示しています。

lsof | grep /newdir/proc存在しない場所をまだ使用しているプロセスを表示する必要があります。

あなたが望むのは、おそらくchrootの内側のどこかにバインドマウントすることです。

mkdir -m 0555 newdir/proc
mount --bind /proc newdir/proc

まさかmount -t

関連情報