pwd:显示挂载点

pwd:显示挂载点

我已将一个目录安装到另一个目录,mount --bind以便我的服务器的 sftp 用户可以访问该目录。

mount --bind /path/share /path/home/user/stuff

我已经把它放进去/etc/fstab并且效果很好。

如果我cd进入已安装的目录并执行操作pwd,则该目录似乎实际上在物理上存在:

/path/home/user/stuff/share

是否有一个命令显示“原始”目录所在的位置(就像符号链接:当您ls -fsl看到原始路径时)?

答案1

我想你正在寻找mount -l

答案2

是的,该目录就在那里,因为您将其安装在那里。mount --bind告诉内核使用现有的安装并将其附加到另一个安装点。就内核而言,

mount /dev/something /path/share
mount --bind /path/share /path/home/user/stuff

mount /dev/something /path/home/user/stuff
mount --bind /path/share /path/home/user/stuff

是同一件事。有两种方法可以区分它们:

  • 如果/path/share不是安装点(即它是安装在/path或 处的较大文件系统的一部分/),您可以告诉绑定安装,因为它不在文件系统的根目录。
  • mount程序将其操作记录在/etc/mtab.

df命令读取/etc/mtab,因此如果目录位于使用该bind选项挂载的文件系统上,您可以看到原始路径是什么

df -P /path/to/file | awk 'NR==2 {print $1}'

(第二行的第一个字段)。请注意,此信息并不总是可靠,例如,原始文件系统可能已被卸载,并且现在在此位置没有安装任何内容或其他内容,如下所示

mount /dev/something /path/share
mount --bind /path/share /path/home/user/stuff
unmount /dev/something
mount /dev/somethingelse /path/share

答案3

在 Linux 上,您现在可以使用findmnt(from util-linux) 来实现:

~$ sudo mount --bind /usr/local mnt
~$ cd mnt/bin
~/mnt/bin$ pwd
/home/stephane/mnt/bin
~/mnt/bin$ findmnt -T .
TARGET             SOURCE                             FSTYPE OPTIONS
/home/stephane/mnt /dev/mapper/VG-LV[/usr/local]      ext4   rw,noatime,discard,errors=remount-ro,data=ordered

答案4

根据黛西的回答,怎么样...

use strict;
use warnings;
use File::Basename;

my $mntpath = $ARGV[0] or die "Missing required parameter <pathname>\n";
$mntpath = dirname ($mntpath) while (! grep / on $mntpath type /, `mount`);

相关内容