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

标签 linux

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

我注意到 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/

相关文章:

linux - 使用 sed 提取索引

linux - 我如何从 linux shell 脚本解析 yaml 文件

linux - 禁用 GCC 优化后不会发生 __kernel_vsyscall() 崩溃

windows - 使用 ietd 从 iSCSI 目标启动的 Windows 的故障转移

linux - 由于 cgroups 配置错误导致 docker 启动失败

linux - 在字符串上使用 awk

linux - "search"命令是什么/如何工作?

Python 不识别软链接(soft link)变化

linux - 编辑多个 RHEL fstab 文件

php - 将 PHP 与 Linux 服务器上的 Paradox .db 文件连接