拆分 Linux 终端的方法(转)

没有什么问题是不能用一个 Linux 终端解决的,如果不行,那就用两个。

很早以前,终端其实是一个物理设备,而现在的终端实际上是在计算机上被模拟出来的一个应用程序。当你使用终端和计算机进行交互的时候,就会发现,只打开一个终端是不够用的。在进行编译、数据处理等长时间任务的时候,你不得不打开一个新终端或新选项卡来同时进行其它工作。

如果你是系统管理员,你就需要更多的终端窗口,以便连接到多个不同的主机上并行工作了。

在 Linux 系统中,终端应用程序在很久之前就已经开始带有选项卡功能了。而现在的终端应用程序里,选项卡已经是标配功能了,这是非常流行的趋势。尽管如此,工作的时候在多个选项卡之间来回切换,或多或少也会分散我们的注意力,甚至带来不便。

而最好的解决方案就是将整个屏幕划分为多个部分,这样多个终端就可以在同一个终端应用程序窗口中同时存在。Linux 发行版中也有很多相关的工具可以实现这一功能。

Shell、终端和控制台

在此之前,我们首先要明确 Shell、终端、控制台
这三个概念。想要详细了解的话,请参阅 Enable Sysadmin 博客上的相关文章。

简而言之:

  • Shell 是带有命令提示符的用于输入、输出的界面。准确地说,POSIX 桌面底层也运行着一个 Shell,即使这个 Shell 对用户不可见,因为用户会话就是由这个 Shell 启动的。
  • 终端是在图形界面服务器(例如 X11 或 Wayland)中运行的应用程序,其中加载了一个 Shell。只有在终端窗口启动之后,才算是运行了一个终端。终端可以认为是操作 Shell 的一个入口。
  • 控制台(或称“虚拟控制台”)通常表示在桌面环境以外使用的 Shell,你可以通过 Alt+Ctrl+F2 进入控制台,通常情况下从 F3 到 F7 都是不同的控制台,其中桌面环境有可能是 F1 或者 F7,这在不同的发行版中可能会有所不同。

因此,有些应用程序提供的功能是拆分 Shell 或者控制台,有些应用程序的功能则是拆分终端。

tmux

tmux 可以说是最灵活、最强大的屏幕拆分工具了,它通过键盘控制对多个终端的复用,因此你可以将一个控制台叠放在另一个控制台上面,并在两个控制台之间切换。你还可以将整个屏幕等分为多个控制台,以便同时观察不同控制台上的状况。

tmux 的所有操作都是通过键盘完成的,这就意味着你的手不需要离开键盘去寻找鼠标。为此,你需要记住一些按键组合。

如果你只用 tmux 来做屏幕拆分,那你只需要记住一下这些命令:

  • Ctrl-B % 竖直拆分屏幕(两个 Shell 分别位于左右)
  • Ctrl-B " 水平拆分屏幕(两个 Shell 分别位于上下)
  • Ctrl-B O 切换到另一个 Shell
  • Ctrl-B ? 查看帮助
  • Ctrl-B d 断开 tmux 并让其在后台运行(可以使用 tmux attach 重新进入)

tmux 的一大好处是,在一台计算机上启动 tmux 会话之后,也可以从另一台计算机上进入到这个会话,由此可以看出,tmux 对 Shell 进行了守护进程化。

例如,当我在树莓派上运行 tmux,我就可以从计算机上连接到树莓派并登录 IRC,当我断开连接时,树莓派上的 tmux 会继续运行,并等待我的下一次连接,在此期间 IRC 是处于持续登录状态的。

GNU Screen

GNU Screen 也是一个 Shell 复用工具,类似于 tmux,你可以在断开一个活动会话后重连到其中,它也支持竖直或水平拆分屏幕。

screen 的灵活性比 tmux 要弱一些。它默认的绑定按键组合是 Ctrl-A,和 Bash 中光标移动到行首的快捷键是一样的。因此,当你正在运行 screen 的时候,如果想要将光标移动到行首,就需要多按一次 Ctrl-A。而我自己的做法是,在 $HOME/.screenrc 文件中将绑定按键组合重新设置为 Ctrl-J

escape ^jJ

尽管 screen 在屏幕拆分功能上做得很好,但 tmux 上的一些缺点在 Screen 上也同样存在。例如在拆分 Shell 时,在一个新的面板中不会启动新的 Shell ,而是需要使用 Ctrl-A Tab 导航到另一个面板(如果你按照我的方式重新设置了按键组合,需要对应地把 Ctrl-A 改为 Ctrl-J),然后通过 Ctrl-A C 手动创建一个新的 Shell。

和 tmux 不同的是,screen 在退出一个 Shell 的时候,屏幕拆分状态不会改变,这样的设计在某些情况下是比较适合的,但麻烦之处在于需要手动管理屏幕拆分状态。

尽管如此,screen 还是一个相当可靠灵活的应用程序,在无法使用 tmux 的时候,你可以选择 screen 作为备选方案。

在默认按键方案下,screen 常用的基本命令包括:

  • Ctrl-A | 竖直拆分屏幕(两个 Shell 分别位于左右)
  • Ctrl-A S 水平拆分屏幕(两个 Shell 分别位于上下)
  • Ctrl-A Tab 切换到另一个 Shell
  • Ctrl-A ? 查看帮助
  • Ctrl-A d 断开 screen 并让其在后台运行(可以使用 screen -r 重新进入)

Konsole

Konsole 是 KDE Plasma 桌面使用的终端应用程序。和 KDE 一样,Konsole 也以高度可定制、功能强大的特点而著称。

和 tmux、GNU Screen 类似,Konsole 也具有拆分屏幕的功能。由于 Konsole 是图形界面的终端,因此还可以用鼠标来控制它的屏幕拆分。

Konsole 的屏幕拆分功能在“查看”菜单中。它也支持竖直和水平方向的拆分,只要点击鼠标就可以切换到另一个面板上。每个面板都是一个独立的终端,因此都可以拥有独立的主题和标签页。

Konsole 和 tmux、GNU Screen 最大的不同之处在于不能断开和重新连接 Konsole。除非使用远程桌面软件,否则只能在打开 Konsole 时使用,这一点和大多数图形界面应用程序是一样的。

Emacs

严格来说,Emacs 并不算是一个终端复用工具,但它的使用界面支持拆分和调整大小,同时还带有一个内建的终端。

如果 Emacs 是你日常使用的文本编辑器,你就可以在不关闭编辑器的情况下,在不同的应用程序之间轻松互相切换。由于 Emacs eshell 模块是通过 eLISP 实现的,因此你可以在 Emacs 中使用相同的命令进行交互,让一些繁琐的操作变得更为简单。

如果你是在图形界面中使用 Emacs,还可以使用鼠标进行操作。例如通过点击切换面板、用鼠标调整拆分屏幕的的大小等等。尽管如此,键盘的操作速度还是更快,因此记住一些键盘快捷键还是很有必要的。

Emacs 的一些重要快捷键包括:

  • Ctrl-X 3 竖直拆分屏幕(两个 Shell 分别位于左右)
  • Ctrl-X 2 水平拆分屏幕(两个 Shell 分别位于上下)
  • Ctrl-X O (大写字母 O)切换到另一个 Shell(你也可以使用鼠标操作)
  • Ctrl-X 0 (数字 0)关闭当前面板

如果你运行了 emacs-client 的话,就可以像 tmux 和 GNU Screen 一样断开和重新连接到 Emacs 了。

窗口管理器

除了文本编辑器之外,一些 Linux 桌面也同样具有拆分屏幕、加载终端这样的功能。例如 Ratpoison、Herbsluftwm、i3、Awesome,甚至是启用了特定设置的 KDE Plasma 桌面,都可以将多个应用程序在桌面上分块显示。

这些桌面可以让各个应用程序占据屏幕的固定位置,而不是浮在你的桌面“之上”,因此你可以在多个应用程序窗口之间轻松切换。你还可以打开多个终端,排布成网格,就像终端复用工具一样。更进一步,你还可以在你的桌面复用工具中加载一个终端复用工具。

而且,没有什么可以阻止你在里面载入 Emacs 并分割缓冲区。没有人知道,如果你把它更进一步,会发生什么,大多数 Linux 用户不会外传这种秘密。

和 tmux、GNU Screen 不同,你在断开与桌面的连接后无法重新连接到同一个桌面会话,除非你使用了远程桌面软件进行连接。

更多选择

除了上面介绍到的工具以外,还有诸如 Tilix、Terminator 这样的终端模拟器,它们同样可以实现屏幕拆分、嵌入终端组件等功能。欢迎在评论区分享你喜欢的终端拆分工具。

Posted in Linux | Tagged , , | 评论关闭

7种优秀开源网络监控工具

网络健康状况是衡量基础架构运行状况的一种方法,企业需要不断监控网络状态,以提供数据中心和设备健康状况的信息。通常你和你的经理对监视工具会有不同的要求,其中最大的要求可能是成本。 Continue reading

Posted in IT运维, 网管软件与工具, 计算机网络 | Tagged , | 评论关闭

防火墙规则之ufw

UFW 全称为Uncomplicated Firewall,是Ubuntu 系统上默认的防火墙组件, 为了轻量化配置iptables 而开发的一款工具。 UFW 提供一个非常友好的界面用于创建基于IPV4,IPV6的防火墙规则。

# ufw使用教程 使用ufw的命令必须有管理员权限才可运行,没有的话就要sudo一下了,不过要注意安全,不能瞎搞哈。。。

开启和禁用#

# ufw enable //开启防火墙

# ufw disable //禁用防火墙

# ufw reset //重置防火墙,会把你所有已添加的规则全部删除,并且禁用防火墙

可以使用以下命令查看ufw防火墙的状态

# ufw status

// 没开启是这个样子的

Status: inactive

//开启后是这样子的

Status: active

…  // 如果你添加了防火墙规则下面这里就会显示

设置默认的防火墙规则,默认为允许,就是说什么玩意都允许你连进来。

# ufw default allow|deny  //设置默认规则

allow : 允许

deny : 拒绝

协议规则#

协议规则就是有关于协议的一些防火墙规则。

ufw [delete] [insert NUM]  allow|deny [in|out]  [PORT[/PROTOCOL] ]  [comment COMMENT]

delete : 删除这个规则

insert : Num代表你要插入到防火墙规则的那个位置,规则是有序排列的。会根据需要来一个个检查

allow|deny : 这条规则是允许的还是禁用的

in|out: 这条规则对发送还是接收数据生效

PORT: 端口号

protocol : 协议,例如TCP还是UDP

comment : 注释

添加一条允许ssh的规则(ssh的端口号是22,协议是TCP),并且插入到位置2

# ufw insert 2 allow in 22/tcp

禁用22端口连入

# ufw deny in 22

ip规则#

ip规则里面可以包含端口号和协议,反过来则不行。

ufw  [delete]  [insert  NUM]  allow|deny  [in|out  [on INTERFACE]] [proto PROTOCOL]

[from ADDRESS [port PORT]]  [to ADDRESS [port PORT]] [comment COMMENT]

INTERFACE :网卡,就是针对哪个网卡生效,可以使用ifconfig或ip addr查看你的网卡

form ADDRESS  : 源IP地址

to ADDRESS : 目标IP地址

PORT : 跟在源IP地址后面就是源IP地址的端口号,反之则是目标IP地址的端口号

其他的都和协议规则的一致

添加允许192.168.0.2 的22端口tcp协议(ssh)的规则

# ufw allow proto tcp from 192.168.0.2 port 22

若你的系统上有帮他人进行转发信息的进程,那么你可以允许来自某个源IP地址发送信息到某个目标地址,例:允许源IP地址192.168.0.2的8088端口 发送到 目标地址192.162.0.2的8080端口

# ufw allow from 192.168.0.2 port 80 to 192.168.0.2 port 8080

删除规则#

删除规则分两种,一种是根据规则的内容删除,一种是根据序号删除

方式一#

刚才添加规则的命令前面添加delete参数,例:

# ufw allow 22/tcp //添加一条允许ssh的规则

# ufw delete allow 22/tcp //删除ssh规则

方式二#

根据序号删除,怎么知道规则的序号呢?使用ufw status numbered

# ufw status numbered //查

Status: active

To                         Action      From

–                         ——      —-

[ 1] 22                         ALLOW IN    Anywhere

我需要删除第一条规则

# ufw delete 1 //这样就是删除第一条规则啦

推荐设置#

# ufw enbale //开启防火墙

# ufw alllow ssh // 添加ssh的规则,这是简写规则

# ufw default deny //设置默认为禁用,但是我们已经添加了ssh规则,就不担心。

后面这里你们就可以自己搞事情啦!

Posted in Linux | Tagged , , | Leave a comment