Wysyłanie wiadomości do innego użytkownika


64

Czy istnieje polecenie wysyłania wiadomości za pośrednictwem powłoki Linux do innych osób w tej samej sieci? Używam, write usera następnie piszę samą wiadomość. Ale jest jakieś polecenie, które nie pokazuje mojej nazwy użytkownika lub próbuję je wysłać

Polecenie, którego używam, pokaże to użytkownikowi, z którym próbuję się skontaktować (kod pobrany z sieci):

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

Odpowiedzi:


96

Jedynym prostym sposobem, jaki wiem o tym, jest użycie wallpolecenia. Można to wykorzystać do pominięcia identyfikacji nadawcy za pomocą -nprzełącznika.

Przykład

$ sudo wall -n hi

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

hi

za pomocą echa

Ta alternatywna metoda jest bardziej włamaniem, ponieważ nie odbywa się to za pomocą jawnego narzędzia, ale możesz wysłać tekst do terminala użytkownika, zakładając, że wiesz, na którym on jest.

Przykład

$ 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

Zakładając, że wiesz, że użytkownik samljest w rzeczywistości na jednym z pseudo terminali, możesz echo tekstu na tym urządzeniu bezpośrednio tak. Z terminala pts/1:

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

Wynik na pts/4:

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

Ale „ściana” wysyła wiadomość do wszystkich zalogowanych użytkowników, prawda?
Ricardo Almeida,

2
@Exsound - poprawnie. Nie ma sposobu na wysłanie wiadomości bez Twojej identyfikacji inną metodą, jaką widziałem.
slm

1
W moim systemie syslog jest skonfigurowany do wysyłania wiadomości z poziomem emerg przez ścianę, więc logger -p emerg hidziała tak samo jak pierwsza metoda powyżej (z wyjątkiem tego, że syslogd jest wyświetlany jako nadawca), ale nie potrzebuje sudo.
Michael Suelmann,

1
@Exsound - możesz także wysłać echo bezpośrednio do terminala, zobacz aktualizację.
slm

@Exsound - nie ma za co, dziękuję za Q.
slm

9

Możesz użyć tej funkcji :).
Skopiuj ten kod do pliku o nazwieSendMessage.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

Jak używać:
Przejdź do terminala i wpisz:

chmod +x SendMessage.sh
./SendMessage.sh

I możesz wysłać wiadomość.


1
Potwierdzony jako niesamowity.
dibs

Super Awesome powiedziałbym.
Anwar
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.