Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5634944
  • 博文数量: 922
  • 博客积分: 19333
  • 博客等级: 上将
  • 技术积分: 11226
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-27 14:33
文章分类

全部博文(922)

文章存档

2023年(1)

2020年(2)

2019年(1)

2017年(1)

2016年(3)

2015年(10)

2014年(17)

2013年(49)

2012年(291)

2011年(266)

2010年(95)

2009年(54)

2008年(132)

分类: LINUX

2011-12-24 15:28:49

++++++APUE读书笔记-01UNIX系统概述(1)++++++

 

简介
================================================
 所有的操作系统都为运行于其上的应用程序提供服务。典型的服务包括执行一个新的程序,打开一个文件,读取文件,分配内存空间,获取当前日期时间,等等。本文这里集中描述各种版本的UNIX操作系统所提供的服务。
 本身知识就不是线性方式获取的,所以以严格的近似线性步进方式来说明UNIX、却不引用后面将要使用的一些术语,几乎是不可能的(这也是让人困扰的)。本章从程序设计人员的角度先快速浏览UNIX,并对书中引用的一些术语概念进行简要的说明并给出实例。在以后各章中,将作更详细的说明。本章也对想要熟悉UNIX环境的程序设计人员简要介绍了UNIX提供的各种服务。
 
参考资料:


1、UNIX体系结构
================================================
 严格来说,操作系统就是一个可以控制计算机硬件资源,以及为运行于其中的程序提供运行环境的软件。大体来说,我们可以将这个软件称作内核,因为它是处于整套环境核心的那个部分。下图就展示了这个体系结构。

               UNIX操作系统体系结构

             +------------------------+
             |   applications        a|
             | +-------------------x p|
             | |s   shell         /  p|
             | |h+---------------/   l|
             | |e|  system calls |   i|
             | |l| +-----------+ |   c|
             | |l| |  Kernel   | |   a|
             | | | +-----------+ |   t|
             | | |  system calls |   i|
             | | /---------------\   o|
             | |/library routines \  n|
             | x-------------------x s|
             +------------------------+

 内核的接口层被称作系统调用(从代码角度上看系统调用就好似函数,例如用于文件打开的open,读取的read,写入的write等),通过它们定义UNIX系统能够提供功能。
 通用的库函数构建在系统调用接口之上(也就是类似C库等方便编程的程序API库其实最终会调用到系统调用,例如fopen函数,可以简单看做对系统调用的封装),应用程序可以构建在库函数之上也可以构建在系统调用之上(也就是,我们编写的应用程序,可以调用库函数,例如strcpy;也可以直接调用系统调用函数,例如open;来实现特定的功能)。
 shell是一个特殊的应用程序,它提供了运行其他程序的界面(类似微软的命令行dos操作系统,dos下的命令就是一个个独立的应用程序,而dos本身是为用户提供的可以运行应用程序的“程序”;前面的说法不一定准确,因为dos本身究竟是操作系统还是操作系统本人还不清楚,但是不会影响理解,其实想说的是:UNIX系统下的shell提供了命令行交互方式操作环境,用户在其中敲入的命令就是一个个独立的应用程序,而提供这套交互环境的shell本身也是一种特殊的应用程序,而相对于命令行环境下的图形环境其实也是一种应用程序,这里就不说了)。
 综上,大体来说,操作系统就是内核,提供了基本的功能;其他的软件使得我们可以用更人性化的方式使用计算机。其他的软件包括系统工具,应用程序,shells,通用函数库,等等。例如:Linux就是GNU下的操作系统的内核。有些人们喜欢将其称作GNU/Linux操作系统,但是一般更多的是简称其为Linux。尽管这不是严格准确地,但是它大致表达了所要表达的意思就够了。

参考:


2、登陆
================================================
 当我们登陆UNIX的时候,我们需要输入用户名称和密码。然后系统从一个密码文件中搜索我们输入的登陆名称,检查输入的密码是否匹配。这个密码文件一般是/etc/passwd,其中的每一行包含了当前系统的用户名称等信息,各种信息用':'分割。一个大致的例子如下:
 sar:x:205:105:Stephen Rago:/home/sar:/bin/ksh
 这一行分别表示了:登陆名称(sar),加密密码(用X表示),用户ID(即User ID,205),组ID(即group ID,105),注释(一些描述信息可以没有),用户主目录(/home/sar),登陆shell(也就是登陆时将启动的第一个程序,作为shell,这里是/bin/ksh)。需要注意的是,由于安全性原因,当前系统一般都将实际加密的密码移到另外一个地方了(例如/etc/shadow),密码本身也经过了加密的处理。

参考:


3、文件和目录
================================================
(1)文件系统
 UNIX文件系统对目录和文件使用层次安排(树状),每一级目录或者文件,都属于该层次树中的某一层的节点。通过由树根开始的路径来表示到每个目录或者文件。例如,目录的起点称为根 (root),其名字是一个字符"/",也表示根目录;"/usr"则表示在"/"目录下面的一个文件"usr"(或者 "usr" 也可是一个子目录,UNIX将目录看作特殊的文件)。

(2)路径
 如前所叙述,0个或多个以斜线分隔的文件名序列(可以任选地以斜线开头)构成路径名(pathname),以斜线开头的路径形式的名称为绝对路径名(如前面所举的例子"/usr") ,否则称为相对路径名。绝对路径,可以让我们通过树根开始,给出文件的完整精确名字,直接引用到该文件;而相对路径,就是相对于当前的路径而言的路径,有些时候,采用相对方式的引用,会比绝对路径更灵活。这里,需要注意的是当前路径用"."表示,另外当前路径的父目录用".."表示。
 例如./usr,表示当前路径下的"usr"文件,相对路径中的文件最终都是对应绝对路径中的文件的,不过,具体对应哪个文件,视当前路径而定。
 再例如,相对路径名doc/memo/joe指的是文件joe,它在目录memo中,而memo又在目录doc中,doc则应是工作目录中的一个目录项。从该路径名可以看出, doc和memo都应当是目录,但是却不清楚joe是文件还是目录。路径名/urs/lib/lint是一个绝对路径名,它指的是文件 (或目录) lint,而lint在目录lib中,lib则在目录usr中,usr则在根目录中。

(3)工作目录
 每个进程都有一个工作目录,有时称为当前工作目录。所有相对路径名都从工作目录开始解释(也就是一工作目录作为当前目录)。进程可以用chdir函数更改工作目录。

(4)家目录(Home Directory,有时又称起始目录,主目录)
 表示用户刚刚登陆的时候,设置的当前路径。这个路径其实就是密码文件(例如/etc/passwd)中制定的用户主目录。如果用户登陆的时候直接进入shell命令行界面,那么可以通过命令"pwd"来查看当前的路径。

参考:

 

 

阅读(459) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

vaqeteart2020-03-14 18:00:54

to org