我有一個終端輸出,我希望多個用戶可以使用它
目前類似:
command > /var/logs
對於輸入,並且:
watch tail -30 /var/logs
對於輸入端子。
然而這是不可取的,因為 watch 只輪詢而不是在有更新時輸出,而且 tail 不允許回滾。
答案1
您提出的兩個問題:
僅觀看民意調查,而不是在有更新時輸出
tail -f
不輪詢。從 GNU Coreutils 7.5 版本開始,tail -f
將使用 Linux 核心的inotify
介面從核心接收指示檔案已修改的訊號。如果您不使用 GNU Coreutils,或者由於某種原因使用早於 7.5 的版本,它將每秒輪詢一次。它可能還會在非 Linux POSIX 作業系統(BSD、Solaris 等)上進行輪詢,但您必須根據具體情況進行研究:其中一些作業系統使用 GNU Coreutils,但核心不支援inotify
;其中一些根本不使用 GNU Coreutils 來實現tail
。
tail 不允許回滾
該less
命令專門設計用於緩衝來自stdin
(例如來自tail
命令)的資料並允許您來回滾動。緩衝區不是無限的,但您可以使用命令列選項來增加或減少緩衝區以及修改向後滾動和向前滾動的緩衝區長度。
所以,也許,
tail -f /var/logs | less
將允許您保留日誌的回滾緩衝區,而無需輪詢(tail
只是閒置在那裡,不消耗 CPU,直到核心向其拋出一個訊號,讓它知道檔案已被修改)。
如果您需要多個使用者能夠從同一緩衝區讀取數據,您可以tail -f /var/logs
在一個screen
會話中運行。我原來的答案沒有考慮到您想要運行它以便多個用戶可以同時看到相同的日誌資料。 @Let_Me_Be 被提及screen
,然後我突然想到這可能是你最好的選擇。
因此,將我的解決方案和@Let_Me_Be 的解決方案放在一起:
screen -mdS logview -- tail -f /var/logs
警告:未經測試。如有錯誤請編輯。但我認為我們已經接近找到適當的解決方案了。
現在您只需要處於screen
多用戶模式。這有點複雜,所以我讓這網站不言而喻。要點是您必須添加multiuser on
到您的~/.screenrc
文件中。另請參閱常見問題在該連結的底部。
現在,用戶可以查看日誌:
screen -rS logview
應該這樣做。
答案2
screen
您想要一個類似或 的程式tmux
。