我需要使用bash脚本在终端上显示某些信息。 我需要显示的信息是UID,PID,PPID,STATUS,CMD。 好的,所以我已经那样做了,但我在识别和打印方面遇到了一些问题。 我需要以这种方式显示它:
UID PID PPID STATUS CMD
root 1 0 Sleeping /sbin/init
但是用我的代码我得到了这个:
UID PID PPID STATUS CMD
root
1 0 (sleeping) /sbin/init
这实际上是我的代码:
echo "UID PID PPID STATUS CMD"
for i in /proc/*; do
getent passwd `cat $i/status|grep "^Uid"`| cut -d: -f1|head -1
cat $i/status|grep "^Pid"|awk '{printf "%-9s",$2}'
cat $i/status|grep "^PPid"|awk '{printf "%-9s",$2}'
cat $i/status|grep "^State"|awk '{printf"%-9s",$3}'
cat $i/cmdline|awk '{printf " %-25s",$1}'
echo '\n'
done
使用此代码我也会收到很多“非目录”错误。 我是新来的,所以我需要大量的帮助:( 注意:我不能使用ps命令
答案 0 :(得分:2)
命令ps(检查man ps)可以完成所有这些:
$ ps -eo user,pid,ppid,state,cmd | head -n 10
答案 1 :(得分:1)
唯一的问题是head
输出一个完整的行,但是你想要抑制换行符。通过捕获输出并使用printf
显示它来实现。
以下内容还清除了无用的cat
和grep
更令人震惊的用法,但可以进一步简化。
echo "UID PID PPID STATUS CMD"
for i in /proc/*; do
uid=$(getent passwd $(grep "^Uid" "$i/status") | cut -d: -f1 | head -1)
printf '%-9s' "$uid" # May need to adjust the formatting
awk '/^Pid/ {printf "%-9s",$2}' "$i/status"
awk '/^PPid/ {printf "%-9s",$2}' "$i/status"
awk '/^State/ {printf"%-9s",$3}' "$i/status"
awk '{printf " %-25s\n",$1}' "$i/cmdline"
done
答案 2 :(得分:0)
如果您想玩shell,请先阅读文档:
然后显示你需要的东西,没有任何混乱:
ps -c -o 'uid pid ppid status ucmd'