## 13.6 Linux 主機上的使用者訊息傳遞
談了這么多的帳號問題,總是該要談一談,那么如何針對系統上面的使用者進行查詢吧? 想幾個狀態,如果你在 Linux 上面操作時,剛好有其他的使用者也登陸主機,你想要跟他對談,該如何是好? 你想要知道某個帳號的相關信息,該如何查閱?呼呼!下面我們就來聊一聊~
### 13.6.1 查詢使用者: w, who, last, lastlog
如何查詢一個使用者的相關數據呢?這還不簡單,我們之前就提過了 [id](../Text/index.html#id), [finger](../Text/index.html#finger) 等指令了,都可以讓您了解到一個使用者的相關信息啦!那么想要知道使用者到底啥時候登陸呢? 最簡單可以使用 last 檢查啊!這個玩意兒我們也在 [第十章 bash](../Text/index.html#last) 提過了, 您可以自行前往參考啊!簡單的很。

**Tips** 早期的 Red Hat 系統的版本中, last 僅會列出當月的登陸者信息,不過在我們的 CentOS 5.x 版以后, last 可以列出從系統創建之后到目前為止的所有登陸者信息!這是因為登錄文件輪替的設置不同所致。 詳細的說明可以參考后續的[第十八章登錄文件簡介](../Text/index.html)。
那如果你想要知道目前已登陸在系統上面的使用者呢?可以通過 w 或 who 來查詢喔!如下范例所示:
```
[root@study ~]# w
01:49:18 up 25 days, 3:34, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
dmtsai tty2 07Jul15 12days 0.03s 0.03s -bash
dmtsai pts/0 172.16.200.254 00:18 6.00s 0.31s 0.11s sshd: dmtsai [priv]
# 第一行顯示目前的時間、開機 (up) 多久,幾個使用者在系統上平均負載等;
# 第二行只是各個項目的說明,
# 第三行以后,每行代表一個使用者。如上所示,dmtsai 登陸并取得終端機名 tty2 之意。
[root@study ~]# who
dmtsai tty2 2015-07-07 23:07
dmtsai pts/0 2015-07-22 00:18 (192.168.1.100)
```
另外,如果您想要知道每個帳號的最近登陸的時間,則可以使用 lastlog 這個指令喔! lastlog 會去讀取 /var/log/lastlog 文件,結果將數據輸出如下表:
```
[root@study ~]# lastlog
Username Port From Latest
root pts/0 Wed Jul 22 00:26:08 +0800 2015
bin **Never logged in**
....(中間省略)....
dmtsai pts/1 192.168.1.100 Wed Jul 22 01:08:07 +0800 2015
vbird1 pts/0 Wed Jul 22 01:32:17 +0800 2015
pro3 **Never logged in**
....(以下省略)....
```
這樣就能夠知道每個帳號的最近登陸的時間啰~ ^_^
### 13.6.2 使用者對談: write, mesg, wall
那么我是否可以跟系統上面的使用者談天說地呢?當然可以啦!利用 write 這個指令即可。 write 可以直接將訊息傳給接收者啰!舉例來說,我們的 Linux 目前有 vbird1 與 root 兩個人在線上, 我的 root 要跟 vbird1 講話,可以這樣做:
```
[root@study ~]# write 使用者帳號 [使用者所在終端接口]
[root@study ~]# who
vbird1 tty3 2015-07-22 01:55 <==有看到 vbird1 在線上
root tty4 2015-07-22 01:56
[root@study ~]# write vbird1 pts/2
Hello, there:
Please don't do anything wrong... <==這兩行是 root 寫的信息!
# 結束時,請按下 [crtl]-d 來結束輸入。此時在 vbird1 的畫面中,會出現:
Message from root@study.centos.vbird on tty4 at 01:57 ...
Hello, there:
Please don't do anything wrong...
EOF
```
怪怪~立刻會有訊息回應給 vbird1 !不過......當時 vbird1 正在查數據,哇! 這些訊息會立刻打斷 vbird1 原本的工作喔!所以,如果 vbird1 這個人不想要接受任何訊息,直接下達這個動作:
```
[vbird1@study ~]$ mesg n
[vbird1@study ~]$ mesg
is n
```
不過,這個 mesg 的功能對 root 傳送來的訊息沒有抵擋的能力!所以如果是 root 傳送訊息, vbird1 還是得要收下。 但是如果 root 的 mesg 是 n 的,那么 vbird1 寫給 root 的信息會變這樣:
```
[vbird1@study ~]$ write root
write: root has messages disabled
```
了解乎?如果想要解開的話,再次下達“ mesg y ”就好啦!想要知道目前的 mesg 狀態,直接下達“ mesg ”即可!瞭呼? 相對于 write 是僅針對一個使用者來傳“簡訊”,我們還可以“對所有系統上面的使用者傳送簡訊 (廣播)”哩~ 如何下達?用 wall 即可啊!他的語法也是很簡單的喔!
```
[root@study ~]# wall "I will shutdown my linux server..."
```
然后你就會發現所有的人都會收到這個簡訊呢!連發送者自己也會收到耶!
### 13.6.3 使用者郵件信箱: mail
使用 wall, write 畢竟要等到使用者在線上才能夠進行,有沒有其他方式來聯絡啊? 不是說每個 Linux 主機上面的使用者都具有一個 mailbox 嗎? 我們可否寄信給使用者啊!呵呵!當然可以啊!我們可以寄、收 mailbox 內的信件呢! 一般來說, mailbox 都會放置在 /var/spool/mail 里面,一個帳號一個 mailbox (文件)。 舉例來說,我的 vbird1 就具有 /var/spool/mail/vbird1 這個 mailbox 喔!
那么我該如何寄出信件呢?就直接使用 mail 這個指令即可!這個指令的用法很簡單的,直接這樣下達:“ mail -s "郵件標題" username@localhost ”即可! 一般來說,如果是寄給本機上的使用者,基本上,連“ @localhost ”都不用寫啦! 舉例來說,我以 root 寄信給 vbird1 ,信件標題是“ nice to meet you ”,則:
```
[root@study ~]# mail -s "nice to meet you" vbird1
Hello, D.M. Tsai
Nice to meet you in the network.
You are so nice. byebye!
. <==這里很重要喔,結束時,最后一行輸入小數點 . 即可!
EOT
[root@study ~]# <==出現提示字符,表示輸入完畢了!
```
如此一來,你就已經寄出一封信給 vbird1 這位使用者啰,而且,該信件標題為: nice to meet you,信件內容就如同上面提到的。不過,你或許會覺得 mail 這個程序不好用~ 因為在信件編寫的過程中,如果寫錯字而按下 Enter 進入次行,前一行的數據很難刪除ㄟ! 那怎么辦?沒關系啦!我們使用數據流重導向啊!呵呵!利用那個小于的符號 ( < ) 就可以達到取代鍵盤輸入的要求了。也就是說,你可以先用 vi 將信件內容編好, 然后再以 mail -s "nice to meet you" vbird1 < filename 來將文件內容傳輸即可。
例題:請將你的主文件夾下的環境變量文件 (~/.bashrc) 寄給自己!答:mail -s "bashrc file content" dmtsai < ~/.bashrc例題:通過管線命令直接將 ls -al ~ 的內容傳給 root 自己!答:ls -al ~ | mail -s "myfile" root
剛剛上面提到的是關于“寄信”的問題,那么如果是要收信呢?呵呵!同樣的使用 mail 啊! 假設我以 vbird1 的身份登陸主機,然后輸入 mail 后,會得到什么?
```
[vbird1@study ~]$ mail
Heirloom Mail version 12.5 7/5/10\. Type ? for help.
"/var/spool/mail/vbird1": 1 message 1 new
>N 1 root Wed Jul 22 02:09 20/671 "nice to meet you"
& <==這里可以輸入很多的指令,如果要查閱,輸入 ? 即可!
```
在 mail 當中的提示字符是 & 符號喔,別搞錯了~輸入 mail 之后,我可以看到我有一封信件, 這封信件的前面那個 > 代表目前處理的信件,而在大于符號的右邊那個 N 代表該封信件尚未讀過, 如果我想要知道這個 mail 內部的指令有哪些,可以在 & 之后輸入“ ? ”,就可以看到如下的畫面:
```
& ?
mail commands
type <message list> type messages
next goto and type next message
from <message list> give head lines of messages
headers print out active message headers
delete <message list> delete messages
undelete <message list> undelete messages
save <message list> folder append messages to folder and mark as saved
copy <message list> folder append messages to folder without marking them
write <message list> file append message texts to file, save attachments
preserve <message list> keep incoming messages in mailbox even if saved
Reply <message list> reply to message senders
reply <message list> reply to message senders and all recipients
mail addresses mail to specific recipients
file folder change to another folder
quit quit and apply changes to folder
xit quit and discard changes made to folder
! shell escape
cd <directory> chdir to directory or home if none given
list list names of all available commands
```
<message list> 指的是每封郵件的左邊那個數字啦!而幾個比較常見的指令是:
| 指令 | 意義 |
| --- | --- |
| h | 列出信件標頭;如果要查閱 40 封信件左右的信件標頭,可以輸入“ h 40 ” |
| d | 刪除后續接的信件號碼,刪除單封是“ d10 ”,刪除 20~40 封則為“ d20-40 ”。 不過,這個動作要生效的話,必須要配合 q 這個指令才行(參考下面說明)! |
| s | 將信件儲存成文件。例如我要將第 5 封信件的內容存成 ~/mail.file:“s 5 ~/mail.file” |
| x | 或者輸入 exit 都可以。這個是“不作任何動作離開 mail 程序”的意思。 不論你剛剛刪除了什么信件,或者讀過什么,使用 exit 都會直接離開 mail,所以剛剛進行的刪除與閱讀工作都會無效。 如果您只是查閱一下郵件而已的話,一般來說,建議使用這個離開啦!除非你真的要刪除某些信件。 |
| q | 相對于 exit 是不動作離開, q 則會實際進行你剛剛所執行的任何動作 (尤其是刪除!) |
舊版的 CentOS 在使用 mail 讀信后,通過 q 離開始,會將已讀信件移動到 ~/mbox 中,不過目前 CentOS 7 已經不這么做了! 所以離開 mail 可以輕松愉快的使用 q 了呢!
- 鳥哥的Linux私房菜:基礎學習篇 第四版
- 目錄及概述
- 第零章、計算機概論
- 0.1 電腦:輔助人腦的好工具
- 0.2 個人電腦架構與相關設備元件
- 0.3 數據表示方式
- 0.4 軟件程序運行
- 0.5 重點回顧
- 0.6 本章習題
- 0.7 參考資料與延伸閱讀
- 第一章、Linux是什么與如何學習
- 1.1 Linux是什么
- 1.2 Torvalds的Linux發展
- 1.3 Linux當前應用的角色
- 1.4 Linux 該如何學習
- 1.5 重點回顧
- 1.6 本章習題
- 1.7 參考資料與延伸閱讀
- 第二章、主機規劃與磁盤分區
- 2.1 Linux與硬件的搭配
- 2.2 磁盤分區
- 2.3 安裝Linux前的規劃
- 2.4 重點回顧
- 2.5 本章習題
- 2.6 參考資料與延伸閱讀
- 第三章、安裝 CentOS7.x
- 3.1 本練習機的規劃--尤其是分區參數
- 3.2 開始安裝CentOS 7
- 3.3 多重開機安裝流程與管理(Option)
- 3.4 重點回顧
- 3.5 本章習題
- 3.6 參考資料與延伸閱讀
- 第四章、首次登陸與線上求助
- 4.1 首次登陸系統
- 4.2 文字模式下指令的下達
- 4.3 Linux系統的線上求助man page與info page
- 4.4 超簡單文書編輯器: nano
- 4.5 正確的關機方法
- 4.6 重點回顧
- 4.7 本章習題
- 4.8 參考資料與延伸閱讀
- 第五章、Linux 的文件權限與目錄配置
- 5.1 使用者與群組
- 5.2 Linux 文件權限概念
- 5.3 Linux目錄配置
- 5.4 重點回顧
- 5.5 本章練習
- 5.6 參考資料與延伸閱讀
- 第六章、Linux 文件與目錄管理
- 6.1 目錄與路徑
- 6.2 文件與目錄管理
- 6.3 文件內容查閱
- 6.4 文件與目錄的默認權限與隱藏權限
- 6.5 指令與文件的搜尋
- 6.6 極重要的復習!權限與指令間的關系
- 6.7 重點回顧
- 6.8 本章習題:
- 6.9 參考資料與延伸閱讀
- 第七章、Linux 磁盤與文件系統管理
- 7.1 認識 Linux 文件系統
- 7.2 文件系統的簡單操作
- 7.3 磁盤的分區、格式化、檢驗與掛載
- 7.4 設置開機掛載
- 7.5 內存交換空間(swap)之創建
- 7.6 文件系統的特殊觀察與操作
- 7.7 重點回顧
- 7.8 本章習題 - 第一題一定要做
- 7.9 參考資料與延伸閱讀
- 第八章、文件與文件系統的壓縮,打包與備份
- 8.1 壓縮文件的用途與技術
- 8.2 Linux 系統常見的壓縮指令
- 8.3 打包指令: tar
- 8.4 XFS 文件系統的備份與還原
- 8.5 光盤寫入工具
- 8.6 其他常見的壓縮與備份工具
- 8.7 重點回顧
- 8.8 本章習題
- 8.9 參考資料與延伸閱讀
- 第九章、vim 程序編輯器
- 9.1 vi 與 vim
- 9.2 vi 的使用
- 9.3 vim 的額外功能
- 9.4 其他 vim 使用注意事項
- 9.5 重點回顧
- 9.6 本章練習
- 9.7 參考資料與延伸閱讀
- 第十章、認識與學習BASH
- 10.1 認識 BASH 這個 Shell
- 10.2 Shell 的變量功能
- 10.3 命令別名與歷史命令
- 10.4 Bash Shell 的操作環境:
- 10.5 數據流重導向
- 10.6 管線命令 (pipe)
- 10.7 重點回顧
- 10.8 本章習題
- 10.9 參考資料與延伸閱讀
- 第十一章、正則表達式與文件格式化處理
- 11.1 開始之前:什么是正則表達式
- 11.2 基礎正則表達式
- 11.3 延伸正則表達式
- 11.4 文件的格式化與相關處理
- 11.5 重點回顧
- 11.6 本章習題
- 11.7 參考資料與延伸閱讀
- 第十二章、學習 Shell Scripts
- 12.1 什么是 Shell scripts
- 12.2 簡單的 shell script 練習
- 12.3 善用判斷式
- 12.4 條件判斷式
- 12.5 循環 (loop)
- 12.6 shell script 的追蹤與 debug
- 12.7 重點回顧
- 12.8 本章習題
- 第十三章、Linux 帳號管理與 ACL 權限設置
- 13.1 Linux 的帳號與群組
- 13.2 帳號管理
- 13.3 主機的細部權限規劃:ACL 的使用
- 13.4 使用者身份切換
- 13.5 使用者的特殊 shell 與 PAM 模塊
- 13.6 Linux 主機上的使用者訊息傳遞
- 13.7 CentOS 7 環境下大量創建帳號的方法
- 13.8 重點回顧
- 13.9 本章習題
- 13.10 參考資料與延伸閱讀
- 第十四章、磁盤配額(Quota)與進階文件系統管理
- 14.1 磁盤配額 (Quota) 的應用與實作
- 14.2 軟件磁盤陣列 (Software RAID)
- 14.3 邏輯卷軸管理員 (Logical Volume Manager)
- 14.4 重點回顧
- 14.5 本章習題
- 14.6 參考資料與延伸閱讀
- 第十五章、例行性工作調度(crontab)
- 15.1 什么是例行性工作調度
- 15.2 僅執行一次的工作調度
- 15.3 循環執行的例行性工作調度
- 15.4 可喚醒停機期間的工作任務
- 15.5 重點回顧
- 15.6 本章習題
- 第十六章、程序管理與 SELinux 初探
- 16.1 什么是程序 (process)
- 16.2 工作管理 (job control)
- 16.3 程序管理
- 16.4 特殊文件與程序
- 16.5 SELinux 初探
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考資料與延伸閱讀
- 第十七章、認識系統服務 (daemons)
- 17.1 什么是 daemon 與服務 (service)
- 17.2 通過 systemctl 管理服務
- 17.3 systemctl 針對 service 類型的配置文件
- 17.4 systemctl 針對 timer 的配置文件
- 17.5 CentOS 7.x 默認啟動的服務簡易說明
- 17.6 重點回顧
- 17.7 本章習題
- 17.8 參考資料與延伸閱讀
- 第十八章、認識與分析登錄文件
- 18.1 什么是登錄文件
- 18.2 rsyslog.service :記錄登錄文件的服務
- 18.3 登錄文件的輪替(logrotate)
- 18.4 systemd-journald.service 簡介
- 18.5 分析登錄文件
- 18.6 重點回顧
- 18.7 本章習題
- 18.8 參考資料與延伸閱讀
- 第十九章、開機流程、模塊管理與 Loader
- 19.1 Linux 的開機流程分析
- 19.2 核心與核心模塊
- 19.3 Boot Loader: Grub2
- 19.4 開機過程的問題解決
- 19.5 重點回顧
- 19.6 本章習題
- 19.7 參考資料與延伸閱讀
- 第二十章、基礎系統設置與備份策略
- 20.1 系統基本設置
- 20.2 服務器硬件數據的收集
- 20.3 備份要點
- 20.4 備份的種類、頻率與工具的選擇
- 20.5 鳥哥的備份策略
- 20.6 災難復原的考慮
- 20.7 重點回顧
- 20.8 本章習題
- 20.9 參考資料與延伸閱讀
- 第二十一章、軟件安裝:源代碼與 Tarball
- 20.1 開放源碼的軟件安裝與升級簡介
- 21.2 使用傳統程序語言進行編譯的簡單范例
- 21.3 用 make 進行宏編譯
- 21.4 Tarball 的管理與建議
- 21.5 函數庫管理
- 21.6 檢驗軟件正確性
- 21.7 重點回顧
- 21.8 本章習題
- 21.9 參考資料與延伸閱讀
- 第二十二章、軟件安裝 RPM, SRPM 與 YUM
- 22.1 軟件管理員簡介
- 22.2 RPM 軟件管理程序: rpm
- 22.3 YUM 線上升級機制
- 22.4 SRPM 的使用 : rpmbuild (Optional)
- 22.5 重點回顧
- 22.6 本章習題
- 22.7 參考資料與延伸閱讀
- 第二十三章、X Window 設置介紹
- 23.1 什么是 X Window System
- 23.2 X Server 配置文件解析與設置
- 23.3 顯卡驅動程序安裝范例
- 23.4 重點回顧
- 23.5 本章習題
- 23.6 參考資料與延伸閱讀
- 第二十四章、Linux 核心編譯與管理
- 24.1 編譯前的任務:認識核心與取得核心源代碼
- 24.2 核心編譯的前處理與核心功能選擇
- 24.3 核心的編譯與安裝
- 24.4 額外(單一)核心模塊編譯
- 24.5 以最新核心版本編譯 CentOS 7.x 的核心
- 24.6 重點回顧
- 24.7 本章習題
- 24.8 參考資料與延伸閱讀