procfs 和 sysfs 有什么区别?为什么它们被做成文件系统?据我了解, proc 只是存储有关系统中运行的进程的即时信息的东西。
设备表示 in/dev和 one in 有/sys/class什么区别?
一个比另一个更受欢迎吗?是否有一个提供而另一个不提供的东西?
当我运行使用大部分 16GB 物理内存的应用程序时,Linux 内核会从内存中换出大部分页面。应用程序完成后,每个操作(键入命令、切换工作区、打开新网页等)都需要很长时间才能完成,因为首先需要从交换中读回相关页面。
有没有办法告诉 Linux 内核将页面从交换区复制回物理内存,而无需手动接触(和等待)每个应用程序?我运行了很多应用程序,所以等待总是很痛苦。
我经常swapoff -a && swapon -a用来使系统再次响应,但这会从交换中清除页面,因此下次运行脚本时需要再次写入它们。
是否有内核接口(可能使用 sysfs)来指示内核从交换中读取所有页面?
编辑:我确实在寻找一种方法来使所有交换交换缓存。(感谢德罗伯特!)
[PS serverfault.com/questions/153946/...和serverfault.com/questions/100448/...是相关主题,但没有解决如何让Linux内核在不清除swap的情况下将页面从swap复制回内存的问题。]
devfs和sysfs到底有什么区别?两者似乎都维护着一个附加到系统的硬件列表。那么为什么甚至需要 2 个单独的 fs 呢?据我所知,/sys维护了一些“原始”设备列表(如“ser0”)。Udev 作用于这些设备,获取各种信息并应用各种规则将它们呈现为可识别的名称,然后映射到/dev(如“相机”)。这是唯一的原因吗?然后我们将/dev fs 中的相应设备(我们不能从/sys fs 执行此操作)挂载到/media fs 中。
我已经阅读了/dev 和 /sys/class 之间的差异?. 但我无法得到 sys fs 部分,它指出
Sysfs 包含设备的层次结构,因为它们连接到计算机
/sys 中的文件不是设备节点文件吗?那么它们是什么类型的文件呢?
我想知道更多有关的高级应用/proc和/sys虚拟文件系统,但我不知道从哪里开始。任何人都可以建议任何好的学习来源吗?此外,由于我认为 sys 有定期添加,因此在发布新内核时保持我的知识最新的最佳方法是什么。
我试图/sys/bus/usb/devices/4-3/power/wakeup在每次启动时更改 的值(根据我的 4-3 lsusb,这是键盘 ID)。
默认值为:
# cat /sys/bus/usb/devices/4-3/power/wakeup
enabled
Run Code Online (Sandbox Code Playgroud)
经典的“在线”编辑按预期工作:
# echo disabled > /sys/bus/usb/devices/4-3/power/wakeup
# cat /sys/bus/usb/devices/4-3/power/wakeup
disabled
Run Code Online (Sandbox Code Playgroud)
我正在使用 systemd 发行版,所以我想使用systemd 方式来编辑“临时文件”
我创建了以下文件:
# cat /etc/tmpfiles.d/disable-usb-wakeup.conf
w /sys/bus/usb/devices/4-3/power/wakeup - - - - disabled
Run Code Online (Sandbox Code Playgroud)
但每次启动后我仍然在这个文件中使用默认值(即启用)
难道我做错了什么?
编辑:
这是另一个测试:
# cat /etc/tmpfiles.d/scheduler.conf
w /sys/block/sda/queue/scheduler - - - - deadline
Run Code Online (Sandbox Code Playgroud)
这个很好用!启动后我得到:
# cat /sys/block/sda/queue/scheduler
noop [deadline] cfq
Run Code Online (Sandbox Code Playgroud)
(默认的是 cfq 调度程序)
那么,为什么这个有效而另一个无效呢?
/sys/bus/usb/devices/4-3/power/wakeup是一个符号链接/sys/devices/pci0000:00/0000:00:12.1/usb4/4-3/?/sys/bus/usb/devices/4-3/power/wakeup只包含一个词?(即没有空格)我有一个用于rsync在 Archlinux 中备份文件的 bash 脚本。我注意到rsync无法从 复制文件/sys,但cp工作正常:
# rsync /sys/class/net/enp3s1/address /tmp
rsync: read errors mapping "/sys/class/net/enp3s1/address": No data available (61)
rsync: read errors mapping "/sys/class/net/enp3s1/address": No data available (61)
ERROR: address failed verification -- update discarded.
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1052) [sender=3.0.9]
# cp /sys/class/net/enp3s1/address /tmp ## this works
Run Code Online (Sandbox Code Playgroud)
我想知道为什么会rsync失败,是否可以用它复制文件?
我试图阐明哪种是在 Linux 中与设备交互的最有用(就功能而言)方法。据我了解,设备文件只公开了部分功能(块设备中的地址块,字符设备中的流等......)。 ioctl(2)似乎是最常用的,但有人说它不安全,等等。
一些好的文章或其他相关的指针将受到欢迎。
所以我正在寻找的是一个接口索引(或名称),但真正的。
if_nametoindex(3)并且ioctl(2)似乎没有帮助我在这里。现在我发现如何做到这一点的唯一方法是通过/sys. 让我举例说明我需要什么:
# cat /sys/class/net/bond0.1007/ifindex
26
# cat /sys/class/net/bond0.1007/iflink
23 <-- I need either this or a reference to bond0
# cat /sys/class/net/bond0/ifindex
23
Run Code Online (Sandbox Code Playgroud)
有没有办法通过函数调用来做到这一点,或者唯一的方法是sysfs?
我这里有一台几乎通用的 Linux 机器。所以,它有一个 PCI(*-X 等)总线,在一些 USB 控制器上,我在这些 USB 控制器上有 USB 设备。与此类似:
$ lspci|grep USB
00:12.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:12.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:13.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:13.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:14.5 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
00:16.0 USB controller: Advanced Micro Devices, …Run Code Online (Sandbox Code Playgroud)