我正在寻找一个很好的概述文档,描述现代 Linux 会话中涉及的守护进程和服务堆栈。尽管阅读了有关dbus, 和 的各种文档systemd,但我仍然没有了解大局。
特别是,我正在寻找这些问题的答案(不要回答问题,他们应该只说明我在寻找什么样的文档):
登录后,哪个进程是用户会话的root?
应该启动哪些进程,为什么?我正在寻找一个与桌面无关的答案,无论是启动 Gnome、KDE、FVWM 还是简单的 shell。
所有这些守护进程都扮演什么角色?哪些会单独运行,哪些会依赖其他人?哪一个应该由谁开始,为什么,以及多长时间?谁应该维护那个动物园?
我在问,因为我发现启动后我有一个完整的守护进程动物园:systemd-journald, systemd-udevd, dbus-daemon,
systemd-logind. 但还不够:除了这些,运行超轻量级PDF查看器zathura 进一步填充我的会话dbus-launch,
dbus-daemon,at-spi2-registryd,和at-spi-bus-launcher,后者启动另一个dbus-daemon。他们以前都没有去过那里,也没有人被邀请过,但他们会留在房子里,给我一种令人毛骨悚然的感觉,直到我退出。我确定我在这里遗漏了一些东西......
另一个例子:登录后,我systemd使用我的用户 UID 运行,但我不知道它应该做什么(从 206 版开始,我认为我不应该将其用作会话管理器,对吗?)。它有一个子进程(sd-pam),我没有找到关于它的文档。
他们在做什么?这个设置背后的想法是什么?
澄清我的观点:在“过去”,知道这login会启动我的登录 shell(bash, 执行~/.profile)就足够了
,从那时起,我可以继续构建会话,具体取决于情况,可能是启动screen, 或startx.
使用 coreutils sort,如何按十六进制值(字段)进行数字排序?我期待着类似的东西
sort -k3,3x file_to_sort
Run Code Online (Sandbox Code Playgroud)
然而,这样的x情况并不存在。
编辑:到目前为止我想出的最佳解决方案是:
{ echo ibase=16; cut -d' ' -f3 file_to_sort; } |
bc | paste -d: - file_to_sort | sort -t: -k1,1n | cut -d: -f2-
Run Code Online (Sandbox Code Playgroud)
其中cut -d' ' -f3隔离搜索字段(这是-k3,3-这可能会有所不同,当然),和bc不转换为十进制(需要大写十六进制,没有0x前缀,匹配我的情况)。然后我加入、排序和拆分列。
最小样本输入:
5 hhf 25
3 ezh ae
1 hdh d12
2 ukr 9f
4 jjk 7
Run Code Online (Sandbox Code Playgroud)
预期输出(按hex第三列排序的文件):
4 jjk 7
5 hhf 25
2 ukr 9f
3 ezh ae
1 hdh …Run Code Online (Sandbox Code Playgroud) 我观察到以下几点:
作为 1 号 shell 中的非特权用户:
user@box:~$ sysctl kernel.unprivileged_userns_clone
kernel.unprivileged_userns_clone = 1
user@box:~$ unshare --mount --user
nobody@box:~$ echo $$
18655
Run Code Online (Sandbox Code Playgroud)
并作为 2 号 shell 中的 root:
root@box:~# mkdir -p /tmp/myns
root@box:~# touch /tmp/myns/{user,mnt}
root@box:~# mount --bind /proc/18655/ns/user /tmp/myns/user
root@box:~# mount --bind /proc/18655/ns/mnt /tmp/myns/mnt
mount: /tmp/myns/mnt: wrong fs type, bad option, bad superblock on /proc/18655/ns/mnt, missing codepage or helper program, or other error.
Run Code Online (Sandbox Code Playgroud)
该错误令人惊讶:我无法将挂载命名空间绑定挂载到文件,但我可以将用户命名空间绑定挂载到文件?为什么会这样,我怎样才能使这个挂载命名空间可供非特权用户使用user?
为什么我想要这个:为了测试一个程序,我想~user用一个临时文件系统覆盖,最初共享原始内容。可以按照以下方式由 root 设置
tmp='/tmp/GAtcNNeSfM8b'
mkdir -p "$tmp"
mount -t tmpfs -o size=100m …Run Code Online (Sandbox Code Playgroud)