我从 1996 年左右就开始在服务器上使用 Linux,并且习惯了看到这样的情况:
$ mount
proc on /proc type proc
/dev/sda1 on / type ext3
/dev/sda2 on /usr type ext3
/dev/sdb1 on /home type ext3
(我已经删除了“选项”,因为它们在这里不相关。)
最近,我开始看到:
$ mount
proc on /proc type proc
/dev/sda1 on / type ext3
/dev/sda2 on /usr type ext3
/dev/sdb1 on /home type ext3
devtmpfs on /dev type devtmpfs
tmpfs on /run type tmpfs
tmpfs on /run/lock type tmpfs
sysfs on /sys type sysfs
tmpfs on /run/shm type tmpfs
devpts on /dev/pts type devpts
我想我可以理解其中一些附加项目,尽管它们可能都有proc
一些重叠......
我最近获取了一个桌面发行版的实时 ISO 映像(在本例中为 Linux Mint,但我在 Debian、Kali 和其他发行版上看到过它),并且有这疯狂:
$ mount
sysfs on /sys type sysfs
proc on /proc type proc
udev on /dev type devtmpfs
devpts on /dev/pts type devpts
tmpfs on /run type tmpfs
/dev/sda1 on / type ext4
securityfs on /sys/kernel/security type securityfs
tmpfs on /dev/shm type tmpfs
tmpfs on /run/lock type tmpfs
tmpfs on /sys/fs/cgroup type tmpfs
cgroup on /sys/fs/cgroup/systemd type cgroup
pstore on /sys/fs/pstore type pstore
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup
cgroup on /sys/fs/cgroup/pids type cgroup
cgroup on /sys/fs/cgroup/hugetlb type cgroup
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup
cgroup on /sys/fs/cgroup/blkio type cgroup
cgroup on /sys/fs/cgroup/freezer type cgroup
cgroup on /sys/fs/cgroup/perf_event type cgroup
cgroup on /sys/fs/cgroup/cpuset type cgroup
cgroup on /sys/fs/cgroup/memory type cgroup
cgroup on /sys/fs/cgroup/devices type cgroup
systemd-1 on /proc/sys/fs/binfmt_misc type autofs
mqueue on /dev/mqueue type mqueue
debugfs on /sys/kernel/debug type debugfs
hugetlbfs on /dev/hugepages type hugetlbfs
fusectl on /sys/fs/fuse/connections type fusectl
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc
cgmfs on /run/cgmanager/fs type tmpfs
tmpfs on /run/user/1000 type tmpfs
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse
“坐骑”泛滥的原因是什么?诸如此类的东西是否cgroups
特别方便地视为“已安装”的文件系统,而不是通过例如编程 API 来访问它们?
答案1
这是API种类的选择。
在旧系统上,通常使用设备和此类设备上的 IOCTL(例如创建虚拟终端)。问题是它依赖于使用数字来访问特定服务,因此不容易改进/升级。此外,相同的请求编号在其他设备上可能具有完全不同的含义,因此在重命名设备(更具描述性、虚拟系统等)时,可能会发出错误的命令(例如混淆应该给程序哪种设备)。
所以还有其他选择。有时,会创建新的系统调用,但这主要是针对一般情况,并且创建许多新的系统调用也并不理想。/proc
也成为一个通用接口,但存在一些问题,因为这种文件系统(内核侧)的接口对于所有服务都是相同的。 APCI和网络广泛使用了这样的接口。当其他程序可以访问 proc 中的文件时,删除模块会出现一些问题。现在模块(从而删除它们以释放内存)不再是一个问题
很少尝试使用网络套接字,但对于单次使用来说不太方便。
因此,现在创建新的文件系统变得更容易,并为驱动程序/服务提供了更多的自由来实现它。还有一个优点,就是cat
可以echo
用来获取和提取数据。更容易测试和使用新功能。