Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Screen命令行窗口管理器 #114

Open
Qingquan-Li opened this issue Feb 17, 2019 · 0 comments
Open

Screen命令行窗口管理器 #114

Qingquan-Li opened this issue Feb 17, 2019 · 0 comments
Labels

Comments

@Qingquan-Li
Copy link
Owner

Qingquan-Li commented Feb 17, 2019

GNU Screen 是一款由 GNU 计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。


一、功能

GNU Screen可以看作是窗口管理器(如 Windows 窗口)的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。

  • 会话恢复

    只要 Screen 本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录(如 ssh )的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行 screen -r 就可以恢复会话的运行。

    同样在暂时离开的时候,也可以执行离开命令 screen -d ,在保证里面的程序正常运行的情况下让 Screen 挂起(切换到后台)。

  • 多窗口

    在 Screen 环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。

    Screen 实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分割和命名,还可以监视后台窗口的活动。

  • 会话共享
    Screen 可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。


二、下载安装

大多数类 Unix 系统(例如 Ubuntu 、macOS )都自带安装了 Screen 。

下载安装(以 Ubuntu 为例):

$ sudo apt-get install screen

三、常用命令

1. 语法:

screen [-AmRvx -ls -wipe][-d <session>][-h <行数>][-r <session>][-s <shell>][-S <session>]

参数说明

  • -A   将所有的视窗都调整为目前终端机的大小

  • -m   即使目前已在 session 中的 screen session ,仍强制建立新的 screen session

  • -R   先试图恢复离线的 session 。若找不到离线的session,即建立新的 screen session

  • -v   显示版本信息

  • -x   恢复之前离线的 screen session

  • -ls或-list 显示目前所有的 screen session

  • -wipe   检查目前所有的 screen session ,并删除已经无法使用的 screen session

  • -d <session> 离开指定的 screen session(screen -r 不能恢复时,screen -d 离开session再重新恢复)

  • -h <行数>   指定视窗的缓冲区行数

  • -r <session> 恢复离线的 screen session

  • -s <shell> 指定建立新视窗时,所要执行的 shell

  • -S<session> 指定 screen session 的名称


2. 在每个screen session 下,所有命令都以 control+a(C-a) 开始

C-a ? -> 显示所有键绑定信息
C-a c -> 创建一个新的运行shell的窗口并切换到该窗口
C-a n -> Next,切换到下一个 window 
C-a p -> Previous,切换到前一个 window 
C-a 0..9 -> 切换到第 0..9 个 window
Ctrl+a [Space] -> 由视窗0循序切换到视窗9
C-a C-a -> 在两个最近使用的 window 间切换 
C-a x -> 锁住当前的 window,需用用户密码解锁
C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。 
C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
C-a w -> 显示所有窗口列表
C-a t -> time,显示当前时间,和系统的 load 
C-a k -> kill window,强行关闭当前的 window
C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
    C-b Backward,PageUp 
    C-f Forward,PageDown 
    H(大写) High,将光标移至左上角 
    L Low,将光标移至左下角 
    0 移到行首 
    $ 行末 
    w forward one word,以字为单位往前移 
    b backward one word,以字为单位往后移 
    Space 第一次按为标记区起点,第二次按为终点 
    Esc 结束 copy mode 
C-a ] -> paste,把刚刚在 copy mode 选定的内容贴上

3. 使用实例

$ screen -S session # 新建一个session
# control+a+d 快捷键暂时离开。保留screen会话中的任务或程序。此时该session状态显示由“Attached”变为“Detached”。
$ screen -d session # detach离开一个session。同contrl+a+d。如果本地用的Shell出现“卡顿”,自己关闭了这个窗口,但是screen -r重新连接时,发现状态为“Attached”,不能连接。这时,可以使用这个命令,先离开会话,再screen -r重新连接。
$ screen -ls # 列出当前所有的session
$ screen -r session # 回到某个session
$ screen -d -r session # 结束当前session并回到某个session
$ screen -X -S [session] quit # 结束一个已经Detached(离开)的screen会话
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant