Unix原理与应用(第四版)学习笔记1--理论篇

来源:互联网 发布:免费注册域名送空间 编辑:程序博客网 时间:2024/06/07 08:28

1Unix的体系结构与命令用法

Unix操作系统的两个组成部分:内核.学习操作系统的一个重要的任务是命令集,Unix的帮助文档-man。


1.1Unix系统的结构

整个Unix是以几个简单并有点抽象的概念为核心的。Unix的成功在于对一组精心挑选出来的成熟的思想充分的实现,并证明这些思想是实现一个小而强大的系统的关键技术。

1.1.1 任务分工—内核和壳

将内核和壳之间的任务分工,内核负责与机器的硬件打交道,shell则负责与用户打交道。

内核是操作系统的核心程序,是一组用C语言写成的例程,系统启动时被载入到内存里,直接对硬件设备进行控制.需要访问硬件设备的应用程序需要利用内核提供的服务,间接的访问硬件设备。函数调用请求内核服务。

除了为用户提供服务外,内核还要处理大量的日常事务(内存管理,进程管理,设备管理等等)。计算机本身不能理解用户输入的命令,需要一个命令解释器.一个系统只能有一内核在运行,可以有多个shell程序同时运行.

1.1.2文件与进程

Unix系统的两大支柱:文件和进程,文件是空间,进程是生命.

文件是字节序列,可以包含几乎任何内容,作为层次结构的一部分,它与另一文件有关联.定位文件时,需要选择莫事先定义好的位置作为参考点,Unix不在乎文件的类型,一切都是文件,最重要的一类文件是文本文件—系统的运行方式在很大程度上由这类文件决定.

进程是指内存中运行的程序,进程是可执行文件的”时间镜像”,与文件一样,进程也是一个层级结构里的成员.进程是一个有机体,有双亲,孩子和子孙,会在某个时间出生,在某个时间死亡.系统为我们提供了控制进程的工具.

1.1.3系统调用

Unix系统是由内核,shell和应用程序三个部分组成的,他们都是使用C编写的.虽然整个系统包含了一千多个命令,但是他们通过为数不多的几个函数调用与内核进行通信,这些函数调用为系统调用.各种不同类型的Unix系统的共同的特点是:他们的系统调用完全一样,都遵循POSIX规范。

1.2Unix系统的主要的特性

多用户多任务,管道+过滤器-->小即使美,Unix工具包,模式匹配,编程工具(shell以及其他的各种脚本)

Unix系统提供了全双工式的终端,shell将来自键盘的输入暂存到内核中的一个临时缓冲区,在当前命令执行执行完成后,内核再将命令传递到shell,让它进行解释.

1.3浏览在线帮助文档的man命令

man命令总是和某个特地的分页程序一起使用,Unix中的分页程序:

more:由Berkeley提供的分页程序,AT&T公司的pg命令性能优越.

less:Linux系统的标准分页程序,模仿vi编辑器,功能比more,使用vi导航和搜索的大部分功能.

导航和搜索:for b,搜索:'/'

小节

专题(SVR4)

名称(Linux)

说明

1

用户程序

用户命令

可由普通用户启动的命令

2

内核系统调用

系统调用

内核系统的函数

3

库函数

库函数

C 语言函数的库中的函数

4

管理文件格式

特殊文件和驱动

/dev目录中的特殊文件

5

其他

文件格式

/etc/passwd等文件格式

6

游戏

游戏

系统提供的游戏,屏幕保护程序

7

特殊文件(/dev)

杂项和约定

标准文件系统的布局和手册页结构等杂项

8

管理命令

系统管理工具

只能由root启动的系统命令

1.3.1man帮助页的组成

一个man文档是有很多的部分组成,其中的一部分是公共的,另一部分是可有可无的.钱三个部分是NAME(使用一行介绍命令的功能),SYNOPSIS(概要,介绍命令的用法),DESCRIPTION(提供命令的详细内容).man-k,apropos,whatis,Linux的—help可选项

1.3.2出错时处理

终端和键盘的行为是不可预知的,一些终端设置将直接影响到键盘的操作,需要检查TERM变量值,下面使用一些常见的处理方法。

组合键或命令

功能

Ctrl+h

删除字符(删除键)

Ctrl+c|Delete

终端命令(终端键)

Ctrl+d

终止登录会话过程或终止等待键盘输入的程序(EOF标识)

Ctrl+s

停止屏幕翻页,锁住键盘

Ctrl+q

恢复屏幕翻页,键盘解锁--不明白有什么作用

Ctrl+u

取消命令行,不执行命令(命令行终止键)

Ctrl+\

终止正在运行的命令,但是生成一个核心文件保存程序在内存里的映像(quit)

Ctrl+z

挂起进程,返回到shell提示标识,fg可唤醒进程(挂起键)

Ctrl+j

Enter

Ctrl+m

同上

sttysane

恢复终端的正常状态(Unix命令)

2.通用命令介绍

Unix的命令的分类:1.常用的附件工具(计算器和邮件处理工具)2.显示系统的当前状态或者改变它的设置

为了可移植,POSIX规范建议使用printf;使用script命令记录一个会话过程的所有击键操作;基于图形的处理程序和基于字符的邮件处理程序的优点.mailboxmbox在电子邮件系统中的作用。

工具命令:cal,date,echo|printf.

script—会话过程记录命令,可以把一个会话过程记录到一个文件中,这个命令没有包含到POSIX规范中,但是他可以记录所有的击键操作,所有输出结果和错误信息。在处理非常重要的任务时,可以使用这个命令.

2.1电子邮件基础

Unix系统往往很多用户同时使用,用户之间通信自然必不可少,电子邮件(email)很重要.

电子邮件寻址方式:寻址方式直接用主机名作为邮件的地址-->用户名@主机名

邮件处理工具:mailx,Linux使用mail来代替,

2.2系统管理工具

passwd,who,uname,tty(获取终端名称的命令),显示和设置终端特性的命令—stty

stty可以用过来修改终端的设置,echoe-能否删除字符,修改中断键(intr),修改文件结尾符(eof),默认设置(sane)

3 X windows 系统

MIT的毕业生最先提出Xwindows,X windows已经被所有的Unix系统制造商接受为标准的窗口系统。Xwindows属于X基金会,由两部分组成:X服务器和X客户端程序。X系统和其他的系统的据别和联系.

要求:X系统的结构,服务器与客户端程序的作用,窗口管理器

3.1X系统基础

客户端和服务器程序,客户-服务模式,X系统保留了C/S架构,将显示程序放在服务器端,应用程序兼作客户端程序-->X程序的移植性好.

要在一类的终端上运行一个X系统的客户端程序,设计者需要做的是为这类的终端编写一个X系统的服务端程序.

X服务器程序不仅能处理应用程序的输出,而且还能处理应用程序的输入。X系统的显示系统由多个显示器的显示屏幕组成,X客户端将他们的结果输出到显示器的各个窗口上(这些窗口没有框架,不能移动,也不能改变大小).一个专用的客户端程序来管理这些窗口.

X系统主要是为了在网络上运行,在一个机器上运行一个X系统的客户端程序,在另一个机器上输出其结果,这个就是X系统的最重要的特点。

窗口管理器

X系统不提供任何窗口管理功能来管理客户端程序创建的窗口.MITX系统包含了按钮和滚动条,但是外观平淡无奇,没有边框,也没有菜单,既不能移动和改变大小,也不能改变在窗口栈中的位置。X程序觉提外观不取决于X服务程序,而是取决GUIGUI是一个自成体系的产品(另一个客户端程序,X系统中,GUI被称之为窗口管理器)

窗口管理器:OpenLook – Motif(mwm) – GTK/GTK+| Qt.

X系统启动需要经历复杂的过程:需要读取一个或者多个启动脚本,启动脚本决定调用哪个窗口管理器.Alt+Tab切换活跃的窗口。

3.2通用桌面环境

Motif曾经是标准窗口管理器,X window系统的具体发行版本的窗口管理器各不相同。

IBM,HP,SUN,Novell-->CommonOpen Software Environment(COSE)--Common Desktop Enviroment(CDE)

Linux-KDE,GNOME(GNU)

3.3启动和退出X系统

Unix系统将按某个运行级启动,这个运行级在系统安装时就确定了。X系统的启动的运行级可能是3或者5.系统按这个级别启动需要调用xdm(X显示管理器)显示图形界面.可以通过startx来手动的启动X系统。

startx—xinit命令(常用工具,读取.xinitrc脚本文件)

终端仿真程序以窗口的形式运行一个shell程序,用户可以在这个窗口中执行所有的Unix命令.xterm是所有的Unix系统最原始的终端仿真程序

3.4终端仿真程序

终端仿真程序可能是用户使用的最频繁的客户端程序,MITxtermX系统一起发布。

GNOME(gnome-terminal),KDE(konsole)

3.5剪切和粘贴操作

为了实现“cut-plaste”功能,X客户端程序提供了Edit菜单,鼠标操作,xclipboard客户端程序。

Ubuntu系统已经有了相应的剪切版。

3.6远程运行X客户端程序

X系统主要的是为了在网络上运行,在单用户系统里,服务程序和客户端程序运行在同一个机器上,用户不必考虑对显示的控制.

  • xhost命令可以实现将其他的计算机的输出结果在本地显示

  • 使用重定向功能把客户端程序运行结果输出到另一个终端屏幕上,设置DISPLAY变量或者在客户端程序里使用-display可选项来实现

3.6.1使用DISPLAY变量

DISPLAY是一个shell变量,X系统利用它把一个X客户段程序的运行结果输出到其他机器上。赋予DISPLAY的值采用的是“主机名:服务器号.屏幕号”,如果是Tcp/ip网络,主机名存放在/etc/hosts或者从DNS中获取。如果没有主机名,必须使用IP地址。本地计算程序xcalc

3.7命令行选项

大多数的X系统的的客户程序都使用很多的可选项,其中的很多的命令是通用的

Options

Function

-foreground

窗口的前景颜色(-fg)

-background

窗口的背景颜色(-bg)

-display

指定显示客户端程序输出的主机屏幕

-geometry

窗口的大小和位置(-g)

-iconic

按最小化模式启动客户端程序

-title

出现在标题栏里的窗口标题

-name

应用程序名

-xrm

资源设置,它可以使资源文件里的设置无效

-reverse

背景颜色和前景颜色互换

3.8 一些标准的X客户端程序

MIT发行了50多个客户端程序—桌面辅助工具,字体和图形工具。一些标准的MIT客户端程序.

文件管理器(dtfile)-nautilus xclock-时钟模拟器xcalc-计算器xbiff-邮件通知显示

xload-显示系统负载 xkill—图形化杀死进程

X客户端程序是由许多对象组成的,如滚动条,按钮等,每类对象及其实例都有相应的属性(可以设置)Xrdb-装载资源命令。

小结:X系统将应用程序分解为两个部分---客户端和服务器端,服务器端控制监视器,鼠标和键盘;应用程序本身以客户端程序的形式运行

4.网络工具

TCP/IPUnix .常用工具telnetftp。加密技术—secureshell,电子邮件服务和web服务工作机制—MIME协议。

TCP/IPInternet都是基于客户机-服务器模式,守护进程一直监视特定的端口的请求。

主机文件:/etc/hosts.应用程序根据主机名可以在这个文件里查找相应的IP地址,或者更具IP地址查找相应的主机名,维护网络上的所有机器生成的/etc/hosts文件--->DNS系统.

4.1 TCP/IP应用程序

最初的TCP/IP是由一组程序发展而来的,这组程序称为DARPA(telnetftp—登录-口令的方式登录服务器),Berkeley小组开发了一套软件工具:r工具集(rlogin,rcp,rsh---采用了免口令的授权方式).DARPABerkeleyr工具集都是使用的明文的形式传递数据。介绍SSH(secureshell),可以使用它来对整个通信过程进行加密。

ping,telnet,ftp(可以使用pwd,ls,cd,mkdir,rmdirchmod)

ftp传输文件:注意文件的分类,所有的可执行文件,图形文件,子处理文件和多媒体文件都属于二进制文件,在传输这些文件时要先设定binary模式。

上传文件(put,mput),下载文件(get,mget,reget)

4.1密码学基础

密码学是一门关于信息安全的科学,它采用数学方法把信息转换成一种不容易理解的形式。密码学需要解决三个问题:认证,保密,完整。

很多的算法用来对数据进行加密和解密,这些算法决定了密钥生成的方式,同常分为两大类:

  • 使用单一密钥的对称密钥法

  • 使用两个密钥的非对称密钥法

密文的模式取决于密钥,因此数据的安全性取决于算法的健壮性和密钥的长度。

对称密钥和非对称密钥各有优缺点,SSH利用这两个技术在两端点之间建立了一个完全加密的会话过程.

4.1.1对称密钥算法

对称密钥算法指得是在加密和解密过程中使用同一个密钥。消息的发送者和接受者都必须知道这个密钥。对称密钥算法用于加密和解密的速度都非常的快,广泛用于大量数据加密。如果用户需要传递大量的数据,那么最好使用对称密钥保护数据。最常使用的对称算法是DES,3DES,Blowfish,IDES.

对称算法存在一个问题,那就是如何传递密钥,用户很多的时候,密钥的交换很成。

4.1.2非对称密钥算法

非对称密钥算法—公钥/私钥。一个公钥,一个私钥.其中一个用来加密,另一个用来解密.

公钥是发给所有人的,私钥是保留在用户自己机器的。

非对称密钥的速度非常的慢,比对称的慢1000倍。SSH使用对称算法加密数据,使用非对称算法发送密钥。SSH采用的RSA,DSADiffie-Hellman作为公钥系统。

4.2 SSH---安全外壳

telnetftp的安全性是一个很严重的问题。SSH可以解决所有的这些问题,它用一个对称密钥把整个会话过程加密,使用公钥/私钥机制认证主机和用户的身份。目前在使用的主要有两类的SSH协议---SSH-1SSH-2.在技术细节上有差别。OpenSSH程序(Berkeley)实现了SSH-2协议。

4.2.1SSH工具

slogin用于远程登录

ssh用于远程登录和命令执行

scpsftp用于文件传输

4.3DNS域名解析系统

APPANET使用集中式的主机来维护主机文件,规模的扩展使得维护这个文件是一件极其痛苦的事情。Berkeley的加入,DomainName System,一个分布式的系统,容易升级,三个重要的概念:

  • 域名的层级结构

  • 分布式数据库用于“域名-IP地址”映射

  • 层级结构里的各级授权

5.程序开发工具

编译(.c-->.s文件)–汇编(.s– >.o目标码扩展名)–链接(链接器或者装配器:目标码和库-a.out)

cc(gcc)将源代码编译生成.s文件,然后调用as命令生成.o文件,然后调用ld生成可执行文件.可以直接调用ld命令,但是不好使,还是通过cc编译器比较好用,cc默认会删除.o文件,-c命令只生成目标文件.

cc-c a.c b.c c.c

cc-o foo a.o b.o c.o

5.1一个多文件的应用程序

大型应用程序由多个文件组成,这些文件包括了源程序和主程序所调用所需的函数的目标码,也包括了函数原型的说明的头文件,把任务分解成函数的好处:

  • 函数代表模块,函数使程序更容易理解,因而更容易调试

  • 函数可重用,同一个函数可以供多个程序使用

提示:是否将一段代码定义为函数:是否至少被使用过两次,或者至少被另一个程序使用。有时设计函数是为了功能分解。

5.2保留.o文件的原因

  • .o文件才能生成可执行文件

  • 可以根据最后修改时间来决定是否重新编译。

  • 可以将一组.o问将合并成一个库文件,这样生成可执行文件时不需要说明全部的目标文件名,而只需要说明一个库文件。创建库文件由ar命令实现。

5.3 make – 保持程序更新

大型程序要用到十几个文件,使用make工具可以方便的管理这些文件之间的依赖关系。

make在当前目录下读取一个命令makefile或者Makefile文件,makefile中规则形式为:

target:dependency_list

command_list //Tabat beginning of line

make#看成是注释行,用\符号把一行内容拆分为两行,每条规则之间有一个空行(newline)Make递归的作用。最小立异原则。

Make的推断:

  • 如果目标对象和从属对象具有相同的主文件名,无需说明命令列表。

  • 如果从属文件中省略了源文件,make认为源文件的主文件名就是目标文件名。

make的其他功能:文件清理和备份

make clean ---> make ---> make install

5.3.1 (macro)

make支持宏。宏为变量,用来定义反复使用的字符串,格式:macroname=value,一般放在makefile文件的开头部分,宏调用的格式是$(macroname)或者${macroname}

除了CC(编译器选项),make还有两个内置宏,CFLAGS-在编译中额外使用的可选项列表,LDFLAGS-连接器使用的可选项。

5.3.2ar命令---建立一个库文件(归档文件)

在实际的项目开发中要将makefile文件说明所有的目标文件,将是一件非常麻烦的事情,使用ar命令把他们集中到一个库文件中,则会提供很多的方便。ar命令处理归档文件的方式和tar命令一样。ar命令生成的归档文件的扩展名为.aar(-crv)命令的可选项:

-r:如果归档文件中没有这个文件,则把它加入到归档文件中,如果已有,则覆盖它

-q:把一个文件添加到归档文件末尾

-x:从归档文件中解压出某个文件

-d:从归档文件中删除某个文件

-t:显示档案文件清单

-v:详细信息显示

使用库文件编译:

cc-o calc_reposit.clibcalc.a -lm

cccalc_deposit.c -lcalc -L"."-lm (由于库文件名字很有规律lib+xxx+.a,可以使用-lxxx,-L说明库文件所在的位置)

-lxxx-表示libxxx.a或者libxxx.so

编译器在/lib/usr/lib目录中搜索库文件,用户自定义的库需要使用-L说明其位置。

提示:如果创建了很多的库,最好建立一个目录存放。

Make命令可以维护库文件,详细参考makefile3文件。

5.4静态库和共享库

创建的是一个静态链接库,当程序编译后连接到一个静态链接库,静态库的目标代码插到可执行文件中,多个程序调用同一个文件,引起可执行文件的代码长度急剧增大。

C支持动态链接库,执行时加载,扩展名为.so。其支持程序运行较慢,但是可执行文件小。

5.6版本控制工具–SCCSRCS

SourceCode Control System(SCCS),Revision ControlSystem(RCS):ci(签入),co(签出),rcs.

5.7小结

UNIX系统专为程序员设计的操作系统:make命令,版本控制系统,调试器(dbxgdb)。 一些理论就是上面的这些,下一节介绍系统调用。我的学习笔记其实就是抄书打字,别具个人特色的土方法。

参考资料

[1] Unix 原理与应用(第四版),印 Sumitabba Das著 ,吴文国译,清华大学出版社, 2008.1

原创粉丝点击