1 / 40

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

第2章 操作系统用户命令接口. 操作系统的发布、安装、和使用 通过编程方式使用操作系统 操作系统的系统生成 添加系统调用 编写 Shell 解释程序. 操作系统的发布、安装、和使用. 概述 Linux 系统发布方式 Linux 的硬件要求 Linux 的安装 操作系统的安装概念 Linux 的使用 Shell 命令 系统调用 系统管理 su 的使用、添加新用户、 passwd 文件. 概述. Linux 是由 Linus Benedict Torvalds 等众多软件高手共同开发的多用户操作系统

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第2章 操作系统用户命令接口 • 操作系统的发布、安装、和使用 • 通过编程方式使用操作系统 • 操作系统的系统生成 • 添加系统调用 • 编写Shell解释程序

  2. 操作系统的发布、安装、和使用 • 概述 • Linux系统发布方式 • Linux的硬件要求 • Linux的安装 • 操作系统的安装概念 • Linux的使用 • Shell命令 • 系统调用 • 系统管理 • su的使用、添加新用户、 passwd文件

  3. 概述 • Linux是由Linus Benedict Torvalds等众多软件高手共同开发的多用户操作系统 • 源代码公开、免费提供用户使用、遵守POSIX(可移植操作系统接口)标准、与UNIX兼容 • Linux的内核有两种:稳定的内核、开发的内核。 • 版本号:主版本号.次版本号.修正次数 • 如:kernel 2.2.6表示对内核2.2版本的第6次修正版。 • 稳定内核的次版本号为偶数,如2.2.6 • 而开发内核所用的则是奇数,如2.3.6 • Linux是自由软件 • 用户与Linux的接口: shell命令、系统调用

  4. 图1-9 GPL能保证自由软件无限发展 复制、修改、发布 自由软件 GPL 自由软件 GPL 自由软件 GPL 分销公司 分销 公司 修改 自由软件 GPL 自由软件 GPL 开发者 自由软件 GPL 使用 最终用户 私有化 公有软件 私有软件 私有软件 公有软件 中间环节 中间环节 中间环节 私有软件 公有软件 最终用户 中间环节 公有软件 公有软件 最终用户 付版权费 不付版权费 公有领域的软件可能转为私有 General Public License通用公共许可证 软件发展的两种模式

  5. 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

  6. Linux的硬件要求 • Linux对计算机硬件的要求并不高。 • 由于Linux本身是Linux用户通过Internet共同开发的产物,因此它所支持的大部分硬件都是普通用户和开发人员已经拥有的或很容易得到的。 • 以IBM PC及其兼容机为例 • 主板支持ISA、VLB、EISA和PCI总线结构的系统主板 • CPU支持Intel Pentium、Pentium Pro、Pentium II 、Pentium III、 PentiumIV • 内存 要求2MB以上 • 显示卡 对文本方式,几乎可用所有显示卡 • 声卡 支持几乎所有声卡 • 网卡 支持各种通用的以太网卡以及局域网适配器

  7. 主板总线 • 如果说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

  8. 操作系统的安装 CPU 加载 硬盘 安装 光盘 内存 计算机执行的任何程序都必须存储到内存中,CPU 只能通过内存访问程序。我们所讨论的操作系统安装过程,实际上是把存放在光盘上的Linux执行代码存入硬盘的过程。因为硬盘是PC机的固定外部存储设备,从硬盘上加载程序到内存很方便。另外,操作系统中的文件系统主要是靠硬盘提供物理支持,安装操作系统到硬盘,实际上有两方面的作用:一是在硬盘上建立文件系统,二是把操作系统的全部内容事先存放在硬盘上以便往内存中加载操作系统核心程序时使用。 因此上述的安装概念是指在硬盘上建立文件系统,并将操作系统可执行代码从其他外部介质移动到硬盘上存放的过程。这样当使用计算机时,从硬盘上加载操作系统到内存,然后将控制转给操作系统内核执行。

  9. 安装示意图 (a)重新分区之前 (b) 重新分区之后 图2-1 破坏性重新分区。 (a)原有分区 (b)压缩原有数据  (c)建立新分区 图2-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,用户在登录时自动执行。

  11. Shell编程举例 • 修改.bash_profile脚本文件 trap “$HOME/.logout”0 • 建立.logout文件 .logout的内容如下: rm –f $home/*.log rm –f $home/*.tmp echo “Bye…bye $LOGNAME”

  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

  13. 脚本文件的建立和运行 键入命令: chmod u+x cleanup PATH=$PATH:$HOME/. 运行 .bash_profile sh .bash_profile 运行cleanup 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”

  14. 编程方式使用操作系统 • fork( )系统调用的使用 • pipe系统调用的使用 • 系统调用小结 fork、exit、pipe、dup、execl open、close、read、write

  15. fork()的使用 main() { int i; i=fork(); if(i) { printf(“parent”); } else { printf(“child”); } } PCB1 PCB1 main() { int i; i=fork(); if(i) { printf(“parent”); } else { printf(“child”); } } fork()

  16. 系统调用应用举例 • 编制并发程序pipeline.c • 编制管道写使用的程序father1.c作为父进程的一部分工作 • 编制管道读使用的程序child1.c作为子进程的一部分工作

  17. pipe系统调用的使用 Father1.c 进程1 进程的建立 fildes[1] fildes[0] Child1.c 进程2

  18. 进程的建立 #define STD_INPUT 0 #define STD_OUTPUT 1 int fd[2]; main( ) { static char process1[]="father1",process2[]="child1"; pipe (fd); pipeline(process1,process2); exit(1); }

  19. 进程的建立(续一) 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"); }

  20. 进程的建立(续二) else { close(fd[1]); close(STD_INPUT); dup(fd[0]); close(fd[0]); execl(process2,process2,0); printf("-----child failed.\n"); } exit(2); }

  21. 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); }

  22. child1.c main() { char output[30]; read(0,output,30); printf("-----%s\nchild,child.\n",output); return(0); }

  23. 系统调用小结 • close 关闭文件 • dup 复制打开文件的描述符 • exit(int status)终止进程 • execl 执行文件 • fork( ) 创建子进程 • open 为读/写打开文件 • Pipe 建立进程间的通道 • read 读文件 • write 写文件

  24. pipe int pipe(fildes); int fildes[2] 建立进程间的通道,返回两个描述: fildes[0] 用于读管道。 fildes[1]用于写管道。

  25. close close(fildes); int fildes; 关闭文件描述符

  26. dup int dup(fildes); 复制文件描述符,成功则返回新的文件描述符,是最低有效文件描述符,失败则返回-1。 int fildes; 从某个creat,open,dup,fcntl,或者pipe得到的文件描述符。

  27. exit void exit(status) int status; 在调用进程中的所有打开的文件描述符统统被关闭。 如果调用进程的父进程正在执行一个wait,那么通告它调用进程的结束并使得status的低八位有效,即0377 如果调用进程的父进程不是正在执行wait,那么调用进程被变换成“已经僵死”的进程,即仅占用进程表一个槽的进程,用户空间和核内空间都为分给该进程。

  28. execl execl(path,arg0,arg1,…,argn,(char *)0); char *path, *arg0,*arg1,…,*argn; 执行一个文件,成功则用path文件覆盖当前调用者文件,失败则有返回。

  29. fork( ) int fork( ); 建立子进程 返回值: 0 子进程返回 〉0 父进程返回的子进程标识符pid -1 进程创建失败

  30. open #include <fcntl.h> int open(path,oflag[,mode]) char *path; //文件路径 int oflag,mode;//状态标志

  31. read int read(fildes,buf,nbyte) int fildes; char *buf; unsigned nbyte; fildes是从某个creat, dup, open, fcntl, pipe调用中返回的文件描述符。

  32. write int write(fildes,buf,nbyte) int fildes; char *buf; unsigned nbyte;

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

  34. 安装源代码盘 1、mount /dev/cdrom /mnt/cdrom 2、cd /mnt/cdrom/SRPMS

  35. 解压缩 3、rpm -Fvh 文件名.src.rpm 4、rpm -Fvh kernel-2.4.2-2.src.rpm 此时,在/usr/SOURCE目录下生成了文件: Linux-2.4.2.tar.bz2 5、cd /usr/SOURCE 6、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 源代码便在其中。

  36. 编译生成系统 cd linux vi Makefile 删除#…=/boot句中的# make menuconfig (选择exit并保存配置) make dep make bzImage make modules make modules_install make install 在/boot目录下可找到新生成的执行程序

  37. 修改lilo.conf文件 image=/boot/vmlinuz-2.4.2-2 label=linux read-only root=/dev/hda3 other=/dev/hda1 optional label=dos boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=50 message=/boot/message lba32 default=linux

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

  39. / unix bin usr etc lib user bin 目录文件 无框:普通文件 liu sun fti 图1-1 初始的目录树 目录树

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

More Related