300 likes | 487 Views
操作系统. 第九章 UNIX 使用基础. 陆松年 snlu@sjtu.edu.cn. 9.1 登录和退出系统. UNIX 用户只有通过 login 才能进入工作期 (也称注册) 口令( passwd )是用户进入系统的一把钥匙。 口令应当选取自己容易记忆而别人又难以猜测的字符串。 一旦用户进入了系统以后,就好比打开了保险箱,不能随便离开终端,即使银行在送钱也不能不顾一切地冲出去。 不执行退出命令,而采用粗暴地关闭终端电源 ,急冲冲地离开的方法是不行的。接下来的用户一打开终端,就回到了你的工作环境,你的命运就掌握在这下一位的“君子”或“强盗”手中了。.
E N D
操作系统 第九章 UNIX使用基础 陆松年 snlu@sjtu.edu.cn
9.1 登录和退出系统 • UNIX用户只有通过login才能进入工作期(也称注册) • 口令(passwd)是用户进入系统的一把钥匙。 • 口令应当选取自己容易记忆而别人又难以猜测的字符串。 • 一旦用户进入了系统以后,就好比打开了保险箱,不能随便离开终端,即使银行在送钱也不能不顾一切地冲出去。 • 不执行退出命令,而采用粗暴地关闭终端电源 ,急冲冲地离开的方法是不行的。接下来的用户一打开终端,就回到了你的工作环境,你的命运就掌握在这下一位的“君子”或“强盗”手中了。
UNIX操作系统的外壳—— Shell,是一个功能强大的命令处理器,它作为用户与操作系统交互的界面,接受用户输入的命令,分析、解释、执行该命令,并将结果显示出来。 • 有三种主要的Shell : • 由AT&T贝尔实验室 S.R, Bourne 1975写的 Bourne Shell ,该Shell的程序名为sh ; • 由加利弗尼亚大学贝克利分校的学生 Bill Joy 开发的 C Shell ,其程序名为csh (它的编程类似于C语言形式而得名); • 在八十年代中期由贝尔实验室的 David G.Koun 开发的 Bourne Shell 的扩充版本 ksh 。 9.2 Shell 基础 9.2.1 Shell的家族
三种shell的主要特点 • Bourne Shell是这三个Shell 中使用最普遍的,几乎所有的Unix 操作系统都将B Shell 作为它们的标准配置之一。它比另两个Shell要小,执行效率也高。 • C Shell提供了某些比B Shell 更高级的特性,包括历史命令,别名机制和作业控制。C Shell 的控制结构和运算符与C程序设计语言十分相似,因此对程序设计员来说,倍感亲切。 • K Shell保留了实现B Shell 的全部功能,并且吸取了C Shell 的许多高级功能。
9.2.2 简单命令和命令表 • 简单命令的格式为 命令名[选择项...][参数...] 选项由一个连字符‘-’后面紧跟一个(或数个)字母组成,用于告诉命令要完成任务的细节差别 • 如显示文件信息命令 ls -l file1 file2 • 一个命令行也可包含多个用分号‘;’分开的简单命令,用‘;’分开的一组简单命令称为命令表。如进入一个doc目录,并显示该目录中内容的命令行 cd doc ; ls
9.2.3 标准输入和标准输出 • 标准输入和标准输出的基本思想就是编制程序时无需考虑输入和输出的各种情况,只要按UNIX的规定,从标准的输入源读数据并将数据写至标准的输出目的地即可,可由另外的机构决定具体的输入源和输出目的地。 • 在用户登录时,Shell自动地将标准输入连接到键盘上,将标准输出连接到屏幕上,所以也可以说,程序的标准输入是键盘,标准输出是屏幕,或简单地说,标准输入和标准输出是终端。
例:cat 的标准输入和标准输出 • UNIX的cat程序就是从标准输入读入数据并将其内容写到标准输出上,所以用户键入了命令cat后,该程序就从键盘上读入你的输入,并将输出内容显示在屏幕上,直至用户按下CTRL-D键(文件结束符)后终止。由于用户所键入的内容也在屏幕上回显出来,所以用户每输入一行,屏幕显示两行。 $ cat abcd abcd $
9.2.4 输入/输出转向 • Shell向用户提供了改变程序输入输出方向的手段,即输入输出转向,或称输入输出重定向。 • 希望程序的输出不要显示在屏幕上,而是送到文件中。就可以使用输出转向符号‘>’ cat > file • 如果用户希望程序的标准输出转到文件后,不要覆盖原先的内容,而是添加到文件的尾部,则可以使用附加输出转向符“>>”,如命令 cat >> file 将标准输入的内容添加到文件file的尾部。
如果用户希望cat命令不要从键盘上读取数据,而是从一个文件中读取数据,那就要使用输入转向符‘<’,如命令如果用户希望cat命令不要从键盘上读取数据,而是从一个文件中读取数据,那就要使用输入转向符‘<’,如命令 cat < file 这个命令相当于显示一个文件的内容。 • 可以同时转向一个程序的输入和输出。命令 cat < file1 > file2 • 可以省略输入转向符‘< ’,如上面的cat命令也可写成 cat file1 > file2
9.2.5 后台命令与后台进程 • 为了提高用户和系统的效率,可以在后台执行这种命令,例如 command& • ‘ & ’就是后台命令符,它表示Shell将前一个命令放在后台执行,用户就不必等到这条命令执行结束。Shell在显示后台进程的进程号后,就立即显示Shell提示符,等待用户输入下一条命令,如: [12] 1244 $ • 这样就可以在后台命令运行的同时,做其它的工作,也可用后台方式再启动另一个程序。
用后台方式运行程序要注意 • 应当采用输入转向方式,使后台进程从指定的输入文件中读;否则,要么后台命令会在这一点上等啊等的,而你对此却漠然无知,不予配合;要么后台命令和Shell或用户在前台执行的程序将在终端上“抢读”,不能预测哪个进程将得到输入数据。 • 类似,如果后台命令如有标准输出,那么它的输出将和Shell或前台命令的输出在屏幕上交织在一起,使用户看得眼花缭乱。
9.2.6 管道 • Shell提供了功能更为强大的“管道”。用户可用‘|’符连接两个命令,使前一个命令的输出通过管道连续地送至后一个命令,作为其输入。如在下面命令行中, cat file1 file2 | sort • cat命令把两个文件file1和file2的数据连接起来,并将输出送至管道的一端; • sort命令从管道的另一端读入cat命令输出的数据,将其排序。 • 在一个命令行中,可以用多个管道符连接数个命令,这象工厂里的流水生产线。
9.2.7 特殊字符 • 某些字符对Shell来说,具有特殊的含义,它们是: & | < > * ? ` ; [ ] ( ) $ # - \ • 对于C Shell,{ } %和 !也是特殊字符。此外,分隔命令行中各项元素的空格符和制表符及结束一命令行的回车符也是特殊字符。
转义符 “\” • 如果你想把一个特殊字符当作普通字符来使用,就应当在每一个特殊字符前用特殊字符反斜线‘\’标记它,如 \ |、\*等。反斜线‘\ ’又称作转义符,因为它改变了下一个字符的通常含义。如果你希望一个反斜线不作为转义符,那末也应象标记其它特殊字符一样,在反斜线前面再加一个反斜线(\\)。 • 标记特殊字符的另一个方法是用一对单引号“‘ ”将一个或多个特殊字符括起来。在一对单引号之间的所有字符都解释为普通字符,不管原先它们是特殊字符,还是普通字符。
元字符 • 元字符可用于构成匹配现有文件名的模式,它们是 * 、?、[、]和方括号中的 -。 • 元字符‘?’可匹配除‘/ ’外的单个字符,故chapter? 可匹配chapter1,chapter2,chapter?等,但不能匹配chapter和chapter10。 • 元字符‘*’可匹配任何字符串(包括空串),故chapter* 可匹配所有以chapter开头的任意文件名字符串。如 *.c 匹配任何的c程序。 *ab* 匹配含有子串ab的任何字符串。
方括号匹配 规则 • 一对方括号使Shell匹配出现在方括号内的字符,如file[abc]匹配filea、fileb和filec。 • 连字符‘-’可在方括号内表示字符的范围,因此file[abc]也可写成file[a-c]。注意,file[0-13]并不匹配file0,file1,…,file13,而只匹配file0,file1和file3。 • 应当分成两个部分写:file[0-9]、file1[0-3]。 • 连字符‘- ’仅在方括号内作为元字符,而在方括号外只认作普通字符。 • 相反,符号‘ * ’和‘ ?’出现在方括号内时,就失去了作为元字符的意义,故a-b[*?]仅匹配两个固定字符串a-b*和a-b?。
匹配文件名的其它规则 • *c能匹配所有以c结尾的文件名,包括所有类似于file.c的c程序文件,但文件名中第一个点必须显式匹配。*visible不能匹配 .invisible,而 .*visible能匹配它。 • 这是因为UNIX把以点开头的文件作为隐式文件,使得ls或ls * 命令不能列出此类文件。 • 元字符只能在一个目录内匹配文件名,也即‘*’或‘?’不能匹配目录分隔符‘/ ’。 • 如“/doc*.c”不能与/doc目录下的所有以 .c为后缀的文件名匹配,欲达到这个目的,你只能写成 /doc/*.c的形式。这一限制是非常合理的,否则象“ls *”这样的命令将列出系统中所有目录下的所有文件。
9.3 文件系统基本知识 • 在一般的计算机系统中,文件是存储在外存储器中的具有名字的信息集合,这些信息包括程序、文档、数据、声音和图象信息等。 • 在UNIX中,文件具有更为广泛的意义。凡是可以从中读取数据的任何资源,或可以向其写入数据的任何目标都可称为“文件”。 • 磁盘、磁带和光盘文件、终端(包括输入源键盘和输出目标屏幕),打印机,绘图仪,发声设备等都可称为文件。 • 向文件写数据和向屏幕输出,操作方法是一致的,如此极大地方便了用户使用各种外部设备。
9.3.1 文件的类型 • 普通文件 存储在磁盘、磁带或光盘上的普通意义的文件。普通文件中的源程序文件、Shell程序和文本文件等可以使用编辑器输入或修改,这类文件也常称为正规文件(regular files )。其它的文件为二进制文件,典型的有可执行码文件和二进制数据文件。 • 目录文件 目录文件的存储介质与普通文件相同,但目录是指向其它文件的文件,用于组织、管理和访问其它文件的特殊文件。目录文件不能用普通编辑器编辑。
特别文件 特别文件并不是信息的存储体。它们只不过是为了I/O设备的读写提供了方便的通道,并提供用户与文件操作相同的存取界面。 • 特别文件又称为设备文件,又可分为块设备文件和字符设备文件。 • 特别文件一般存放在 /dev目录中,如 /dev/tty0是终端的特别文件,/dev/lp是行式打印机的特别文件。 • 当程序把数据写到诸如 /dev/lp那样的文件中去时,操作系统截取该数据,并将它送向行式打印机。 • 由于UNIX操作系统使I/O硬件接口与普通文件的接口一致,用户就不必知道任何有关I/O设备的细节。 • 命名管道 命名管道是一种用文件实现的先进先出机构。
9.3.2 目录结构 • UNIX目录系统具有无限层次的树状结构。其根目录是root,并用符号‘/ ’指代。 • 一个完整的文件名包括文件的路径名(path name)和文件的基名(base name)。 • 路径名中以‘/’开头的是绝对路径名,不以‘/ ’开头的是相对路径名。例如 /home/you/source/test.c是一个完整的文件名。 • 使用完整的路径名非常麻烦,系统查找文件耗时也多。UNIX允许用户设定一个目录作为工作目录(working directory),也称为当前目录(current directory)。 • 如当前工作目录为/home/you,那么可用相对路径名source/test.c存取同一个test.c文件。
路径名的简便方法表示 • 在一个目录中允许用“..”向根目录方向攀登一级,..表示父目录,../..表示父目录的父目录。 • ‘.’表示当前目录的绝对路径名,如当前目录是/home/you,那么访问test.c时可以使用相对路径名source/test.c,也可以使用简单的绝对路径名 ./source/test.c。 • 在某些必须指定绝对路径名的场合,可使用‘.’代指工作目录。 • ‘~’(波浪号)表示你的HOME目录(主目录)。如命令 ls ~/bin 就列出了你主目录下bin目录中的文件。
9.3.3 文件存取控制模式 • 对文件的操作有读、写和执行三种,文件的存取控制就是对不同的用户分配不同的操作许可权。UNIX文件系统将用户分成三类,即文件主、同组用户和其他用户,它们可分别用u、g和o表示。用文件的长列表命令 ls -l 可以看出一个文件的存取控制模式。 • 一个文件的存取控制权可以用图9-1所示的二进制模式表示。图中用r(读)、w(写)、x(执行)分别表示相应的二进制位置位,这同用ls -l命令列出的第二列至第十列文件存取控制信息相同。
存取控制权的二进制模式表示 其他用户存取控制字段 同组用户存取控制字段 文件主存取控制字段
如文件存取控制模式的值为0644,表示允许文件主读和写该文件,只允许同组用户和其他用户读该文件,在ls -l命令中相应的显示信息为: r w - r - - r - - 其中‘-’表示该类用户对本文件无读、写或执行权。 • 用“ls -l”命令列出的文件存取控制模式中最左边一列为 -、d、b、c、p或六个字符之一,它们分别表示该文件的类型为 - 普通文件 d目录 b块设备特别文件 c字符设备特别文件 p命名管道 l软连接
9.3.4 目录存取方式 • 对目录的读、写和执行许可的解释与普通文件的许可不同。 • 对目录的读许可意味着能读取目录的信息,也就是可以用ls命令看出目录中的文件名,但不能列出有关文件的其它管理信息。仅有这种许可不能访问目录中的文件。 • 对目录的写许可意味着允许在该目录中创建或删除目录中的文件。 • 对目录的执行许可意味着用户在指定一个路径名时可以检索该目录。如对一个目录没有检索许可,用户就不能用cd命令进入该目录。
9.4 UNIX文件系统结构 /(root) usr bin dev etc tmp lib home … …
9.4.1 根文件系统结构 • /usr是装配在根目录下的独立的文件系统。 • /bin包含UNIX标准实用程序。在不少UNIX版本中,/bin实际连接到/usr/bin中。 • /dev包含各种设备文件,如tty01(终端),console(系统控制台),rdsk(磁盘),等设备文件。 • /dev/null当程序向该文件写数据时,输出结果无声无息地永远地消失了,就象掉进了无底洞。用户可以将不需要看的输出信息送至/dev/null文件。 • /etc包含系统管理程序,系统配置程序,系统文件,最著名的是用户注册文件passwd。 • /home含有服务器和它客户的起始目录树。 • /lib包含程序员使用的程序库。 • /tmp用于存储临时文件,系统启动时一般会将该目录中的所有文件都清除掉。
9.4.2 /usr文件系统 • /usr/bin已将根文件系统/bin目录中的所有程序移到了本目录,但从/bin到/usr/bin仍有一个“符号连接”,以方便用户在原位置上访问这些文件。 • /usr/include包含UNIX系统中的标准头文件。 • /usr/lib程序员使用的程序和数据库。已将/lib目录中的内容移到了本目录,同时从/lib到/usr/lib有一个符号连接。 • /usr/man UNIX联机手册所使用的目录和文件。 • /usr/spool用于打印文件、发送邮件等使用的数据的中转站。在system V(从R4开始),将该目录中文件移到了/var目录下。
习题九 2.练习下面的命令: ls(列文件目录表)cd(改变工作目录) cp(复制文件)cat(合并和显示文件) 并用“;”(命令分隔符)、“<”、“>”、“>>”(输入输出重定向)、“&”(后台命令符)、“|”(管道符)组合命令和文件,在指定文件时试用模式匹配符。 3.指明下列的每一项各属于哪一类文件 (1)-rwxrw-r- (2)/bin (3)ttyx3 (4)brw-rw-rw- (5)/etc/passwd (6)crw-rw-rw- (7)/usr/lib (8)/unix 4.UNIX系统的可执行命令主要放在什么地方?找出你的计算机中所有存放系统的可执行命令的目录位置。