Unix╱Linux 操作系统分析.ppt_第1页
Unix╱Linux 操作系统分析.ppt_第2页
Unix╱Linux 操作系统分析.ppt_第3页
Unix╱Linux 操作系统分析.ppt_第4页
Unix╱Linux 操作系统分析.ppt_第5页
免费预览已结束,剩余61页可下载查看

下载本文档

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

文档简介

Unix LINUX操作系统分析 地址 西安理工大学计算机学院204电话 82312196 2020E mail heixinhong 王海晟黑新宏王锋 LINUX下shell的使用和编程 1 命令的使用2 Vi编辑器的使用3 C语言的编程4 Shell的编程 1 命令的使用 命令书写格式 1 最常用的命令一般由两三个字母组成2 UNIX区分大小写 同LINUX 3 用户可以将多个命令放在一行上 只要用 将它们隔开4 命令使用格式是统一的 Command options arguments Command 指UNIX命令名options 表示命令的执行选项 可以默认arguments 表示命令的执行参数 可以默认 ls 按字母顺序列出目录中所有文件和目录的名字 命令行中无选项和参数 ls l 使用长列表方式列出当前目录下所有文件常用命令介绍 echo SHELL 注意大写 此命令告诉系统显示关于shell的设置信息 cat etc shells此命令告诉用户系统有哪些可用的shell chsh此命令可以改变shell man命令 对UNIX命令获得联机帮助信息 使用此命令可以获得系统中对指定命令的解释格式 man命令名ls命令 列出指定目录中的内容格式 ls option names a 列出所有文件包括以 打头的隐藏文件 d 列出目录文件本身的状态 而不是列出目录下包括的文件内容 i 在列表中增加列出文件的I节点号 l 以长列表方式列出文件及目录信息 R 递归地列出其中包含的子目录中的文件信息和内容names 可以是目录名也可以是文件名 Chmod命令 chmod 选项 文件列表 权限 读 r 写 w 执行 x 授权对象 用户 u 组 g 其它帐户 o 也可以用八进制数来表示 如chmod755 1 cal命令 打印日历格式 cal month year 2 bc命令 计算器使用方法 输入bc命令 输入表达式 按Enter键退出 Ctrl D3 more less pg 逐屏显示文件内容例 moreserver cmore ch ls l morepg ch 几个实用工具 2 Vi编辑器的使用 vi的工作方式 UNIXshell vi的命令行方式 Vi的末行命令方式 Vi的插入编辑方式 用 vifilename 命令 用 ZZ命令 用 i a 命令 用 Esc 键 自动返回 用 命令 Vi编辑器的使用 1 vi的启动方法用法 vifilename例 viabc c2 在vi中使用set命令命令格式 setoption setnooption Vi编辑器 cont 一 Vi工作模式Vi有3种工作模式 分别为命令行模式 插入模式及底行模式 1 命令行模式用户在用Vi编辑文件时 最初进入的模式为命令行模式 在该模式中 可以通过上下移动光标进行 删除 复制 粘贴 等操作 但无法编辑文字 Vi编辑器 cont 2 插入模式在命令行模式下 按 I 或者 Insert 键都可以进入插入模式 在该模式下 用户可以进行文字的编辑输入 按 Esc 键可从插入模式切换到命令行模式 3 底行模式在底行模式下 光标位于屏幕的底行 此时用户可以进行文件保存或退出操作 也可以设置编辑环境 如查找字符串 列出行号等 Vi编辑器 cont 二 vi的基本操作1 进入vi在系统提示符号输入vi及文件名称后 就进入vi全屏幕编辑画面 vimyfile不过有一点要特别注意 就是您进入vi之后 是处于 命令行模式 commandmode 您要切换到 插入模式 Insertmode 才能够输入文字 初次使用vi的人都会想先用上下左右键移动光标 结果电脑一直哔哔叫 把自己气个半死 所以进入vi后 先不要乱动 转换到 插入模式 Insertmode 再说吧 Vi编辑器 cont 2 切换至插入模式 Insertmode 编辑文件在 命令行模式 commandmode 下按一下字母 i 就可以进入 插入模式 Insertmode 这时候你就可以开始输入文字了 3 Insert的切换您目前处于 插入模式 Insertmode 您就只能一直输入文字 如果您发现输错了字 想用光标键往回移动 将该字删除 就要先按一下 ESC 键转到 命令行模式 commandmode 再删除文字 Vi编辑器 cont 4 退出vi及保存文件在 命令行模式 commandmode 下 按一下 冒号键进入 Lastlinemode 例如 wfilename 输入 wfilename 将文章以指定的文件名filename保存 wq 输入 wq 存盘并退出vi q 输入q 不存盘强制退出vi Vi编辑器 cont 三 Vi各模式的功能键 1 命令行模式常用的功能键1 切换到插入模式按 i 切换进入插入模式 insertmode 按 i 进入插入模式后是从光标当前位置开始输入文件 按 a 进入插入模式后 是从目前光标所在位置的下一个位置开始输入文字 按 o 进入插入模式后 是插入新的一行 从行首开始输入文字 2 从插入模式切换为命令行模式按 ESC 键 Vi编辑器 cont 3 移动光标vi可以直接用键盘上的光标来上下左右移动 但正规的vi是用小写英文字母 h j k l 分别控制光标左 下 上 右移一格 按 ctrl b 屏幕往 后 移动一页 按 ctrl f 屏幕往 前 移动一页 按 ctrl u 屏幕往 后 移动半页 按 ctrl d 屏幕往 前 移动半页 按数字 0 移到文章的开头 按 G 移动到文章的最后 按 移动到光标所在行的 行尾 按 移动到光标所在行的 行首 按 w 光标跳到下个字的开头按 e 光标跳到下个字的字尾按 b 光标回到上个字的开头按 l 光标移到该行的第 个位置 如 5l 56l Vi编辑器 cont 4 删除文字 x 每按一次 删除光标所在位置的 后面 一个字符 x 例如 6x 表示删除光标所在位置的 后面 6个字符 X 大写的X 每按一次 删除光标所在位置的 前面 一个字符 X 例如 20X 表示删除光标所在位置的 前面 20个字符 dd 删除光标所在行 dd 从光标所在行开始删除 行 Vi编辑器 cont 5 复制 yw 将光标所在之处到字尾的字符复制到缓冲区中 yw 复制 个字到缓冲区 yy 复制光标所在行到缓冲区 yy 例如 6yy 表示拷贝从光标所在的该行 往下数 6行文字 p 将缓冲区内的字符贴到光标所在位置 注意 所有与 y 有关的复制命令都必须与 p 配合才能完成复制与粘贴功能 Vi编辑器 cont 6 替换 r 替换光标所在处的字符 R 替换光标所到之处的字符 直到按下 ESC 键为止 7 回复上一次操作 u 如果您误执行一个命令 可以马上按下 u 回到上一个操作 按多次 u 可以执行多次回复 Vi编辑器 cont 8 更改 cw 更改光标所在处的字到字尾处 c w 例如 c3w 表示更改3个字9 跳至指定的行ctrl g 列出光标所在行的行号 G 例如 15G 表示移动光标至文章的第15行行首 Vi编辑器 cont 2 底行模式下常用的命令在使用 lastlinemode 之前 请记住先按 ESC 键确定您已经处于 commandmode 下后 再按 冒号即可进入 lastlinemode Vi编辑器 cont 1 列出行号 setnu 输入 setnu 后 会在文件中的每一行前面列出行号 2 跳到文件中的某一行 号表示一个数字 在冒号后输入一个数字 再按回车键就会跳到该行了 如输入数字15 再回车 就会跳到文章的第15行 Vi编辑器 cont 3 查找字符 关键字 先按 键 再输入您想寻找的字符 如果第一次找的关键字不是您想要的 可以一直按 n 会往后寻找到您要的关键字为止 关键字 先按 键 再输入您想寻找的字符 如果第一次找的关键字不是您想要的 可以一直按 n 会往前寻找到您要的关键字为止 Vi编辑器 cont 4 保存文件 w 在冒号输入字母 w 就可以将文件保存起来 5 离开vi q 按 q 就是退出 如果无法离开vi 可以在 q 后跟一个 强制离开vi wq 一般建议离开时 搭配 w 一起使用 这样在退出的时候还可以保存文件 3 GCC编译器 一 What sGCCGCCstandsfor GNUCompilerCollection GCCisanintegrateddistributionofcompilersforseveralmajorprogramminglanguages TheselanguagescurrentlyincludeC C Objective C Objective C Java Fortran andAda GCC编译器 cont TheabbreviationGCChasmultiplemeaningsincommonuse Thecurrentofficialmeaningis GNUCompilerCollection whichrefersgenericallytothecompletesuiteoftools Thenamehistoricallystoodfor GNUCCompiler andthisusageisstillcommonwhentheemphasisisoncompilingCprograms GCC编译器 cont 二 GCC编译流程GCC的编译流程分为4个步骤 分别为 1 预处理 Pre Processing 在该阶段 编译器分析处理源代码文件中的各种宏指令 如 include if等 2 编译 Compiling 在该阶段 GCC首先要检查代码的规范性 是否有语法错误等 在检查无误后 GCC把代码翻译为汇编语言 GCC编译器 cont 3 汇编 Assembling 在该阶段 编译器把编译生成的汇编代码转成二进制目标代码 4 链接 Linking 在该阶段 编译器把汇编阶段生成的二进制代码 程序中用到的库文件链接起来 生成可执行文件 函数库分为静态库和动态库 静态库 在链接时 静态库的文件代码会被拷贝到可执行文件中 动态库 链接时 动态库的代码不会被加入可执行文件中 而是在程序被执行的时候加载 GCC编译器 cont 三 GCC的常用选项GCC的命令行格式 gcc options infile 常用选项 c编译为目标文件 不连接库 S编译为汇编代码 E预处理 预处理之后的代码将送往标准输出 Wwarn 设置警告 可以设置的警告开关很多 通常用 Wall开启所有的警告 GCC编译器 cont Olevel设置优化级别 level可以是0 1 2 3或者s 默认为 O0 即不进行优化处理 Dname definition 在命令行上定义宏 有两种方式 Dname或者 Dname definition 在命令行上设置宏定义的目的主要是为了在调试的时候设定一些开关 而在发布的时候再关闭或者打开这些开关即可 当然宏定义也用来对代码进行有选择地编译 另外也还有其他的一些作用 GCC编译器 cont Uname取消宏定义name 作用和上面的正好相反 Idir 把dir加到头文件的搜索路径中 而且gcc会在搜索标准头文件之前先搜索dir llibrary在连接的时候搜索library库 库是一些archieve文件 其成员是目标文件 如果有文件引用library library在命令行的位置应该在那个文件之后 因此 越底层的库越要放在后面 比如如果你要连接pcap库 那么你就需要使用 lpcap对源文件进行编译 Ldir 把dir加到库文件的搜索路径中 而且gcc会在搜索标准库文件之前先搜索dir GCC编译器 cont g产生调试信息 GDB能够使用这些调试信息 ooutfile指定输出文件的文件名 默认为a out mmachine option 指定所用的平台 intmain intargc char argv printf HelloLinux n 要编译这个程序 我们只要在命令行下执行 gcchello c ohello 4 GDB调试器 Gdb是一款GNU开发组织并发布的UNIX Linux下的程序调试工具 它使你能在程序运行时观察程序的内部结构和内存的使用情况 以下是gdb所提供的一些功能 它使你能监视你程序中变量的值 它使你能设置断点以使程序在指定的代码行上停止执行 它使你能一行行的执行你的代码 GDB调试器 cont Gdb的使用方法 Gdb option executable file core fileorprocess id gdb基本命令 file装入想要调试的可执行文件 kill终止正在调试的程序list列出产生执行文件的源代码的一部分 next执行一行源代码但不进入函数内部 GDB调试器 cont step执行一行源代码而且进入函数内部 run执行当前被调试的程序quit终止gdbwatch使你能监视一个变量的值而不管它何时被改变 break在代码里设置断点 这将使程序执行到这里时被挂起 make使你能不退出gdb就可以重新产生可执行文件 shell使你能不离开gdb就执行UNIXshell命令 5 工程管理器Make Make是用于自动编译 链接程序的实用工具 在开发一个项目时 通常是将项目分成许多功能模块 每个功能模块又可能被分成许多子模块 而这些子模块一般就是一个程序文件 小的项目通常都有十几个或者几十个文件 而大的项目则会有上百个甚至上千个文件 如果要一个一个的编译每个文件 这个工作是非常繁琐的 使用make后就不需要手工的编译每个程序文件 除了要写一个makefile文件外 通常所需要做的事情就是在命令行敲入 make 然后所有的事情都由make来完成 工程管理器Make cont makefile的宗旨就是让编译器知道要编译一个文件需要依赖其他的哪些文件 当那些依赖文件有了改变 编译器会自动的发现最终的生成文件已经过时 而重新编译相应的模块 默认情况下 GNUmake工具在当前工作目录中按如下顺序搜索makefile GNUmakefile makefile Makefile 工程管理器Make cont 一 Makefile的基本结构一个简单的Makefile文件包含一系列的 规则 其样式如下 目标 target 依赖 prerequiries 命令 command 目标 target 通常是要产生的文件的名称 目标的例子是可执行文件或OBJ文件 目标也可是一个执行的动作名称 这样的目标通常称为伪目标 PHONY 诸如 clean 依赖是用来输入从而产生目标的文件 一个目标经常有几个依赖 工程管理器Make cont 命令是Make执行的动作 一个规则可以含有几个命令 每个命令占一行 注意 每个命令行前面必须是一个Tab字符 即命令行第一个字符是Tab 这是不小心容易出错的地方 一个makefile文件中可定义多个目标 利用maketarget命令可指定要编译的目标 如果不指定目标 则使用第一个目标 工程管理器Make cont Makefile文件示例 FromGNUmakemanual 6 Shell的编程 变量1 变量赋值和引用shell变量类型 只有字符串型 变量可以被赋值 被修改 被引用变量名命名方法 第一个字符为字母 其余字符可以是字母 数字或下划线 变量定义 不需要事先定义 直接赋值定义新变量 直接赋值修改原变量的值变量引用 在变量名前加 号 代表变量内容例 addr 20 1 1 254echo addr注 1 等号两侧不允许有多余的空格 2 等号右侧的字符串中含有空格或者制表符 换行符时 要用引号将打算赋值的字符串括起3 引用一个未定义的变量 变量值为空字符串 2 read 读用户的输入内部命令read 可以从标准输入上读入一行 并将这行的内容赋值给一个变量可以用在脚本文件中 接受用户的输入3 环境变量和局部变量局部变量 所创建的shell变量 默认为局部变量环境变量 全局变量 在当前shell下启动的子进程只继承环境变量不继承局部变量继承 就是指子进程有自己的一整套独立存储的环境变量 但是这些环境变量的初始状态是从父进程那里原封不动抄写下来的 从此以后 父子进程各保留一套 子进程对全局变量的修改 不影响父进程中的同名变量的值 子进程继续创建它自己的子进程时 这些值生效 例 chmodu xstat report catstat reportechoconnectedto protoNetwork proto AppleTalk stat reportconnectedtoNetworks proto为空 exportproto stat report proto为AppleTalkconnectedtoAppleTalkNetworks4 内置变量在shell中已经定义的变量 可以在脚本文件中直接使用 且不允许对这些变量赋值 二 变量的转换方法 使用内部命令export 内置变量 1 2 3 将多个命令行参数看作是多个 单词 1 2 3 4 将所有命令行参数组织成一个整体 作为一个单词 第一个 第二个 命令行参数 脚本文件本身的名字 命令行参数的个数 不包括脚本文件的名字在内 shell进程最近启动的后台进程的PID shell进程自己的PID 最后一次执行的命令的返回码 含义 0 1 2 位置变量 catarg cmain intargc char argv inti for i 0 i argc i printf d s n i argv i gccarg c oarg chmodu xparam catparam bin shecho echo echo Usage 0arg1arg2 arg arg paramCopyFilesto HOME197524Usage paramagr1arg2 0 arg 1 Copy 2 Files 3 to 4 usr jiang 0 arg 1 CopyFilesTO usr jiang 例 位置变量 与 的区别 Shell程序结构 shell作为一种编程语言 具有程序的分支结构和循环处理 1 条件判断在shell管理下 我们可能需要将一组命令按某种顺序执行 同时希望能由系统自动完成执行过程 这时我们可以使用编辑器编写一个shell脚本程序文件 UNIX系统将这种文件的后缀规定为 sh 可以使用多种方法完成shell程序的运行 例如 datewhops 1 使用vi编辑器生成一个shell文件 并命名为file sh2 执行方式 a 利用输入 输出重定向方式 sh file shb 将文件file sh当作sh命令的执行参数来完成程序的运行 shfile shc 用直接方式执行shell程序首先修改shell文件的默认权限使其成为用户可执行的程序 chmodu xfile sh file sh 系统规定 如果脚本文件的第一行的头两个字符是 那么就用这行后面的说明启动一个命令来解释这个脚本文件中的文本 例1 bin sh bin ksh bin cshif 0 命令行参数的个数thendir elsedir 1fifind dir typed print 1 条件条件判断的唯一依据是判定一条命令是否执行成功 判断方法是根据命令执行的返回码 返回0 就算条件成立 返回非0任意值 就算条件不成立 内置变量 用于返回上个命令执行结束后的返回码的值用管道线连接的若干命令 shell仅采用最后一个命令执行的返回码 由命令自身的行为决定 2 最简单的条件判断仅含有一个分支 条件成立或者不成立时执行相应的命令 采用符号 或 格式 命令1 命令2若命令1执行成功 返回码为0 则执行命令2 否则不执行命令2格式 命令1 命令2若命令1执行失败 返回码不为0 则执行命令2 否则不执行命令23 命令true与命令false 两个命令文件 均为两个简单的C语言程序 4 命令test与命令 命令test可以提供一些常用的条件判断命令 和命令test功能等价 区别是前者要求其最后一个命令行参数必须为右方括号test命令主要提供了以下的判断功能 1 对文件特性的测试语法格式 test dfrwxs file dfile 文件file存在且为目录文件 ffile 文件file存在且为普通文件 rfile 文件file存在且为可读文件 wfile 文件file存在且为可写文件 xfile 文件file存在且为可执行文件 sfile 文件file存在且文件长度为非零例 test d home usera echo 目录usera存在 d home usera echo 目录usera不存在或没有此目录 2 对字符串内容的测试格式 tests 当字符串s为非空时测试结果为真值s1 s2 当字符串s1和s2相同时结果为真值s1 s2 当字符串s1和s2不相同时结果为真值 zs1 s1串长度等于0 ns1 s1串长度不等于0注意 a 等号与不等号两侧的空格是必不可少的b 调用某个变量时 name的引号是必须的 3 用于对整数n的测试语法 n1 eqn2 当整数n1与n2相等时 返回真值n1 nen2 当整数n1与n2不相等时 返回真值n1 ltn2 当整数n1小于n2时 返回真值n1 len2 当整数n1小于等于n2时 返回真值n1 gtn2 当整数n1大于n2时 返回真值n1 gen2 当整数n1大于等于n2时 返回真值4 逻辑运算语法 NOT 非 oOR 或 aAND 与 条件判断命令中空格符的重要作用 catt1echo count 2 echoThereare2Files t1 ccount 9 5 与 在B shell中使用大括号实现复合语句的构造书写格式 list 要求 左大括号后面必须有一个空格 右大括号前面必须有分号 list是由一个或者多个命令构成的命令表例 DIR uer include sys netinetpwd d DIR cd DIRecho CurrentDirectoryis pwd echo ls l h wc l files h pwd书写格式 list 要求 左右括号均不许要换行或空格 与 区别 a 书写格式不同b 大括号括起的一组命令是在shell进程中进行 括号括起的一组命令是在子shell中进行 括号内命令执行完毕后 子shell就会终止 返回父shellc 会比 执行效率高 条件结构if实现条件if的关键字是if then elif else fi 多分支条件语句 if then elif else fi结构if condition 1 thencommand 1elif condition 2 thencommand 2elif condition 3 thencommand 3 elsecommand nfi 例如 if 1 thencp 1 HOME user1vi 1elseecho youmustspecifyafilename Tryagain fiexit0 用if语句实现一个实际应用中的问题假设有一个连续运行的系统 每当运行中遇到错误时 系统都创建一个错误记录文件errorfile并将错误信息写入其中 而且这个文件是按照错误出现的频率进行更新的 现在要求我们编写一段shell程序 根据errorfile文件产生的特性再生成一个定时错误日志文件 日志文件名为datelog 完成这一功能的shell程序名为checkerr sh 让errorfile和checkerr sh文件配合运行 完成每小时记录依次错误产生的情况 bin shdate datelogiftest rerrorfilethencaterrorfile datelogrmerrorfileelseecho Noerrorthishour datelogfi 7 case结构 case in结构是基于模式匹配基础上的多条件分支 case语句的语法为 casewordinpattern 1 pat1 list1 pattern 2 pat2 list2 default list esac说明 a 模式描述时 使用shell的文件名匹配原则b 是一个整体 不可使用空格等分隔c 在右括号和 之间可以夹着多个命令定义的程序块 本程序块可以有多个命令 也没必要用大括号或者括号括起 d 可以使用竖线罗列出多个模式e 当word可以与多个模式匹配时 只执行它所遇到的第一个命令表 例1 向指定的文件中添加信息 bin sh filename append shcase in1 cat 1 2 cat 2 1 echo usage append sh from to esac例2 编写一段shell程序 根据执行时获取的当前时间显示出不同的问候信息 bin sh 例题wh sh case结构hour date H case hourin0 1 9 1 01 echo Goodmorning 1 234567 echo Goodafternoon echo Goodevening esac 竖线罗列 如果在引用脚本文件时没有携带任何参数 容易引起case语法错误 所以最好带上双引号 2 循环结构1 while循环 while do done结构语法结构为 while condition docommands last commanddone说明 a 关键字必须以独立命令行的首个单词的身份出现 以确保shell会有机会把它们处理成内部命令b do和done之间的一段程序算作循环体 因此不需要在有多个命令时加大括号或括号c 行与行合并时 应注意在行之间加上分号 d 可以交互式使用while结构e 冒号命令和true命令可以用于条件中作为永真的条件例 while dols lmydata sleep10 done bin sh 例while循环while rabc c doecho Beforesleep sleep5echo sleepdone done2 until循环 Until do done结构until循环与while循环类似 所不同的是until循环只要循环条件为假 非0值 就执行循环体 其语句格式如下 until condition docommands last commanddone 说明 如果在第一次执行时 循环条件就为真 则循环可能会永远不执行 必须在程序中设置能使条件为真的因素 注意 对while来讲是判别条件为假 而until是判别条件为真 否则该循环会成为一个无限循环的死循环程序 若出现此问题用户可以

温馨提示

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

评论

0/150

提交评论