在今天之前,尽管对许多不同的 Linux 命令越来越熟悉,但我并没有尝试去理解 a useful command from another StackOverflow posting 的一些组件。将 top
命令过滤到某些进程(按进程名称):
top -p `pgrep process-name | tr "\\n" "," | sed 's/,$//'`
这个 top
命令包含各种语法组件。我可以依次查找每个组件(有些是显而易见的,例如管道命令 - 虽然我仍然不是 100% 对管道 |
之间的区别感到满意和重定向 >
)。
但是,由于按进程名称过滤 top
命令通常很有用,而且从语法的角度来看,该命令表面上显然不是微不足道的,因此它对我(也许还有其他人)很有用) 以在一个地方引用此命令的所有部分的实际(简短)解释。
因此,我的问题如下。
上述 top
命令的所有组件的简要说明是什么(按进程名称过滤 top
的输出)?我将不胜感激,即使只是简单提及,也不要遗漏任何语法。谢谢!
最佳答案
我会尝试通过分段回答您的问题来分解它。
我们要看的第一部分是 sed 's/,$//'
。我无法简要解释 sed
命令,但请查看 GNU sed manual了解更多信息。 's/,$//'
告诉 sed
查找行尾的任何逗号,并用任何内容替换它们。这将删除 sed
标准输入中每行末尾的所有逗号。
我们要看的下一 block 是 tr "\\n"","
。同样,tr
可以做很多事情,但它的目的是转换字符。参见 tr man page以获得更详细的解释。这个用法是把所有的 UNIX 换行符(\n
)都变成逗号。 \
必须使用额外的 \
进行转义,因为命令行会将 \n
视为新行并中断命令。
接下来是 pgrep process-name
。为了完整起见,这里是 pgrep man page . pgrep
只是将符合选择标准的任何正在运行的进程的进程 ID (pid) 打印到标准输出。每个 pid 将单独打印在一行上。在这里,我们正在寻找命令 process-name
的 pid。
现在是管道 (|
)。这将创建一个新流程,并将标准打印的任何内容发送到新流程的标准输入。
让我们看一下命令以了解管道如何更好地工作。 pgrep 进程名 | tr "\\n"","
会将所有 pid 的匹配 process-name
打印到标准输出,标准输出被传递到运行 tr
的进程的标准输入. tr "\\n"","| sed 's/,$//'
会将所有换行符从其标准输入转换为逗号,并将结果打印到其标准输出,然后传递给运行 sed 's/,$//的新进程'
。
所以整个命令pgrep process-name | tr "\\n"","| sed 's/,$//'
将为任何名为 process-name
的正在运行的进程打印以空格分隔的 pid 行。
还有两个要看的部分:top -p
和反引号 (``)。反引号创建了一个新进程,它在内部运行命令并在评估整个命令之前替换其标准输出。例如:
echo `echo "Hello, World!"`
打印 Hello, World!
到屏幕。
最后,top -p
获取 pid 列表并报告各种信息,例如运行时间、内存使用情况和 nice 值。有关更详细的说明,请参阅 top man page .
关于linux - 以下 "top"命令: top -p `pgrep process-name | tr "\\n" "," | sed 's/,$//' `的语法简单解释是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25066098/