我创建了一个共享套接字供 tmux 使用。
tmux -S /tmp/pair
然后我有第二个用户连接到套接字。
tmux -S /tmp/pair attach
我如何从创建套接字的第一个会话中判断出第二个用户已连接?
我猜这将是来自lsof
命令的东西。
您可以使用该list-clients
命令。它本身显示所有连接到服务器的客户端。如果您使用该选项指定会话-t
,它会显示附加到指定会话的客户端。
就像另一位用户在评论中所说的那样,<prefix> D
将列出所有会话,但请记住,按 Enter 将分离该客户端(这可能是您想要的,也可能不是您想要的)
给出的答案(Ctrl-b D 或 Ctrl-b : list-clients RET)将为您提供具有(虚拟)tty 终端和窗口大小的客户端列表,但不会告诉您相关的用户名。在 tmux 会话之外,您还可以使用“tmux -S /tmp/pair list-clients”
列出已连接的实际用户的一种方法是在命名套接字上运行 lsof,即:“lsof /tmp/pair”
或者,您可以使用“谁”命令查看与虚拟终端关联的用户列表。如果您只是区分自己的连接,则可以使用别名来过滤:“who | awk '{print $2,$NF}' |grep -v '(:[0-9]'”
这是一个快速的 Perl 脚本,它将 tmux 和 'who' 输出放在一起。对于共享套接字的使用,将套接字文件作为唯一参数传递,即:“tmux_ls.pl /tmp/shared”:
my $sock="";
$sock = "-S ".$ARGV[0] if $ARGV[0];
my $clients = `tmux $sock list-clients`;
# Use open to loop like a file
open my $fh, '<', \$clients or die $!;
printf("%-10.10s\t%-10.10s\t%-10.10s\t%-16.16s\t%s\n", "Session", "TTY", "Username", "Timestamp", "Origin");
while(<$fh>) {
my @cols = split(' ');
my ($tty) = $cols[0] =~ /^\/dev\/(pts\/\d+)/;
my $session = $cols[1];
my $who = `who | grep $tty`;
my @whoc = split(' ',$who);
printf("%-10.10s\t%-10.10s\t%-10.10s\t%-16.16s\t%s\n", $session,$tty,$whoc[0], "$whoc[2] $whoc[3]", $whoc[4]);
}