我正在寻找一种方法来以编程方式了解路径是指向物理设备还是指向内存。
我注意到 du
命令为 /sys
或 /proc
中的路径打印大小为零,但我是不确定这是否可靠,因为我认为磁盘上的文件大小可以为零。
最佳答案
这并不容易实现,因为 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)
第一列是源设备 - 在第一个条目中没有设备 geiven,只有虚拟文件系统 tmpfs
而在第二个条目中我们看到一个正确的设备 /dev/sda2
。
设备不能保证物理存储,例如/dev/mem
,它可以直接访问计算机的内存。
因此,我的建议是找出适用于路径的挂载点(尝试 lsblk
),在 mount
的输出中找到该挂载点。如果此挂载点与 /dev/WHATEVER
形式的设备 int 不匹配,则假定它在内存中
使用@Chris 的建议,尝试例如这个 findmnt -T/proc/net/stat/arp_cache
:
TARGET SOURCE FSTYPE OPTIONS
/proc proc proc rw,nosuid,nodev,noexec,relatime
相关列是SOURCE
关于linux - 如何确定路径是位于物理设备上还是位于内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56872428/