如何从ps命令输出中排除user列?
如何从ps命令输出中排除user列?
嗨,我明白你现在的需求了——你用ps waxfu查看进程时,想把开头的用户名列去掉,方便把剩下的内容传给脚本,而且你已经注意到MariaDB进程的用户是mysql对吧?这里有几个简单好用的办法:
方法1:让ps直接输出你需要的列(推荐)
其实ps本身支持自定义输出字段,根本不用先输出所有列再过滤。你可以用-o参数指定要显示的列,完全避开用户名(USER)列。比如如果你习惯了ps waxfu的输出结构,只是去掉USER列,就可以这样写:
ps axo pid,%cpu,%mem,vsz,rss,tty,stat,start,time,cmd
解释一下参数逻辑:
a:显示所有终端关联的进程x:显示无终端的后台进程(比如你关注的MariaDB)o:后面跟着你要保留的字段列表,这里的字段完全对应waxfu输出里除USER外的所有内容,顺序也和原输出一致
如果只需要MariaDB相关的进程信息,还可以直接组合过滤:
ps axo pid,%cpu,%mem,cmd | grep mariadbd
方法2:用awk过滤现有输出
如果你还是想先用ps waxfu输出全量内容,再去掉第一列,awk是最稳妥的选择(因为进程名或参数里可能有空格,用cut容易分割出错):
ps waxfu | awk '{$1=""; print substr($0, 2)}'
这里的逻辑很简单:把每一行的第一列(用户名)设为空,再用substr去掉开头多余的空格,这样输出的就是去掉用户名后的完整内容了。
要是你需要把结果传给脚本,直接在后面加管道就行,比如:
ps axo pid,%cpu,%mem,cmd | grep mariadbd | ./your_script.sh
这样应该就能满足你的需求啦,试试哪个方法更顺手~
备注:内容来源于stack exchange,提问作者palmasd1
相关产品推荐
相关产品推荐

