人们认为什么不仅是您需要了解的有关出色的 Screen 实用程序的基本知识,而且是您认为值得从头开始教给初学者的知识?

我刚刚向一位朋友介绍了 Screen,但他们很难适应它。因此,类比和方便的记忆技巧等都是如此。会很棒的。

有帮助吗?

解决方案

我使用 screen 已经超过 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 尝试解锁它。

其他提示

我无法习惯屏幕,直到我找到了一种方法,可以在屏幕底部设置一个“状态栏”,显示您所在的“选项卡”或“虚拟屏幕”以及还有哪些其他选项。这是我的设置:

[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 ~]$

控制键+A ?- 显示帮助屏幕!

如果你的朋友有按的习惯 ^A 在 bash 中到达该行的开头,他/她会遇到一些惊喜,因为 ^A 是屏幕命令键绑定。通常我最终会遇到冻结的屏幕,可能是因为我在之后按下了一些随机键 ^A :-)

在那些情况下我尝试

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

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

您可以将 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

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

  ^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

可以找到一个很好的快速参考 这里. 。值得加书签。

对于那些熟悉 screen 但往往不记得在手册页中读过的内容的人来说,有一些提示:

  • 更改屏幕窗口的名称非常简单: 控制键+A 转移+A.
  • 您错过了屏幕上的最后一条消息吗? 控制键+A 控制键+ 将再次为您展示。
  • 如果您想运行某些操作(例如拖尾文件)并让屏幕在发生更改时告诉您,请使用 控制键+A 转移+ 在目标窗口上。警告:它会让你知道是否 任何事物 变化。
  • 想直接选择窗口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

这分配了 控制键+A 转移+0 到 9 适用于 Windows 10 至 19。

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

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

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

bind s

给你的 .screenrc, ,如果你 - 像我一样 - 曾经使用分割窗口,如 C-a S 分割实际的窗口,但是 C-a s 冻结它。所以我只是禁用了冻结快捷方式。

控制键+A 是一个特殊的键。

控制键+A d - [d]etach,将程序(irssi?)留在后台,回家。

控制键+A C [c]创建一个新窗口控制键+A 0-9 按数字在窗口之间切换

screen -r - 返回分离会话

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

控制键+A 是基本命令

控制键+A = 转到***N***下一个屏幕

控制键+A = 转到***P***上一个屏幕

控制键+A C = ***C***创建新屏幕

控制键+A D = ***D***附着你的屏幕

并不是真正重要,不仅与屏幕有关,而且 在我的终端、GNU Screen 和 Vim 中启用 256 色 大大改善了我的屏幕体验(特别是因为我每天在 Vim 中编码大约 8 小时 - 有一些很棒的护眼配色方案)。

有一些 有趣的工作 在 Ubuntu Server 的下一个版本中,默认情况下会进行良好的 gnu 屏幕设置,其中包括使用屏幕底部显示所有窗口以及其他有用的计算机详细信息(例如 # 可用更新以及计算机是否可用)需要重新启动)。你也许可以抓住他们的 .screenrc 并根据您的需求进行定制。

我的最有用的命令 .screenrc 以下是

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

这样我就总能知道哪些窗口是打开的,以及它们当前正在运行什么。

我对 .screenrc 所做的第一个修改是更改转义命令。与你们中的许多人不同,我不喜欢默认的 Ctrl-A 序列,因为它会干扰几乎所有其他上下文中的基本功能。在我的 .screenrc 文件中,我添加:

转义`e

那是反引号-e。

这使我能够使用反引号作为转义键(例如要创建一个新屏幕,我按反引号-c,分离是反引号-d,反引号-?是帮助,反引号-反引号是上一个屏幕,等等)。它干扰的唯一方式(我必须改掉这个习惯)是在命令行上使用反引号来捕获执行输出,或粘贴任何包含反引号的内容。对于前者,我通过使用 BASH $(command) 约定来改变我的习惯。对于后者,我通常只是弹出另一个 xterm 或从屏幕上分离,然后粘贴包含反引号的内容。最后,如果我想插入文字反引号,只需按反引号-e即可。

我不记得我从谁那里偷了这个(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 $*
}

它为上述别名打开一个新屏幕,如果使用 ssh,它会使用 ssh 主机名重命名屏幕标题。

干杯z0mbix

我喜欢使用窗口的描述性名称来设置屏幕会话。^a A 会让你给当前窗口命名,^a " 会给你一个窗口列表。完成后,使用 ^a d 分离屏幕并使用 screen -R 重新连接

有人在上面发布了类似的问题 服务器故障.

我喜欢用 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 则将其删除(这些可能具有破坏性,因此使用时请自行承担风险)。xD

附加:

当我经常使用 screen 时,我发现另一个很方便的 bash-ism:

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

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

^A A 切换回您刚才所在的屏幕。

对于 UNIX 用户来说,^A 是一个非常重要的特殊字符,但是如果您使用屏幕与 OpenVMS 对话,那么无法使用 ^A 将使您过早秃头。在 VMS 中,如果您在从历史缓冲区执行之前编辑 DCL 命令,则插入模式将关闭(出于某些原因,我不会在这里讨论)。要打开它,这样您就不会过度输入命令而不是将内容分开,您必须按 ^A

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top