开发工具 Terminal + Screen + ...

1272729223 · 2016年05月29日 · 最后由 msg7086 回复于 2016年06月16日 · 4461 次阅读

打开您的 Terminal。也可以control + command + f最大化,当然这仅是个人喜好而已。

输入screen命令:

you@yourMacBook: screen

这时候,会出现一个界面,你按照底部的提示,按return键 (也叫 enter 键) 就可以了。进来之后,就可以开始你的工作了。

当然,可能你需要一个窗口实时看服务器 log,然后一个窗口操作数据库,然后一个窗口写代码,或许还要一个窗口敲 git 等其他命令行。

这样至少需要 3-4 个窗口,这时,你可以先按组合键control + a(记得是先按住ctrl键再按a键,然后同时松开),之后再按c键,这将会为你新建一个新的 session。重复这个动作,直到你创建了足够的窗口 (sessions),在这里算上敲命令行的窗口一起是 4 个。

如果你只是照做的话,现在你正处在session 3session 4。为了统一场景,我们在接下去的下文中都假设你是启用了 4 个 session。

不过这时候,你看不到你的 session 所处的位置,因为他们都在背后运行。 不过暂时继续跟着我做下一步,晚点再告诉你如何查看你的当前 session 位置。

插入一句,我们开始约定好<C + a>代表control + a组合键。

继续按<C + a>组合键,然后按shift + a(也就是大写 A),这时你会在底部看到一行文字,仅仅照做吧。对的,它是让你给当前的 session 起一个title,作为练习,我们这里统一起qux(聪明的人应该会知道我为什么在这里输入的是 qux,而不是 foo 了?)。输入完qux之后,接着按return键。

接下去我们继续为其他的 session 起名字。先按<C + a>,再按0。如你所料,这时候你进入了 session 0。然后按照上面的教程,你继续给它起title,这时候应该是起foo了 (当然,这不是强制的,你现在当然可以自己想怎么起就怎么起)。重复这个动作,给session 1, session 2, session 3都起好名字。当然,别忘了,在<C + a>组合键之后,输入的不再是0, 而是1, 2, 3,这你总知道吧?

好了,是时候揭晓如何查看你当前所在 session 的位置了。 按<C + a>然后按"(在键盘上你需要按的是shift + ")。看到了吧? 0 foo,1 bar,2 baz,以及你最先起的3 qux4 个 sessions。然后你可以按j,k键 (这对于熟悉 vim 的人而言是再欢喜不过了) 上下选择你需要选择的 session,然后按return键进入。最后提醒一下,别忘了,查看 session 就按<C + a>组合键再按"。不过,你也可以自己试试<C + a>+w,<C + a> + n(next), <C + a> + p(prev)。

这个时候,我想听点音乐。没关系,我只是按一下<C + a>然后c新建一个 session,然后输入cmus打开我的播放器,选择 bon jovi 的 keep the faith 按return就开始听音乐了。然后继续切回到我工作的 session 去。

继续告诉你一个小技巧,试试看按<C + a> + x。天啦,我还可以创建一个密码,锁定我的 sessions。这对于我工作区域的保护及隐私而言真是太棒了!

当然也许有人还可以使用control + z键,让 screen 运行在后台。比如:对于project 1我使用了screen来协助我管理 sessions,对于project 2我也用 screen 协助。然后从project 1project 2,就通过control + z键来前后切换。

如果你已经兴奋的按了control + z的话,我就不得不继续再说一下,如何让你从这不知所措的慌乱中解脱出来 (你的音乐还在播放,而你的工作也都保存着,可是你无法进入到之前的 sessions 了,OMG)。

试试在命令行中输入jobs吧,这时候你应该可以看到你的screen程序正在后台运行,并且应该会看到带有一个[1]符号。对的,这时候你可以输入fg 1回到喜悦中来吧。当然如果仅仅是按照上面的教程来做的话,你直接输入fgreturn就可以,因为你最近的后台运行程序就是它。

差不多了,我想出去玩了,现在你可以继续自己练习几遍。在使用screen的时候遇到问题你就按<C + a>然后按?(确保你当前已经进入 screen 中)。当然这只是使用 screen 来协助你工作而已,事实上,有的人仅仅是用fg, bgnohup, &等也能较好的协调好多个 sessions。

谢谢,希望对你有些许帮助。

不错,以前一直记不住这命令,原来把 <C + a> 当组合键,后面的就简单了。

另外文中的 control + z 应该是 <C + a> + z 吧。

3 楼 已删除

#1 楼 @ntycontrol + z你试试。

#3 楼 @1272729223 我用的是 iTerm + zsh 估计不一样。

为什么不用更好的,而要坚持用 screen 呢?

#2 楼 @rocLv +1, iTerm + Tmux + Tmuxinator

#4 楼 @nty 这个不太清楚,也许。你搜索一下fg,bg的命令,也许在 zsh 下面有适配的。

#8 楼 @1272729223 tmux 或者直接上 byobu。 上文提到的 Tmuxinator 也不错,不过和 byobu 用途有点不太一样。

这是翻译的文章?如果是原创的话翻译腔也太重了,看着好难受…

不是很能理解为什么不用 attach/detach/reattach 来管理 screen session 而要用 fg/bg?把事情复杂化了。

#9 楼 @msg7086 嗯,没有用过 byobu, tmuxinator. 但是对于我个人 (也许还有某些人) 而言 screen(因为 Mac OS 内置) 就足够了,我不用 iTerm2 的原因也是我不知道它的优势在哪里? 或者说它的优势我用不着。 所以就不喜欢再装一个 APP。

#10 楼 @sinxccc 原创,只是那天心血来潮,写了一下使用的感受。至于 attach, detach/reattach 我不太用,而我现在更多使用的是 fg/bg。(几乎不用 tmux 或 screen 了)

现在更多的是 Tab,因为我发现 screen 或者 tmux 在某些情况下还是有些问题,比如翻滚历史记录时不能滚动屏幕等。

#12 楼 @1272729223 说得直白一点,自己都一知半解的情况下就不要尝试给别人写教程…

screen 滚动屏幕需要进入 copy mode

#13 楼 @sinxccc 嗯,说是教程确实是有点为过。我也只是当作一个小工具用用而已,算是之前的一点使用经验。

#12 楼 @1272729223 比如你这堆 session,要用 Ctrl-A 快捷键搞半天,开 byobu 的话直接绑定在 Fx 快捷键上,F2 F3 F4 直接就可以切换。 我这边另外绑定了切分窗口的快捷键,用 F10 F11 F12 切换。 Ctrl-Z+BG/FG 就更诡异了,软件自己的 detach/attach 不用去用 jobs 何必呢。 byobu 里 F6 就可以断开一组窗口,然后马上就可以 attach 到另一组窗口了。 至于查阅历史记录,byobu 里 F7 就可以进入 copy mode。screen 也有自己的 copy mode,快捷键我就不帮你查了。

所以我一开始就说了,为什么不用个好点的工具而要逼着自己去用困难模式的 screen。

输入byobu命令:

you@yourLinuxServer: byobu

当然,可能你需要一个窗口实时看服务器 log,然后一个窗口操作数据库,然后一个窗口写代码,或许还要一个窗口敲 git 等其他命令行。

这样至少需要 3-4 个窗口,这时,你可以按 F2 键,这将会为你新建一个新的 session。重复这个动作,直到你创建了足够的窗口 (sessions),在这里算上敲命令行的窗口一起是 4 个。

如果你只是照做的话,现在你正处在 session 3 或 session 4。为了统一场景,我们在接下去的下文中都假设你是启用了 4 个 session。

不过这时候,你看不到你的 session 所处的位置,因为他们都在背后运行。 不过暂时继续跟着我做下一步,晚点再告诉你如何查看你的当前 session 位置。

怎么会看不到你的 session 所处的位置呢?他们就在最下方的状态栏里了。

按 F8,这时你会在底部看到一行文字,仅仅照做吧。对的,它是让你给当前的 session 起一个 title,作为练习,我们这里统一起 qux(聪明的人应该会知道我为什么在这里输入的是 qux,而不是 foo 了?)。输入完 qux 之后,接着按 return 键。

接下去我们继续为其他的 session 起名字。按 F4,这时候你进入了 session 0。然后按照上面的教程,你继续给它起 title,这时候应该是起 foo 了 (当然,这不是强制的,你现在当然可以自己想怎么起就怎么起)。重复这个动作,给 session 1, session 2, session 3 都起好名字。当然,别忘了,F3 向左切换,F4 向右切换。而且就算你不起名字,byobu 也会智能地把你运行的程序名字填在里面,哪需要这么麻烦手动改名。

这个时候,我想听点音乐。没关系,我只是按一下F2新建一个 session,然后输入 cmus 打开我的播放器,选择 bon jovi 的 keep the faith 按 return 就开始听音乐了。然后继续切回到我工作的 session 去。

继续告诉你一个小技巧,试试看按 + x。天啦,我还可以创建一个密码,锁定我的 sessions。这对于我工作区域的保护及隐私而言真是太棒了!

要保护工作区域和隐私,请善用操作系统自己的锁定。

当然还可以用 F6,让 byobu 运行在后台。比如:对于 project 1 我使用了 byobu 来协助我管理 sessions,对于 project 2 我也用 byobu 协助。然后从 project 1 到 project 2,就通过F6 然后再运行 byobu来前后切换。至于怎么创建一个新的窗口组?byobu new

至于回滚历史记录,请用 F7 然后就可以PgUp/PgDn/g/G/h/j/k/l/q了,还可以用/?来搜索。

谢谢,希望对你有些许帮助。

Demo 分屏功能

$ cat .byobu/keybindings.tmux 
unbind-key -n C-a
set -g prefix ^A
set -g prefix2 ^A
bind a send-prefix
bind-key -n F10 display-panes \; split-window -h
bind-key -n F11 display-panes \; select-pane -t :.-
bind-key -n F12 display-panes \; select-pane -t :.+

觉得 screen 还是熟悉一下会比较好,其他工具虽然好用,但是都是需要安装 + 设置,如果你要 ssh 到一个 server 上,需要多开进行 debug 啥的,server 上啥都没有,screen 就比较方便了。

#17 楼 @bigpig85 是的,工具用来用去,还是感觉默认有的好,连配置都是默认的好。

#17 楼 @bigpig85 或许你说的这种场景才真是screen的用武之地,然而本地,Tab真的足以。

如果你用烦了,

command & 

或者

nohup command 1>/dev/null 2>&1

想直接起个 command, 然后可以随时断开 ssh, 随时可以切回去看起运行状态,你才知道 screen 的好。 然而整篇文章居然没提 screen -r,没有提到 ctrl + a, d, 我不认为你理解了其精髓。

普及 screen 命令是好事!

另外, 我常用 Terminal 跟同事 share 屏幕, Just screen it!

#20 楼 @boyishwei 赞叹。我现在也是就用TerminalTab,偶尔会用一下nohup。 对于 screen,有些可能高效的方式我没有掌握,比如attach等。我写的一点东西也是那天下午某个场景下又用了下 screen,也是一点缘分。

其实对于我个人而言,就我个人而言,不管是工具,还是语言等,只是希望往精和专的方向去沉淀,不再想往广和博的方向去折腾了。

#22 楼 @1272729223 哈, 对的, 我也喜欢专精!同时也喜欢博大!😀

#16 楼 @msg7086

不过这些功能 iTerm 都有...

iTerm 可以开多个 tab, 而且新开 tab 会转到之前 tab 的目录 可以分屏 可以定义 profile 设置一系列初始化命令, 例如连水木 bbs 用 gb2312 编码并输入用户名密码 有命令给 tab 设置 title, 颜色和图标 cmd + option + b 可以查看历史屏幕快照

iTerm 还能显示图片 cmd 点击出错栈可以打开编辑器并转到对应行, cmd 点击链接可以打开浏览器 可以添加 trigger 监控屏幕是否输出匹配正则的字符串, 然后触发 action 例如发 notification 可以复制带颜色的屏幕输出

#24 楼 @luikore 看了眼,iTerm 是 macOS 上的。 另外,用 tmux 有一个很大的用途是共享屏幕。公司电脑上操作到一半的活,回家了可以继续干。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号