Bash 所有监狱里都有谁

Bash 所有监狱里都有谁,bash,freebsd,jail,Bash,Freebsd,Jail,寻找一个脚本什么将显示所有登录用户按他们登录的FreeBSD监狱排序。因此,需要在所有当前运行的FreeBSD监狱和主主机中运行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身份登录,每次都让su很痛苦 这里还有其他简单的方法吗?FreeBS

寻找一个脚本什么将显示所有登录用户按他们登录的FreeBSD监狱排序。因此,需要在所有当前运行的FreeBSD监狱和主主机中运行
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身份登录,每次都让su很痛苦


这里还有其他简单的方法吗?

FreeBSD中的
who
命令知道一个
文件
参数,从该参数读取有关登录用户的信息,默认值为
/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:.*::' )
步骤:

  • 显示所有正在运行的jail的“根文件系统”路径
  • 为给定监狱的
    /var/run/utx.active
    运行who
  • 跳过jls中的标题行,-因此第一个输出将是主机
也许有人知道更简单的解决方案,例如,通过排序
ps
输出或类似的方式


注释:您通常不想使用类似于
command |的构造,而读取
-管道分叉新的shell,并且您丢失了在循环内部设置的变量值,
done<您可以在系统中启用sudo,只需稍微更改脚本即可:

sudo jexec$jid who

然后,您的srcipt可以作为普通用户运行

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