Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1255265
  • 博文数量: 404
  • 博客积分: 10011
  • 博客等级: 上将
  • 技术积分: 5382
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-03 16:29
文章存档

2010年(40)

2009年(140)

2008年(224)

我的朋友

分类: LINUX

2008-12-19 12:35:49

/dev/pts

 

/dev/ttyn/dev/pts/n有何不同?
比如我要写往终端设备文件里写,,,这两个有什么不同吗??

还是这俩都指向同一个终端驱动子程序?


/dev/tty: 设备包括虚拟控制台,串口以及伪终端设备,
/dev/pts:
即伪终端,所谓伪终端是逻辑上的终端设备,多用于模拟终端程序, 通常是我们在X Window下打开的终端

能不能给出来关于这方面的详细点的资料呢?

我这又有几个问题了:
1)虚拟控制台的定义是什么?
2/dev/ttyn的伪终端跟/dev/pts/n的伪终端有什么区别?
3)为什么/dev/ttyn可以代表伪终端的情况下,还要分出/dev/pts/n的伪终端呢?

逻辑上它们都是终端设备,属于字符设备的一种,说到不同多半是历史原因形成的,其实也没什么大不了的区别。

tty*
一般是和物理的控制台或物理的终端设备相联系。
例如在linuxtty1-6是控制台下的六个虚拟终端,控制台是指直接联系到主机的显示器+键盘/鼠标。
ttyS0ttyS1是第一个和第二个串口终端,即通过串行口连接的终端设备。但实际上今天真正的串行终端硬件几乎见不到了,通常可以用windows下的超级终端程序和linux下的minicom这样的模拟终端程序来模拟它。甚至ttyUSB0这样的USB-串口转换器的模拟串口也出现了。所以tty现在也不全是物理的设备了。

使用pty这样的虚拟终端设备的主要有两种:一种是由Xwindow下的模拟终端程序使用的,另一种就是通过网络远程登录上去的终端模拟程序使用的,如puttySecuCRT之类。甚至你从一台主机的控制台tty1上用telnet/ssh登录了另一台联网主机,对于被连接的主机,你使用的仍然是一台pty——虚拟终端。

总而言之,物理和虚拟的区分已经越来越模糊了,没必要那么较真。Unix的设计的哲学就是一切皆文件,在使用上没什么分别。像在PLAN9这样的概念OS中,连网络服务也都是文件了,更加的大一统了,其实不是挺好的吗?^_^


请问redhat/dev/pts是什么设备?

我在安装Redhat 8的时候,报在写入/dev/pts文件的时候出错,然后安装中止,请问/dev/pts是什么设备?有人碰到过这个问题吗?谢谢!

 

虚拟终端设备
pts
目录下,系统会根据需要自动生成123等设备文件
这些设备文件是临时的

 

 

区分/dev/tty/dev/console/dev/pts/dev/ttyn

    通常我们在linux下看到的控制台(console)是由几个设备完成的。分别是/dev/ttyN(其中tty0就是/dev/consoletty1tty2就是不同的虚拟终端(virtual console)).通常使用热键alt+Fn来在这些虚拟终端之间进行切换。所有的这些tty设备都是由linux/drivers/char/console.cvt.c对应。

    /dev/pts是远程登陆(telnet,ssh)后创建的控制台设备文件所在的目录。由于可能有好几千个用户登陆,所以/dev/pts其实是动态生成的,不象其他设备文件是构建系统时就已经产生的硬盘节点(如果未使用devfs)

    第一个用户登陆,console的设备文件为/dev/pts/0,第二个为/dev/pts/1,以此类推。这里的0123不是具体的标准输入或输出,而是整个控制台。你可尝试 echo "aaaaaa" > /dev/pts012……

 

/dev/tty指的是当前所处的终端,输出到此的内容只会显示在当前工作的终端显示器上

/dev/console就是tty0

/dev/pts是远程登陆(telnet,ssh)后创建的控制台设备文件所在的目录

 

 

devpts 文件系统

为了某些程序的正常运行,必须在虚拟根(chroot)环境中提供proc devpts文件系统。由于一个文件系统可以被无限次的加载(更因为它们是虚拟的文件系统),所以不要担心它们已经在你的主系统里加载过了。

proc 文件系统表示 process information pseudo文件系统,内核用它来提供系统状态信息。

我们把 proc 文件系统加载到/proc目录下,命令如下:

mount proc /proc -t proc

你很可能会看到这样的警告:

warning: can't open /etc/fstab: No such file or directory
not enough memory

不用担心,这只是因为我们的系统还不完整,有些文件还没有创建。mount本身是成功的,我们只关心这个。

devpts 文件系统前面提到过,是目前最常见的 pseudo 终端(PTYs)实现方式。

devpts 文件系统加载在 /dev/pts ,命令如下:

mount devpts /dev/pts -t devpts

这个命令可能因为下面的错误而失败:

filesystem devpts not supported by kernel

最大的可能是你主系统的内核没有编译devpts文件系统支持。你可以用命令cat /proc/filesystems来查看一下。如果 devpts 列在那里,但还是不能mount,看看是不是使用了 devfs文件系统。如果devfs也列在那里,我们就有办法了,可以把主系统的devfs文件系统加载的后面"创建设备(Makedev"那一节里将创建的 /dev 结构之上,如果devfs也没有列出来,别担心,还有第三个方案可以使PTYschroot中正常工作,我们后面在Makedev那一节里会说到的。

记住,如果出于种种原因,你中止了LFS系统的安装,后来又要继续安装时,要检查一些这两个文件系统是不是还加载在chroot环境中,如果没有的话,就会出问题,需要再次加载。

文件

为了某些程序能确定某一个分区加载的实际位置,要用到 /etc/fstab 文件。通过以下方法建立一个新文件 /etc/fstab :

cat > /etc/fstab << "EOF"
# Begin /etc/fstab
 
# filesystem  mount-point  fs-type  options         dump  fsck-order
 
/dev/xxx      /            fff      defaults        1     1
/dev/yyy      swap         swap     pri=1           0     0
proc          /proc        proc     defaults        0     0
devpts        /dev/pts     devpts   gid=4,mode=620  0     0
shm           /dev/shm     tmpfs    defaults        0     0
 
# End /etc/fstab
EOF

xxx,yyy zzz 应换成你系统中的值 (比如hda2, hda5 reiserfs)。关于表格中六个域的详细信息,请参看 man 5 fstab.

当增加一个reiserfs分区时,一行最后的 1 1 a应换成 0 0,因为这样的分区不需要dumpcheck.

/dev/shm加载点用于加载 tmpfs,这样可以打开POSIX共享内存。你的内核必须编译进内建的支持。这一点在下一节有更详细的介绍。现在只有很少的程序会使用POSIX共享内存。因此你也可以不加载/dev/shm。更多内容,请参看内核源码目录中的 Documentation/filesystems/tmpfs.txt文件。

还有一些内容也许你想加入到fstab文件中。如果你使用USB设备的话,可以加上下面一行:

usbfs       /proc/bus/usb  usbfs    defaults    0     0

这个例子只有在你把相关的支持编译到内核中时才能工作。

 

阅读(4454) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~