在一部纪录片中,Linus Torvalds说,即使在未来,如果有人想从头开始制作一个新的操作系统,他们可以使用他编写的内核。这是非常鼓舞人心的。
Linux 内核是否足够高效以至于将来不需要编写全新的内核?
我真的对内核概念感到困惑。
我开始知道内核介于应用程序和硬件之间,内核从应用程序获取输入并将指令发送到硬件进行处理。
据我所知,在 Windows 中,我听不到内核这个词。
我的疑问就在这里,内核实际上是什么?
这个问题是我上一个问题的后续。
我的逻辑是说内核防火墙位于网络访问层和 Internet 层之间,因为它需要访问 IP 数据包标头以读取源和目标 IP 地址,以便在确定之前进行过滤数据包的目的地是主机,或者如果数据包的目的地是别处,则应将其转发到下一跳。
不知何故,说防火墙是互联网层的一部分似乎也合乎逻辑,因为这是路由表所在的地方,防火墙在某些方面类似于路由表规则。
我正在使用 Fedora 并想知道是否有某种方法可以在运行时排除内核更新yum update,直到我特别想更新内核。
我之所以担心这一点,是因为有时需要进行大量额外的研究,为某些程序寻找补丁,并花费额外的时间重新编译它们以在新内核上工作。我特别将 VMWare 作为一个例子。
我想知道是否有某种方法yum update可以不更新内核,并且只在它执行其例程时通知我有一个可用的新内核,以便我可以决定将其推迟到更方便的时间。还是这种想法可能会导致其他问题?
我认为用户程序可以通过多种方式有意影响 Linux 内核的状态。
我想不出任何其他方式。不考虑硬件中断,因为它们不是由用户程序启动的。我认为mmap()和insmod都在使用系统调用,所以用户程序可能不得不依赖系统调用来影响内核的状态。我对么?
如果我是对的,假设内核中存在一些漏洞,恶意用户程序想要利用它们来攻击内核。考虑到我们的验证总能说出真相,是否有可能验证每个系统调用来防御此类攻击?
我安装并设置了 ccache 并用它构建了内核。以下是统计数据:
cache directory /home/marcin/.ccache
cache hit (direct) 1
cache hit (preprocessed) 0
cache miss 15878
called for link 31
called for preprocessing 2655
unsupported source language 102
no input file 4733
files in cache 35882
cache size 2.7 Gbytes
max cache size 3.0 Gbytes
Run Code Online (Sandbox Code Playgroud)
为什么 ccache 对我来说如此低效?为什么我错过了这么多?
我在我的系统日志中kernel.perf_event_max_sample_rate看到发生了变化。
我想知道我是否可以编写一个快速脚本来每隔几分钟记录一次这个变量。目前是:
sysctl -a | grep kernel.perf_event_max_sample_rate
Run Code Online (Sandbox Code Playgroud)
在手册页 sysctl 中说
sysctl- 在运行时配置内核参数
这是否意味着我的脚本将获得内核启动时设置的参数?它会带来变化吗?
说,我的发行版有自定义内核,我怎么能得到内核构建的所有选项的列表?
可以通过从供应商的 repo 中读取内核包中的配置文件来获取它们,但是还有其他方法吗?我的意思是从内核本身获取该信息的方法,也许是从 procfs?
你知道什么initramfs-kernel意思吗?
我知道squashfs-factory/squashfs-sysupgrade。
我该怎么做或它是什么?哪个更好?
我只是不明白什么initramfs-kernel意思。
我有Linksys 1900ACS v2and D-Link DL-860l B1,但我只使用squashfs-factoryand squashfs-sysupgrade。
这是什么initramfs-kernel意思?
我什么时候会使用这些?
我什至害怕安装它。
那么,继续,例如lede-17.01.2-ramips-mt7621-dir-860l-b1-initramfs-kernel.bin,这是什么意思?我可以使用它吗?如果可以,lede-17.01.2-ramips-mt7621-dir-860l-b1-squashfs-factory.bin(我知道它做什么和如何做)或lede-17.01.2-ramips-mt7621-dir-860l-b1-squashfs-sysupgrade.bin(我知道它做什么和如何做)之间有什么区别。
我希望能够拦截连接建立,例如想知道某个进程(任何进程)何时建立连接。有没有办法实现这一目标?
我唯一能想到的就是拦截connect()系统调用。但可能还有其他方法吗?可能是在内核中创建网络上下文时?
目标是根据某些要求过滤进程并实时启用/禁用连接建立。
提前致谢。
PS 我这样做是出于绝对合法的目的。
PPS 我在谷歌搜索过,但只找到了如何拦截已经建立的连接(不完全是我想要的)。我要的是一个想法,一个搜索方向,而不是一个代码。
kernel ×10
linux ×4
linux-kernel ×2
networking ×2
security ×2
cache ×1
firewall ×1
initramfs ×1
lede ×1
openwrt ×1
options ×1
perf-event ×1
procfs ×1
squashfs ×1
sysctl ×1
system-calls ×1
tcp-ip ×1
yum ×1