我使用的是 Ubuntu 16.04,并且一直在关注 Linux Bible(第 9 版)的“启动和停止”服务章节。我试图找到我拥有(init或systemd)什么类型的 init 守护进程,这要求我找到哪个进程的 PID 为 1。但是,根据我运行命令的方式,我得到了 2 个不同的结果......
webmaster@my-site:~$ ps -p1
PID TTY TIME CMD
1 ? 00:00:29 systemd
webmaster@my-site:~$ ps -F -p1
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 1 0 0 9420 5336 0 Feb23 ? 00:00:29 /sbin/init
Run Code Online (Sandbox Code Playgroud)
它systemd在运行第一个命令后表示PID1,但/sbin/init在运行第二个命令后表示 PID1。
根据我的理解,一个 glob 通配符由 shell 解释,然后为每个匹配的文件名运行给定的命令。假设我有文件:abc1, abc2, and abc3在我的当前目录中。然后,例如,echo abc*将为每个以 'abc' 开头的文件名回显一次。
但是,如果我运行grep 'foo' abc*,我想这应该运行:
grep 'foo' abc1
grep 'foo' abc2
grep 'foo' abc3
Run Code Online (Sandbox Code Playgroud)
这意味着我应该得到以下输出(假设所有文件都包含一行显示“foo”):
foo
foo
foo
Run Code Online (Sandbox Code Playgroud)
然而,我得到:
abc1:foo
abc2:foo
abc3:foo
Run Code Online (Sandbox Code Playgroud)
所以我认为对此有两种可能的解释。首先,grep 以某种方式可以检测到它是否与 glob 表达式一起使用,并通过在匹配之前输出文件名来响应。其次,由于您可以将多个文件传递给 grep,shell 实际上只运行 1 个命令:
grep 'foo' abc1 abc2 abc3
但是,这只有效,因为 grep 最后接受多个文件。另一个命令可能只允许传入 1 个文件。因此,如果您想为与 glob 匹配的多个文件运行该命令,则如果通过上述第二种方法进行 globbing 工作,它将无法工作。
无论如何,有人可以对此有所了解吗?
谢谢!