Transcript
Page 1: 第2章 操作系统用户命令接口

1

第 2 章 操作系统用户命令接口

•操作系统的发布、安装、和使用•通过编程方式使用操作系统•操作系统的系统生成•添加系统调用•编写 Shell 解释程序

Page 2: 第2章 操作系统用户命令接口

2

操作系统的发布、安装、和使用•概述

•Linux 系统发布方式•Linux 的硬件要求

•Linux 的安装•操作系统的安装概念

•Linux 的使用•Shell 命令•系统调用

•系统管理•su 的使用、添加新用户、 passwd 文件

Page 3: 第2章 操作系统用户命令接口

概述Linux 是由 Linus Benedict Torvalds 等众多软件高手共同开发的多用户操作系统源代码公开、免费提供用户使用、遵守 POSIX (可移植操作系统接口)标准、与 UNIX 兼容Linux 的内核有两种 : 稳定的内核、开发的内核。

–版本号:主版本号 . 次版本号 . 修正次数–如: kernel 2.2.6 表示对内核 2.2 版本的第 6 次修正版。–稳定内核的次版本号为偶数,如 2.2.6–而开发内核所用的则是奇数,如 2.3.6

Linux 是自由软件用户与 Linux 的接口 : shell 命令、系统调用

Page 4: 第2章 操作系统用户命令接口

软件发展的两种模式

分销公司

分销公司

开发者

最终用户

使用

修改

复制、修改、发布

自由软件GPL

自由软件GPL 自由软件

GPL

自由软件GPL

自由软件GPL

自由软件GPL

图 1-9 GPL 能保证自由软件无限发展

公有软件

私有化

私有软件中间环节

最终用户

中间环节

中间环节

中间环节

最终用户不付版权费

付版权费

公有软件

私有软件

私有软件公有软件

公有软件

公有软件

公有领域的软件可能转为私有

General Public License 通用公共许可证

Page 5: 第2章 操作系统用户命令接口

Linux 系统发布方式有多种 Linux 系统发布方式(即有多种 Linux 安装方式)

-Linux 软件以只读光盘的形式发布。-通过 FTP 下载 Linux

发布 Linux 的不同名字和公司-Red Hat Software 发行的 Red Hat Linux -由 Software in the Public Interest, Inc. 发行的 Debian Linux -由 WorkGroup Solutions, Inc. 发行的 Linux Pro -由 Trans-Ameritech 发行的 Trans-Ameritech Linuxware -中科院软件所发行的红旗 Linux -蓝点软件技术有限公司发行的蓝点 Linux

Page 6: 第2章 操作系统用户命令接口

Linux 的硬件要求 •Linux 对计算机硬件的要求并不高。

由于 Linux 本身是 Linux 用户通过 Internet 共同开发的产物,因此它所支持的大部分硬件都是普通用户和开发人员已经拥有的或很容易得到的。

•以 IBM PC 及其兼容机为例

主板支持 ISA 、 VLB 、 EISA 和 PCI 总线结构的系统主板

CPU 支持 Intel Pentium 、 Pentium Pro 、 Pentium II 、 Pentium III 、 PentiumIV

内存 要求 2MB 以上

显示卡 对文本方式,几乎可用所有显示卡

声卡 支持几乎所有声卡

网卡 支持各种通用的以太网卡以及局域网适配器

Page 7: 第2章 操作系统用户命令接口

主板总线 如果说 CPU 是计算机的心脏,那么主板就是计算机的循环系统,主板将 CPU 和计算机上所有其他设备连接起来。

直接相连: CPU 直接读取插在主板上的 RAM 中的数据。

间接相连:如通过 SCSI 适配器读取硬盘数据。

以 IBM PC 及其兼容机为例

ISA : Industry Standard Architecture 用在 x86 中最老的总线

EISA: Extended ISA ( SCSI 上流行,配置难)

VL: VESA 局部总线( Video Electronics Standards Association)

PCI: Peripheral Component Interconnect 目前用得最多

PCMCIA: Pensonal Computer Memory Card International Association 多用于笔记本电脑

http://pcmcia.sourceforge.org

Page 8: 第2章 操作系统用户命令接口

操作系统的安装 计算机执行的任何程序都必须存储到内存中, CPU 只能通过内存访问程序。我们所讨论的操作系统安装过程,实际上是把存放在光盘上的 Linux 执行代码存入硬盘的过程。因为硬盘是 PC 机的固定外部存储设备,从硬盘上加载程序到内存很方便。 另外,操作系统中的文件系统主要是靠硬盘提供物理支持,安装操作系统到硬盘,实际上有两方面的作用:一是在硬盘上建立文件系统,二是把操作系统的全部内容事先存放在硬盘上以便往内存中加载操作系统核心程序时使用。

因此上述的安装概念是指在硬盘上建立文件系统,并将操作系统可执行代码从其他外部介质移动到硬盘上存放的过程。这样当使用计算机时,从硬盘上加载操作系统到内存,然后将控制转给操作系统内核执行。

光盘

硬盘CPU

内存安装

加载

Page 9: 第2章 操作系统用户命令接口

安装示意图

( a )重新分区之前 (b) 重新分区之后图 2-1 破坏性重新分区。

( a )原有分区 ( b )压缩原有数据  ( c )建立新分区图 2-2 非破坏性重新分区

Page 10: 第2章 操作系统用户命令接口

10

Shell举例

• Shell 命令a.out , cd, cat, chmod, cp, cc, ^d, echo, exit, fdisk,

ftp, halt, kill, ls, logout, mail, mkdir, more, mount, umount, ps, pwd, passwd, rmdir, rm, sort, su, telnet , make,man , useradd, userdel , vi, wc, who , |

• Shell 程序见脚本文件 .profile 或者 .bash_profile ,用户在登录

时自动执行。

Page 11: 第2章 操作系统用户命令接口

11

Shell 编程举例

• 修改 .bash_profile 脚本文件trap “$HOME/.logout”0

• 建立 .logout 文件 .logout 的内容如下:rm –f $home/*.log

rm –f $home/*.tmp

echo “Bye…bye $LOGNAME”

Page 12: 第2章 操作系统用户命令接口

12

脚本文件的建立和运行

creat-file 文件的内容如下:cp .logout log.log

cp .logout log.tmp

ls –l *.log

ls –l *.tmp

键入命令: chmod u+x creat-file

PATH=$PATH:$HOME/.

运行 creat-file

Page 13: 第2章 操作系统用户命令接口

13

脚本文件的建立和运行cleanup 文件的内容如下:#!/bin/sh

#name:cleanup

#this is a general cleanup script

echo “starting cleanup…wait”

rm *.log

rm *.tmp

tail –40 .logout >/tmp/messages

mv /tmp/messages /var/tmp/messages

ls /var/tmp

echo “finished cleanup”

键入命令:chmod u+x cleanup

PATH=$PATH:$HOME/.

运行 .bash_profilesh .bash_profile

运行 cleanup

Page 14: 第2章 操作系统用户命令接口

14

编程方式使用操作系统

• fork( ) 系统调用的使用•pipe 系统调用的使用•系统调用小结

fork 、 exit 、 pipe 、 dup、 execl

open 、 close 、 read 、 write

Page 15: 第2章 操作系统用户命令接口

fork() 的使用

main(){ int i; i=fork(); if(i) { printf(“parent”); } else { printf(“child”); }

}

main(){ int i; i=fork(); if(i) { printf(“parent”); } else { printf(“child”); }

}

fork()

PCB1 PCB1

Page 16: 第2章 操作系统用户命令接口

16

系统调用应用举例

• 编制并发程序 pipeline.c• 编制管道写使用的程序 father1.c 作为

父进程的一部分工作• 编制管道读使用的程序 child1.c 作为子

进程的一部分工作

Page 17: 第2章 操作系统用户命令接口

fildes[1]

pipe 系统调用的使用

Father1.c

进程 1

Child1.c

进程 2

fildes[0]

进程的建立

Page 18: 第2章 操作系统用户命令接口

进程的建立#define STD_INPUT 0#define STD_OUTPUT 1int fd[2];main( ){

static char process1[]="father1",process2[]="child1";pipe (fd);pipeline(process1,process2);exit(1);

}

Page 19: 第2章 操作系统用户命令接口

进程的建立(续一)pipeline(process1,process2)

char *process1,*process2;{

int i;while((i=fork())==-1);if(i){

close(fd[0]);close(STD_OUTPUT);dup(fd[1]); // 把 1分为另一个管道写指针close(fd[1]); //关闭原管道写指针execl(process1,process1,0);printf("-----father failed.\n");

}

Page 20: 第2章 操作系统用户命令接口

进程的建立(续二)else{

close(fd[1]);close(STD_INPUT);dup(fd[0]);close(fd[0]);execl(process2,process2,0);printf("-----child failed.\n");

}exit(2);

}

Page 21: 第2章 操作系统用户命令接口

Father1.c

main(){ static char string[]="Parent is using pipe write."; int len; len=sizeof(string); write(1,string,len); printf("parent,parent,parent\n\n\n"); exit(0);}

Page 22: 第2章 操作系统用户命令接口

child1.c

main()

{

char output[30];

read(0,output,30);

printf("-----%s\nchild,child.\n",output);

return(0);

}

Page 23: 第2章 操作系统用户命令接口

系统调用小结

close 关闭文件

dup 复制打开文件的描述符

exit ( int status )终止进程

execl 执行文件

fork( ) 创建子进程

open 为读 /写打开文件

Pipe 建立进程间的通道

read 读文件

write 写文件

Page 24: 第2章 操作系统用户命令接口

24

pipe

int pipe(fildes);

int fildes[2]

建立进程间的通道,返回两个描述 :

fildes[0] 用于读管道。fildes[1] 用于写管道。

Page 25: 第2章 操作系统用户命令接口

25

close

close(fildes);

int fildes;

关闭文件描述符

Page 26: 第2章 操作系统用户命令接口

26

dup

int dup(fildes); 复制文件描述符,成功则返回新的文件

描述符,是最低有效文件描述符,失败则返回 -1 。

int fildes;

从某个 creat,open,dup,fcntl, 或者 pipe 得到的文件描述符。

Page 27: 第2章 操作系统用户命令接口

27

exitvoid exit(status)

int status;

在调用进程中的所有打开的文件描述符统统被关闭。如果调用进程的父进程正在执行一个 wait, 那么通告

它调用进程的结束并使得 status 的低八位有效,即 0377

如果调用进程的父进程不是正在执行 wait ,那么调用进程被变换成“已经僵死”的进程,即仅占用进程表一个槽的进程,用户空间和核内空间都为分给该进程。

Page 28: 第2章 操作系统用户命令接口

28

execl

execl(path,arg0,arg1,…,argn,(char *)0);

char *path, *arg0,*arg1,…,*argn;

执行一个文件,成功则用 path 文件覆盖当前调用者文件,失败则有返回。

Page 29: 第2章 操作系统用户命令接口

29

fork( )

int fork( );

建立子进程返回值:0 子进程返回〉 0 父进程返回的子进程标识符 pid

-1 进程创建失败

Page 30: 第2章 操作系统用户命令接口

30

open

#include <fcntl.h>

int open(path,oflag[,mode])

char *path; // 文件路径int oflag,mode;//状态标志

Page 31: 第2章 操作系统用户命令接口

31

read

int read(fildes,buf,nbyte)

int fildes;

char *buf;

unsigned nbyte;

fildes 是从某个 creat, dup, open, fcntl, pipe 调用中返回的文件描述符。

Page 32: 第2章 操作系统用户命令接口

32

write

int write(fildes,buf,nbyte)

int fildes;

char *buf;

unsigned nbyte;

Page 33: 第2章 操作系统用户命令接口

33

Linux 系统生成• 步骤1 、安装源代码盘2 、解压缩3 、编译生成系统4 、修改 lilo.conf 文件5 、运行 /sbin/lilo -v

Page 34: 第2章 操作系统用户命令接口

34

安装源代码盘

1 、 mount /dev/cdrom /mnt/cdrom

2 、 cd /mnt/cdrom/SRPMS

Page 35: 第2章 操作系统用户命令接口

35

解压缩

3 、 rpm -Fvh 文件名 .src.rpm4 、 rpm -Fvh kernel-2.4.2-2.src.rpm

此时,在 /usr/SOURCE 目录下生成了文件:Linux-2.4.2.tar.bz2

5 、 cd /usr/SOURCE6 、 bunzip2 –fvL linux-2.4.2.tar.bz2

此时,在 /usr/SOURCE 目录下生成了文件:linux-2.4.2.tar

7 、 tar xvf linux-2.4.2.tar此时,在 /usr/SOURCE 目录下生成了目录:

linux源代码便在其中。

Page 36: 第2章 操作系统用户命令接口

36

编译生成系统

cd linuxvi Makefile删除 #…=/boot 句中的 #make menuconfig (选择 exit 并保存配置)make dep make bzImagemake modulesmake modules_installmake install在 /boot 目录下可找到新生成的执行程序

Page 37: 第2章 操作系统用户命令接口

修改 lilo.conf 文件

boot=/dev/hdamap=/boot/mapinstall=/boot/boot.bprompttimeout=50message=/boot/message

lba32default=linux

image=/boot/vmlinuz-2.4.2-2label=linuxread-onlyroot=/dev/hda3

other=/dev/hda1optionallabel=dos

Page 38: 第2章 操作系统用户命令接口

实验与大作业安排该模拟文件系统包括目录文件、普通文件, i 结点和存储区,并实现下面一些基本功能:1.改变目录: CD 〈目录名〉,工作目录转到指定的目录下。目录名支持全路径名和当前目录的路径名。目录不存在时, 给出错误信息。2.创建文件: EDIT 〈文件名〉,创建一个指定名字的新文件,即在目录中增加一项,不考虑文件的内容。对于重名文件给出错误信息。3.删除文件: DEL 〈文件名〉,删除指定的文件。文件不存在时给出错误信息。4.显示目录: DIR [〈目录名〉 ] ,显示目录下全部文件和第一级子目录,如果没有指定路径名,则显示当前目录下的内容。5.创建目录: MD 〈目录名〉,再指定路径下创建指定的目录,或者在没有指定路径时,在当前目录下创建子目录,对于重名目录给出错误信息。6.删除目录: RD 〈目录名〉,删除指定的目录,如果该目录为空,则可删除,否则给出是否做删除,删除操作将该目录下的全部文件和子目录都删除。注:( 1 )上面目录名和文件名都支持全路径名和相对当前目录的路径名。文件名由目录结构中各级文件名分量排列构成。各分量间用“ /”隔开。 ( 2 )程序初始化时应构造如图1-1所示的目录结构

Page 39: 第2章 操作系统用户命令接口

目录树

/

bin

usr

etc

lib user bin

liu sun fti

unix

目录文件

无框:普通文件

图 1-1 初始的目录树

Page 40: 第2章 操作系统用户命令接口

40

本章小结

• Linux 的安装• Linux 命令的使用• Shell 编程• 系统调用的使用• 从源码生成新的 Linux 系统• 加入新的系统调用的方法• Shell 命令解释程序的形成


Top Related