Развитие идеи файла, как единицы обеспечения доступа к информации, привело к тому, что абстракцию файловой системы перенесли и на другие сущности, доступ к которым стал организовываться в виде иерархии файлов.
Например, информацию о процессах, нитях и прочих сущностях ядра операционной системы и используемых ими ресурсах предоставляет программам в виде файлов псевдофайловая система proc.
Таким же образом, информацию об аппаратных устройствах, обнаруженных ядром операционной системы на шинах PCI, USB, SCSI и пр., предоставляет псевдофайловая система sysfs.
Различные утилиты, пользующиеся ядерной информацией, например показывающие нагрузку на операционную систему uptime или списки процессов и загруженных модулей (драйверов) ядра операционной системы — ps и lsmod, пользуются псевдофайловой системой proc, в чем позволяет убедиться трассировка системных вызовов open.
Псевдофайловая система proc
john@ubuntu:~$ strace -fe open uptime
. . . . . . . . .
open( «/proc/version», O_RDONLY) = 3
. . . . . . . . .
open(«/proc/uptime», 0_RDONLY) = 3
. . . . . . . . .
open( «/proc/loadavg», 0_RDONLY)
. . . . . . . . .
15:42:32 up 12 days, 6:27, 7 users, load average: 0.48, 0.33, 0.32
john@ubuntu:~$ cat /proc/uptime
1056774.23 1667210.55
john@ubuntu:~$ cat /proc/loadavg
0.48 0.33 0.32 1/623 14277
Аналогично, утилиты, показывающие список устройств на шинах PCI, USB и SCSI — lspci, lsusb и lsscsi, пользуются псевдофайловой системой sysfs.
Псевдофайловая система sysfs
john@ubuntu:~$ strace -fe open lspci -nn
. . . . . . . . .
open(«/sys/bus/pci/devices/0000:00:02.0/resource», 0_RDONLY) = 4 open(«/sys/bus/pci/devices/0000:00:02.0/irq, O_RDONLY) = 4 open(«/sys/bus/pcl/devices/0000:00:02.0/vendor», 0_RDONLY) = 4 open(«/sys/bus/pci/devices/0000:00:02.0/device», 0_RDONLY) = 4 open(«/sys/bus/pci/devices/0000:00:02.0/class», O_RDONLY) = 4
. . . . . . . . .
00:02.0 VGA compatible controller [0300 **]: Intel Corporation 2nd Generation Core Processor
Family Integrated Graphics Controller [8086 :0116 ] (rev 09)
john@ubuntu:~$ cat /sys/bus/pci/devices/0000:00:02.0/vendor
0x8086
john@ubuntu:~$ cat /sys/bus/pci/devices/0000:60:02.6/device
0x0116
john@ubuntu:~$ cat /sys/bus/pci/devices/0000:00:02.0/class
0X030000