Команда write в Linux

Опубликовано admin - ср, 03/15/2023 - 18:59

В Linux команда write создаёт линию связи между двумя авторизованными пользователями через терминал, позволяя отправлять сообщения в режиме реального времени.

Примеры использования команды write в Linux

Содержание

Синтаксис

write <user> [<ttyname>]

Параметр user является обязательным и представляет имя пользователя принимающей стороны. Указание ttyname необходимо в случае нескольких открытых терминалов.

Использование команды write в Linux

Предварительная подготовка

Для команды write требуются как минимум два пользователя, вошедших в систему через сеанс pts (псевдо-терминал) или tty (телетайп).

Так как у меня второго пользователя нет, то я его создаю с именем ivan:

oleg@mobile:~$ sudo su
root@mobile:/home/oleg# adduser ivan
Добавляется пользователь «ivan» ...
Добавляется новая группа «ivan» (1001) ...
Добавляется новый пользователь «ivan» (1001) в группу «ivan» ...
Создаётся домашний каталог «/home/ivan» ...
Копирование файлов из «/etc/skel» ...
Новый пароль : 
Повторите ввод нового пароля : 
passwd: пароль успешно обновлён
Изменение информации о пользователе ivan
Введите новое значение или нажмите ENTER для выбора значения по умолчанию
    Полное имя []: 
    Номер комнаты []: 
    Рабочий телефон []: 
    Домашний телефон []: 
    Другое []: 
Данная информация корректна? [Y/n] y
root@mobile:/home/oleg# 

Добавляю пользователя ivan в группу sudo:

root@mobile:/home/oleg# usermod -aG sudo ivan
root@mobile:/home/oleg# 

Проверяю доступность разрешений sudo, переключившись командой su на учётную запись пользователя ivan:

oleg@mobile:~$ sudo su ivan
ivan@mobile:/home/oleg$ cd
ivan@mobile:~$ 

Теперь пользователь ivan, используя sudo, сможет запускать команды с привилегиями суперпользователя:

ivan@mobile:~$ sudo  ls -l /root
итого 4
drwxr-xr-x 3 root root 4096 авг 17  2021 snap
ivan@mobile:~$

Конечно при работе в реальной многопользовательской среде подобная предварительная подготовка не требуется. 

Разрешение на запись

Для связи с другим пользователем oleg получает разрешение на запись с помощью mesg y:

oleg@mobile:~$ mesg y
oleg@mobile:~$

Пользователь ivan также получает разрешение на запись:

ivan@mobile:~$ mesg y
ivan@mobile:~$

Вход в терминальный сеанс

При работе на одном компьютере с двумя разными пользователями каждый пользователь запускает команду в своём терминальном сеансе и указывает своё имя пользователя.

Команда предлагает ввести sudo и пароль пользователя для продолжения.

Пользователь oleg входит в терминальный сеанс:

oleg@mobile:~$ sudo login oleg
Пароль: 
Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-58-generic x86_64)

...
oleg@mobile:~$ 

То же самое выполняет и пользователь ivan:

ivan@mobile:~$ sudo login ivan
Пароль:
 
...
ivan@mobile:~$ 

Чтобы проверить, кто вошёл в систему, используется команда w в любом терминале:

oleg@mobile:~$ w
 17:51:14 up 14 min,  3 users,  load average: 0,28, 0,39, 0,50
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
oleg     :0       :0               17:38   ?xdm?   1:33   0.00s /usr/lib/gdm3/gdm-x-session --run-script env GNOME_SHELL_SESSION_M
oleg     pts/0    -                17:47    1.00s  0.12s  0.00s w
ivan     pts/2    -                17:49    2:05   0.14s  0.05s -bash
oleg@mobile:~$ 

Вывод показывает, что пользователи oleg и ivan вошли в систему через консоль pts. Кроме этого пользователь oleg предварительно вошёл в систему через локальный дисплей (GUI). Он же выполнил команду login для обоих пользователей.

Создание сообщения

Чтобы написать сообщение другому пользователю с помощью команды write выполняются следующие действия:

Запускаем утилиту и указываем пользователя:

oleg@mobile:~$ write ivan

Команда ожидает входное сообщение. На принимающей стороне пользователь получает подтверждение о соединении со следующей информацией:

ivan@mobile:~$
 
Message from oleg@mobile on pts/0 at 17:56 ...

Пользователь oleg набирает текст сообщения и нажимает Enter для перехода на новую строку:

oleg@mobile:~$

Message from oleg@mobile on pts/0 at 18:03 ...
write oleg
Hi, how are you? 
write ivan
Would you like to drink some beer now?

Сообщение появляется на принимающей стороне в режиме реального времени и пользователь ivan отвечает:

ivan@mobile:~$

Message from oleg@mobile on pts/0 at 18:03 ...
write oleg
Hi, how are you? 
write ivan
Would you like to drink some beer?
write oleg
Yes, of course. o  

Пользователь oleg завершает работу, набрав oo и нажав CTRL + D:

oleg@mobile:~$ write ivan

Message from ivan@mobile on pts/2 at 18:03 ...
Hi, how are you?
write ivan
Would you like to drink some beer now?
write oleg
Yes, of course. o
write oo
oleg@mobile:~$ 

Пользователь ivan получает сообщение об окончании сеанса и бежит к Олегу:

ivan@mobile:~$ EOF

Message from oleg@mobile on pts/0 at 18:03 ...
write oleg
Hi, how are you? 
write ivan
Would you like to drink some beer now?
write oleg
Yes, of course. o  
write oo
EOF

Поскольку не существует надлежащего способа отличить, когда пользователь заканчивает сообщение, традиционный способ завершения оператора — это символ o. Чтобы сигнализировать об окончании разговора, напишите oo. Завершите работу, нажатием CTRL + D.

Сообщение с помощью команды echo

С использованием команды echo можно ввести сообщение и передать команду write:

oleg@mobile:~$ echo "Hello from oleg" | write ivan

Канал связи немедленно заканчивается для отправителя, а получатель принимает сообщение и ожидает завершения.

Сообщение из файла

Для отправки сообщения из текстового файла создаётся текстовый файл:

Содержимое файла отправляется с помощью команды следующим образом:

oleg@mobile:~$ echo "Hello from oleg" | write ivan < beer.txt

Сообщение на определённый терминал

Когда у пользователя открыто несколько терминальных сеансов, утилита выбирает терминал с наименьшим временем простоя.

Используйте эту утилиту для проверки имени tty и времени простоя.

Чтобы указать, на какой tty отправлять сообщения, запустите:

ivan@mobile:~$ write oleg pts/0

Сообщения поступят только на pts/0.

Заключение

Изучив в этой небольшой статье примеры использования команду write в Linux вы сможете использовать её в своей работе. Вы уже убедились в том, что это несложно.

Поделиться с друзьями