第一章 Unix 基础知识
一: 引言
二: UNIX体系结构
1. 操作系统: 严格意义上, 可将操作系统定义为一种软件,一般而言, 我们称此种软件为内核(kernel)。
作用: (1)控制计算机硬件资源。
(2)提供程序运行环境。
2. 系统调用(system call): 内核的接口。
(1)函数库和shell构建在系统调用基础上。
(2) 应用软件既可以使用库函数, 也可以使用系统调用。
注: shell是一种特殊的应用程序, 为运行其他应用程序提供接口。
三: 登录
1. 登录名:用户在登录unix系统时,先键入登录名,后键入口令。系统在口令文件(通常是/etc/passwd)中查看登录名。
口令文件中的登录项目由7个以冒号分隔的字段组成, 它们是
(1)登录名;
(2)加密口令;
(3)数值用户ID;
(4)数值组ID;
(5)注释字段;
(6)起始目录;
(7)shell程序;
gavin : x : 1000 : 1000 : : /home/gavin : /bin/bash
目前所有的系统已经将加密口令移到另一个文件中。 第 6 章将说明这种文件以及访问它们的函数。
2. shell
用户通常使用终端(terminal), 有时则通过文件(成为shell脚本, shell script)向 shell 进行输入。
四: 文件和目录
1. 文件系统: 文件系统是目录和文件组成的一种层次结构。 目录的起点称为根(root), 其名字是一个字符 /。
(1) 目录(directory)是一个包含许多目录项的文件。 在逻辑上, 可以认为每个目录项都包含一个文件名, 同时还包含说明该文件属性的信息。
文件属性是指文件类型(普通文件还是目录), 文件大小, 文件所有者, 文件权限(其他用户能否访问该文件), 以及文件的
最后修改时间等。
2. 文件名:
(1)目录中每个文件的名字文件名(filename), 不能出现在文件名中的字符只有斜线(/)和空操作符(null)。
斜线用来分隔构成路径名, 空操作符用来终止路径名。
(2)创建目录时会自动创建两个文件名: (.)和(..) 。
(3)路径名: 一个或多个以斜线分隔的文件名序列构成路径名(pathname), 以斜线开头的路径名称为绝对路径名(absolute pathname), 否则称为
相对路径名(relative pathname)。
(4) 工作目录: 每个进程都有一个工作目录(working directory), 有时称其为当前工作目录(current working directory)。 所有相对路径名都从工作目录开始解
释。 进程可以用chdir函数更改其工作目录。
(5)起始目录: 登录时, 工作目录设置为起始目录(home directory), 该起始目录从口令文件中相应用户的登录项中取得。
五: 输入和输出
1. 文件描述符(file descriptor): 通常是一个小的非负整数, 内核用它描述一个特定进程在访问的文件。 当内核打开一个已有文件或创建一个新文件时, 它返回一
个文件描述符。 在读, 写文件时, 就可以使用它。
Ubuntu下查看FD。
打开System Monitor, 查看process。
选中某个process, open files.
2. 标准输入, 标准输出, 标准出错: 按惯例, 每当运行一个新程序时, 所有的shell都会为其打开三个文件描述符: 标准输入(standard input), 标准输出
(standard output), 标注出错(standard error)。 如果 像简单命令ls 那样没有做什么处理, 则这三个描述符都链向终端。
大多数shell都提供一种方法, 使其中任何一个或所有这三个描述符都能重新定向到某个文件, 如。
ls > file.list。
3. 不用缓冲的I/O: 函数open, read, write, lseek以及 close都提供了不用缓冲的I/O。 这些函数都是使用文件描述符。
如果愿意从标准输入读, 并向标注写出, 则程序清单1-2中的程序可用于复制任一UNIX普通文件。