linux复习要点考试必备(详细版完整版).doc_第1页
linux复习要点考试必备(详细版完整版).doc_第2页
linux复习要点考试必备(详细版完整版).doc_第3页
linux复习要点考试必备(详细版完整版).doc_第4页
linux复习要点考试必备(详细版完整版).doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

Linux复习要点哈师大软件学院软件项目管理2013年1月3日 计算机系统由硬件和软件组成。硬件 Kernel Shelll 用户 操作系统是用户与计算机硬件系统间的接口,用于控制和管理系统资源。 Linux的各组成部分。 Linux内核(Kernel)采用模块化的结构,其主要模块包括:存储管理、CPU和进程管理、文件系统管理、设备管理和驱动、网络通信以及系统的引导、系统调用等。Linux内核的源代码通常安装在/usr/src/linux目录,可供用户查看和修改内核(kernel)利用文件描述符(file descriptor)来访问文件。 Linux的主要特点: 真正的多用户多任务、良好的兼容性、强大的可移植性、高度的稳定性、支持多种文件系统、开源特性、免费使用。 Shell: 指“提供使用者使用界面”的软件(命令解析器)。在Linux系统中,shell是操作系统的外壳,为用户提供使用操作系统的接口,它是命令语言、命令解释程序和程序设计语言的统称。操作系统的shell程序,介于用户和操作系统内核(Kernel)之间,负责将用户的命令解释成操作系统可以接受的指令,然后由操作系统来执行这些指令,并将操作系统执行的结果以用户可以了解的方式反馈给用户。 1.查阅历史记录history命令 例如:$history$history n(n为第几条记录) 快速执行旧命令用 ! 例如:$ !478 2. 输入/输出重定向: 输入改向 、 输出改向、 追加输出改向 0 标准输入(stdin) 1 标准输出(stdout)2 标准错误输出(stderr)例1:使用输入重定向查看ls_result.txt文件 cat myfile 例3:将ls 的输出追加到myfile文件中 ls -lmyfile 例4:将错误输出改向到err-file文件 myprog 2 err-file 例5:将标准输出和错误输出改向out文件 myprog out 2out myprog out 2&1 例6:创建f1,f2从键盘输入内容;将f1内容追加到f2,创建f 3,将f1与f2合并到f3;从键盘向f1追加“Hello world” cat f1 cat f2 cat f1 f2 cat f1 f2 f3 cat f13. 1)通配符(*和?)“*”和“?”是Linux系统中最常用的两个通配符,在字符串查找的时候,通配符可以代替任意的字符。其中“?”可以代替一个任意字符,“*”可以代替任意多个字符。例如,执行“ls l /root/test*”命令就会列出/root目录下所有以test打头的所有文件名2)命令取代符()命令取代符“”在Esc键下方,与“”符号在同一个键上。两个“”符号包围的命令,是该命令行中首先被执行的命令。例如,“echo date”命令,首先执行date命令,然后使用echo来显示date命令的结果,而不是显示字符串date3)命令分隔符(;) cd /etc ; more passwd 在bash中,查看全部环境变量有两种方法:env命令 set命令 例如:set | tail -5或者 env | tail 使用管道和tail控制查看后几个环境变量。若要查看当前某个环境变量的值,可以使用echo命令。echo $环境变量名 例如:echo $UID设置环境变量值的方式: export 环境变量名=环境变量值 例如: export LOGNAME=aaaaa例如:将/home/lyz/exam加入到PATH中$PATH=/home/lyz/exam:$PATH $export PATH 创建和执行一个shell程序非常简单,一般需要以下3个步骤:(1)利用文本编辑器创建脚本内容。(2)使用“chmod”命令赋权,设置脚本的可执行属性。(3)执行脚本例如:创建Hello.sh的shell程序1.#!/bin/sh -为实际的解释器echo date +%Y%m%d2.设置Hello.sh文件的可执行属性 chmod a+x Hello.sh3.执行Hello.sh脚本 ./ Hello.sh 或者: sh Hello.sh vi有两种工作模式:编辑模式:用来输入和编辑文件的模式,屏幕上会显示用户的键入,按键不是被解释为命令执行,而是作为文本写到用户的文件中。指令模式:用来编辑、存盘和退出文件的模式。在指令模式下键入如下命令可以退出vi。:q 如果用户只是读文件的内容而未对文件进行修改,可以在命令模式下输入“:q”退出vi。:q! 如果用户对文件的内容作了修改,又决定放弃对文件的修改,则用“:q!”命令。:w! 强行保存一个vi文件,如果该文件已存在,则进行覆盖。:wq 保存文件并退出vi。ZZ 快速保存文件的内容,然后退出vi。功能和“:wq”相同。:w filename 相当于“另存为”。:n,mw filename 将第n-m行的文本保存到指定的文件filename中。 chmod命令:权限设定字符串。格式:所有者+-=权限所有者:u:用户 g:组 o:其它 a:所有用户(默认)权限: r:读 w:写 x:执行 s:设置用户(组)的ID号 t:设置粘着位(sticky bit),防止文件或目录被非属主删 u:用户的当前权限 g:组的当前权限 o:其他用户的当前权限+-= : +:增加权限 -:删除权限 =:重新分配权限例如:chmod u+x file 给file的属主增加执行权限 chmod 751 file 给file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限 shell程序语法和其他高级语言程序类似,包括变量、控制结构和函数等。bash脚本是一种弱类型的脚本语言。 shell变量:变量的声明:变量名=值 注意:等号两边不能存在分隔符(包括空格,制表位和回车符)。例如:a1=hello b1=90变量的赋值:键盘输入:使用read命令例如: read var1 var2 var3 键盘输入:Hello my friends echo $var1变量的引用:通常,要引用一个变量,可以采取在变量名前加一个$的方法,即“$变量名”。例如: echo a1 is $a1 shell表达式:在bash中单纯使用一个表达式作为命令或语句是错误的,而必须使用expr或let命令来指明表达式是一个运算式。 bash中条件测试:test cond_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#an example script of ifclearecho input a directory name, please!read dir_name#测试$dir_name目录是否存在if d $dir_name ;thencd $dir_name /dev/null 2$1echo $dir_name has already existed,enter directory succeed#测试是否存在与$dir_name同名的文件elif -f $dir_name ; thenecho file: $dir_name has already existed,create directory failedexitelsemkdir $dir_name /dev/null 2$1cd $dir_nameecho $dir_name has not existed,create and enter directory succeedfi本例中:“cd $dir_name /dev/null 2 $1”表示cd命令可能产生的标准输出信息和标准错误输出信息重定向的到一个空设备/dev/null,从而实现隐藏cd命令错误输出的功能。例2: 使用case语句编写程序,接收键盘输入,输入为1,输出red;输入为2,输出green,输入3,输出pink,其他输出input error。#!/bin/bash#an example script of caseclearecho “please enter a character(13):read c1case $c1 in 1) echo “red”; (双分号“;”) 2) echo “green”; 3) echo “pink”; *) echo input error!;esacecho “Success!” 编译的过程:1.预处理(Preprocessing):分析各种预处理命令,如#define, #include, #if等;gcc -E test.c -o test.i2.编译(Compilation): 根据输入文件产生汇编语言的程序;gcc -S test.i -o test.s3.汇编(Assembly): 将汇编语言输入,产生扩展名为.o的目标文件;gcc -c test.s -o test.o 4.链接(Linking):以.o目标文件,库文件作为输入,生成可执行文件;GCC test.o -o test 函数库分类:静态库、共享库、动态库: make工具可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。(简化gcc编译器的编译工作)。Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。 程序员将自己的makefile文件命名为xx,则其执行编译的指令为: make -f xx makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。makefile 文件是许多编译器-包括 Windows NT 下的编译器-维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改 makefile 文件而已。makefile 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile 就像一个Shell 脚本一样,其中也可以执行操作系统的命令。makefile 带来的好处“自动化编译”,一旦写好,只需要一个make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。make 是一个解释makefile 中指令的命令工具。 Makefile的组成:Makefile 里主要包含了五种类型的语句/行:显式规则、隐式规则、变量定义、文件指示和注释。n 显式规则。显式规则说明了如何生成一个或多个的目标文件。这是由Makefile 的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。n 隐式规则。由于我们的make 有自动推导的功能,所以隐式的规则可以让程序员比较简略地书写Makefile,这是由make 所支持的。n 变量的定义。在Makefile 中可定义一系列的变量,变量一般都是字符串,有点象C 语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。n 文件指示。其包括了三个部分,(1)在一个Makefile 中引用另一个Makefile,就像C 语言中的include 一样;(2)根据某些情况指定Makefile 中的有效部分,就像C 语言中的预编译#if 一样;(3)定义一个多行的命令。n 注释。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步:n 编译时指定-fPIC选项。该选项通知gcc编译器产生可以重定位和与位置无关的目标代码。n 链接时指定-shared选项。使gcc编译器生成动态链接库。 df 命令: 功能描述:显示文件系统的空间大小. du命令: 功能描述:显示文件使用的空间大小范例:$ du - sm / collect 127 / collect显示/ collect总空间为127MB,不加s显示此 目录下每个文件的大小。 查看系统的逻辑分区:fdisk -l(root权限下,若不能执行可尝试执行:/sbin/fdisk -l)。 在逻辑分区/dev/hda5上创建ext2文件系统 mkfs ext2 /dev/hda5 将sda6分区格式化为ext3格式: mfks -t ext3 /dev/sda6 文件系统建立后,需对其挂载到系统中才可以访问,挂载方式有2种:1.执行mount命令进行手工挂载2.通过fstab文件自动挂载 Linux的文件系统通常由4部分组成:引导块,超级块,索引节点表和数据块。1.引导块用来存放文件系统的引导程序,用于系统引导或启动系统。如果一个文件系统不安放操作系统,它的引导块将为空。2.超级块用来描述本文件系统管理的资源,它包含空闲索引节点和空闲数据块表,具体说明文件系统的资源使用情况。3.索引节点(inode)用来存储文件的控制信息,每个节点对应一个文件。在inode中包含有文件数据在磁盘上存储的位置信息,还包含有存取权限,文件所有者及存取时间等信息。第一个索引节点是该文件系统的根节点。利用根节点,可以把一个文件系统挂在另一个文件系统的非叶节点上;4.数据块是磁盘上存放数据的磁盘块,包括目录文件和数据。 fstab文件: 描述系统中各种文件系统的信息 第五列Dump:一个备份工具,表示是否需要备份。如是0,dump就会被忽略,多数设置都是0。 第六列fsck选项:一个文件系统扫描检查工具n 检测该字段来决定文件系统通过什么顺序来扫描检查,根文件系统/对应该字段的值应该为1n 其他文件系统应该为2。若文件系统无需在启动时扫描检查,则设置该字段为0超级块是用来描述EXT2文件系统整体信息的数据结构,包括块的大小、每块组中包含的块数等,占用1个块大小。每个ext2文件系统都必须包含一个超级块,每个块组开头都有一个超级块的copy。s_log_block_size: 这个字段算出block大小, 为0 则block大小1024, 为1 则block大小2048, 为2 则block大小4096 ext2文件系统: 每一个块组有一个组描述符,所有的组描述符集中在一起依次存放,形成组描述符表,组描述符表位于超级快的下一个块中。所有数据块组中的组描述符被复制到每个数据块组中以防文件系统崩溃。每个组描述符都含有指向以下信息的指针:块位图、inode节点位图、inode节点表等。 EXT2文件系统中数据块的使用状况由块位图来描述。 Block bitmap: 块位图,大小1个block,每个bit表示一个block使用情况,如果该bit为1表示这个block中有数据,为0表示该block是空闲的。假设一个block大小为4096Byte, 则bitmap可以表示block的个数为8*4096, 则一个block group大小最大为8*4096*4096Byte。 i节点位图(inode bitmap)的作用类同于“块位图”,不同的是每一个位对应“i节点表”里的一个i节点而不是块。大小1个block。 i节点表用于跟踪定位每个文件;文件的位置,大小,类型和访问权限均保存在i节点中。然而文件名并不保存在i节点里,在i节点表里,是依赖文件的i节点号来管理所有的文件的。 查看文件的inode编号 ls i Linux有五种基本文件类型:普通文件 -、目录文件 d、设备文件 b、管道文件 p、链接文件 l 可用file命令来识别。 例:file exam 结果:exam:directory 目录文件 如果想建立符号链接,需要在ln命令后带-s选项,符号链接也称为软链接,如果不带-s选项,则可建立硬连接。建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。对符号链接,则不存在这个问题。默认情况下,ln产生硬链接。硬链接建立的文件类型是普通文件。 Linux系统下的文件操作有两种方式:n 直接调用文件操作的系统调用(API方式(基本I/O),依赖于Linux操作系统)n 标准输入输出方式(标准I/O,独立于操作系统)基本I/O是针对文件描述符的,而标准I/O是基于流的。实际上流结构是一个指向FILE结构的指针。 标准输入、标准输出与标准错误输出Linux进程启动后,内核默认为每个进程打开3个文件。n 标准输入(standard input)的文件描述符是 0n 标准输出(standard output)是 1n 标准错误(standard error)是 2POSIX 定义了 STDIN_FILENO、STDOUT_FILENO 和 STDERR_FILENO 来代替 0、1、2。这三个符号常量的定义位于头文件 unistd.h。 例:使用creat在当前目录下创建一个文件拥有者可读写权限的文件,并在文件中写入文本串。(exam_file1.c)1.void *memset(void *s,int ch,size_t n); 函数解释:将s中前n个字节用ch替换并返回s;2.int sprintf( char *buffer, const char *format, argument ); 把格式化的数据写入某个字符串。参数列表: buffer:char型指针,指向欲写入的字符串地址。 format:char型指针,指向的内存里面存放了格式字符串。 argument.:可选参数,可以是任何类型的数据。 返回值:字符串长度(strlen) 3.char *strerror( int errnum ); 获取系统错误信息或打印用户程序错误信息。errnum:错误码errno - number of last error 记录系统的最后一次错误代码。代码是一个int型的值,在errno.h中定义。4.int write(int fd, void *buf, int nbyte); 从buf所指向的缓冲区中提取nbyte个字节写入到参数fd所指的文件中。 例:使用open打开当前目录下的文件(exam_file2.c) HelloWorld.txt,并在文件尾部追加文本串。 标准I/O库提供的缓存方式有3种: 全缓存(缓存填满,则向文件系统刷新) 行缓存(遇换行符,则向文件系统刷新) 不缓存缓存在第一次调用I/O库时,由系统自动调用malloc分配。 例:编程实现十六进制格式显示文件内容。(exam4.c) 二进制方式最常用的场合即是结构体读写。 查看进程属性信息ps命令 例:ps -alef|m

温馨提示

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

评论

0/150

提交评论