历史上演变出两种风格的伪终端接口: BSD 和 System V。SUSv1 中伪终端规范部分基于 System V 风格的伪终端接口。在 Linux 系统中,System V 风格伪终端通常称为 UNIX98 风格伪终端,这里沿用这个称呼。
BSD 风格的伪终端是系统预先建立的设备文件对,它们的名称为 /dev/ptyXY(主设备) 和 /dev/ttyXY(从设备),其中 X 可以是 16 个字符 [p-za-e] 中的一个,Y 可以是 16 个字符 [0-9a-f] 中的一个,这样也就限制了系统最多可用的伪终端数量为 16 x 16 = 256 个。这使用 BSD 风格伪终端的系统中,可监控的终端数量也就受到了这个限制。 不同的系统为了扩展这个限制使用了一些不同的方法,例如 SCO UNIX 就不完全遵循 BSD 风格伪终端的命名方式。关于这些系统,需要查询相应的资料。
UNIX98 风格的伪终端的主设备文件为 /dev/ptmx,当打开这个设备文件时,将得到一个伪终端主设备的文件描述符,并且在 /dev/pts 目录下面建立一个相应的伪终端从设备。 每个系统对 UNIX98 风格的伪终端的数量的限制不同,以 Linux 为例,在内核版本 2.6.3 及之前,伪终端的数量是编译内核时确定的,允许的最大数量为 2048; 从 2.6.4 开始,这个限制可以通过 /proc/sys/kernel/pty/max 动态的调整。 UNIX98 风格的伪终端是未来的方向,Linux 从内核 2.6.4 开始,建议新的程序都不要再使用 BSD 风格的伪终端。 伪终端数量为了监控一个终端,Ttyutils 至少需要一个伪终端,监控两个终端则需要两个伪终端,依此类推。如果需要触发事件,那么至少要再增加一个伪终端。所以系统需要的伪终端最小数量为: 监控终端数量 x 1 + 1最理想的伪终端数量为: 监控终端数量 x 2假如需要在一个主机中同时监控 100 个终端,那么最少需要 101 个伪终端,准备 200 个伪终端则最理想。 注意上面只是考虑了 Ttyutils 要使用的伪终端数量,系统中还有其它的程序会使用伪终端,典型的包括 Telnet、SSH,在配置伪终端数量时,要将它们综合考虑。 配置伪终端数量不同的系统有不同的配置方法,下面分别描述:
在这些系统中,查看 /proc/sys/kernel/pty/max 文件就可以知道系统最多可用的伪终端数量,一般默认是 4096。可以 echo 一个值到这个文件来修改它,例如下面的命令可以将它改为 10240: # echo "10240" > /proc/sys/kernel/pty/max或者使用 sysctl 命令: # sysctl -w kernel.pty.max=10240象上面那样修改在重启后会消失。如果要使它在重启后能生效,需要在 /etc/sysctl.conf 加入: kernel.pty.max = 10240/proc/sys/kernel/pty/max 的最大值是 20 位(1,048,576),应该是足够的。
在 AIX 系统可用 smit 工具来调整伪终端数量。 安装手册不同的平台安装 Ttyutils 有一定的区别,下面将分别描述。 注意下面描述的内容只是针对某个特定的平台,而没有精确到每个平台特定的版本,这可能导致所描述的内容和实际不符,但大致方向不会错,读者应该根据实际的情况自行调整。如果发现文档内容有错误,请告诉我们。 检查安装安装完成后,可以运行下面的命令看看是否已经安装成功: $ ttyexec2 --version正常情况下,将输入程序的授权相关信息后退出。 日志处理默认情况下,Ttyutils 的日志会被记录到系统日志(syslog),如果这不符合要求,可以用两种方法将日志定位到单独的文件中。
修改了 syslog.conf 文件后,别忘了给 syslogd 守护进程(1) 发送 SIGHUP 信号来让它重新加载配置文件,就象这样: # killall -HUP syslogd关于 syslog.conf 配置文件的语法请参考 syslog.conf(5) 手册页。
它可以将所有的日志输出到指定文件中,例如下面的例子: $ ttyexec2 --logfile /tmp/ttyexec.log将把所有日志保存到 /tmp/ttyexec.log,但是这样就不能享受 syslog 提供的各种能力了。
环境变量在不同的 shell 中设置环境变量的语法有些微的区别:
export VAR=VALUE
setenv VAR VALUE下面的环境变量可能会影响 Ttyutils 的行为:
当前的终端类型,这个环境变量会影响 Ttyutils 对于终端指令的理解和查询。
$ export TTYUTILS_LANG=zh_CN.utf8使用 'locale -a' 可以得到当前系统支持的全部区域。
Ttyutils 支持国际化,对于每个支持的语言,Ttyutils 会提供一个相应的 .mo 的文件,这些文件默认安装在系统的标准路径(通常是 /usr/share/locale 目录),如果您将这些文件安装在非标准路径,可以使用 TTYUTILS_LOCALEDIR 环境变量来告诉 Ttyutils 在什么地方查找这些文件。
如果设置了这个环境变量,并且它的值不等于 0,那么 Ttyutils 将开启内存检查功能,在程序退出时,会在程序的工作目录产生一个 ~memprof.dump 的文件,内容是程序对内存使用的报告。 这个环境变量主要是为了调试,会对性能有些微的影响,在生产环境最好不要启用。
|









也可能是 rsyslog,syslogd 的增强版本,参考 http://www.rsyslog.com