第2次课 第一章 Linux编程环境介绍.ppt_第1页
第2次课 第一章 Linux编程环境介绍.ppt_第2页
第2次课 第一章 Linux编程环境介绍.ppt_第3页
第2次课 第一章 Linux编程环境介绍.ppt_第4页
第2次课 第一章 Linux编程环境介绍.ppt_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章Linux编程环境介绍 2020年1月27日星期一 2 本章概要 Linux基础知识Linux编程基本概念Linux编程介绍 2020年1月27日星期一 3 1 1Linux基础知识 多用户多任务操作系统Linux的组成Linux的安装 2020年1月27日星期一 4 一 多用户多任务操作系统 所有操作系统共有的传统特性 文件管理程序运行用户交互 Linux系统像所有的UNIX版本一样 增加了两个特性 多任务系统同时执行多个任务多用户几个用户可以同时登录系统 每个人都可以通过自己的终端与系统交互 2020年1月27日星期一 5 为了理解操作系统的工作 我们键入一个简单的命令 lsMailcimagesperldocstcl 符号是注册Shell 如果是bash的话 输出的一个提示符 它意味着正在等待用户键入命令 键入ls 键盘驱动程序会识别出这些字符被敲入了 键盘驱动程序将它传送给Shell 命令ls被传送给Shell 由它寻找一个具有相同名字的可执行映像来处理该命令 Shell在 bin ls找到映像 然后调用内核 kernel 服务 把ls可执行映象装入虚拟内存中并开始执行 ls映象调用内核的文件子系统来查找有什么文件存在 文件系统可能使用缓存的文件系统信息或利用磁盘设备驱动程序从磁盘上读取该信息 它甚至可能引起网络驱动程序同一个远程机器交换信息以获取本系统访问的远程文件的细节 文件系统可以通过网络文件系统即NFS远程安装 操作系统抽象了系统的真实硬件 提供给用户及其应用程序一个虚拟机器 不管该信息通过什幺方式得到 ls将输出该信息 由图形驱动程序在屏幕上显示出来 2020年1月27日星期一 6 内存管理 存储器管理 在资源有限的情况下 比如存储器 操作系统需要做的很多事情就是冗余 操作系统的许多基本技巧之一就是使少量的物理存储器用起来就像许多存储器一样 这些表面上的大量的存储器就是虚拟内存储器 其思想是系统上运行的软件被 欺骗 认为自己在大量的存储器中运行 系统把存储器分成容易处理的页面 在运行时 把这些页面交换到内存上 因为有多进程的存在 所以软件感觉不到这一点 2020年1月27日星期一 7 进程 一个进程可以被想象成一个运行的程序 每个进程都是一个运行特定程序的独立实体 如果我们查看一下Linux系统上的进程 就会发现有许多进程 键入查看进程命令ps将显示下列进程 psPIDTTYSTATTIMECOMMAND158pRe10 00 bash174pRe10 00sh usr x11R6 bin startx175pRe10 00 xinit usr x11R6 lib x11 xinit xinitrc 2020年1月27日星期一 8 进程 机器上大多数情况下只有一个CPU 操作系统使用多进程或调度 把每个进程依次运行一段很短的时间 这一段时间就是时间片 time slice 当一个进程崩溃或出错时不会影响到其他进程 操作系统通过给每个进程一个独立的 只有它自己能访问的地址空间来达到保护进程的目的 2020年1月27日星期一 9 设备驱动程序 设备驱动程序构成Linux内核的主要部分 像操作系统的其他部分一样 它们在高特权的环境下操作 如果它们出错可能引起灾难 设备驱动程序管理操作系统及其控制的硬件设备之间的交互 例如 文件系统在写文件块到IDE磁盘上时使用一个通用块设备接口 驱动程序进行细节操作和设备相关的操作 设备驱动程序针对它们驱动的特定的控制器芯片 2020年1月27日星期一 10 文件系统 Linux像UNIX一样 系统使用逻辑上独立的文件系统而不是实际的设备标识符 如驱动器名或驱动器号 来进行文件访问 这和MS DOS及Windows系统不同 在后者下 我们可以看到单独的驱动器 但Linux不是这样 Linux的每个新文件系统都被安装到根文件系统的某个目录上 如 mnt cdrom 这样这个新文件系统就被合并到单一的根文件系统树中 2020年1月27日星期一 11 Linux根文件系统树 rootdirectory bin boot dev home lib mnt usr var mnt cdrom mnt floppy usr bin usr local 2020年1月27日星期一 12 Linux支持多文件系统 Linux透明地支持多种不同的文件系统 包括MS DOSEXT2EXT3EXT4把所有安装的文件和文件系统表示成一个集成的虚拟文件系统 用户和进程不需要知道一个文件是哪种文件系统的一部分 只管使用就是了 2020年1月27日星期一 13 虚拟文件系统 在虚拟文件系统中 系统定义了一种通用的抽象的接口 我们称该接口为虚拟文件驱动程序接口 对于每种类型的文件系统 Linux都实现了访问和操作该文件系统的驱动程序 这种机制使得Linux可以支持多个不同的文件系统 虚拟文件系统通过虚拟文件系统驱动程序接口将不同的文件系统的所有细节进行封装 所以对Linux核心的其他部分 系统中运行的程序以及用户看到的是一个统一的文件系统 2020年1月27日星期一 14 Linux的文件系统组织 Linux文件系统遵照标准FSSTND 版本1 2 组织目录树 Linux系统中整个目录树可以分割成多个部分 每一个部分存放在不同的磁盘上或分区上 一般规划时要考虑的主要有 根目录 usr var home boot temp等目录 可以考虑在开始安装时就给这些目录分配一个独立的磁盘分区 2020年1月27日星期一 15 根目录 根目录 是Linux文件系统树的树根 通常是存储在一个本地磁盘上 包含有引导启动系统所需要的所有的系统程序和系统配置文件 需要的磁盘空间约100MB 在Linux下以root登录时 用户的目录是 root 2020年1月27日星期一 16 bin和 sbin bin包含的命令 程序 有在系统启动引导时所需要的命令 在启动后可以被普通用户使用的部分命令 sbin与 bin类似 但其包含的命令普通用户是没有权限使用 通常用于系统管理和配置 2020年1月27日星期一 17 boot 包含用于系统启动时的引导加载程序 如内核映像文件 应将该目录保存到一个独立磁盘分区中 由于系统BIOS的限制 需要确保内核映像文件保存于IDE磁盘的1024柱面以内 2020年1月27日星期一 18 dev 包含所有的设备文件 设备文件是以特定规则命名的文件 设备文件是在系统安装时创建的 以后是由 dev MAKEDEV描述文件创建 dev MAKEDEV local是系统管理员编写的描述文件 用以建立仅是本地的设备文件或连接文件 2020年1月27日星期一 19 etc 存放配置文件 配置文件可以在系统运行时控制系统的运行行为 如系统管理员可以在本目录下找到控制操作系统和用户管理的文件 包括用户和组的表 包括passwd group 文件系统的自动映射 fstab 主机的表 hosts Internet超级服务器后台应用的配置程序 inetd conf rpc protocols services 等 2020年1月27日星期一 20 home 用户文件的主目录 包含了除root用户以外的所有用户的主目录 保存了Linux系统上所有用户实际数据 在该目录下 一般只有子目录 每一个子目录代表一个用户 如用户lynn 其home目录通常为 home lynn 这个信息被存储在 etc passwd文件中 2020年1月27日星期一 21 mnt 是系统管理员用作临时加载其他文件系统的加载点 mountpoint mnt可以再划分成子目录 例如 mnt floppy可用作安装MS DOS软驱 访问软盘中的文件系统 mnt cdrom可用于安装系统中的光驱 2020年1月27日星期一 22 usr usr存放应用程序包的主目录 usr X11R6该目录包含了XWindow系统的所有文件 usr bin该目录包含了近乎所有的用户命令 usr sbin该目录包含了许多系统管理命令 多数是服务器程序和相应的管理程序 usr local用户在安装Linux后安装的程序都放在此目录下 usr man usr info usr doc包含了许多随机手册 manualpages GNU信息文档以及其他的文档资料 是Linux的信息库 usr include包含了用C语言编程时使用到的头文件 usr lib该目录包含了编程子程序库 2020年1月27日星期一 23 var和 tmp var存放系统产生的文件 包含了系统正常运行时不断变化的数据文件 这些数据是针对每个具体的系统 因此不能通过网络与其他计算机共享 tmp存放临时文件的目录 文件是以测试为目的的 或是有中间结果的文件 2020年1月27日星期一 24 二 Linux的组成 Linux可以分为三个主要部分 内核 Kernel 是运行程序和管理磁盘 打印机之类硬件设备的核心程序 环境 Envirnoment 提供了OS与用户之间的接口 它负责接收来自用户的指令并将指令送到内核中去执行 文件结构 filestructure 负责文件在磁盘等存储介质上组织方式 2020年1月27日星期一 25 1 内核 内核是任何操作系统的心脏 一个有用的操作系统 内核必须附带各类附件 应用程序帮助系统系统管理工具实用工具web服务器软件web浏览器安装程序和用户接口图形用户界面 GUI 把所有的这些部件集中到一起 再加上内核 才算做一个完整的操作系统 2020年1月27日星期一 26 Linux内核 Linux内核包括了超过700万行代码 它是Linux操作系统的心脏 这个很小的 用操作系统的尺度来衡量 但是高效的内核包括了一些不同的子系统 可以提供以下服务 支持硬件并与硬件进行通信进程调度 提供多任务物理和虚拟内存的管理IPC 内部进程间的通信 2020年1月27日星期一 27 图Linux内核与操作系统之间的关系 硬件 内核 操作系统 外壳 命令进程 2020年1月27日星期一 28 动态内核模块装载 Linux的内核模块包括一些代码 可以在任何时刻 甚至是用户正在工作的时候 动态地和内核连接 当不再需要模块时 还可以把它们从内核中移走 因此可以保持内核的小而精 这种功能称为 动态内核模块装载 即允许根据需要装载和卸载操作系统部件 很多UNIX版本和其他内核都不能提供动态内核模块 需要重建内核 关闭系统并进行重新引导 以便向内核增加功能 2020年1月27日星期一 29 2 环境 环境提供了内核与用户之间的接口 它被描述为一个解释器 环境解释用户输入的命令并将其传送到内核 Linux提供了几种不同的环境 桌面系统命令行Shell 2020年1月27日星期一 30 命令行Shell Shell接口非常简单 通常它包括一个提示符 即所谓 命令行 commandline 方式 目前主要有三种Shell BourneShell是贝尔实验室为SyetemV开发的KornShell是BourneShell的一个增强版C Shell是为UNIX的BSD版本开发的 Linux使用这些Shell的增强和公开域版本 BourneAgainShell BASH TC Shell C Shell的扩展 PublicDomainkornShell 2020年1月27日星期一 31 桌面系统 Linux还提供桌面系统 使用基于X Window系统的图形用户界面 GUI X Window系统是由OpenGroup联盟为UNIX开发的 http www opengroup orghttp www x11 org桌面系统提供完整的GUI 可以通过控制鼠标对窗口 图标和菜单进行操作 目前 随大多数Linux版本一同发行的有两种免费桌面系统 GNOMEKDE 2020年1月27日星期一 32 3 文件结构 在Linux系统中 像Windows一样 文件被组织成目录结构 整个Linux文件系统是一个庞大的相互关联的目录 每个目录下都包含一定数目的文件 其中一些目录是为系统保留的标准目录 2020年1月27日星期一 33 三 Linux系统安装 一 硬件需求 二 安装前的准备1 备份数据2 收集硬件信息 1 基本硬件配置信息 2 关于声卡和显示器的配置信息 3 网络连接的硬件配置信息 2020年1月27日星期一 34 Linux分区 一般来说 分区有三种类型 主分区 primary partition 最多四个 扩展分区 extended partition 逻辑分区 logical partition 建立扩展分区 再在扩展分区上划分出逻辑分区 数据只能保存在主分区或逻辑分区上 可以把Linux分区划分在主分区或逻辑分区上 2020年1月27日星期一 35 如何创建Linux分区 如果Linux只是为个人用户使用 可以为它设置3个分区 分别是 1 root文件系统 2 swap交换文件分区 3 usr文件系统 2020年1月27日星期一 36 创建Linux分区的三种情况 1 硬盘上还有未分区的空间在安装Linux时使用fdisk命令完成 2 硬盘上有一个空闲分区首先删除该分区 再新建一个Linux分区即可 在自定义安装时使用fdisk来完成 3 硬盘上没有空闲分区A备份好所有的数据后 重新分区B动态分区 使用分区魔术师PQMagic或红旗Linux光盘自带的FIPS C移动数据 创建分区 2020年1月27日星期一 37 Linux下硬盘上的分区表示 在Linux下 设备文件 devicefile 被在放置在 dev目录下 Linux系统中 任何硬盘驱动器上的分区都用驱动器的整体名称 数字来进行访问 这种表示方法和Windows下的 C D 等表示很不一样 并且用斜杠 代替反斜杠 来作为目录名之间的分割 2020年1月27日星期一 38 分区表示的含义 前两个字母 表示分区所在设备类型 hd 指IDE硬盘 sd 指SCSI硬盘 下一个字母 表明分区在哪个设备上 例如 dev hda 第一个IDE硬盘 dev sdb 第二个SCSI硬盘 数字 代表分区 前4个分区 主分区或扩展分区 用数字1 4表示 逻辑分区从5开始 2020年1月27日星期一 39 三 安装过程 1 确定任务2 选择安装类型3 选择软件包4 创建Linux分区5 安装LILO6 配置网卡参数7 配置XWindows8 安装软件包9 创建引导盘10 完成安装 2020年1月27日星期一 40 什么是LILO LILO LinuxLoader 是Linux操作系统的加载程序 从硬盘加载Linux操作系统并启动机器 当机器上的操作系统不止一个时 它可以方便地让用户选择一个操作系统并进行启动 可以让用户通过设置LILO的参数指定一些操作 比如 用LILO定义一个默认的要引导的操作系统和引导该系统的延迟时间 2020年1月27日星期一 41 LILO的安装 LILO存储在引导扇区中 可以把它存储在 MBR MasterBootRecord 某一个磁盘分区的第一个扇区LILO的长度不超过512字节 注意 尽管LILO可以放在任何一个磁盘分区的第一个扇区中 但若要执行LILO 必须将装有LILO的分区激活 即标记LILO所在的分区是可引导分区 2020年1月27日星期一 42 四 启动和关闭Linux 1 系统启动打开电源计算机开始加电自检 PowerOnSelf Test 执行固化在系统ROM ReadonlyMemory 中BIOS的一小段程序 这个程序的主要功能是读入软盘或硬盘物理的第一个扇区 这个扇区我们称为引导扇区或引导块 引导扇区的大小为512字节 在该空间包含了一段程序 该程序用于从磁盘中读入操作系统的其他部分代码 2020年1月27日星期一 43 主引导记录MBR 从理论上说 每个硬盘的分区都可以在它的一个块中包含有加载操作系统的那部分程序 对于系统BIOS而言 它没有任何关于硬盘分区的信息 它只能读入软盘或硬盘的物理上的第一个分区 为了把该分区和其他分区区分开 通常称该分区为主引导记录 MBRMasterBootRecord 在MBR中包含了磁盘中各个分区的信息 保存这些分区信息的部分我们称为分区表 2020年1月27日星期一 44 在多分区磁盘中 这种可以引导的分区我们称为活动分区 ActivePartition 然后由活动分区中的引导区包含的程序读入操作系统 因此我们看到在主引导扇区 MBR 中的代码要完成以下的工作 获得活动分区通过BIOS的功能读入活动分区的引导扇区将程序控制转移到读入的活动分区的引导扇区代码 并开始执行由活动分区的引导扇区代码引导操作系统 2020年1月27日星期一 45 系统初始化和启动 内核解压 Linux内核映像文件的开头包括一个用于解压的小程序 执行内核映像检查系统硬件初始化相应的设备驱动程序 Linux输出检查和初始化的相关信息 mount根文件系统初始化所有的系统设备和内核各个子系统 如网络子系统 核心启动进程init 位于 sbin init init启动服务器进程和必要的后台守侯程序切换到多用户模式启动getty进程 等待用户的登录 2020年1月27日星期一 46 2 关闭系统 关闭系统必须按照正确的方法来进行 单用户情况多用户情况 2020年1月27日星期一 47 命令shutdown 单用户的情况下关闭系统关闭所有正在运行的程序 退出所有的虚拟终端 以root身份使用系统 可通过使用su命令进入root帐户 将当前目录转到root的主目录 root下 执行命令 shutdown hnow 关闭系统 如果要延迟关闭系统时间 则用 号和一个代表分钟的数字替代now 2020年1月27日星期一 48 多用户的情况下关闭系统关闭所有系统控制台下正在运行的程序 退出所有的虚拟终端 以root身份使用系统 将当前目录转到root的主目录 root下 执行命令 shutdown h timemessage 关闭系统 其中time是系统关闭前延迟的时间 以分钟为单位 Message是系统发给登录到系统的所有用户的消息 2020年1月27日星期一 49 关闭系统 当延迟时间到了开始真正关闭系统时 卸载除了根文件系统的所有文件系统 终止所有用户进程 关闭后台进程 当所有的事情都做完 init显示出你可以关闭系统电源的提示 此时才可以关闭机器电源 2020年1月27日星期一 50 思考题 为什么关闭Linux系统时不能直接关闭电源 2020年1月27日星期一 51 为什么必须要按照正确方法关闭Linux系统 因为Linux是一个多用户操作系统 为了尽量减少用户对硬件资源的频繁访问 Linux操作系统有一个磁盘输入输出缓冲区 系统不会将修改的数据立即写入磁盘 而是在一定的时间间隔后将内存中磁盘的缓冲区中的内容写入磁盘 使数据真正保存到磁盘上 在一个多任务系统中 后台可能正运行着许多进程 随意关闭电源会导致这些进程非正常地终止 这样的损失是非常惨重的 2020年1月27日星期一 52 所有Linux系统都提供广泛的编程支持 并将其作为一项基本配置 当我们安装完Linux 既可以使用其中任何语言编程 并且无需额外的花费 Linux编程可分为四大类 Shell编程高级语言编程图形用户界面GUI编程系统调用高级编程 1 2Linux编程介绍 2020年1月27日星期一 53 作为标准安装 所有Linux发行版本都包括了对Shell GAWK Perl Tcl Tk C C 编程 以及GNOME和KDE KDesktopEnvironment K桌面环境 开发的编程支持 Linux软件开发一直在Internet环境下进行 大多数Linux软件是经过自由软件基金会 FreeSoftwareFoundation 提供GNU GNU即GNU snotUNIX 公开认证授权的 因而被称为GNU软件 GNU软件免费提供给用户使用 并被证明是非常可靠和高效的 许多流行的Linux实用程序如C编译器 Shell和编辑器都是GNU软件应用程序 2020年1月27日星期一 54 BASHShell编程 Shell程序将一些Linux命令结合起来完成一项特定的功能 BASHShell提供了许多编程工具 可以用来生成Shell程序 可以定义变量 对其进行赋值 也可以在脚本程序中定义变量 当脚本执行时用户可以交互地输入变量的值 具有一些控制结构 允许用户循环使用几个Shell命令 或有条件地执行一些命令 能够定义函数 Bash还包括一些可以在任何脚本中使用的内部函数 2020年1月27日星期一 55 TCSHShell编程 TCSHShell与BASHShell一样具有编程功能 利用TCSHShell可以 定义变量并对其赋值 将变量定义和Linux命令组成脚本程序并执行 运用循环和条件控制结构 在程序中设置中断以方便调试 2020年1月27日星期一 56 GAWK GNUAWK AWK是一种模式扫描和处理语言 其名称来自于其最初作者AlfredV Aho PeterJ Weinberger和BrianW Kernighan的字头缩写 最早的AWK是在AT T的贝尔实验室发明的 在Linux中我们经常使用的是GAWK GNUAWK 这是在1986年由PaulRubin和JayFenlason为GNU编写的 目前已有POSIX的AWK标准 2020年1月27日星期一 57 使用AWK我们可以 管理小型个人数据库产生报表产生索引AWK善于处理记录 record 和域 field 形式的数据 AWK内部有管道功能 可将处理中的数据传送给外部的Shell命令加以处理 再将Shell命令处理后的数据返回AWK程序 这个特点使得AWK程序很容易使用系统资源 实质上AWK就是一个简化的C程序 2020年1月27日星期一 58 过滤器 filter 在Linux中 一个过滤器 filter 从诸如一个文件或者标准输入等输入源读入信息 修改或分析信息 然后输出结果 结果可能是输入修改版本 或者是输入的分析结果 例如 sort过滤器读入一个文件 然后输出一个排序后的版本 sort etc passwd 以用户名来排序passwd文件 并输出排序后的结果 2020年1月27日星期一 59 又如 ls l sort m 5 ls lTotal2 rw 1rootroot670Jun923 18mboxdrw 2rootroot1024Jun220 38nsmial 把当前目录中的文件按目的时间进行排序 其中目的数据在第6个域 又如wc过滤器读入一个文件 计算该文件中单词数和文本行数 然后将上述信息输出 2020年1月27日星期一 60 perl perl PracticalExtractionandReportLanguage 实用摘录和报告语言 是一种脚本语言 其最初的设计目的是为了便于文件的处理 如生成报告和处理大型文件 可以把perl语言看成是GAWK和BASHShell的后续 它包含许多系统的特性 perl脚本可以在任何Linux系统下运行 2020年1月27日星期一 61 Tcl Tk ToolCommandLanguage Tcl是一种解释型的语言 在其Shell下运行 可以运行 tclsh 命令来调用TclShell 然后运行Tcl命令 也可以生成一个文件 在文件中调用TclShell 列出Tcl命令 提高编程效率 Tk应用软件扩展了Tcl的功能 它包含了XWindow系统的一些生成和管理图形元素的命令 如窗口 图标 按钮和文本框等 Tk在XWindow系统中用它自己的Shell wishshell来运行Tk命令 要运行Tk程序 你必须先进入XWindow系统 然后输入wish命令启动wishshell 这时可以看到一个运行Tk命令的窗口 2020年1月27日星期一 62 GNOME GNUNetworkObjectModelEnvirnoment GNU网络对象模型环境 GNOME提供了一个强大功能 易于使用的环境 主要包括面板 桌面和一套用于开发程序接口的GUI工具 GNOME程序包括GTK 函数和GNOME函数 GTK 是GNOME应用软件的窗口部件集 包括按钮 图标 框架和其他GUI对象 GNOME程序本质上就是C语言程序 developer gnome org 2020年1月27日星期一 63 KDE KdesktopEnvirnoment KDE是由C 对象模型组成 KDE同C 面向对象编程一样 应用了KDE和Qt库中大量的分层的对象类集 KDE利用并依赖于Qt的工具箱 Qt由Trolltech开发并维护的GNU工具箱 Qt是C 风格的高层图形库 KDE使用Qt的免费版本 GNOME可以调用任何工具箱的底层函数 而KDE则只能使用Qt工具箱 实际上 KDE编程就是Qt编程 developer kde org 2020年1月27日星期一 64 1 3Linux编程基本概念 Linux下的编程环境遵循Linux基本设计原理 即编程者可以有机地使用许多小工具 以满足工作的需要 例如在Linux下的C开发环境包括 C开发工具 如编

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论