在管理我工作的服务器时,我使用屏幕执行命令行任务。我通常运行小命令(主要是文件系统任务),但有时我运行更广泛的任务(例如DBA)。这些任务的输出对我很重要。由于我在任务中使用Ubuntu和OS X(均为Terminal Windows),但是我需要使用屏幕,因此无法进行滚动,因此任何长输出(例如select中的500行表)对我来说都是不可见的。滚轮是不可能的。

当我说“滚动对我来说是不可见的时,我的意思是:



我当时考虑两个选项:


暂停(考虑分页)某条命令的输出,当输出开始时,它将让我阅读正在发生的事情,然后按“ Enter”,然后输出继续,直到没有其他显示为止。
在屏幕内滚动。但是我不知道这是否可行。

当然,我不知道这些选项是否真的如果可能的话,如何实现它们?其他替代方案将受到广泛欢迎。

#1 楼

屏幕具有自己的滚动缓冲区,因为它是终端多路复用器,并且必须处理多个缓冲区。

也许有更好的方法,但是我习惯于使用“复制模式”滚动(可以使用屏幕本身来复制文本,尽管这也需要粘贴命令):


按一下屏幕前缀组合(默认为C-a / control + A),然后按Escape键。
使用箭头键(↑和↓)向上/向下移动。
完成后,按q或Escape返回滚动缓冲区的末尾。

(如果不是按q或Escape而是按Enter或Return,然后移动光标,则将选择要复制的文本,然后再次按Enter或Return键将其复制。然后可以先粘贴C-a,再粘贴]。)

当然,您始终可以始终使用moreless使用的寻呼机,对于某些命令来说可能就足够了。

评论


同样,按q会退出复制模式而不复制任何内容(这是少按一次按钮)。这可能在vi的解释中,但现在链接已断开。

–娜塔奈尔·法利(Nathanael Farley)
2014年6月26日8:59



同样,按[Esc]也会退出复印模式。

–Sopalajo de Arrierez
2015年10月6日在21:06



任何方式向上翻页?

– Sungguk Lim
16-10-29在2:47

滚动缓冲区似乎支持类似于vi的命令:C-b和C-f用于向上/向下滚动页面。

–桐子
17年1月18日在7:30

在复制模式下,我的PageUp和PageDown按钮可以工作。第一次按仅移动一行,但随后按正常方式翻页。

–reas0n
17年2月28日在21:54

#2 楼

使用njsg指出的screen缓冲区是一个很好的解决方案。您还可以在屏幕内的xterm termcap信息中禁用备用文本缓冲区。禁用后,您可以使用滚动条(和鼠标滚轮)上下滚动。

将其添加到您的~/.screenrc中。

# Enable mouse scrolling and scroll bar history scrolling
termcapinfo xterm* ti@:te@


您可以在此处阅读更多讨论。

评论


通过键入Ctrl + A 、:来设置回滚限制,键入“ scrollback 10000”或您想要的任何数值

–lobi
16-11-10在22:20



使用此功能,Linux终端的典型快捷键(shift + pg上/下起始/结束)也可以使用,谢谢。

–托克兰
16-11-22在10:02

仅此技巧就使我重新考虑使用屏幕...

–鱼监视器
17年8月18日在10:56



+1比公认的解决方案更优雅。

–y o
17年10月23日在18:00

仅提供您自启动以来的输出屏幕-即,重新连接到其他地方意味着您无法向上滚动并查看之前发生的情况。但您仍然可以使用接受的答案中的解决方案来检索较早的输出-然后可以再次使用鼠标滚轮。

–菲尔
17年11月2日在4:08



#3 楼

所有这些答案都解决了如何在屏幕会话中导航的问题,但是screen命令中有一个内置功能,可以根据以下手册通过-L参数将所有内容存储在文件中:


-L告诉屏幕打开Windows的自动输出日志记录。


因此您可以执行以下操作:

screen -L -S testscreen


它将在当前目录中创建一个文件,名称为screenlog.#,其中#是该屏幕从0开始的数字。

这有很多优点,对我来说最重要的是:


自从我可以将日志文件保存在项目文件夹中以备将来参考以来,我一直在做记录。

使用tail -F实时监视进度,而无需连接到屏幕。
使用grep检查日志中的某些术语并产生通知(电子邮件,弹出窗口,voip等) C。)。可以将其应用于多个屏幕,而无需主动查看它们。




评论


我不知道-L屏幕标志,这非常有用! +1

–克雷登斯
19-6-27在16:11

只想添加更多,在执行screen命令的同一文件夹中会生成screenlog。#

–LêQuang Duy
19年8月6日,下午3:52

有趣的是,我正在使用屏幕,因为WSL2中的尾部不可靠。值得庆幸的是,在WSL之外。

–杰伊·基林(Jay Killeen)
8月20日4:42

@JayKilleen我认为您使用的是错误的工具;)少尝试-F即可获得所需的功能:linux.die.net/man/1/less(PS的错误工具当然是Window $)

–迈赫拉德·马哈茂迪(Mehrad Mahmoudian)
8月28日8:20

干杯将尝试一下。

–杰伊·基林(Jay Killeen)
8月31日0:36

#4 楼

我已经成功地通过将内容传递到more来获得基本的分页,例如:

ls -l | more


或者,如果您希望为语法突出显示之类的用例输出颜色,则可以使用

ls -l --color=always | more


这将导致输出,我可以轻松地一次翻阅一个屏幕。我还没有尝试@uther对~/.screenrc的修改,但是当有鼠标可用时,这似乎是一种持久的解决方案。

要尝试此操作,可以转到此BusyBox模拟器,然后...

cd ~/bin
ls -l --color=always | more


使用空格键翻页查看ls -l命令的结果,或使用Enter键逐行浏览结果。

#5 楼

如果您不明白,请清除结帐

https://stackoverflow.com/questions/18489216/how-to-scroll-up-and-down-in-sliced-screen-terminal

先按Control + A,然后再进行Escape。

然后使用Up,Down或PgUp PgDown导航

,然后进行Escape退出该模式。

否则,https://unix.stackexchange.com/a/40243/318478

在顶部回答!只需解释一下即可。
命令可能不清楚!好吧,我起初很想念它。查看有关如何复制的部分!太酷了!

#6 楼

如果使用Windows并使用Bitvise SSH客户端,则使用screen时可以轻松滚动输出。我一直在使用它,没有任何麻烦。即使再次按detach屏幕和attach,仍可以在该屏幕上滚动以前的输出。

使用Putty或Mac Terminal时,@ njsg的建议效果很好。

#7 楼

对于Emacsians,您可以在~/.screenrc文件中添加此行以获得Emacs样式的导航:
markkeys "l=^F:h=^B:$=^E:^F=^V:^B=^U"

此行更改了以下内容:
| Action      | Default | Emacs |
|-------------+---------+-------|
| Forward     | l       | C-f   |
| Backward    | h       | C-b   |
| End of line | $       | C-e   |
| Page down   | C-f     | C-v   |
| Page up     | C-b     | C-U   |

请注意,“向上翻页”使用C-u替换M-v,因为屏幕不支持元字符。