基本信息
折叠 编辑本段 UNIX操作系统发展历程
折叠 1965年到1969年1965年Bell实验室加入了MIT(麻省理工学院)和GE(通用电器公司)合作开发的一个项目,该项目要求在通用公司的GE 645大型计算机硬件上开发出一套多用户交互操作系统软件,名字定为Multics.然而由于Bell实验室对系统开发中经常性的延迟和高成本消耗不满,最后终于在1969年退出了Multics系统的开发项目.1969年Ken Thompson把Multics在Bell实验室内进行了展示,这时候正好遇上了Dennis Ritchie,他提供了一台DEC(数字设备公司)的PDP-7迷你计算机硬件,可以继续用来开发能支持多用户研究环境的操作系统.这两个人建立了一个开发原型后,Ken Thompson返回了Bell实验室并鼓励在专利部门使用新开发的这款操作系统来进行文档处理工作.为区别于Multics项目,新操作系统被命名为Unix. 开发Unix的各种努力在继续,终于在1971年Unix得以在Bell实验室变得实际可用.第一版本的Unix操作系统完全使用汇编语言在PDP-11/20硬件上开发完成.它包含了基本文件系统,以及fork,roff和ed三个工具,当时它的用途就是为Bell实验室专利部门的文档准备工作提供字处理工具. 折叠 1970年到1972年70年代早期,Unix开始在Bell实验室变得流行起来,作为新诞生的操作系统Unix也受到了大学机构的欢迎.与学院和高科技研究领域对Unix喜爱形势不同,商业社区到处充斥着怀疑Unix的声音.为提升Unix的流行度,AT&T公司开始将Unix源代码以最小的价格许可给大学机构研究用,AT&T提供了关于Unix大量软件代码和说明手册,但是没有提供软件使用的技术支持.70年代末,几乎70%的大学机构获得了Unix许可.许多计算机专业的毕业生在使用Unix,甚至对Unix代码进行修改,使它更加健全.Unix是用汇编语言写出来的主要运行在DEC公司的硬件设备平台上,开始在PDP-7设备上,然后是PDP-11/40设备和11/45设备,最后到PDP-11/70设备,使用变得更加广泛和流行. 折叠 1973年到1979年这段时期是Unix开发最重要的时期.Ritchie和Thompson两人在1969到1973年时间内开发出了C编程语言,并且把Unix的内核用C高级编程语言进行了重新编写.Unix操作系统得以在不同硬件平台上编译运行.花几个月时间,用C编写的Unix就可以移植到新的硬件平台上.在C语言的帮助下修改操作系统也变得容易起来.学术社区的会员已经开始在许多系统设计课程中使用Unix,利用通用C语言写现代的命令,Unix也开始走出了字处理和编辑等局限性领域.此时Unix已经发展到了第六个版本,一个名叫Whitesmiths的商业公司基于第六版Unix发布了一个名叫Idris的商业Unix版本.1975年Thompson造访Berkeley大学安装在PDP-11/70设备上第六版Unix,此刻学校的两位毕业生Bill Joy和Chuck Haley刚好与Berkeley的这版Unix打交道,他俩在Berkeley为Unix的发展扮演了重要的角色,他们在第六版Unix环境上的第一个项目是ex编辑器的开发.他俩对Unix的内部运行原理很感兴趣,Joy把C语言增强壳以及vi编辑器等组合到了一起,形成了一个叫BSD(Berkeley软件发行包)的套装,1975第一次发布,这种模式在1978年进行了第二次发布,第二次发布的BSD中添加了虚拟内存的支持,允许程序可以在在物理内存大小不够用的情况下,继续模拟出虚拟内存来进行使用.这个特殊的想法对Bell实验室发布第七版的Unix影响非常大,第七版Unix也是最后一版完全由Bell实验室原创的Unix发行版.此后的Unix版本中的功能内容由多家商业公司和大学研究机构进行了或多或少的增添.70年代末美国国防部高级研究项目局决定将其通用计算环境构建在Berkeley版的Unix之上,在4.1版BSD的基础上,国防部高级研究项目局为4.1BSD进行了重要的性能调优提升,提供的fast文件系统提升了系统性能阻止了文件碎片的生成,该文件系统被加进了4.2版的BSD软件系统中. 1982年AT&T公司正式向商业领域发布了一款测试版Unix,名叫System III(System I和System II从来没有存在过),虽然System III基于第七版Unix但它也加入了一些来自BSD的工具,但System III发布版中没有包含vi编辑器和C壳,但内含了程序员workbench(工作性能度量工具),在发行System III的时候,AT&T看到了Unix的未来,很快就推出了System V版本的Unix(System IV没有在AT&T公司外出现过),其中包含了编辑器,curses(基于屏幕的软件库),和init(初始化程序),这些东西用来在开始运行Unix时启动各种过程.80年代初,Joy从berkeley大学取得了电气工程硕士学位后毕业了,变成了SUN(斯坦福大学网络)微系统公司的合伙创始人之一.Sun公司根据BSD实现的Unix操作系统名叫SunOS.这款Unix依靠对原BSD系统中的网络工具进行扩展,这些扩展中就有著名的后来变为工业标准的NFS(网络文件系统协议).Sun还为早期的Unix窗口软件开发做了一些工作,SunOS于1983年首次发布.利用Sun提供的工作站硬件产品,Unix开始在高技术领域,尤其是计算机辅助设计和工程领域(CAD/CAE)被广泛地接受.80年代早期CAD/CAE变得流行起来,另外的PC工作站提供商象HP和Apollo等开始加入到该领域,但配备Unix的Sun工作站在性能和多用户处理方面胜过了PC工作站.在其他的商业计算环境中,Unix始终被认为是一个需自我完善的操作系统,它没有侵占大型机的市场,只是在多任务处理和网络连接中发挥了显著的特色.更重要的在于C语言的诞生使Unix可以向几乎任何硬件平台移植. 折叠 1984年到2001年1984年AT&T发布了可以支持监视器连接到Unix的System V r2,该功能通过termcap的监视器数据库文件实现,命名为terminfo的文件可以提供多种监视器硬件的支持.其他的还有Streams和远程文件系统等. Solaris是1993年由SunOS改名而来,开始转向支持AT&T公司的System V release4版本.1993年Unix商标被Novell公司购得.1994年Solaris 2.4发布. 1995年Solaris 2.5发布,1997年Solaris 2.6生效,1998年Solaris 7发布,2000年Solaris 8发布,2001年Solaris 9测试版在3季度发布.从Solaris 8开始,Solaris除了能在Sun公司自己的SPARC系列处理器上运行外,还可以运行在Intel处理器平台上 折叠 编辑本段 UNIX系统基本结构UNIX系统的基本结构如图所示。整个UNIX系统可分为五层:最底层是裸机,即硬件部分;第二层是UNIX的核心,它直接建立在裸机的上面,实现了操作系统重要的功能,如进程管理、存储管理、设备管理、文件管理、网络管理等,用户不能直接执行UNIX内核中的程序,而只能通过一种称为"系统调用"的指令,以规定的方法访问核心,以获得系统服务;第三层系统调用构成了第四层应用程序层和第二层核心层之间的接口界面;应用层主要是UNIX系统的核外支持程序,如文本编辑处理程序、编译程序、系统命令程序、通信软件包和窗口图形软件包、各种库函数及用户自编程序;UNIX系统的最外层是Shell解释程序,它作为用户与操作系统交互的接口,分析用户键入的命令和解释并执行命令,Shell中的一些内部命令可不经过应用层,直接通过系统调用访问核心层。 折叠 编辑本段 UNIX特点应用范围折叠 编辑本段 UNIX系统组成UNIX操作系统结构由三大部分组成: 1. (1) kernel(内核) 2. (2) shell(外壳) 3. (3) 工具及应用程序 UNIX Kernel(UNIX内核) 是UNIX操作系统的核心,指挥调度UNIX机器的运行,直接控制计算机的资源,保护用户程序不受错综复杂的硬件事件细节的影响。 硬件 工具和应用程序 SHELL KERNEL UNIX Shell(UNIX外壳) 是一个UNIX的特殊程序,是UNIX内核和用户的接口,是UNIX的命令解释器。 目前常见的Shell有三种: hell类型 简称 命令 主要特点 Bourne Shell B Shell sh 最老、使用最广泛,每个UNIX都提供。 Korn Shell K Shell ksh 是对B Shell的扩充,兼容B Shell。 C-Shell csh 格式有点象C语言。功能强,命令记忆稍难,在大学和学院中较为流行。 一般系统缺省为Bourne Shell, 本文以此shell为例。 要想将当前Shell改为其它类型的Shell,只需在操作系统提示符下键入相应的Shell命令即可。如在B Shell下键输入命令:$ ksh 就进入了K Shell。 折叠 编辑本段 Unix常见故障恢复技巧SCO Unix 操作系统是一个多用户、多任务的操作系统,在日常的系统维护中,正确处理突发的灾难故障(如不能启动或不能登录等),保证数据的完整可靠,是系统管理员应该掌握的一种技能。本文介绍有关该系统的一些常见故障的恢复技巧。 折叠 应急引导盘的制作在系统配置完成后,创建boot/root应急引导盘。下面以SCO OpenServer 5.0为例,介绍应急引导盘的制作步骤: ● 以超级用户root 注册; ● 进入创建应急引导盘的界面: #mkdev fd ● 根据提示制作boot和root盘,其中制作boot盘时一般选择与本机相同的内核。 处理“No os”提示 如果系统引导失败或显示“No os”信息,说明引导块中/etc/hd0boot和/etc/hd1boot或主引导块/etc/masterboot 被破坏了,需要进行恢复: ● 插入boot 盘引导,当出现boot: 提示符时,键入命令: hd(40)unix ● 进入单用户方式,并键入下列命令: #instbb hd /dev/hd0a #dparam -w 其中,instbb把部分引导块写入硬盘; dparam 把主引导块代码写入硬盘的主引导块。对于某些硬盘,还需要按dparam 的描述标记硬盘划分情况。 折叠 处理boot问题如果系统引导时,出现如下错误信息: oot not found cannot open tage 1 boot failure: error loading hd(40) /boot 这表明系统中的/boot损坏或丢失了,可以按如下方法进行恢复: ● 插入boot引导盘,重新引导机器。在boot: 提示下键入: fd(60) unix.Z root=hd(42) 上述命令从软盘上引导系统,并从软盘上装入核心,安装根文件系统。 ● 在提示符下键入root口令,进入单用户模式。卸载/stand 文件系统 (boot和核心在该文件系统中): umount /stand 由于/boot文件系统通常是以只读方式安装的,所以在替换boot文件之前,必须先把它卸下,再重新安装上。 ● 重新安装/stand文件系统: mount /stand ● 安装引导盘: mount -r/dev/fd0 /mnt ● 恢复/boot文件: cp /mnt/boot /stand 该命令在硬盘上复制一个新的/boot文件。 ● 把引导盘从驱动器中取出之前,键入如下命令: mount /mnt 重新启动系统即可。 折叠 处理Unix文件问题如果在开始引导时,系统显示:unix not found,则表明系统文件被损坏或丢失了,该文件包含了系统核心的引导映像。Unix文件丢失后,可以从另外的核心文件(如unix.old或unix.safe)上引导系统,为此,只须在boot提示符下键入替代的核心文件名即可。 如果在系统上没有另外的核心文件,就需要从应急盘引导系统,以便恢复系统unix文件。首先,在boot:提示下键入: fd(60) unix.Z root=hd(42)swap=hd(41) 然后,在单用户模式下,键入命令: umount /stand mount /stand mount -r/dev/fd0 /mnt cp /mnt/unix.Z /stand 处理不能进入多用户问题 如果按<ctrl> +D键后,系统进入多用户方式失败,或在引导时显示如下信息,表明/etc/inittab文件丢失: init: cannot open /etc/inittab errno: 2 文件/etc/inittab中包含init命令。如果文件inittab丢失了,就不能执行系统启动命令,系统也就不能进入多用户方式。所以,按<ctrl> +D键时,系统停留在单用户模式下,并显示上述出错信息。 要恢复inittab文件,必须重建核心环境: ● 进入系统维护模式,键入以下命令: #cd /etc/conf/cf.d #touch /etc/.new-unix #../bin/idmkenv ● 在系统提示选择信息时,键入y并按<ctrl>键,然后键入命令: cat /etc/inittab ● 如果系统提示有关不能打开该文件的信息,键入命令: ln -s/var/opt/K/SCO/unix/* /etc/inittab /etc/inittab ● 再键入exit后,系统出现如下信息: Enter run level(0-6,s or S): 键入2,系统即可以进入多用户方式。 处理root文件问题 如果root文件系统遭到破坏,可以通过以下步骤进行恢复: ● 用应急boot软盘启动,并根据提示插入应急root盘。 ● 在root提示符下键入命令: fsck /dev/hd0root 如果fsck检查无误,那么使用haltsys关闭系统,并且从硬盘启动即可;如果fsck检查有误,那么继续进行以下设置: ● 重新配置系统硬盘: #mkdev hd 用户可以运行所有的初始化硬盘的应用程序对硬盘重新进行配置。 ● 当系统提示:making filesystems后,系统将返回到root提示符下,键入如下命令整理硬盘上的root文件系统: #fsck /dev/hd0root ● 安装硬盘上的root 文件系统: #mount /dev/hd0root /mnt ● 恢复硬盘上的root文件系统的备份: cd /mnt cpio -ivmkBud -I/dev/xxx 其中,xxx表示磁带驱动器设备名。对于1/4英寸盒式磁带驱动器,xxx为rcto;对于mini盒式磁带驱动器,xxx为rctmini。另外,用户还可以根据实际情况,用cpio命令的其他选项完成此项工作。 完成备份工作后,还要确认stand目录是否位于root文件的顶层,如果不是,使用如下命令行进行相应的调整: mkdir stand ● 卸载和整理恢复的root文件系统: cd / umount /dev/hd0root fsck /dev/hd0root 此时,系统将会提示一个警告信息,用户可以忽略这个警告信息: umount: warning: /dev/filesystem was not in mount table ● 检查boot文件系统(/stand): fsck /dev/boot ● 安装boot文件系统: mount /dev/boot /mnt ● 使用如下命令卸载和整理恢复的boot文件系统: cd / umount /mnt fsck /dev/boot 重新启动系统即可。 处理emulator问题 如果在开始引导时,系统显示:No floating is available ……信息,表明系统的/etc/emulator文件被损坏或丢失了,可以按如下步骤恢复: ● 插入boot应急盘启动系统,在出现boot:提示时回车。 ● 清理根文件系统: #fsck -s/dev/hd0root ● 用应急引导盘重新启动系统,键入命令: #/etc/mount /dev/hd0root /mnt #cp /etc/emulator /mnt/etc/emulator #/etc/umount /mnt 重新启动系统即可。 处理login文件丢失 当系统提示“login:”,但输入后却不能登录时,显示“can誸 exec /bin/login: no such file”信息,表明login文件损坏或丢失。 ● 插入boot应急盘,重新启动系统,进入维护状态。 ● 恢复登录文件: # cpio idv -I/dev/rct0 bin/login 折叠 编辑本段 正确的五种关机方法UNIX操作系统是目前网络上用得最多的操作系统之一,使用UNIX系统,机器的关机要比使用DOS单用户机器的关机过程复杂得多。在UNIX下如不使用正确的关机命令和关机方法,将破坏文件系统,造成很大的损失。下面介绍UNIX系统的五种关机方法。 用haltsys命令关机 haltsys命令一发出,就会立即把系统关闭掉。其优点是系统响应快,强迫性强,因此,该命令只适合于系统上只有一个用户的情况。如果系统上有多个用户在工作,一发出命令,这些用户就被迫退出系统,他们的进程也丢失了。操作方法是:以超级用户登录,输入haltsys,回车,系统显示关机信息时,关掉电源。 用reboot命令关机 reboot命令是由系统管理员执行的停机程序,reboot实质上是和haltsys命令链接在一起的。reboot和haltsys的唯一区别是它在正常停机后不用按任意键,马上自动引导,重新启动系统。reboot特别适合系统管理员调试机器用。 用shutdown命令关机 hutdown命令是一个用shell语言编写的程序,驻留在/etc目录中。它由超级用户在前台运行,自动执行wall命令,通知正在系统中工作的所有用户,系统将在指定的时间内停机,请做好准备工作,然后从系统中注销。当所有用户已从系统中注销或指定时间已到时,shutdown就执行kill命令把系统中除主控台外的所有进程都终止,接着执行haltsys命令使系统正常停机。使用格式:shutdown -g[hh:]mm -f"Mesg",其中[hh:]mm是系统指定关机时间,“Mesg"是系统向各终端用户发送的信息。在网络用户中推荐使用shutdown命令来关机。 用bye命令关机 ye命令是以shutdown为核心,用vi编辑生成的关机命令,主要优点是简单易记。bye文件内容为:shutdown -y -g0(参数可根据实际需要设置),编辑后的bye权限为-rw-r-r-,此时bye不能直接使用,将其权限放开,# chmod u+x bye,bye才可行使shutdown职能。 创建关机用户bye 用超级用户来关机,不利于系统的管理,存在一定的安全隐患,因此有必要建立自动关机用户。下面以sysadmsh命令来创建关机用户bye。 (1)创建bye用户。用超级用户登录到UNIX,键入sysadmsh,选择Account->User->Create,在Username中输入:bye,其他缺省。 (2) 在Account->User->Examine中,输入bye后选择Privilege->Subsystem->Specify输入shutdown,保存修改信息并退出sysadmsh。 (3) 用bye注册到UNIX,编辑当前目录下的.profile文件。该文件内容为: trap exit 2,3 /tcb/bin/asroot shutdown -y -g0 (4)在Login:状态下,只要键入bye就会自动关闭UNIX操作系统。 折叠 编辑本段 安全管理方法?finger是UNIX平台上一种很普通的工具,使用它的目的是提供用户在给定系统上的一些有关信息。而一台Unix主机最容易出问题的地方是fingerd,就是finger的守护进程,关于它的工作原理在很多UNIX书上都有介绍,但它的缺点是提供的消息实在太多了。一个熟练运用finger的人可以在很短的时间内攻破一台fingerd没关的机器,这不是危言耸听,SUN Solaris的fingerd可以提供主机上所有在线用户名,所有用户名,比/etc/passwd更详细的用户信息。例如我对一台SUN机器提出finger请求,查询root情况,如果它的fingerd没有关闭或被替换,那么它将会告诉我如下信息: Login name: root In real life: Super-User Directory: / Shell: /sbin/sh Last login Fri Mar 26 16:54 on pts/2 New mail received Sat Mar 27 23:10:37 1999; unread since Wed Dec 23 09:56:10 1998 No Plan. 这样我就可以得到如下信息: (1)root的真名是Super-User(有些勤劳的系统管理员会把自己的名字写在这儿,而且把root的密码设成自己的名字!!); (2)root的根目录在/下,有时黑客以普通用户身份侵入一台机器后发现/etc/passwd是root读写,那么他通过查看用户目录也能获得主机上大部分用户名; (3)root的Shell环境是/sbin/sh,如果是/bin/passwd,证明用户登录主机只能修改密码; (4)root上次登录机器是在1999.3.26 16:54; (5)root有新信是1999.3.26到的,但是他从1998.12.23就没看过信。 因为操作系统的设计者认为finger是查询用户用的,当然是输出的信息越详细越好。但是在目前国内用户对口令安全认识还不够的情况下,用户口令是用户名、12345、abc123或管理员分配的默认口令还不能避免。除了对主机的finger外,路由器也有finger。尤其是接入路由器,它可以输出当前连接者的用户名及IP地址。实际上也造成了主机用户名的泄露。 除了finger命令外,sendmail带的EXPN命令也是可以泄露用户名的一个途径。当用Telnet登录主机sendmail端口时,用EXPN命令可以试出主机上的用户。比如expn root,如果有用户名叫root那么将返回用户的电子邮件地址,如果没有的话将输出User unknown。更危险的是用EXPN命令查到一个带别名的邮件地址时,返回的将是这个别名抄送的所有电子邮件地址。httpd配置不合理或CGI程序编写有问题,用户可以非法获取主机信息,存取文件系统。WWW服务中的安全问题主要出在CGI程序上。 对于SGI的机器来讲有两点比较特殊。第一,IRIX安装后有几个系统默认用户没有密码,请使用SGI机器的管理员们一定注意;第二,如果安装了IRIX的WWW服务器,请注意它的默认主页,防止它公布那些不该公布的消息。[1]
|
|