向其他用户发送消息


64

是否有任何命令可以通过Linux Shell将消息发送给同一网络上的其他人?我正在使用write user,然后编写消息本身。但是有任何命令不显示我的用户名或我试图向他们发送消息

我正在使用的命令将向我尝试联系的用户显示此信息(从网络获取的代码):

Message from root@dev.example.com on pts/1 at 17:11 ...

Answers:


96

我知道的唯一直接方法就是使用wall命令。可以用来通过-n开关省略发送者的身份。

$ sudo wall -n hi

Remote broadcast message (Fri Nov  8 13:49:18 2013):

hi

使用回声

这种替代方法更像是一种黑客手段,因为它不是通过显式工具完成的,但是您可以假设用户知道使用哪种工具,可以将文本回显到用户终端。

$ w
 13:54:26 up 2 days, 36 min,  4 users,  load average: 4.09, 4.20, 3.73
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
saml     tty1     :0               Wed13    2days  3:55m  0.04s pam: gdm-password
saml     pts/0    :0.0             Wed13   24:16m  0.35s  0.35s bash
saml     pts/1    :0.0             Wed20    0.00s  3.71s  0.00s w
saml     pts/4    :0.0             01:20   12:33m  0.36s  0.05s man rsync

假设您知道用户saml实际上在伪终端之一上,则可以像这样直接将文本回显到该设备。从终端pts/1

$ sudo echo "Let's go have lunch... ok?" > /dev/pts/4
$ 

结果pts/4

$ man rsync
$ Let's go have lunch... ok?

但是'wall'会将消息发送给所有登录的用户,对吗?
里卡多·阿尔梅达

2
@Exsound-正确。没有一种方法可以通过我见过的其他任何方法在没有您的身份的情况下发送消息。
slm

1
在我的系统上,syslog配置为通过wall发送具有emerg级的消息,因此其logger -p emerg hi工作原理与上述第一种方法相同(除了syslogd显示为发件人),但是不需要sudo。
Michael Suelmann

1
@Exsound-您也可以直接向终端回显,请参见更新。
slm

@Exsound -欢迎您,感谢您的Q.
SLM

9

您可以使用此功能:)。
将该代码复制到具有名称的文件中SendMessage.sh

#!/bin/bash

SendMessage()
{
    com=`tty`
    set `who am i`
    who | grep -v "$1" >filef.txt

    exec < filef.txt  
    array=""

    while read line
    do
        set $line
        echo $1
        array+=($1)
    done

    rm filef.txt
    exec <$com

    echo "====================>   Select User Number  <===================="
    echo

    select userName in ${array[@]} 
    do
        UserNam=$userName
        if [ -n $UserNam ]; then
            break
        fi
    done

    unset array #Clear the Array

    echo 
    echo

    echo "===================================> Message Body <==================================="

    mesg y
    read -p "put here your Message==> " messagel

    echo $messagel | write $UserNam

    if [ $? -eq 0 ]; then
        echo "It has been sent successfully.............ok"
        #return 0
    else
        echo "Message Failed to send ..............No!!"
        echo "Maybe It is not available for you To send Message To hem "
        return 1
    fi  
}

SendMessage

使用方法:
进入终端并输入:

chmod +x SendMessage.sh
./SendMessage.sh

您可以发送消息。


1
确认为超赞。
DIBS

我会说超级棒。
安瓦尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.