代码之家  ›  专栏  ›  技术社区  ›  Henry B

GNU屏幕生存指南[关闭]

  •  104
  • Henry B  · 技术社区  · 16 年前

    人们认为什么不仅是你需要了解的关于优秀屏幕实用性的基本知识,而且是那些你认为从一开始就值得教给初学者的东西?

    我刚把一个朋友介绍给屏幕,他们很难适应。因此,类比和记忆绑定的便利技巧等将是非常棒的。

    19 回复  |  直到 8 年前
        1
  •  91
  •   Flexo - Save the data dump sunny moon    10 年前

    我使用屏幕已经超过10年了,可能使用的功能还不到一半。所以绝对没有必要马上学习它的所有特性(我不建议尝试)。我的日常命令是:

    ^A ^W - window list, where am I
    ^A ^C - create new window
    ^A space - next window
    ^A p - previous window
    ^A ^A - switch to previous screen (toggle)
    ^A [0-9] - go to window [0-9]
    ^A esc - copy mode, which I use for scrollback
    

    我想就是这样。我有时使用分屏功能,但肯定不是每天都使用。另一个技巧是,如果屏幕似乎被锁定,因为您意外地击中了某个随机组合键,请同时执行^q和^a^q以尝试将其解锁。

        2
  •  36
  •   Roel    16 年前

    直到我找到一种方法在屏幕底部设置一个“状态栏”,显示你在“选项卡”或“虚拟屏幕”上的内容以及其他哪些内容,我才习惯屏幕。以下是我的设置:

    [roel@roel ~]$ cat .screenrc
    # Here comes the pain...
    caption always "%{=b dw}:%{-b dw}:%{=b dk}[ %{-b dw}%{-b dg}$USER%{-b dw}@%{-b dg}%H %{=b dk}] [ %= %?%{-b dg}%-Lw%?%{+b dk}(%{+b dw}%n:%t%{+b dk})%?(%u)%?%{-b dw}%?%{-b dg}%+Lw%? %{=b dk}]%{-b dw}:%{+b dw}:"
    
    backtick 2 5 5 $HOME/scripts/meminfo
    hardstatus alwayslastline "%{+b dw}:%{-b dw}:%{+b dk}[%{-b dg} %0C:%s%a %{=b dk}]-[   %{-b dw}Load%{+b dk}:%{-b dg}%l %{+b dk}] [%{-b dg}%2`%{+b dk}] %=[ %{-b dg}%1`%{=b dk} ]%{-b dw}:%{+b dw}:%<"
    
    sorendition "-b dw"
    [roel@roel ~]$ cat ~/scripts/meminfo
    #!/bin/sh
    RAM=`cat /proc/meminfo | grep "MemFree" | awk -F" " '{print $2}'`
    SWAP=`cat /proc/meminfo | grep "SwapFree" | awk -F" " '{print $2}'`
    echo -n "${RAM}kb/ram ${SWAP}kb/swap"
    [roel@roel ~]$
    
        3
  •  30
  •   Valery Viktorovsky    9 年前

    Ctrl键 + ?-显示帮助屏幕!

        4
  •  26
  •   agnul    16 年前

    如果你的朋友有压力的习惯 ^A 为了进入巴什的开头,他/她会有一些惊喜,因为 ^ A 是屏幕命令键绑定。通常情况下,我最后会看到一个冻结的屏幕,可能是因为我按下了某个随机键 ^ A -)

    在这种情况下,我试着

    ^A s ^A q 阻止/取消阻止终端滚动

    解决这个问题。要转到屏幕内一行的开头,按键顺序是 ^A a

        5
  •  12
  •   Andrew Johnson    16 年前

    您可以将escape键从ctrl-a重新映射为您选择的另一个键,因此如果您确实将其用于其他用途,例如转到bash中的行的开头,则只需在~/.screenrc文件中添加一行。要使其^b或^b,请使用:

    escape ^bB
    

    在命令行中,使用名称会话来控制多个会话。我每个任务使用一个会话,每个会话有多个选项卡:

      screen -ls                lists your current screen sessions
      screen -S <name>          creates a new screen session called name
      screen -r <name>          connects to the named screen sessions
    

    使用屏幕时,您只需要几个命令:

      ^A c          create a new shell
      ^A [0-9]      switch shell
      ^A k          kill the current shell
      ^A d          disconnect from screen
      ^A ?          show the help
    

    一个优秀的快速参考可以找到 here . 值得做书签。

        6
  •  8
  •   Hulk1991 moinudin    11 年前

    对于那些熟悉屏幕但往往不记得他们在手册页上读到的内容的人来说,有些提示是:

    • 要更改屏幕窗口的名称非常容易: CTRL + 转移 + .
    • 你错过了屏幕上最后一条信息了吗? CTRL + CTRL + 会再给你看一次。
    • 如果您想运行某些内容(如跟踪文件),并让屏幕在发生更改时通知您,请使用 CTRL + 转移 + 在目标窗口。警告:如果 任何东西 变化。
    • 要直接选择窗口15吗?试试这些在你的 .screenrc 文件:
    bind  ! select 11
    bind  @ select 12
    bind \# select 13
    bind  $ select 14
    bind  % select 15
    bind \^ select 16
    bind  & select 17
    bind  * select 18
    bind  ( select 19
    bind  ) select 10
    

    指定的 CTRL + 转移 + 0到9 对于窗户10到19。

        7
  •  6
  •   Steve Kemp    16 年前

    http://www.debian-administration.org/articles/34

    我几年前就写过,但它仍然是一个很好的介绍,得到了很多积极的反馈。

        8
  •  6
  •   Zsolt Botykai    16 年前

    我“必须”加上这个:加上

    bind s
    

    对你 .screenrc ,如果您像我一样使用拆分窗口, C-a S 拆分实际窗口,但 C-a s 把它冷冻起来。所以我禁用了冻结快捷方式。

        9
  •  6
  •   Hulk1991 moinudin    11 年前

    CTRL + 是一把特殊的钥匙。

    CTRL + D -[D]Etach,休假计划(IRSSI?)在后台,回家。

    CTRL + C [C]创建新窗口 CTRL + 0-9 按数字在窗口之间切换

    屏幕-R-返回分离会话

    这覆盖了90%的用例。不要试图一次性显示所有功能。

        10
  •  6
  •   Hulk1991 moinudin    11 年前

    Ctrl键 + 是基本命令

    Ctrl键 + n =转到***n***外部屏幕

    Ctrl键 + =转到上一屏幕

    Ctrl键 + C =***C***新建屏幕

    Ctrl键 + D =***d***打开屏幕

        11
  •  4
  •   muru Rider44    8 年前

    不是很重要,不仅仅与屏幕有关,而是 enabling 256 colors in my terminal, GNU Screen and Vim 大大改善了我的屏幕体验(尤其是因为我每天在VIM中编码大约8小时——有一些非常适合眼睛的配色方案)。

        12
  •  3
  •   David Dean    16 年前

    有一些 interesting work 在Ubuntu服务器的下一个版本中,在默认情况下完成一个良好的GNU屏幕设置,包括使用屏幕底部显示所有窗口以及其他有用的机器详细信息(如可用的更新以及机器是否需要重新启动)。你可能会抓住他们 .screenrc 并根据您的需要进行定制。

    我有最有用的命令 屏幕RC 以下是

    shelltitle "$ |bash" # make screen assign window titles automatically
    hardstatus alwayslastline "%w" # show all window titles at bottom line of term
    

    这样,我总是知道哪些窗口是打开的,以及当前在其中运行的内容。

        13
  •  3
  •   Gary Chambers    15 年前

    我对.screenrc做的第一个修改是更改escape命令。和你们大多数人一样,我不喜欢默认的ctrl-a序列,因为它在几乎所有其他上下文中都会干扰基本功能。在我的.screenrc文件中,我添加了:

    逃逸

    这就是倒勾。

    这使我可以使用反勾号作为转义键(例如,要创建一个新屏幕,我按反勾号C,分离反勾号D,反勾号-?是帮助,反勾号是前一个屏幕等)。它干扰的唯一方法(我必须打破这个习惯)是在命令行上使用反勾号来捕获执行输出,或者粘贴任何包含反勾号的内容。对于前者,我使用bash$(命令)约定修改了我的习惯。对于后者,我通常只是打开另一个xterm或从屏幕上分离,然后粘贴包含反勾号的内容。最后,如果我想插入一个文字倒勾,我只需按倒勾-e。

        14
  •  3
  •   user203445    15 年前

    我不记得是谁偷的(dotfile.org上的某个人)。我为ssh稍微修改了一下:

    #!/bin/sh
    # scr - Runs a command in a fresh screen
    #
    # Get the current directory and the name of command
    
    wd=`pwd`
    cmd=$1
    shift
    
    # We can tell if we are running inside screen by looking
    # for the STY environment variable.  If it is not set we
    # only need to run the command, but if it is set then
    # we need to use screen.
    
    if [ -z "$STY" ]; then
            $cmd $*
    else
            # Screen needs to change directory so that
            # relative file names are resolved correctly.
            screen -X chdir $wd
    
            # Ask screen to run the command
            if [ $cmd == "ssh" ]; then
                    screen -X screen -t ""${1##*@}"" $cmd $*
            else
                    screen -X screen -t "$cmd $*" $cmd $*
            fi
    fi
    

    然后我设置以下bash别名:

    vim() {
            scr vim $*
    }
    
    man() {
            scr man $*
    }
    
    info() {
            scr info $*
    }
    
    watch() {
            scr watch $*
    }
    
    ssh() {
            scr ssh $*
    }
    

    它为上面的别名和iff打开了一个新的屏幕,使用ssh将屏幕标题重命名为ssh主机名。

    干杯

        15
  •  2
  •   innaM    16 年前

    我喜欢为Windows设置具有描述性名称的屏幕会话。^ A将允许您为当前窗口命名,^A”将为您提供窗口列表。 完成后,用^A D分离屏幕并用屏幕-R重新连接

        16
  •  2
  •   Community CDub    7 年前

    有人在上发布了类似的问题 Server Fault .

        17
  •  1
  •   bambams    14 年前

    我喜欢使用 screen -d -RR 自动创建/附加到给定屏幕。我创建了bash函数来简化…

    function mkscreen
    {
        local add=n
    
        if [ "$1" == '-a' ]; then
            add=y
            shift;
        fi
    
        local name=$1;
        shift;
        local command="$*";
    
        if [ -z "$name" -o -z "$command" ]; then
            echo 'Usage: mkscreen [ -a ] name command
    
        -a          Add to .bashrc.' 1>&2;
            return 1;
        fi
    
        if [ $add == y ]; then
            echo "mkscreen $name $command" >> $HOME/.bashrc;
        fi
    
        alias $name="/usr/bin/screen -d -RR -S $name $command";
    
        return 0;
    }
    
    function rmscreen
    {
        local delete=n
    
        if [ "$1" == '-d' ]; then
            delete=y
            shift;
        fi
    
        local name=$1;
    
        if [ -z "$name" ]; then
            echo 'Usage: rmscreen [ -d ] name
    
        -d          Delete from .bashrc.' 1>&2;
            return 1;
        fi
    
        if [ $delete == y ]; then
            sed -i -r "/^mkscreen $name .*/d" $HOME/.bashrc;
        fi
    
        unalias $name;
    
        return 0;
    }
    

    他们创建了一个别名 /usr/bin/screen -d -RR -S $name $command . 例如,我喜欢在屏幕会话中使用irssi,所以在.bashrc(在这些函数下面)中,我有:

    mkscreen irc /usr/bin/irssi
    

    然后我就可以打字了 irc 在一个终端进入IRSSI。如果屏幕“irc”还不存在,则会创建它并从中运行/usr/bin/irssi(当然,它会自动连接)。如果它已经在运行,那么我就重新附加它,强制分离已经附加到它的任何其他实例。很不错。

    另一个例子是在遇到Perldocs时为它们创建临时屏幕别名:

    mkscreen perlipc perldoc perlipc
    perlipc # Start reading the perldoc, ^A d to detach.
    ...
    # Later, when I'm done reading it, or at least finished
    # with the alias, I remove it.
    rmscreen perlipc 
    

    -a选项(必须是第一个参数)将屏幕别名附加到.bashrc(因此它是持久的),而-d则将其删除(这些可能具有破坏性,因此使用风险自担)。除息的

    追加:

    另一个我在使用屏幕时觉得很方便的方法是:

    alias sls='/usr/bin/screen -ls'
    

    这样你就可以用更少的按键列出你的屏幕。我不知道是否 sls 与任何现有的实用程序冲突,但在我的系统上当时没有,所以我选择了它。

        18
  •  0
  •   dummy    16 年前

    ^ A A切换回你刚来的屏幕。

        19
  •  0
  •   user2146463    12 年前

    ^对于Unix用户来说,A是一个很好的特殊字符,但是如果您使用屏幕与OpenVMS交谈,那么无法^ A将使您过早秃顶。在vms中,如果在从历史缓冲区执行之前编辑一个dcl命令,那么插入模式是关闭的(由于一些原因,我不能进入这里)。要打开它,这样您就不会过度键入命令而不是将内容隔开,您必须单击^A