我正在寻找一种方法来以编程方式了解路径是否指向物理设备或内存中。
我注意到
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)
第一列是源设备 - 在第一个条目上没有设备,只有虚拟文件系统
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
实际上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
您仍然需要建立“物理”文件系统类型的列表