1、 文件、目录和设备统一处理; 网络功能强; 可装卸的树型文件系统; 具有很好的移植性和伸缩性; 强大的数据库支持能力UNIX的基本部件1、文本编辑器,包括行编辑器和全屏编辑器;2、文本操作系统工具,如head、tail、sort等;3、软件开发工具;4、shell命令;5、具有内在安全性的层次文件系统;6、分布式文件系统,主要是TCP/IP网络的推广和NFS的广泛应用;7、文件系统;8、电子邮件和网络新闻;9、网络支持,支持UUCP、FTP、TELNET等;UNIX的标准化 SVID标准国际UNIX组织和AT&T公司于85年宣布的: System V Interface Definition,
2、即SVID。该文件在系统调用、例行程序库和实用程序等方面描述了UNIX System V。它给出了定义UNIX System V的基准,UNIX System V的所有提供者必须遵循这一基准。 POSIX规范(Portable Operating System Interface) 美国的UNIX用户协会和美国的IEEE学会在85年制订的一个可移植的操作系统规范。它包括可移植操作系统的规范、命令语言Shell和其它工具、以及验证测试方法等。第三章 文件系统文件目录概述UNIX系统提供了一种层次目录方案。目录就象存放一组文件的柜子一样,目录也可以包括在其他目录中,这样就形成了一种庞大的、具有分支
3、的组织方式,这种结构通常被称为树状结构。目录实际上也是一种特殊的文件。命令、数据文件、其他命令甚至设备(特别文件)都可以作为目录中的项(文件)。 I标识号、I列表和I节点一个目录是由一系列结构组成的;每个结构包含一个文件名和一个指向文件自身的指针,该指针是一个整数,称为文件的I标识号。当文件被访问时,它的I标识号用来作为索引打开一个系统表(I列表),系统中存放着文件(I节点)的实体。I节点包含了对文件的描述:文件自身的用户和用户组ID文件的保护码文件内容所在的物理磁盘地址文件的大小最后一次I节点改变的时间,最后一次使用和修改的时间连接该文件的次数,即它出现在其他目录中的次数一个指明文件类型的标
4、记(目录、普通文件、特别文件) 文件的三级保护UNIX把使用文件的用户分成三个等级:文件所有者、同组用户和其他用户。文件所有者也称文件主,是文件的创建者,对该文件拥有所有权限;同组用户是具有相同组标识号的所有用户,文件主可以决定一个文件属于哪个组以及该组用户对文件的存取权;其他用户是指与文件主无关的用户,他们与文件主不属于同一个用户组,其他用户对一个文件的访问权限也由该文件主决定的。一个文件的访问权限存放在该文件I节点的di_mode域中,di_mode的08位表示文件主、文件组用户和其他用户对该文件的存取权限。举个例子,用ls -l命令可列出文件hello.c的模式和属性:-rwxr-xr-
5、x 1 yds user 58 9月 25日 10时54分 hello.c最左面一栏显示了该文件的模式:文件主对该文件可读(r)、可写(w)、可执行(x),同组用户对该文件可读、可执行,其他用户对该文件可读、可执行。相应的,di_mode的08位为111101101(0755)。访问权限控制文件和目录的访问权限基础在前面曾介绍过,命令ls -l可以列出文件或目录的访问权限。所谓访问权限是指用户是否具有对文件或目录进行读写和执行的能力。在UNIX系统中,文件和目录的权限分为以下三类: 属主的权限定义了文件和目录属主可对其进行的操作。 同组用户的权限定义了与属主在同组的其他成员可对其进行的操作,以
6、下简称为组权限。 其他用户的权限定义了除去属主及其同组的成员外,其他用户可其进行的操作。创建文件的用户是文件的属主,文件的属主可以选择同组用户或其他用户对文件和目录的访问权限。UNIX系统按属主、同组用户和其他用户的顺序(即依次将当前用户与上述三类用户匹配)来验证对文件操作的用户的许可权。在使用ls 杔命令时,所列文件的第一项的从第二位起便对应文件的访问权限,第二至四位为文件属主的访问权限,第五至七位为组权限,第八至十位为其他用户的访问权限。当目录权限被设为只读时,用户只能列出该目录的文件清单而无法对其中文件进行任何操作,如果用户想要对目录中的一个文件进行操作,则他必须有对目录的可执行权限。文
7、件所属组的定义与具体的UNIX系统有关。一些系统上当前目录决定组。在另一些系统中文件属主可以指定其所在的一个二级组做为文件的组(使用newgrp命令),并且可以产生一个属于某个二级组的文件或目录。注意:UNIX系统中,超级用户可以读、写和执行任何一个文件而忽略该文件的属主所规定的权限。权限位在前面,我们提到每个文件或目录都有属主和所在的组,并且文件和目录的访问权限分为属主的权限、组权限和其他用户的权限三类。对于每一类访问权限,UNIX使用三个权限位来加以定义,在文件中这三个权限位及其意义如下: 读(r):当被置为1时,文件可读。 写(w):当被置为1时,文件可修改、可删除、可重命名。 执行(x
8、):当被置为1时,文件可执行。在目录中这在个权限位及其意义如下:当被置为1时,目录可读。当被置为1时,目录可被修改、删除、重命名。当被置为1时,可对目录中的文件操作:这里执行位又叫查寻位,因为目录的执行位并不表示该目录是否可被执行,而是表示是否允许在该目录下寻找文件。下面我们进一步分析一下目录的访问权限,设在/home/liuy目录下有一子目录testdir,该子目录有以下属性:drwxrwx- 3 liuy develop 1536 Nov 4 06:00 testdir在目录testdir下还有一个test file文件,其属性为:-rwxr- 1 liuy develop 2000 No
9、v 4 06:10 testfile这意味着用户liuy可以读、修改、重命名目录testdir和文件testfile,组staff中的其他成员可以访问testdir目录。虽然文件testfile的组权限为只读,但由于staff同组用户可以读、写、执行目录testdir,故他们也可以修改、删除或重命名文件testfile。由上例可以看出如果某用户对一目录有写的权力,那么该目录中文件的访问权限就将失效。UNIX系统中文件和目录的每一类访问权限都以一个八进制的数(取值07)来表示,八进制数在UNIX中用三位表示,下面是这三位的含义: 第一位(r)值0或1(定义读权限,为1时表示可读) 第二位(w)值
10、0或1(定义写权限,为1时表示可写) 第三位(x)值0或1(定义执行权限,为1时表示可执行)其中第一、二、三位的权分别为4、2、1。例如101的值为5(二进制101的值为4101115)。下面介绍怎样用八进制数定义访问权限,例如当前目录中testfile文件的访问权限定义为: 属主可读、可写、可执行 同组用户可读、可执行 其他用户不可访问用权限位可表示为:属主(1117) 同组用户(1015) 其他用户(0000)。因此可定义testfile文件的访问权限为750。一般文件目录设备文件r可读取或拷贝文件内容可显示目录内容可从该设备读取数据w可修改或删除文件可在该目录下建立文件或子目录可将数据输
11、出到设备x该文件可以执行可进入该目录无意义下面是在给文件和目录定义访问权限时的一些常用规范: 对于私人信息,访问权限为 700,即只有属主才可以读、写、执行该文件。 如果想让信息与他人共享,而又不许他人对信息改动,访问权限可以设为755,这样别人没有写的权限,也无法对文件或目录的内容进行修改。 如果不想让除了自己或本组成员外的其他用户访问该文件,可将其他用户的访问权限设为0,即750或770。有关文件和目录权限的命令 umask命令当用户登录进UNIX后,系统将提供一个默认权限,该用户所创建的所有文件和目录都使用该默认权限。用户使用umask命令可以查看和修改默认权限,umask命令的命令格式
12、如下:umask xxx当不使用任何参数时,命令将显示当前用户的默认权限的屏蔽码,即使用777减取输出值就是当前用户的默认权限。用户还可以修改默认权限,此时将使用xxx参数,命令执行完毕后,使用777减取xxx的值就是当前用户的默认权限。例如用户想定义默认权限为:属主可读、可写、可执行(7),组成员可读、可执行(5),其他用户可执行(1),那么xxx的值需定义为777751026,因此可执行命令:umask 026。 chmod命令chmod命令使用户可以根据需要修改已存在的文件或目录的访问权限,它的命令格式如下:chmod -R mode file或chmod -R whooperatorp
13、ermission file在第一种格式下,用户可以直接给出文件或目录权限位的绝对值,从而实现对文件或目录的访问权限的修改,此时的mode为一个八进制的数,是由下列的mode值或这些值的“逻辑或”操作构成:400允许文件属主可读200允许文件属主可写100允许文件属主可执行040允许同组用户可读020允许同组用户可写010允许同组用户可执行004允许其他用户可读002允许其他用户可写001允许其他用户可执行。在第二种格式下,用户通过使用符号方式给出文件或目录的访问权限来实现对文件或目录的访问权限的修改,此时的who用以指定修改哪一类访问权限,为以下的零个或多个字符:u 文件属主的权限g 组权限
14、o 其他用户的权限a 所有用户的权限当who被省略时,其默认值为a。operator为以下三种运算符之一,用于指明文件或目录的访问权限改变的方式:+ 在原有访问权限的基础上加入某些权限- 在原有访问权限的基础上去掉某些权限= 绝对地赋予某种访问权限,此时将清楚原有的访问权限permission指明修改的权限内容,是由下列字母任意组合而成:r 读权限w 写权限x 执行权限命令中所使用的任选项-R的含义为,当命令的参数file为一个目录时,将修改该目录下的所有文件的访问权限。普通用户只能修改自己的文件(即用户为文件的属主)的访问权限,超级用户可以修改系统中所有文件的访问权限。 chown和chgr
15、p命令文件属主和超级用户可以通过chown命令来改变文件的属主,chown命令的命令格式如下:chown -R -h owner file命令将把文件file的属主改为owner,命令所使用的任选项及其含义如下:-R:递归。当file为一个目录时,命令将把目录及其下的所有文件的属主均改为owner。-h:如果文件为一个符号链接,则改变符号链接的属主。当不使用此任选项时,命令将改变符号链接所链接的文件的属主。文件属主和超级用户还可以使用chgrp命令来修改文件的用户组,chgrp命令的命令格式如下:chgrp -R -h group file命令将把文件file的用户组改为group,group
16、可以是一个用户组的组名(该组名在/etc/group文件中有定义)或者是一个十进制的数表示组ID。命令所使用的任选项及其含义如下:当file为一个目录时,命令将把目录及其下的所有文件的用户组均改为group。如果文件为一个符号链接,则改变符号链接的用户组。当不使用此任选项时,命令将改变符号链接所链接的文件的用户组。第四章 进程系统UNIX系统中所有操作都是通过进程来实现的,因此对进程的管理是UNIX系统管理中一个十分重要的部分。进程状态转换进程状态及状态转换进程的状态是指进程从被创建到它终止这一段时间内所处的位置,通常进程的状态有以下几种:1. 进程在用户态下执行;2. 进程在核心态下执行;3
17、. 进程没有被执行,但是处于就绪状态,且在内存,即位于进程调度队列中,只要核心调度到它,就可以被执行;4. 进程正在睡眠,且驻留在内存中;5. 进程处于就绪状态,且被对换进程换出内存而驻留在辅存中;6. 进程正在睡眠,且被对换进程换出内存而驻留在辅存中;7. 进程刚被创建;8. 进程在从核心态返回用户态时被内核抢先以调度另一个进程;9. 进程执行了exit系统调用而处于僵死状态,这也是进程终止前的最后一个状态,此时进程不再存在,但是它留下一些记录供其父进程收集使用。通过下图可以看出上述的几种状态以及它们之间是如何转换的。下面我们就结合图来介绍一个典型进程的状态转换过程。首先,进程的父进程执行f
18、ork系统调用创建进程,这样进程进入“创建”状态;在一定时期后进程将转入“内存中就绪”状态;当内核的进程调度程序选取这个进程去执行时,它便进入“核心态运行”状态,此时进程将完成fork系统调用;当系统调用完成后,进程可能进入“用户态运行”状态;一段时间后,可能会发生中断,这时进程又将进入“核心态运行”状态;在中断处理结束后,进程可能再次进入“用户态运行”状态,也有可能转入“被抢先”状态,因为进程调度程序决定调度另一个进程去执行。当进程在“用户态运行”状态下执行某个系统调用时,它将转入“核心态运行”状态,若系统调用是进行I/O处理,则进程可能必须等待I/O处理的完成,于是它将进入“内存中睡眠”状
19、态;当I/O处理结束,将发出中断唤醒进程,使之进入“内存中就绪”状态。当进程处于“内存中睡眠”或“内存中就绪”状态时,系统可能为了执行另一个进程而需要内存,此时进程就可能被对换进程换出内存,而转入“睡眠且换出”或“就绪且换出”状态,等待对换进程将它换入内存,以进入“内存中就绪”状态。当进程执行结束后,它将发出exit系统调用,从而转入“核心态运行”状态,并由此进入“僵死”状态。 UNIX进程状态转换图用户态运行返回到用户态系统调用中断中断返回核心态运行被抢先退出抢先重新调度进程睡眠僵死在内存中就绪在内存中睡眠唤醒内存足够创建换入 换出fork内存不足(仅在对换系统中)睡眠且换出就绪换出进程管理
20、一个进程启动另一个进程后,被启动进程是子进程,原进程是启动进程的父进程。一个父进程可以有多个子进程,而一个子进程只有一个父进程。父进程消亡时子进程一般也消亡,用户可以使子进程继续存在,该子进程的父进程就变成了原父进程的父进程。每一个进程都有父进程。进程号是1 的为最原始进程。用户可以通过命令ps(process status,进程状态)检查机器中当前存活的进程。不加参数时,显示发出该命令用户的登录对话期内所有正在运行的进程。 参数:-f 显示进程的全部信息;-a 显示全部用户当前活动的进程;-e 显示当前系统正在运行的全部进程;-t 终端名 显示对应终端的进程;-u 用户名 显示某用户的进程;
21、通常 -ef 、-af和 -t 使用较多。 一般显示如下信息: UID 用户名 PID 进程号 PPID 父进程号 C 进程最近所耗的CPU 资源 STIME 进程开始时间 TTY 启动进程的终端设备 TIME 进程总共占用CPU 的时间 COMMAND 进程名命令kill 终止自己所拥有进程的执行,如:$ kill 435向进程号是435的进程发送信号15 ,使其终止,有可能不启作用;$ kill -9 362强制终止362号进程;第五章 信号机制信号是UNIX进程间最基本的通讯手段,主要作用是实现进程间异步事件的通讯。信号是传送到进程的软中断,它通知进程在它们的环境中出现了非正常事件。程之
22、间可以互相通过系统调用kill发送软中断信号。核心也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。UNIX信号的种类很多,下面介绍一些最常用的信号:SIGHUP 挂断。这是当控制终端被挂起时送到进程的信号。SIGCLD子进程退出。SIGQUIT 退出。由键盘产生的中断。SIGKILL 终止。这个信号不能被捕获、阻塞或忽略。SIGALRM 定时信号。SIGTERM 软件终止信号。SIGUSR1 用户定义的信号1。SIGUSR2 用户定义的信号2。这些信号值的声明在/usr/include/sys/signal.h文
23、件中。进程接收到信号后要进行处理,处理方式为以下三种之一:(1) 缺省方式(SIG_DFL):这是进程对信号的一般处理方式,在无特殊情况下,进程在接收到信号后将终止执行。有一些信号,在终止进程运行前需将终止进程的正文段、数据段、user结构和栈段内容写到当前目录的core文件中,以备调试工具分析与使用。(2) 忽略方式(SIG_IGN):进程接收到一个已指明忽略的信号,则将该信号清除后,立即返回,不在任何工作。(3) 捕获方式(设置信号处理函数):这是用户设置的信号处理方式,当进程接收到这种信号时,执行用户设置的信号处理函数,执行完后,恢复现场,然后继续往下执行。 信号SIGKILL和SIGS
24、TOP既不能被捕捉,也不能被忽略。进程通过系统调用signal来指定进程对某个信号的处理行为。在进程表的表项中有一个软中断信号域,该域中每一位对应一个信号,当有信号发送给进程时,对应位置位。由此可以看出,进程对不同的信号可以同时保留,但对于同一个信号,进程并不知道在处理之前来过多少个。核心处理一个进程收到的信号的时机是在一个进程从核心态返回用户态时。所以,当一个进程在核心态下运行时,软中断信号并不立即起作用,要等到将返回用户态时才处理。进程只有处理完信号才会返回用户态,进程在用户态下不会有未处理完的信号。核心处理一个进程收到的软中断信号是在该进程的上下文中,因此,进程必须处于运行状态。前面介绍
25、概念的时候讲过,处理信号有三种类型:进程接收到信号后退出;进程忽略该信号;进程收到信号后执行用户设定用系统调用signal的函数。当进程接收到一个它忽略的信号时,进程丢弃该信号,就象没有收到该信号似的继续运行。如果进程收到一个要捕捉的信号,那么进程从核心态返回用户态时执行用户定义的函数。而且执行用户定义的函数的方法很巧妙,核心是在用户栈上创建一个新的层,该层中将返回地址的值设置成用户定义的处理函数的地址,这样进程从核心返回弹出栈顶时就返回到用户定义的函数处,从函数返回再弹出栈顶时,才返回原先进入核心的地方。这样做的原因是用户定义的处理函数不能且不允许在核心态下执行(如果用户定义的函数在核心态下
26、运行的话,用户就可以获得任何权限)。在信号的处理方法中有几点特别要引起注意。第一,当一个进程处理完中断信号返回用户态之前,核心清除设定的对该信号的处理例程的地址,即下一次进程对该信号的处理方法又改为默认值,除非在下一次信号到来之前再次使用signal系统调用。这可能会使得进程在调用signal之前又得到该信号而导致退出。第二个要引起注意的是,如果要捕捉的信号发生于进程正在一个系统调用中时,并且该进程睡眠在可中断的优先级上,这时该信号引起进程跳出睡眠状态,返回用户态并执行信号处理例程。当从信号处理例程返回时,进程就象从系统调用返回一样,但返回了一个错误代码,指出该次系统调用曾经被中断。第三个要注
27、意的地方:若进程睡眠在可中断的优先级上,则当它收到一个要忽略的信号时,该进程被唤醒,但不返回用户态,一般是继续睡眠。但用户感觉不到进程曾经被唤醒,而是象没有发生过该信号一样。第四个要注意的地方:核心对子进程终止(SIGCLD)信号的处理方法与其他信号有所区别。当进程检查出收到了一个子进程终止的信号时,缺省情况下,该进程就象没有收到该信号似的,如果父进程执行了系统调用wait,进程将从系统调用wait中醒来并返回wait调用,执行一系列wait调用的后续操作(找出僵死的子进程,释放子进程的进程表项),然后从wait中返回。SIGCLD信号的作用是唤醒一个睡眠在可被中断优先级上的进程。如果该进程捕捉了这个信号,就象普通信号处理一样转到处理例程。如果进程忽略该信号,那么系统调用wait的动作就有所不同,因为SIGCLD的作用仅仅是唤醒一个睡眠在可被中断优先级上的进程,那么执行wait调用的父进程被唤醒继续执行wait调用的后续操作,然后等待其他的子进程。如果一个进程调用signal系统调用,并设置了SIGCLD的处理方法,并且该进程有子进程处于僵死状态,则核心将向该进程发一个SIGCLD信号。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1