ส่งข้อความไปยังผู้ใช้รายอื่น


64

มีคำสั่งให้ส่งข้อความผ่านเชลล์ Linux ไปยังบุคคลอื่นในเครือข่ายเดียวกันหรือไม่? ฉันใช้write userแล้วเขียนข้อความเอง แต่มีคำสั่งใด ๆ ที่ไม่แสดงชื่อผู้ใช้ของฉันหรือฉันพยายามส่งข้อความถึงพวกเขา

คำสั่งที่ฉันใช้จะแสดงให้ผู้ใช้ที่ฉันพยายามติดต่อ (รหัสที่นำมาจากเว็บ):

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

คำตอบ:


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?

แต่ 'วอลล์' ส่งข้อความถึงผู้ใช้ทั้งหมดที่ล็อกอินใช่ไหม
Ricardo Almeida

2
@Exsound - ถูกต้อง ไม่มีวิธีการส่งข้อความหากไม่มีการระบุตัวตนของคุณผ่านวิธีอื่นใดที่ฉันเคยเห็น
slm

1
ในระบบของฉัน syslog มีการกำหนดค่าให้ส่งข้อความที่มีระดับการเกิดขึ้นจริงผ่านทางวอลล์ดังนั้นจึงlogger -p emerg hiทำงานเหมือนกับวิธีที่ 1 ด้านบน (ยกเว้น 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

ฉันจะบอกว่าสุดยอดมาก
อันวาร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.