一個很好用的程式 可以讓多個程式同時執行,卻不互相干擾螢幕上的東西 甚至可以不透過 nohup 就讓程式在登出後繼續執行 並且在下次登入時還原工作環境,看到程式在螢幕的輸出 螢幕回捲、複製貼上、搜尋的功能也很常用 screen 程式 啟動 screen 並執行這個程式 如果 screen 已經啟動就在新的 window 執行 (如果沒有正確的執行,請檢查 STY 環境變數) screen -ls 列出目前已執行的 screen screen -r 回復已經 detach 的 screen screen -d 將目前已經 attach 的 screen detach 進入以後...... ^A 0...9 切換到指定的 window ^A ^A 切換到最近使用的 window ^A A 變更這個 window 的標題 ^A a 送出 ^A 字元 ^A c 開一個新的 window,裡面執行 shell ^A ^D detach 目前的 screen ^A ^Z suspend 目前的 screen ^A i 顯示這個 window 的相關資訊 ^A " 顯示 window 切換選單 ^A : 對 screen 輸入指令 ^A L 切換登入狀態 ^A ^[ 進入複製貼上模式 ^A ] 貼上 ^A m 顯示最後一個訊息 複製貼上模式 在開始處按空白鍵,結束處按空白鍵即可 / ? 搜尋 y Y 複製一整行 a 加入而非取代現有的緩衝區內容 J 在四種複製模式中切換 以矩形區塊進行複製 c 設定左邊界 C 設定右邊界 同時複製多筆資料 (1) 先依正常方法複製,再以指令 readreg a 將資料存入 a 緩衝區裡 (2) 仍依正常方法複製,但這次以 readreg b 將資料存入 b 緩衝區中 (3) 重複...... (4) 使用 paste a、paste b ...... 指令貼上 視窗分割 ^A S 分割視窗 ^A Tab 切換視窗 ^A X 移除視窗 ^A Q 只保留目前區域 (指令 resize 可調整視窗高度) 常用 screen 指令 vbell [on|off] Sets the visual bell setting for this window. vbellwait sec Define a delay in seconds after each display of screen's visual bell message. screen [-opts] [n] [cmd [args]] Establish a new window. utf8 [on|off [on|off]] (很好用!) encoding enc [enc] (更好用!) zombie [keys] 設定 window 內的程式結束後的動作 若不加參數,則表示程式後立刻關閉 window (預設值) 若要加參數,後面可接兩個按鍵的名稱,例如 zombie ^C^R 表示 window 結束後,按 ^C 關閉,按 ^R 再次執行相同程式 (注意這個指令會影響所有 window) wrap [on|off] Sets the line-wrap setting for the current window. height [-w|-d] [lines [cols]] 指定視窗高度和寬度 (加上 -w 表示不更改實際視窗大小) ============================================================================== 用 screen 解決編碼問題 當畫面只支援 Big5 時 啟動 screen 前,先把 locale 設定為 zh_TW.Big5 啟動 screen 後: 切換為 UTF-8:utf8 on 切換回 Big5 :encoding big5 當畫面只支援 UTF-8 時 啟動 screen 前,先把 locale 設定為 zh_TW.UTF-8 啟動 screen 後: 切換為 Big5 :encoding big5 utf8 切換回 UTF-8:utf8 on ============================================================================== 多人使用一個 screen 一個很棒的功能!多個人可以看到同一個終端機畫面 可以對指令、視窗做權限控管 *** 使用此功能的重要前提 *** screen 可執行檔本身的擁有者必須為 root,且有 setuid 權限 multiuser on|off 開啟/關閉多人使用模式 sessionname [name] 顯示或變更 screen session 名稱 screen -ls username/ 查看別人的 screen session screen -r username/session 連接到別人的 screen session (必須已啟用 multiuser) displays (^A *) 列出所有連上的人 acladd usernames [crypted-pw] 授予使用者完全控制的權限 (請小心使用!) aclchg usernames +rwx "#?" 同上 (注意新的使用者有權拔除你的權限!) aclchg usernames permbits list 變更權限 特殊符號: # 表所有視窗 + 表加上權限 ? 表所有指令 - 表收回權限 * 表所有已知使用者 aclchg user +rw 4 允許使用者在視窗 4 進行讀寫 aclchg user +r 3 允許使用者觀看視窗 3 的畫面,但不可寫入 aclchg user +x select 允許使用者執行 select 指令 以下列出常用指令:(也就是正常情況下要允許的指令) select (^A ') 選取視窗 windowlist (^A ") 列出視窗清單 other (^A ^A)切換到另一個視窗 meta (^A a) 輸入 ^A detach (^A d) 中斷連接 screen session reset (^A Z) 回歸預設的終端機模式 (螢幕亂掉時可用) hardcopy (^A h) 複製螢幕畫面到檔案 info (^A i) 顯示資訊 redisplay (^A l) 重繪螢幕 lastmsg (^A m) 顯示最後的訊息 next (^A n) 切換到下一個視窗 prev (^A p) 切換到前一個視窗 xon (^A q) 傳送 ^Q xoff (^A s) 傳送 ^S windows (^A w) 列出視窗清單 suspend (^A z) suspend screen help (^A ?) 顯示說明 colon (^A :) 進入命令列 copy (^A ^[)進入複製、回捲模式 paste (^A ]) 貼上 writebuf (^A >) 將複製緩衝區寫入檔案 readbuf (^A <) 從檔案讀回複製緩衝區 displays (^A *) 列出所有連上的人 stuff 從命令列貼上資料到視窗 (按上下鍵似乎需要這個) acldel usernames 取消使用者連接的權限 (他會立即被 remote detach) aclgrp username [groupname] 建立一個共享權限的群組 aclumask [[users]+bits |[users]-bits .... ]