如何确定路径是位于物理设备上还是内存中?

问题描述 投票:0回答:2

我正在寻找一种方法来以编程方式了解路径是否指向物理设备或内存中。

我注意到

du
命令打印
/sys
/proc
中路径的大小为零,但我不确定这是否可靠,因为我认为磁盘上的文件可以有一个大小为零。

linux
2个回答
1
投票

由于 Linux 中使用的理念(具有挂载点的一个文件系统、网络透明性、一切都是文件(或文件夹)),这并不容易实现。想象一下:一个网络文件系统安装到您的系统中。它不在您计算机的任何物理设备中 - 这是物理的还是非物理的?

唯一想到的启发式是将文件系统与预定义列表进行比较:检查

mount
的输出,例如:

tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=204096k,mode=755)
/dev/sda2 on / type ext4 (rw,relatime,errors=remount-ro)

第一列是源设备 - 在第一个条目上没有设备,只有虚拟文件系统

tmpfs
,而在第二个条目中我们看到一个正确的设备
/dev/sda2

设备不能保证物理存储,例如,

/dev/mem
可以直接访问计算机的内存。

所以,我的建议是找出哪个挂载点适用于路径(尝试

lsblk
),在
mount
的输出中找到该挂载点。如果此挂载点与
/dev/WHATEVER
形式的设备不匹配,则假定它位于内存中

使用@Chris 的建议,尝试例如这个

findmnt -T /proc/net/stat/arp_cache

TARGET SOURCE FSTYPE OPTIONS
/proc  proc   proc   rw,nosuid,nodev,noexec,relatime

相关栏目是

SOURCE


0
投票

实际上https://stackoverflow.com/a/29320163/8046487提示使用

df .

/tmp$ df --output=fstype . | tail -n 1
ext4
/dev/shm$ df --output=fstype . | tail -n 1
tmpfs
/sys$ df --output=fstype . | tail -n 1
sysfs
/proc$ df --output=fstype . | tail -n 1
proc

您仍然需要建立“物理”文件系统类型的列表

© www.soinside.com 2019 - 2024. All rights reserved.