为了庆祝我作为网络开发者总结的3个月的试用期,我将为办公室制作一个终端蛋糕。在我对这个主题的研究中,我看到了这张照片,并想知道这些命令是做什么的?
答案 0 :(得分:5)
该管道尝试以相当严厉的Rube Goldbergian方式停止系统上的所有Apache进程。
管道:
获取系统上所有进程的列表。(ps axww
)
这种方法是一种超范围,提供的数据超过实现预期结果所需的数据,这将在以后引起问题。
查找包含httpd
的行,这是Apache Web服务器的常用进程名称。它可以意外地匹配其他东西,但在一台本应该只是一个Web服务器的机器上,它相当安全。
你在这个阶段得到这样的界限:
17652 ? Ss 0:00 /usr/bin/httpd -blah -args
管道也会匹配vi /etc/httpd/conf.d/mime.conf
命令。
过滤掉包含grep
(grep -v grep
)的行,因为第一个grep
也会找到本身:< / p>
24180 pts/0 R+ 0:00 grep httpd
如果您没有过滤掉这一行,则可能会在管道完成之前终止第一个grep
实例,从而破坏管道。 Linux上的ps
默认情况下按PID对其输出进行排序,因此PIDs wrap around,grep
可能出现在httpd
之前,导致cake命令实际上根本没有效果。< / p>
使用xargs
在找到的每一行上运行kill -9
。
也就是说,它构建这样的命令并运行它们:
kill -9 17652 ? Ss 0:00 /usr/bin/httpd -blah -args
这可能会也可能不会做你想要的。 有时可以工作,因为当您使用ps
标志运行axww
时,进程ID(PID)是第一件事。 (还有其他方法可以运行ps
,其中第一件事就是其他东西。)蛋糕装饰者希望系统上kill
的实现在它获得时不会被禁止ps
输出行上PID之后的所有其他垃圾。
POSIX doesn't say kill(1)
对非PID参数的作用。它可以在第一个非数字参数处停止,它可能为它找到的每个这样的参数提供错误,或者它可以默默地忽略它们。如果ps
找到的行恰好包含有效PID的数字,那么蛋糕上的命令最终可能会导致您不想要的进程被杀死。
在这里使用pgrep
会更好,如果可以的话:
# pgrep httpd | xargs kill -9
命令不仅更短,而且可靠地完成您真正想要的操作。它没有匹配,然后过滤掉grep
进程,它只匹配进程名称,并且它不会将非PID垃圾传递给kill
。
pgrep
的系统通常也有pkill
命令,它将该管道包装成一个命令:
# pkill httpd
如果您愿意,可以在此处添加-9
以强行终止httpd
进程,但我会在此处将其保留。我已经命令这些命令越来越具有歧视性,所以如果愿意的话,让它们逐渐野蛮也是有意义的。
如果您的系统没有pgrep
或pkill
,则可能有pidof
:
# kill $(pidof httpd)
另一种方法是使用killall
:
# killall httpd
请注意,killall
命令可以在非Linux操作系统上执行something different。
最安全的方法是使用您的操作系统正常&#34;停止网络服务器&#34;然而,命令。例子:
# service httpd stop
# /etc/init.d/httpd stop
# systemctl stop httpd.service
# launchctl unload /System/Library/LaunchDaemons/org.apache.httpd.plist
Apache包含一个&#34;很好地停止Apache&#34;命令:
# apachectl stop
然而,该命令只会阻止Apache正常运行。上面的OS特定命令也可以执行其他清理操作。如果操作系统启动了Apache,您应该使用操作系统自己的命令来停止它。
答案 1 :(得分:-2)
这是一个蛋糕保护命令。这个命令无法让Root吃蛋糕,因为在这个愤怒的用户之后会拨打Root,打开故障单等等。)