控制台、终端、虚拟终端和伪终端

首先, 终端 (Terminal)概念通常是指那些与集中式主机系统(例如IBM大型计算机)相连的“哑”用户设备。 而个人计算机演变至今,让人很难理解这个概念。

 

1、终端和控制台都不是个人电脑的概念,而是多人共用的小型中型大型计算机上的概念。

一台主机,连很多终端,终端为主机提供了人机接口,每个人都通过终端使用主机的资源. 终端有字符哑终端和图形终端两种.控制台是另一种人机接口, 不通过终端与主机相连, 而是通过显示卡-显示器和键盘接口分别与主机相连, 这是人控制主机的第一人机接口.

控制台上通过getty软件虚拟了六个字符哑终端(或者叫控制台终端tty1-tty6)(数量可以在/etc/inittab里自己调)和一个图型终端, 在虚拟图形终端中又可以通过软件(如rxvt)再虚拟无限多个虚拟字符哑终端(pts/0....)。

所以在个人计算机上,只有一个实际的控制台,没有终端,所有终端都是在控制台上用软件模拟的。

 

2、控制台 “Ctrl”+“Alt”+“Fx”

Linux在控制台下提供了不止一个(字符哑)终端,支持多用户同时登录,包括在本机同时登录。控制台“Ctrl”+“Alt”+“Fx”能够切换到第x个(字符哑)终端。

在图形界面下输入命令的那个叫伪终端,不在图形界面则是虚拟终端,用串口作终端则直接叫终端了。它们都有什么不同?

远古时候存在各种串行设备,它们的物理接口与传输特性各自有异,而它们作为终端有一些代码可以抽象出来,于是形成了最早的tty层。

 

3、控制终端(/dev/tty) 这是个在应用程序中的一个概念,前台进程有个控制终端,就对应这个。

其实/dev/tty会映射到当前的设备(通过tty命令可以看到),如果在图形界面(Xwindows)输入#tty 发现dev/tty映射到/dev/pts/0的伪终端, 如果在控制台会看到映射到/dev/tty0。

 

4、伪终端(/dev/pty/)这个是终端的发展,为满足现在需求(比如网络登陆、xwindow窗口的管理)。

伪终端(Pseudo Terminal)是成对的逻辑终端设备,例如/dev/ptyp3和/dev/ttyp3(或着在设备文件系统中分 
别是/dev/pty/m3和/dev/pty/s3)。它们与实际物理设备并不直接相关。

 

5、控制台终端(/dev/ttyn, /dev/console) 在UNIX系统中,计算机显示器通常被称为控制台终端(Console)。

它仿真了类型为Linux的一种终端(TERM=Linux),tty1 –tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名, 系统所产生的信息会发送到该终端上。

console是一个缓冲的概念,其实是为内核提供打印的。我们的pc,终端常用的是显示器和键盘构成,我们用户打印和内核打印都从这个终端反映给用户。所以,这里,/dev/console是连接到/dev/tty0的,其实这里有2个概念,console和tty,怎么实现?其实console这个结构中有个device,这里其实就是tty0对应的一个虚拟终端设备。 如果,我们来个专门打印内核的设备(比如通过串口),我们把那个串口register_console,那么/dev/console就到这个串口设备了。这时,内核打印就到这个串口设备了,而用户的打印还是和上面的/dev/tty相关,如果/dev/tty对应/dev/tty0,那么用户打印还在窗口中出现。所以说/dev/console是用来外接控制台的。

 

6、串行端口终端(/dev/ttySn)  (Serial Port Terminal)是使用计算机串行端口连接的终端设备。

计算机把每个串行端口都看作是一个字符设备,/dev/tts/0(或/dev/ttyS0), /dev/tts/1(或/dev/ttyS1)等,设备号分别是(4,0), (4,1)等,分别对应于DOS系统下的COM1、COM2等。例如,在命令行提示符下键入:#echo test > /dev/ttyS1会把单词”test”发送到连接在ttyS1(COM2)端口的设备上,可接串口来实验。

 

总结:

首先:两种模式:字符模式:对应的为控制台,设备文件为/dev/tty1-6, 而/dev/tty0则是当前终端设备文件的别名。

     关于dev/tty其实很简单:就是当前终端设备的一个链接(有点像/dev/tty0),测试如下

      

Xwindow下打开多个终端(输入命令的窗口):#tty命令,发现在各个窗口分别显示为# dev/pts/0  #dev/pts/1  #dev/pts/2....

 

然后在#dev/pts/0终端中输入echo"test">/dev/pts/0 结果显示test。然后你在#dev/pts/0终端中输入echo"test">/dev/tty, 你会发现在当前窗口也显示test字符串。也就是说dev/tty其实就是当前设备文件的一个链接。

 

关于/dev/console  应该来说更像一个缓冲结果吧,来实现对内核的打印,比如说内核把要打印的内容装入缓冲区,然后由console来决定打印到哪里吧(比如是tty0还是串口等等吧),所以说/dev/console是用来外接控制台的。

 

Putty vim 如果没有高亮语法,查看 echo $TERM 是否?

.vimrc 中 syntax on

如果此时语法还是没有高亮显示,那么在profile文件或其他配置文件中添加以下语句:
export TERM=xterm-color

putty vim 鼠标选择后不能复制粘贴,因为此时进入的visual模式, 在.vimrc中加入 

 if exists("&mouse")

  set mouse=v

 " set mouse=a       ""此时要复制需先按住shift
endif

 

Putty在SSH 里面勾选X11 forwarding选项,下面的X display location 只需要填写 localhost, 不用填写具体的端口号,

可能导致有些图形界面不能正常显示!

 

 Linux中的控制台界面,要大量用到Termios库的内容,

termios,tcgetattr,tcsetattr, tcsendbreak, tcdrain, tcflush, tcflow, cfmakeraw, cfgetospeed, cfgetispeed, cfsetispeed, cfsetospeed - 获取和设置终端属性,行控制,获取和设置波特率

 

stty命令用于显示和修改终端行设置(change and print terminal line settings)。

常用参数

stty命令不带参数可以打印终端行设置,加上-a参数可以打印得更详细些。

stty size可以显示终端的大小,即行数和列数。

stty命令还可以更改终端行的设置,格式如下:

stty SETTING CHAR

其中,SETTING可以是如下

    eof : 输入结束,文件结束,默认为Ctrl+D。比如:用cat >file来创建文件时,按Ctrl+D来结束输入。
    erase : 向后删除字符,擦除最后一个输入字符,默认为Ctrl+?。注意默认情况下退格键Backspace不是删除字符。
    intr : 中断当前程序,默认为Ctrl+C。
    kill : 删除整条命令,删除整行,默认为Ctrl+U。
    quit :退出当前程序,默认为Ctrl+\或Ctrl+|。
    start : 启动屏幕输出,默认为Ctrl+Q。
    stop :停止屏幕输出,默认为Ctrl+S。
    susp : terminal stop当前程序,默认为Ctrl+Z。这样当前进程就会变成后台进程了。

    werase:删除最后一个单词,默认为Ctrl+W。

stty命令还有一些其他用法,如:

    stty -echo 关闭回显。比如在脚本中用于输入密码时。

    stty echo 打开回显。

设置退格键Backspace的删除行为   stty erase ^H

 

Ctrl+S    -------    Ctrl+Q

注:按了Ctrl+S之后,就会禁止屏幕输出,从而出现终端僵死的情况。

这个时候,只要按Ctrl+Q就会结束这种局面,因为它会允许屏幕输出。

 

 

设置 ssh secure shell 支持中文

只需要设置下/etc/sysconfig/i18n 文件内容如清单 1 所示

清单 1. 文件内容
LANG="zh_CN.GB18030"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"

保存之后,SSH 重新登录或运行命令 source ./i18n 就可以显示中文。

如果想要支持用户登陆后自动支持中文,可以把 source /etc/sysconfig/i18n 这一行代码加入到/etc/profile 这个文件内,这样可以确保 root 账户登陆时自动加载中文设置。

 

第三方工具后台运行, screen

screen rtorrent

启动之后,按组合键CTRL+A+D可以销毁屏幕,回到命令提示符下。之后你就可以退出了,但是程序还是不会停的。

运行下面这个命令,可以恢复之前的屏幕:

screen –r

当然,也可以根据pid来恢复指定的程序的屏幕输出:

screen -r pid.tty.host 

posted on 2013-09-05 19:37  eksay  阅读(4866)  评论(0编辑  收藏  举报

导航