实验1-1教材

上传人:我** 文档编号:117007455 上传时间:2019-11-18 格式:PPT 页数:33 大小:205.50KB
返回 下载 相关 举报
实验1-1教材_第1页
第1页 / 共33页
实验1-1教材_第2页
第2页 / 共33页
实验1-1教材_第3页
第3页 / 共33页
实验1-1教材_第4页
第4页 / 共33页
实验1-1教材_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《实验1-1教材》由会员分享,可在线阅读,更多相关《实验1-1教材(33页珍藏版)》请在金锄头文库上搜索。

1、实验一、熟悉linux系统 Linux简介 l 简单地说,Linux是一套免费使用和自由传播的类Unix 操作系统,它主要用于基于Intel x86系列CPU的计算机上。 这个系统是由全世界各地的成千上万的程序员设计和实现 的。其目的是建立不受任何商品化软件的版权制约的、全 世界都能自由使用的Unix兼容产品。 l Linux以它的高效性和灵活性著称。它能够在PC计算机 上实现全部的Unix特性,具有多任务、多用户的能力。 Linux操作系统软件包不仅包括完整的Linux操作系统,而且 还包括了文本编辑器、高级语言编译器等应用软件。它还 包括带有多个窗口管理器的X-Windows图形用户界面,

2、如 同我们使用Windows NT一样,允许我们使用窗口、图标和 菜单对系统进行操作。 l Linux之所以受到广大计算机爱好者的喜爱,主要原因 有两个,一是它属于自由软件,用户不用支付任何费用就 可以获得它和它的源代码,并且可以根据自己的需要对它 进行必要的修改,无偿对它使用,无约束地继续传播。另 一个原因是,它具有Unix的全部功能,任何使用Unix操作 系统或想要学习Unix操作系统的人都可以从Linux中获益。 Linux基本操作介绍 l 进入和退出系统 Linux是一个多用户的操作系统,用户要使用该 系统,首先必须登录系统,使用完系统后,必 须退出系统。 用户登录系统时,为了使系统能

3、够识别自己, 必须输入用户名和密码,经系统验证无误后方 能进入系统。在系统安装过程中可以创建两种 帐号: root-超级用户帐号,使用这个帐号可以在系 统中做任何事情。 普通用户-这个帐号供普通用户使用,可以进 行有限的操作。 用户登录分两步进行:第一步,输入用户的登录名,系统根据该登录名 来识别用户;第二步,输入用户的口令,该口令是用户自己选择的一 个字符串,对其他用户是保密的,是在登录时系统用来辨别真假用户 的关键字。 运行远程登录命令 telnet 192.168.0.80 用户会在屏幕上看到类似下面的提示: localhost login: 这时输入用户名“xxq”,然后键入回车键。此

4、时,用户会在屏幕上看到输 入口令的提示: localhost login:xxq Password: 这时,需要输入口令。输入口令时,口令不会在屏幕上显示出来。如果 用户输入了错误的口令,就会在屏幕上看到下列信息: login incorrect. 这时需要重新输入。 当用户正确地输入用户名和口令后,就能合法地进 入系统。屏幕显示: xxqloclhost xxq $ 此时说明该用户已经登录到系统中,可以进行操作了。 l修 改 口 令 为了更好的保护用户帐号的安全,Linux允 许用户随时修改自己的口令,修改口令的 命令是passwd,它将提示用户输入旧口令 和新口令,之后还要求用户再次确认新

5、口 令,以避免用户无意中按错键。如果用户 忘记了口令,可以请系统管理员为自己重 新设置一个。 l 虚拟控制台 Linux是一个真正的多用户操作系统,这表示它可以同时接 受多个用户登录。Linux还允许一个用户进行多次登录,这 是因为Linux和许多版本的UNIX一样,提供了虚拟控制台 的访问方式,允许用户在同一时间从控制台(系统的控制 台是与系统直接相连的监视器和键盘)进行多次登录。 虚拟控制台的选择可以通过按下Alt键和一个功能键来实现 ,通常使用F1-F6。例如,用户登录后,按一下Alt-F2键, 用户又可以看到“login:“提示符,说明用户看到了第二个虚 拟控制台。然后只需按Alt-F

6、1键,就可以回到第一个虚拟 控制台。 一个新安装的Linux系统允许用户使用Alt-F1到 Alt-F6键来访问前六个虚拟控制台。 虚拟控制台可使用户同时在多个控制台上工作,真正感受 到Linux系统多用户的特性。用户可以在某一虚拟控制台上 进行的工作尚未结束时,切换到另一虚拟控制台开始另一 项工作。例如,开发软件时,可以在一个控制台上进行编 辑,在另一个控制台上进行编译,在第三个控制台上查阅 信息。 l退 出 系 统 不论是超级用户,还是普通用户,需要退 出系统时,在shell提示符下,键入下列命 令即可。 下面以普通用户的退出为例,说明退出系 统的过程: xxqloclhost xxq $

7、 exit 文件与目录操作 l 显示文件目录命令ls l 改变当前目录命令cd l 建立子目录mkdir l 删除子目录命令rmdir l 删除文件命令rm l 文件改名命令mv l 文件复制命令cp l 显示文件的内容more或者less l 查找文件find l 重定向与管道 | 进程管理及作业控制 l 启动进程 键入需要运行的程序的程序名,执行一个程序, 其实也就是启动了一个进程。在Linux系统中每 个进程都具有一个进程号,用于系统识别和调 度进程。启动一个进程有两个主要途径:手工 启动和调度启动,后者是事先进行设置,根据 用户要求自行启动。 手工启动 由用户输入命令,直接启动一个进程

8、便是手工启 动进程。但手工启动进程又可以分为很多种, 根据启动的进程类型不同、性质不同,实际结 果也不一样,下面分别介绍。 l 1. 前台启动 这或许是手工启动一个进程的最常用的方式。 一般地,用户键入一个命令,这就已经启动了一 个进程,而且是一个前台的进程。 l 2. 后台启动 直接从后台手工启动一个进程用得比较少一些 ,除非是该进程甚为耗时,且用户也不急着需要 结果的时候。假设用户要启动一个需要长时间运 行的格式化文本文件的进程。为了不使整个shell 在格式化过程中都处于“瘫痪”状态,从后台启动 这个进程是明智的选择。启动后台进程只要在启 动的进程后面加上一个“ 当你不用任何选项编译一个

9、程序时, gcc 将会建立(假定编译成功)一个名为 a.out 的 可执行文件。例如,下面的命令将在当前目 录下产生一个叫a.out 的文件: gcc hello.c 你能用-o编译选项来为将产生的可执行文件指定一个文件名 来代替a.out。输入下面的命令: gcc -o hello hello.c gcc编译器就会为我们生成一个hello的可执行文件,执行 ./hello就可以看到程序的输出结果了。命令行中gcc表示 我们是用gcc来编译我们的源程序,-o 选项表示我们要求 编译器给我们输出的可执行文件名为hello,而hello.c是 我们的源程序文件。 gcc编译器有许多选项,一般来说我

10、们只要知道其中的几个就 够了。 -o选项我们已经知道了,表示我们要求输出的可执行文件名。 -c选项表示我们只要求编译器输出目标代码,而不必要输出可 执行文件。这个选项使用的非常频繁因为它使得编译多个C 程序时速度更快并且更易于管理。 -g选项表示我们要求编译器在编译的时候提供我们以后对程 序进行调试的信息。 如果你想要知道更多的选项,可以查看gcc的帮助文档,那里 有着许多对其它选项的详细说明。 进程创建等系统调用简介 在Linux中,每个进程在创建时都会被分配 一个数据结构,称为进程控制块(Process Control Block,简称PCB)。PCB中包含了很多 重要的信息,供系统调度和

11、进程本身执行使用 ,其中最重要的莫过于进程ID(process ID)了 ,进程ID也被称作进程标识符,是一个非负的 整数,在Linux操作系统中唯一地标志一个进程 ,其实从进程ID的名字就可以看出,它就是进 程的身份证号码,每个人的身份证号码都不会 相同,每个进程的进程ID也不会相同。 l getpid getpid的作用很简单,就是返回当前进程的进程ID,请大家看 以下的例子: /* getpid_test.c */ #include /* 提供函数的定义 */ main() printf(“The current process ID is %dn“,getpid(); 编译并运行程序g

12、etpid_test.c: $gcc getpid_test.c -o getpid_test $./getpid_test The current process ID is 1980 l fork fork系统调用的作用是复制一个进程。当一个进程 调用它,完成后就出现两个几乎一模一样的进程, 我们也由此得到了一个新进程。 fork调用的一个奇妙之处就是它仅仅被调用一次,却 能够返回两次,它可能有三种不同的返回值: 1在父进程中,fork返回新创建子进程的进程ID; 2在子进程中,fork返回0; 3如果出现错误,fork返回一个负值; fork出错可能有两种原因: (1)当前的进程数已经达

13、到了系统规定的上限; (2)系统内存不足。 下面就让我们通过一个小程序来对它有更多的了解。 /* fork_test.c */ #include #inlcude main() pid_t pid;/*此时仅有一个进程*/ pid=fork();/*此时已经有两个进程在同时运行*/ if(pid0) printf(“error in fork!“); else if(pid=0) printf(“I am the child process, my process ID is %dn“,getpid(); else printf(“I am the parent process, my pro

14、cess ID is %dn“,getpid(); $gcc fork_test.c -o fork_test $./fork_test I am the parent process, my process ID is 1991 I am the child process, my process ID is 1992 说到这里,可能有些同学还有疑问:如 果fork后子进程和父进程几乎完全一样,而 系统中产生新进程唯一的方法就是fork,那 岂不是系统中所有的进程都要一模一样吗? 那我们要执行新的应用程序时候怎么办呢? l exit 不像fork那么难理解,从exit的名字就能看出,这个系统

15、 调用是用来终止一个进程的。无论在程序中的什么位置,只 要执行到exit系统调用,进程就会停止剩下的所有操作,清除 包括PCB在内的各种数据结构,并终止本进程的运行。 请看下面的程序: /* exit_test1.c */ #include main() printf(“this process will exit!n“); exit(0); printf(“never be displayed!n“); 编译后运行: $gcc exit_test1.c -o exit_test1 $./exit_test1 this process will exit! 在一个进程调用了exit之后,该进程

16、并非马上 就消失掉,而是留下一个称为僵尸进程(Zombie) 的数据结构。在Linux进程的5种状态中,僵尸进程 是非常特殊的一种,它已经放弃了几乎所有内存空 间,没有任何可执行代码,也不能被调度,仅仅在 进程列表中保留一个位置,记载该进程的退出状态 等信息供其他进程收集,除此之外,僵尸进程不再 占有任何内存空间。 当一个进程已退出,但其父进程还没有调用系 统调用wait(稍后介绍)对其进行收集之前的这段 时间里,它会一直保持僵尸状态. lwait 进程一旦调用了wait,就立即阻塞自己,由wait自动分 析是否当前进程的某个子进程已经退出,如果让它找到了 这样一个已经变成僵尸的子进程,wait就会收集这个子进 程的信息,并把它彻底销毁后返回;如果没有找到这样一 个子进程,wait就会一直阻塞在这里,直到有一个出现为 止。 pid = wait(NULL); 如果成功,wait会返回被收集的子进程的进程ID,如 果调用进程没有子进程,调用就会失败,此时wait返回-1 。 /* zombie.c *

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号