寻找一个脚本,它将显示所有已登录的用户,这些用户按其登录的方式排序。所以,需要在所有当前运行的FreeBSD jail和主要主机中运行who
命令。
我做到了:
who #main host
jls | grep -v JID | while read jid ip host path
do
echo $jid $host
jexec $jid who
done
但是jexec
需要root执行,而且我通常以非root身份登录并且每次make su都很痛苦......
这是其他任何简单方法吗?
答案 0 :(得分:0)
FreeBSD中的who
命令知道一个file
参数,从那里读取有关登录用户的信息,默认为/var/run/utx.active
- 该文件通常是世界可读的..
下一个剧本可能就足够了:
#!/usr/local/bin/bash
while read jpath
do
echo JWHO: ${jpath:-$(hostname)}
who "${jpath}/var/run/utx.active"
done < <( jls -h path | sed '1s:.*::' )
示例输出:
JWHO: marvin.example.com
smith pts/0 7 nov 20:55 (adsl2343-some-another.example.com)
JWHO: /jails/jail1
JWHO: /jails/testjail
root pts/2 7 nov 20:55 (someother.example.com)
JWHO: /jails/dbjail
步骤进行:
/var/run/utx.active
的who 也许有人知道更简单的解决方案,例如通过排序ps
输出或类似......
评论:你通常不想使用像command | while read
这样的结构 - 管道分支新的shell,你丢失了循环内设置的变量值{{1通常更好......
答案 1 :(得分:0)
您可以在系统中启用sudo,稍微更改一下脚本:
sudo jexec $jid who
然后您的srcipt可以像普通用户一样运行。