在所有监狱中做谁

时间:2013-11-07 22:17:02

标签: bash freebsd jail

寻找一个脚本,它将显示所有已登录的用户,这些用户按其登录的方式排序。所以,需要在所有当前运行的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都很痛苦......

这是其他任何简单方法吗?

2 个答案:

答案 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

步骤进行:

  • 显示所有正在运行的jail的“根文件系统”的路径
  • 为给定的jail运行/var/run/utx.active的who
  • 跳过jls的标题行, - 所以第一个输出将是主持人。

也许有人知道更简单的解决方案,例如通过排序ps输出或类似......

评论:你通常不想使用像command | while read这样的结构 - 管道分支新的shell,你丢失了循环内设置的变量值{{1通常更好......

答案 1 :(得分:0)

您可以在系统中启用sudo,稍微更改一下脚本:

sudo jexec $jid who

然后您的srcipt可以像普通用户一样运行。