Linux系统强大的控制台、终端和shell的关系

如同其他UNIX类系统,Linux本身也是基于命令行的。试试 “Ctrl”+“Alt”+“F1”。这就是控制台,算是Linux的本来面目。至于使用方法,除了多出登录注销外,和前面章节所提到的“终端”差不多。 在X-Window出问题或不运行X-Window的时候,操作主要在这里完成。

  Linux在控制台下提供了不止一个终端,支持多用户同时登录,包括在本机同时登录。控制台“Alt”+“Fx”能够切换到第x个终端。如果需要从X-Window里跳到第x个终端,需要“Ctrl”+“Alt”+“Fx”。

  一般地,Linux发行版提供7个虚拟屏幕,1~6号是控制台终端,第7个上面跑X-Window。红旗Linux桌面4.0只提供了2个控制 台终端,第3个跑X-Window,如果需要更多控制台终端,可以修改“/etc/inittab”,找“# Run gettys in standard runlevels”一行,下面以数字和“#”开头的6行都是控制台终端说明。以“#”开头的行在大多数配置文件里表示注释,即该行不生效。把那几个 “#”去掉,重新启动后即可获得全部6个控制台终端。

  前面提到的“rxvt”,运行时会在图形界面中虚拟一个终端窗口,由于实际功效几乎完全相同,从这里起,本文档中不论是图形界面下开启的“终端”,还是控制台下登录后的终端,如没有特别说明,均以不带引号的“终端”指代。必要时则以“虚拟终端”和“控制台终端”区分。

  注意,在控制台终端下登录时,“login: ”处输入帐号,“password: ”处输入口令。同样为安全起见,输入的口令不显示。控制台终端注销用命令“logout”。在控制台终端启动的后台程序不会因为注销而终止。

  前面说过,控制台终端“算是Linux的本来面目”。也只能“算是”,因为各终端里运行的命令行程序并不是终端本身,更不是Linux本身。像X-Window一样,那个命令行程序实质上也是个外围程序,叫“shell”。

  “shell”,壳。从名字看,也许你已经猜到一些东西。不错,它包含了用户界面功能,负责接收使用者输入的东西,翻译后发送给Linux内核处理。如果有输出信息,它也会把输出信息显示出来。相对DOS而言,shell就相当于“command.com”。

  shell同样能进行由几个命令串成的“批处理”。与“command.com”不同,shell的功能要强大许多。一个功能稍强的shell脚本,已经具备高级语言的语法结构,因此编写shell脚本在很多情况下也被看作是编程。

  一般情况下,在控制台终端登录或在图形界面下开启“终端”,默认都会启动一个shell来接待使用者。(added by smsong:可以认为终端是父进程getty先启动,该getty会执行login程序,以处理登录的动作,登陆完成以后,login就会执行用户的 shell,这时就是为用户默认分配了一个shell。该shell执行用户键入的命令。同样该shell也可以开启其子shell来执行用户输入,当该 子shell结束时,它会送一个信号给其父进程。所以当用户离开系统时候,它的登陆shell会告诉init,而init知道了以后会为那个终端产生一个 新的getty进程,然后这个循环就不断的重复下去。注意:如果用户登陆失败,则login进程推出,它向其父进程init发送一个信号,指明应当为终端创建一个新的getty进程,重复上面的动作。)

  可以在shell的命令行里启动另外一个shell。退出当前shell的通用命令是“exit”。如果当前使用的shell正是控制台登录后启动的,则“exit”等效于“logout”。

  shell中启动的后台程序不会因正常退出而终止。所谓非正常退出,指强行杀掉这个shell;在图形界面下用“打叉”方式关闭终端也算强行终止一个shell。

  shell有很多种,各有特色。目前使用比较广泛的是shell是“bash”,主要的Linux发行版均以其作为默认的shell。 “bash”和其他主流shell都支持一次输入多个命令,支持启动后台程序。如果要依次执行多个命令,命令间用“;”隔开;如果要让这个程序在后台运 行,在命令后面加“&”。

posted @ 2012-05-30 18:28  ghost&240  阅读(2372)  评论(0编辑  收藏  举报