在Unix系统维护中,有时候系统工程师希望能够记录下会话的过程。如在测试一个系统功能的时候,工程师就希望将测试的步骤都一一的纪录下来。以便出现问题时利用这份资料进行追踪分析。如有时候在制作培训文档的时候,可能也需要这些会话记录,以方便培训师制作PPT等培训文档。总之就是一句话,系统工程师现在想要记录某个会话的过程,在Unix系统中能否实现?
一、script命令的主要作用于特点。
在Windows操作系统中,读者可能用过一些屏幕记录软件,可以将某段时间的操作通过视频的形式记录下来。不过在Unix操作系统中,有时候不用这么麻烦。因为操作系统提供了一个script命令,帮助系统工程师来记录某个会话的过程。这是一个比较冷僻的命令,也不在POSIX的规范中。为此有些Unix操作系统版本就可能不带有这个功能。不少系统工程师可能平时很少接触这个命令。不过笔者是比较喜欢这命令的。简单的说,系统工程师利用这个命令就可以将一个会话的整个过程或则中间的某些操作记录到一个文件中。利用这个命令基本上可以在文件中记录大部分的键盘操作、命令的输出结果以及错误信息。也就是说,在屏幕上输出的信息基本上都可以保存在这个文件中。然后系统管理员可以在事后查看这个文件以获得必要的信息。那么这个命令该如何使用呢?如下图,其实很简单。
如上图所示,就是script命令使用的基本过程。首先当系统工程师想要记录某个会话的时候,则只需要在会话开始时输入script命令。输入这个命令后,系统就会将当前用户的所有键盘操作、屏幕输出以及错误信息等等保存到一个特定的文件中。如上面执行了ps命令与who命令后,希望就会将这两个命令(用户的键盘操作)、屏幕输出(命令的执行结果)等等保存到文件中。当工程师需要退出记录过程时,则只需要输入exit命令,系统就会就是script done的提示信息。表示系统已经结束了记录工作。
当系统工程师需要查看这个文件的信息时,可以使用cat或者vi命令来查看这个文件中的内容。不过所使用的shell版本不同,他们先是的结果可能有所差异。如在某些版本中,使用cat命令来查看这个文件,可能只显示这个命令在什么时候完成,而不会显示用户的键盘操作与屏幕的输出信息。为此笔者建立采用vi命令。利用vi命令来查看这个文件,就不会有版本之间的差异问题。如使用vi typescript命令,就可以查看这个文件中的具体信息。通常情况下,整个文件中包含以下几部分内容。
第一行是注释信息。如“Script started on 2009年06月15日 星期一 18时24分21秒”。这个提示信息显示这个命令开始执行的时间。然后在最后一行中,也有类似的提示信息。不过最后一行的提示信息显示的是这个命令完成的时间,显示了命令执行完成的日期、具体时间等西虚拟。然后中间的部分就是命令与输出结果的信息。如果在命令的的执行过程中,有错误信息的话,也会一并在这里记录。
二、scirpt命令使用的注意事项。
从以上的截图中可以看出这个命令使用起来其实并不是很复杂。不过在一些细节方面还系统管理员仍然需要注意。具体的来说,有如下几个方面要注意。
第一需要注意重复记录的问题。系统工程师可能只需要记录部分的操作,为此在世纪工作中可能会频繁的打开和关闭这个命令。但是需要注意的是,默认情况下采用script命令后会覆盖原有的文件。如现在系统工程师首先使用script命令记录了ps操作,此时系统会产生一个叫做typescript的文件,记录这个命令操作的相关信息,然后中止了这个命令。一会儿一后又重新使用这个命令,来记录who操作的过程。此时系统又会产生一个一模一样的typescript文件。此时系统会将原先的记录文件覆盖掉。显然这可能跟系统工程师的初衷相违背的。系统工程师希望后续的操作能够保存在原先的记录文件中,而不是覆盖掉。如果要实现这个需求的话,那么系统工程师在执行这个命令时,必须使用一个可选项参数。即按照script –a的形式来启动这个命令。此时系统就不会覆盖原有的记录内容,而是将后续的操作内容追加到原有的文件中。
[Ok3w_NextPage]第二是不会记录所有的操作。如系统工程师先启动了script命令。然后再利用passwd命令来修改当前帐户或者其他帐户(以特权用户登录)的密码时,这个密码信息是否也会记录下来呢?如果在记录文件中也记录了密码的操作信息,那么显然会带来一定的安全隐患。不过这个担忧是多余的。各位读者可以回去测试一下,一般情况下这个密码信息是不会记录在这个文件中。其实,大家可以想象一下,再输入passwd命令后,输入新密码时,在屏幕上也不会显示用户的输入内容,即新密码。为此这个在屏幕上没有输出的内容,也不会保存到这个记录文件中。所以笔者说用户的这个担忧是不必要的。
第三是某些特定的命令不会记录。笔者上面谈到,有些键盘操作记录是不会被保存的。即只要在屏幕上没有输出的信息一般情况下就不会给保存到记录文件中。不过这是一个充分不必要条件。即反过来就不成立。并不是屏幕上所有显示的内容都会一五一十的记录到这个文件中。像一些全屏模式的操作命令,如vi命令等等,就不会记录到这个文件中。为此系统工程师在使用这个工具时,需要预见到这种情况。在操作时,如果需要记录相关的会话过程,那么就需要尽量避免使用一些全屏的命令。如在设置环境变量时,尽量不要直接利用vi修改相关的配置文件。而是使用set等非全屏命令来对环境变量进行操作。如此操作系统才能够记录完成的操作过程。
第四系统工程师需要了解一些特殊键在文件中是如何表示的。上面笔者所过,记录文件基本上会记录所有的键盘敲击动作。如现在用户输入了ls -1命令先查看当前目录下的所有文件的详细信息。后来用户反悔了,就利用退格键将后面的-l参数去掉了。此时这个退格键的操作也会保存到记录文件中。但是这些特定的功能键在文件中是采用一些特殊的符号来表示的。如退格键在文件中采用的是“[K”字符符号。所以向这个光标移动键或者del删除键等等都有不同的代表方式。只有熟悉了这些代码的含义之后,才可以真正的读懂这个文件。不过其代表的形式虽然不同,但是还是有点规律可循。即一般特殊的功能键都是以[开头的。如果系统工程师看到有这个字符的话,那么就需要考虑这是否代表着某个特殊的功能键。
第五是可以根据自己的需要来确定记录的文件名与保存的路径。如果系统工程师直接使用script命令的话,那么系统会自动为这个文件命名。并且这个文件默认是保存在命令执行所在的目录,即当前目录中。系统工程师在执行命令时,也可以自定义记录文件的名字与保存路径。如可以使用这个命令script log,让系统将相关的记录保存在当前文件夹下的log文件中。如果这个文件不存在的话,系统会自动创建这个文件。若存在的话,除非在命令中使用了-a参数,否则的话,会覆盖原有的文件。在覆盖之前,不会提醒系统工程师。所以这一点系统工程师要引起重视,防止文件被意外删除。
第六是需要注意如果输出结果中有图片信息的话,在这个文件中无法正常读取。如在会话记录的过程中,使用了netconfig命令启动了一个图形窗口。这个图形窗口的信息不会在记录文件中正确反映。系统工程师查看记录文件时,看到的可能只是一连串的[k符号而已。最后需要说明的是,script命令只是对当前的会话有效。即即使在root帐户下启动了script命令,则系统记录的仍然是当前会话的操作。对于其他用户的会话不会有丝毫影响,也不会记录其他用户的操作。