假设/var/log
是/dev/sda2
,并且/var/spool
是 的一部分是的/var
一部分。/
/dev/sda1
现在我想发出这样的命令
$ sudo get_mountpoint_of /var/spool
并得到正确答案:
/var/spool is part of / and is mounted on /dev/sda1
答案1
在linux系统上你可以这样做:
findmnt -nvoSOURCE -T /*some/path
...仅打印 引用的任何文件的源设备/*some/path
。
选项细目:
-n
- 省略列标题
-oSOURCE
仅选择
SOURCE
设备输出列,尽管还有许多其他列。附加
,TARGET
以列出挂载点列。
-v
- 省略了
[...]
任何可能的部分/dev/device[/bindmnt]
结果
- 省略了
-T
- 指示
findmnt
向后处理其--target
参数,直到在报告之前找到有效的安装点。
- 指示
了解更多信息:
man findmnt
答案2
您不需要这样做sudo
。您可以编写一个脚本,该脚本对起点执行“df”,然后从输出中读取安装点。如果安装点不是“/”,那么您的脚本将重复出现,询问在哪里那已安装。
例如,在手头的机器上,我有
$ df /var/log
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/disk/by-uuid/8a1efcd1-0d32-4674-aa7a-c24c2cd924fd 19751804 12437492 6310948 67% /
出于一般性,您的脚本必须认识到(对于本例),磁盘信息可能由 LVM 或 udev 管理,并获取详细信息那可能需要sudo
)。
OP提出的案例当然更简单。对于同一台机器,我在磁盘设备上有一个文件系统:
$ df /users
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sdb1 8255928 5548304 2288248 71% /users
同样,脚本只需查看“df”的输出即可确定是否完成或重复,询问在哪里那已安装。
答案3
有关挂载点信息
df -P file/goes/here | tail -1 | cut -d' ' -f 1
对于“部分”信息
df /mountpointFromTheLastCommand | tail -1 | awk '{print $6}'
例子 :
[root@xxx ~]# df -P /root/download/ | tail -1 | cut -d' ' -f 1
/dev/sda2
[root@xxx ~]# df /dev/sda2 | tail -1 | awk '{print $6}'
/
有了这些信息,您可以说 /root/download 是 / 的一部分,并且安装在 /dev/sda2 =]
这就是想法,你可以优化它,使其与你想要的输出一致。