获取进程的bin目录

时间:2015-11-27 21:49:32

标签: linux

我想只显示安装二进制文件的目录。像

/bin

/bin/ls

这是我到目前为止所做的:

ps aux | awk '{print $11}' | grep -x -e "/.*" 

但是它也显示了文件名,我不想要那个,以及输出的例子:

  

/ usr / lib中/火狐/火狐

但我喜欢这样:

  

/ usr / lib中/火狐

谢谢!

1 个答案:

答案 0 :(得分:2)

用于提取目录名称的命令是dirname "path/to/file"。现在你可能已经看到,它需要一个参数(不从stdin读取)。但是,您可以使用xargs来解决此问题:

xargs dirname

现在您只需要在管道的末尾添加它:

ps aux | awk '{print $11}' | grep -x -e "/.*" | xargs dirname

<强>演示

在我的Linux机器上运行:

$ ps aux | awk '{print $11}' | grep -x -e "/.*" | xargs dirname | head
/sbin
/lib/systemd
/lib/systemd
/sbin
/usr/sbin
/usr/sbin
/usr/sbin
/usr/sbin
/usr/sbin
/usr/bin

为了使命令对空间安全(@ hek2mgl的注释),您可以使用:

ps aux | awk '{print $11}' | grep -x -e "/.*" | xargs -I file dirname "file"

请注意,这会对性能产生影响:使用xargs dirname而不使用任何标志会使用dirname处理多个参数的循环机制,从而导致紧密循环,使用后者将会产生每行的<{1}}进程

更优雅的方式

你的程序使用了大量的文本处理,这可能很棘手,容易出错,并且对格式(dirname,...)的更改更敏感。一种不易出错的方式可以是:

ps