linux复习要点考试必备详细完整版.docx
- 文档编号:29224945
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:26
- 大小:1.41MB
linux复习要点考试必备详细完整版.docx
《linux复习要点考试必备详细完整版.docx》由会员分享,可在线阅读,更多相关《linux复习要点考试必备详细完整版.docx(26页珍藏版)》请在冰豆网上搜索。
linux复习要点考试必备详细完整版
Linux复习要点
哈师大软件学院软件项目管理
2013年1月3日
Ø
计算机系统由硬件和软件组成。
Ø
操作系统是用户与计算机硬件系统间的接口,用于控制和管理系统资源。
ØLinux的各组成部分。
ØLinux内核(Kernel)采用模块化的结构,其主要模块包括:
存储管理、CPU和进程管理、文件系统管理、设备管理和驱动、网络通信以及系统的引导、系统调用等。
Linux内核的源代码通常安装在/usr/src/linux目录,可供用户查看和修改
内核(kernel)利用文件描述符(filedescriptor)来访问文件。
ØLinux的主要特点:
真正的多用户多任务、良好的兼容性、强大的可移植性、高度的稳定性、支持多种文件系统、开源特性、免费使用。
ØShell:
指“提供使用者使用界面”的软件(命令解析器)。
在Linux系统中,shell是操作系统的外壳,为用户提供使用操作系统的接口,它是命令语言、命令解释程序和程序设计语言的统称。
操作系统的shell程序,介于用户和操作系统内核(Kernel)之间,负责将用户的命令解释成操作系统可以接受的指令,然后由操作系统来执行这些指令,并将操作系统执行的结果以用户可以了解的方式反馈给用户。
Ø1.查阅历史记录—history命令例如:
$history\$historyn(n为第几条记录)快速执行旧命令用!
<记录号>例如:
$!
478
2.输入/输出重定向:
<输入改向、<<追加输入改向、>输出改向、>>追加输出改向
0标准输入(stdin)1标准输出(stdout)2标准错误输出(stderr)
例1:
使用输入重定向查看ls_result.txt文件cat 例2: 将date的输出转向到myfile文件中date>myfile 例3: 将ls的输出追加到myfile文件中ls-l>>myfile 例4: 将错误输出改向到err-file文件myprog2>err-file 例5: 将标准输出和错误输出改向out文件myprog>out2>>outmyprog>out2>>&1 例6: 创建f1,f2从键盘输入内容;将f1内容追加到f2,创建f3,将f1与f2合并到f3;从键盘向f1追加“Helloworld”cat>f1cat>f2catf1>>f2catf1f2>f3cat>>f1 3.1)通配符(*和? ) “*”和“? ”是Linux系统中最常用的两个通配符,在字符串查找的时候,通配符可以代替任意的字符。 其中“? ”可以代替一个任意字符,“*”可以代替任意多个字符。 例如,执行“ls–l/root/test*”命令就会列出/root目录下所有以test打头的所有文件名 2)命令取代符(`) 命令取代符“`”在Esc键下方,与“~”符号在同一个键上。 两个“`”符号包围的命令,是该命令行中首先被执行的命令。 例如,“echo`date`”命令,首先执行date命令,然后使用echo来显示date命令的结果,而不是显示字符串date 3)命令分隔符(;)cd/etc;morepasswd Ø在bash中,查看全部环境变量有两种方法: env命令set命令 例如: set|tail-5或者env|tail使用管道和tail控制查看后几个环境变量。 若要查看当前某个环境变量的值,可以使用echo命令。 echo$环境变量名例如: echo$UID 设置环境变量值的方式: export环境变量名=环境变量值例如: exportLOGNAME=aaaaa 例如: 将/home/lyz/exam加入到PATH中 $PATH=/home/lyz/exam: $PATH$exportPATH Ø创建和执行一个shell程序非常简单,一般需要以下3个步骤: (1)利用文本编辑器创建脚本内容。 (2)使用“chmod”命令赋权,设置脚本的可执行属性。 (3)执行脚本 例如: 创建Hello.sh的shell程序 1.#! /bin/sh----为实际的解释器 echo`date+%Y%m%d` 2.设置Hello.sh文件的可执行属性chmoda+xHello.sh 3.执行Hello.sh脚本./Hello.sh或者: shHello.sh Øvi有两种工作模式: 编辑模式: 用来输入和编辑文件的模式,屏幕上会显示用户的键入,按键不是被解释为命令执行,而是作为文本写到用户的文件中。 指令模式: 用来编辑、存盘和退出文件的模式。 在指令模式下键入如下命令可以退出vi。 : q如果用户只是读文件的内容而未对文件进行修改,可以在命令模式下输入“: q”退出vi。 : q! 如果用户对文件的内容作了修改,又决定放弃对文件的修改,则用“: q! ”命令。 : w! 强行保存一个vi文件,如果该文件已存在,则进行覆盖。 : wq保存文件并退出vi。 ZZ快速保存文件的内容,然后退出vi。 功能和“: wq”相同。 : wfilename相当于“另存为”。 : n,mwfilename将第n-m行的文本保存到指定的文件filename中。 Øchmod命令: 权限设定字符串。 格式: [所有者][+-=][权限] 所有者: u: 用户g: 组o: 其它a: 所有用户(默认) 权限: r: 读w: 写x: 执行s: 设置用户(组)的ID号t: 设置粘着位(stickybit),防止文件或目录被非属主删u: 用户的当前权限g: 组的当前权限o: 其他用户的当前权限 +-=: +: 增加权限-: 删除权限=: 重新分配权限 例如: chmodu+xfile 给file的属主增加执行权限 chmod751file 给file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行 (1)的权限 Øshell程序语法和其他高级语言程序类似,包括变量、控制结构和函数等。 bash脚本是一种弱类型的脚本语言。 Øshell变量: 变量的声明: 变量名=值注意: 等号两边不能存在分隔符(包括空格,制表位和回车符)。 例如: a1="hello"b1=90 变量的赋值: 键盘输入: 使用read命令 例如: readvar1var2var3键盘输入: Hellomyfriendsecho$var1 变量的引用: 通常,要引用一个变量,可以采取在变量名前加一个$的方法,即“$变量名”。 例如: echo"a1is$a1" Øshell表达式: 在bash中单纯使用一个表达式作为命令或语句是错误的,而必须使用expr或let命令来指明表达式是一个运算式。 Øbash中条件测试: testcond_expr或[cond_expr] 注意: 利用一对中括号时,左右的中括号与表达式之间都必须存在空格。 cond_expr是需要测试的条件表达式,可以是以下几种情况: (1)文件存取属性测试: 包括文件类型,文件的访问权限等。 (2)字符串属性测试,包括字符串长度,内容等。 (3)整数关系测试,包括大小比较,相等判断等。 (4)上述3种关系通过逻辑运算(与、或、非)的组合。 首先使用test命令测试test.sh是否存在其可写,从ls–l命令返回的结果看,确实是test.sh文件存在且可写的,所以“echo$? ”命令返回0表示真。 然后又使用中括号测试。 tdir是不是目录以及是否可写,从ls–l命令的返回来看,tdir同样是目录且可写的,所以返回真。 其中“$? ”表示引用变量“? ”,而变量“? ”是一个特殊变量,可以返回紧邻的前驱命令的返回值。 Ø例1: 根据用户输入的目录名称判断该目录是否存在,如果存在则进入该目录,否则测试同名文件是否存在,如果存在,则退出shell程序,否则新建同名目录,并进入该目录。 #! /bin/bash #anexamplescriptofif clear echo"inputadirectoryname,please! " readdir_name #测试$dir_name目录是否存在 if[–d$dir_name]; then cd$dir_name>/dev/null2>$1 echo"$dir_namehasalreadyexisted,enterdirectorysucceed" #测试是否存在与$dir_name同名的文件 elif[-f$dir_name]; then echo"file: $dir_namehasalreadyexisted,createdirectoryfailed" exit else mkdir$dir_name>/dev/null2>$1 cd$dir_name echo"$dir_namehasnotexisted,createandenterdirectorysucceed" fi 本例中: “cd$dir_name>/dev/null2>$1”表示cd命令可能产生的标准输出信息和标准错误输出信息重定向的到一个空设备/dev/null,从而实现隐藏cd命令错误输出的功能。 例2: 使用case语句编写程序,接收键盘输入,输入为1,输出red;输入为2,输出green,输入3,输出pink,其他输出inputerror。 #! /bin/bash #anexamplescriptofcase clear echo“pleaseenteracharacter(1~3): " readc1 case$c1in 1)echo“red”;;(双分号“;;”) 2)echo“green”;; 3)echo“pink”;; *)echo"inputerror! ";; esac echo“Success! ! ! ” Ø编译的过程: 1.预处理(Preprocessing): 分析各种预处理命令,如#define,#include,#if等; gcc-Etest.c-otest.i 2.编译(Compilation): 根据输入文件产生汇编语言的程序; gcc-Stest.i-otest.s 3.汇编(Assembly): 将汇编语言输入,产生扩展名为.o的目标文件; gcc-ctest.s-otest.o 4.链接(Linking): 以.o目标文件,库文件作为输入,生成可执行文件; GCCtest.o-otest Ø函数库分类: 静态库、共享库、动态库: Ømake工具可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。 (简化gcc编译器的编译工作)。 Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。 Ø程序员将自己的makefile文件命名为xx,则其执行编译的指令为: make-fxx Ømakefile文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。 makefile文件是许多编译器--包括WindowsNT下的编译器--维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改makefile文件而已。 makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 makefile带来的好处——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。 make是一个解释makefile中指令的命令工具。 ØMakefile的组成: Makefile里主要包含了五种类型的语句/行: 显式规则、隐式规则、变量定义、文件指示和注释。 ⏹显式规则。 显式规则说明了如何生成一个或多个的目标文件。 这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。 ⏹隐式规则。 由于我们的make有自动推导的功能,所以隐式的规则可以让程序员比较简略地书写Makefile,这是由make所支持的。 ⏹变量的定义。 在Makefile中可定义一系列的变量,变量一般都是字符串,有点象C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。 ⏹文件指示。 其包括了三个部分, (1)在一个Makefile中引用另一个Makefile,就像C语言中的include一样; (2)根据某些情况指定Makefile中的有效部分,就像C语言中的预编译#if一样;(3)定义一个多行的命令。 ⏹注释。 Makefile中只有行注释,和UNIX/Linux的Shell脚本一样,其注释是用“#”字符,作用与C/C++中的“//”一样。 如果你要在你的Makefile中使用“#”字符,可以用反斜框进行转义,如: “\#” 注意: 在Makefile中的命令,必须要以[Tab]键开始 Ø通常情况下,这些函数库位于/usr/lib和/lib目录下。 Øar命令: 建立或修改备存文件,或是从备存文件中抽取文件。 ar[-dmpqrtx][cfosSuvV][a<成员文件>][b<成员文件>][i<成员文件>][备存文件][成员文件] 指令参数: -d 删除备存文件中的成员文件。 -m变更成员文件在备存文件中的次序。 假如使用了选项v则列出被删除的每个成员。 -p 显示备存文件中的成员文件内容。 假如指定任选项v,则在输出成员的内容前,将显示成员的名字。 -q 将文件附加在备存文件末端。 不检查是否需要替换。 -r 将文件插入备存文件中。 替换同名的模块。 -t 显示备存文件中所包含的文件。 -x 自备存文件中取出成员文件。 假如不指定要提取的成员,则提取库中的所有成员。 -a<成员文件> 将文件插入备存文件中指定的成员文件之后。 -b<成员文件> 将文件插入备存文件中指定的成员文件之前。 -c 建立备存文件。 -f 为避免过长的文件名不兼容于其他系统的ar指令,因此可利用此参数,截掉要放入备存文件中过长的成员文件名称。 -i<成员文件> 将文件插入备存文件中指定的成员文件之前。 -o 保留备存文件中文件的日期。 -s 若备存文件中包含了对象模式,可利用此参数建立备存文件的符号表。 -S 不产生符号表。 -u 只将日期较新文件插入备存文件中。 -v 程序执行时显示详细的信息。 -V 显示版本信息。 Ø用户自定义函数库的创建和使用: 1)形成用户自定义函数库,需以下3步: 1.将功能整理成函数。 形成C源程序,每个源程序可包含若干功能函数。 2.将函数编译成目标文件。 仅编译,但不进行链接,形成二进制目标文件(.o) 3.将目标打包成函数库。 执行ar命令,c参数(新建)r参数(附加)。 2)创建函数库后,要在用户程序中引用,需要以下3步: 1.在源程序中包含相关头文件信息,头文件定义了函数库中提供的函数声明原型。 2.在源程序中调用函数库相关函数。 3.在链接时通过-l选项指定要链接的函数库。 例如: 用户自定义的函数库名为libtool.a,在链接时,应使用-ltool.a选项将目标代码与函数库进行链接。 Ø系统调用三种手段使CPU进入系统态: 中断: 来自于外部设备的中断请求。 当有中断请求到来时,CPU自动进入系统态,并从某个预定地址开始执行指令。 中断只发生在两条指令之间,不影响正在执行的指令。 异常: 无论是在用户空间或系统空间,执行指令失败时都会引起异常,CPU会因此进入系统态(如果原先不在系统空间),从而在系统空间中对异常做出处理。 异常发生在执行一条指令的过程中,所以当前执行的指令已经半途而废了。 自陷: 以上两种都CPU被动进入系统态。 而自陷是CPU通过自陷指令主动进入系统态。 多数CPU都有自陷指令,系统调用函数一般都是靠自陷指令实现的。 一条自陷指令的作用相当于一次子程序调用,子程序存在于系统空间。 Ø如何使用系统库函数: Ø在Linux系统下,提供了数学函数库,其中静态库文件为/usr/lib/libm.a,动态库为/usr/lib/libm.so。 Ø动态库的创建与使用: 在Linux系统下创建动态链接库,需经过2步: ⏹编译时指定-fPIC选项。 该选项通知gcc编译器产生可以重定位和与位置无关的目标代码。 ⏹链接时指定-shared选项。 使gcc编译器生成动态链接库。 Ødf命令: 功能描述: 显示文件系统的空间大小. Ødu命令: 功能描述: 显示文件使用的空间大小 范例: $du-sm/collect 127/collect 显示/collect总空间为127MB,不加s显示此目录下每个文件的大小。 Ø查看系统的逻辑分区: fdisk-l(root权限下,若不能执行可尝试执行: /sbin/fdisk-l)。 Ø在逻辑分区/dev/hda5上创建ext2文件系统mkfsext2/dev/hda5 Ø将sda6分区格式化为ext3格式: mfks-text3/dev/sda6 Ø文件系统建立后,需对其挂载到系统中才可以访问,挂载方式有2种: 1.执行mount命令进行手工挂载 2.通过fstab文件自动挂载 ØLinux的文件系统通常由4部分组成: 引导块,超级块,索引节点表和数据块。 1.引导块用来存放文件系统的引导程序,用于系统引导或启动系统。 如果一个文件系统不安放操作系统,它的引导块将为空。 2.超级块用来描述本文件系统管理的资源,它包含空闲索引节点和空闲数据块表,具体说明文件系统的资源使用情况。 3.索引节点(inode)用来存储文件的控制信息,每个节点对应一个文件。 在inode中包含有文件数据在磁盘上存储的位置信息,还包含有存取权限,文件所有者及存取时间等信息。 第一个索引节点是该文件系统的根节点。 利用根节点,可以把一个文件系统挂在另一个文件系统的非叶节点上; 4.数据块是磁盘上存放数据的磁盘块,包括目录文件和数据。 Øfstab文件: 描述系统中各种文件系统的信息 Ø第五列Dump: 一个备份工具,表示是否需要备份。 如是0,dump就会被忽略,多数设置都是0。 Ø第六列fsck选项: 一个文件系统扫描检查工具 ⏹检测该字段来决定文件系统通过什么顺序来扫描检查,根文件系统/对应该字段的值应该为1 ⏹其他文件系统应该为2。 若文件系统无需在启动时扫描检查,则设置该字段为0 超级块是用来描述EXT2文件系统整体信息的数据结构,包括块的大小、每块组中包含的块数等,占用1个块大小。 每个ext2文件系统都必须包含一个超级块,每个块组开头都有一个超级块的copy。 s_log_block_size: 这个字段算出block大小,为0则block大小1024,为1则block大小2048,为2则block大小4096 Øext2文件系统: Ø每一个块组有一个组描述符,所有的组描述符集中在一起依次存放,形成组描述符表,组描述符表位于超级快的下一个块中。 所有数据块组中的组描述符被复制到每个数据块组中以防文件系统崩溃。 每个组描述符都含有指向以下信息的指针: 块位图、inode节点位图、inode节点表等。 ØEXT2文件系统中数据块的使用状况由块位图来描述。 Blockbitmap: 块位图,大小1个block,每个bit表示一个block使用情况,如果该bit为1表示这个block中有数据,为0表示该block是空闲的。 假设一个block大小为4096Byte,则bitmap可以表示block的个数为8*4096,则一个blockgroup大小最大为8*4096*4096Byte。 Øi节点位图(inodebitmap)的作用类同于“块位图”,不同的是每一个位对应“i节点表”里的一个i节点而不是块。 大小1个block。 Øi节点表用于跟踪定位每个文件;文件的位置,大小,类型和访问权限均保存在i节点中。 然而文件名并不保存在i节点里,在i节点表里,是依赖文件的i节点号来管理所有的文件的。 Ø查看文件的inode编号ls–i ØLinux有五种基本文件类型: 普通文件-、目录文件d、设备文件b、管道文件p、链接文件l Ø可用file命令来识别。 例: fileexam结果: exam: directory目录文件 Ø如果想建立符号链接,需要在ln命令后带-s选项,符号链接也称为软链接,如果不带-s选项,则可建立硬连接。 建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。 对符号链接,则不存在这个问题。 默认情况下,ln产生硬链接。 硬链接建立的文件类型是普通文件。 ØLinux系统下的文件操作有两种方式: ⏹直接调用文件操作的系统调用(API方式(基本I/O),依赖于Linux操作系统) ⏹标准输入输出方式(标准I/O,独立于操作系统) 基本I/O是针对文件描述符的,而标准I/O是基于流的。 实际上流结构是一个指向FILE结构的指针。 Ø标准输入、标准输出与标准错误输出 Linux进程启动后,内核默认为每个进程打开3个文件。 ⏹标准输入(standardinput)的文件描述符是0 ⏹标准输出(standardoutput)是1 ⏹标准错误(standarderror)是2 POSIX定义了STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO来代替0、1、2。 这三个符号常量的定义位于头文件unistd.h。 Ø例: 使用creat在当前目录下创建一个文件拥有者可读写权限的文件,并在文件中写入文本串。 (exam_file1.c) 1.void*memset(void*s,intch,size_tn); 函数解释: 将s中前n个字节用ch替换并返回s; 2.intsprintf(char*buffer,constchar*format,[argument]…); 把格式化的数据写入某个字符串。 参数列表: buffer: char型指针,指向欲写入的字符串地址。 format: char型指针,指向的内存里面存放了格式字符串。 [argument]...: 可选参数,可以是任何类型的数据。 返回值: 字符串长度(strlen) 3.char*strerror(interrnum);获取系统错误信息或打印用户程序错误信息。 errnum: 错误码 errno-numberoflasterror记录系统的最后一次错误代码。 代码是一个int型的值,在errno.h中定义
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 复习 要点 考试 必备 详细 完整版