这个蛋糕上的命令有什么作用?

时间:2014-05-02 00:15:37

标签: linux bash

为了庆祝我作为网络开发者总结的3个月的试用期,我将为办公室制作一个终端蛋糕。在我对这个主题的研究中,我看到了这张照片,并想知道这些命令是做什么的?

cake picture

2 个答案:

答案 0 :(得分:5)

该管道尝试以相当严厉的Rube Goldbergian方式停止系统上的所有Apache进程。

管道:

  1. 获取系统上所有进程的列表。ps axww

    这种方法是一种超范围,提供的数据超过实现预期结果所需的数据,这将在以后引起问题。

  2. 查找包含httpd 的行,这是Apache Web服务器的常用进程名称。它可以意外地匹配其他东西,但在一台本应该只是一个Web服务器的机器上,它相当安全。

    你在这个阶段得到这样的界限:

    17652 ?        Ss     0:00 /usr/bin/httpd -blah -args
    

    管道也会匹配vi /etc/httpd/conf.d/mime.conf命令。

  3. 过滤掉包含grep grep -v grep)的行,因为第一个grep也会找到本身:< / p>

    24180 pts/0    R+     0:00 grep httpd
    

    如果您没有过滤掉这一行,则可能会在管道完成之前终止第一个grep实例,从而破坏管道。 Linux上的ps默认情况下按PID对其输出进行排序,因此PIDs wrap aroundgrep可能出现在httpd之前,导致cake命令实际上根本没有效果。< / p>

  4. 使用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的数字,那么蛋糕上的命令最终可能会导致您不想要的进程被杀死。

  5. 在这里使用pgrep会更好,如果可以的话:

    # pgrep httpd | xargs kill -9
    

    命令不仅更短,而且可靠地完成您真正想要的操作。它没有匹配,然后过滤掉grep进程,它只匹配进程名称,并且它不会将非PID垃圾传递给kill

    pgrep的系统通常也有pkill命令,它将该管道包装成一个命令:

    # pkill httpd
    

    如果您愿意,可以在此处添加-9以强行终止httpd进程,但我会在此处将其保留。我已经命令这些命令越来越具有歧视性,所以如果愿意的话,让它们逐渐野蛮也是有意义的。

    如果您的系统没有pgreppkill,则可能有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,打开故障单等等。)