ファイルの場合は、ルートディレクトリにマウントされているすべてのファイルを一覧表示します。

ファイルの場合は、ルートディレクトリにマウントされているすべてのファイルを一覧表示します。

コンテナ内にアクセスしたいファイルがあります。フルパスはあるディスクから別のディスクに移動します。これは、試行錯誤を経て正しく機能するまでバインディングポイントを追加し続けたことを意味します。私はより良い方法が欲しい。

このリストを自動的に見つける方法はありますか?視覚的に別のドライブに移動したことがわかりますが、それがわかるプロパティはありますか?ジャンプは少なくともシンボリックリンクでなければならないと思います。

たとえば、マウントポイントがあり、/リストしたいファイルがある場合(どちらにしても構いません)。/var/usr/var/log/thing.log/var/

どんな案内にも感謝します。

答え1

ファイルのパス名に従うと、現在のパスのマウントポイントを報告できます。

item=/var/log/thing.log
while [ -n "$item" ]      # Stop when we reach the top
do
    stat -c %m "$item"    # Report the mountpoint
    item="${item%/*}"     # Strip back one component of the path
done |
    uniq                  # Discard duplicates

必要に応じて、すべての内容を1行に圧縮できます。

while [ -n "$item" ]; do stat -c %m "$item"; item="${item%/*}"; done | uniq

答え2

現在のプロセスのすべてのインストール情報は、次の場所にあります。/proc/self/mountinfo。詳しく見ることをお勧めします。

# show_mounts [file_or_dir] [show_hidden]
show_mounts(){
  tac /proc/self/mountinfo |
  awk -v p=$(realpath "${1:-.}") -v h="$2" '
    mi ? mi==$1 : index(p,$5)==1 {mi=$2; if(h || !a[$5]++) printf "%-20s %s\n", $5, $9 }
  '
}

例:

$ unshare -Urm
# mkdir -p ~/junk/dir{1,2}
# cd ~/junk
# for i in 1 2 3 4; do mount -B dir1 dir2; done
# show_mounts dir2
/home2/ahq/junk/dir2 /dev/sdb9
/home2               /dev/sdb9
/                    /dev/sdb8

# show_mounts dir2 show_hidden
/home2/ahq/junk/dir2 /dev/sdb9
/home2/ahq/junk/dir2 /dev/sdb9
/home2/ahq/junk/dir2 /dev/sdb9
/home2/ahq/junk/dir2 /dev/sdb9
/home2               /dev/sdb9
/                    /dev/sdb8

もちろん、これは/proc/self/mountinfoホームディレクトリの1つがまだインストールされていないと仮定しています;-)

関連情報