linux应用 知识点总结.docx
- 文档编号:12912683
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:20
- 大小:29.96KB
linux应用 知识点总结.docx
《linux应用 知识点总结.docx》由会员分享,可在线阅读,更多相关《linux应用 知识点总结.docx(20页珍藏版)》请在冰豆网上搜索。
linux应用知识点总结
第一章:
Linux介绍
1、Linux指的是开放源代码的,包含内核、系统工具、完整的开发环境和应用的UNIX类操作系统。
其内核大部分用C语言实现。
(Linux实际上是操作系统的内核kernel)
2、Linux内核的功能:
内核是Linux操作系统的基础,在操作系统中完成最基本的任务。
当前的Linux内核主要功能包括:
进程调度、存储管理、虚拟文件系统、网络接口和进程通信等。
3、Linux内核采用的是双树系统:
一棵是稳定树,主要用于发行另一棵是非稳定树或称为开发树,用于产品开发和改进。
4、内核的版本号由三位数字组成,r.x.y(r为主版本号,x为偶数则为产品化版本,为奇数则为实验版本,y表示错误修补的次数。
)
5、Linux内核本身的发展方向主要是硬件支持、嵌入系统和分布式系统这三个方面。
第二章:
Linux内核
1、内核是操作系统的内部核心程序,它向外部提供了对计算机设备的核心管理调用。
2、操作系统的代码分成2部分。
内核所在的地址空间称作内核空间。
而在内核以外的统称为外部管理程序,它们大部分是对外围设备的管理和界面操作。
外部管理程序与用户进程所占据的地址空间称为外部空间。
3、通常,一个程序会跨越两个空间。
当执行到内核空间的一段代码时,我们称程序处于内核态,而当程序执行到外部空间代码时,我们称程序处于用户态。
4、使Linux操作系统变得非常有用的大量应用程序是GNU软件。
例如,窗口系统、编译器、各种shell、开发工具等等。
5、典型的Linux操作系统的结构:
<用户应用程序>、
GNUCLibrary(glibc)提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制。
6、Linux内核可以进一步划分成3层。
最上面是系统调用接口,它实现了一些基本的功能,例如read和write。
系统调用接口之下是内核代码,可以更精确地定义为独立于体系结构的内核代码。
这些代码是Linux所支持的所有处理器体系结构所通用的。
在这些代码之下是依赖于体系结构的代码,用作给定体系结构的处理器和特定于平台的代码。
7、 Linux内核利用一个数据结构(task_struct)代表一个进程,代表进程的数据结构指针形成了一个task数组(Linux中,任务和进程是相同的术语),这种指针数组有时也称为指针向量。
每个进程的虚拟内存由一个mm_struct结构来代表;虚拟文件系统(VFS)中的文件、目录等均由对应的索引节点(inode)代表。
第三章:
Xwindow窗口系统
1、XWindow与MSWindows的比较:
相似性:
两者都提供图形界面。
相异性
⑴MSWindows是完整的OS,具有从内核到外壳、窗口环境等一切。
XWindow只是OS的一部分(窗口环境应用程序)。
XWindow的GUI是窗口与界面的分离环境。
⑵MSWindows是固定的,而XWindow是灵活和可以配置的。
2、Xwindow系统是建于客户-服务器联结基础上的图形子系统。
3、X是协议,就像HTTP协议,IP协议一样,协议是需要具体的软件来实现的。
实现X协议的软件也并不只有XFree86,XFree86是实现X协议的一个免费X服务器软件。
4、了解X服务器启动过程
打开一个XTERM输入:
#init 3
就可以安全的回到字符界面.
5、用startx起动图形界面的时候同时也启动了一个WM(即窗口管理器),但是用xinit起动图形界面的时候却没有起动WM。
6、窗口管理器WM的作用是~最大化,最小化,移动,关闭窗口等。
而这些不是X服务器来负责完成的。
7、关于KDE和GNOME:
vKDE和GNOME是LINUX里最常用的图形界面操作环境。
vKDE不仅是一个窗口管理器,还有很多配套的应用软件和方便使用的桌面环境,比如任务栏,开始菜单,桌面图标等等。
vGNOME是GNUNetworkObjectModelEnvirment的缩写。
和KDE一样,也是一个功能强大的综合环境。
v其它的小型窗口管理器。
8、X的设计理念是:
计算分布、设备分离、协议独立。
9、XWindowSystem不是操作系统的一部分,而仅仅是一个应用,易于开发、维护、移植
10、linux图形界面层次关系总结:
linux本身——>X服务器<—[通过X协议交谈]—>窗口管理器(综合桌面环境)——>X应用程序
第四章:
Linux基本命令
1、系统有两种用户:
超级用户root和一般用户。
“#”符号是超级用户的系统提示符,而普通用户的提示符是“$”。
2、打开终端(2种方式):
一种是在桌面上依次单击“主程序→系统工具→终端”可打开如图终端窗口;另一种是在Linux桌面上单击鼠标右键,从弹出的快捷菜单中选择“终端”命令,也可打开终端窗口。
3、当命令输入完毕后,一定不要忘记按回车健,因为系统只有收到回车键才认为命令行结束。
(命令行界面,也就是shell环境)
4、命令补齐:
TAB。
5、退出系统:
exit.有的系统可以用logout,或者Ctrl+d也可以。
6、重启系统:
需要超级用户的权限。
命令:
reboot.还有一种重新启动的方法是不需要先进入超级用户,在login状态下,同时按下Ctrl+Alt+Del键,系统同样可以重新启动,这就是所说的热启动。
7、关闭系统命令是halt,有的系统可能是haltsys,不同的版本可能稍有差别。
8、当用户在命令行下工作时,不是直接同操作系统内核交互信息的,而是由命令解释器接受命令,分析后再传给相关的程序。
Shell是一种Linux中的命令行解释程序,为用户提供
使用操作系统的接口。
用户在提示符下输入的命令都由Shell先解释然后传给Linux内核。
9、各类基本命令:
<1>.用户切换(su)
基本格式:
su[选项][使用者]
其中的使用者为要变更的对应使用者。
eg.su-root
<2>.useradd:
添加用户账号。
useradd必须用root的权限
passwd:
更改对应用户账号密码。
基本格式:
useradd:
useradd[选项]用户名。
(-g;-m;-n)
passwd:
passwd[选项][用户名]。
(很少使用选项参数)
useradd指令所建立的账号,实际上是保存在“/etc/passwd”文本文件中,文件中每一行包含一个账号信息。
<3>系统管理命令(ps和kill)
ps:
显示当前系统中由该用户运行的进程列表。
kill:
输出特定的信号给指定PID(进程号)的进程,并根据该信号而完成指定的行为。
其中可能的信号有进程挂起、进程等待、进程终止等。
基本格式:
ps:
ps[选项]。
(-ef,-aux,-w)
kill:
kill[选项]进程号(PID)。
(-s,-p,-l)
<4>.磁盘相关命令(fdisk)
fdisk可以查看硬盘分区情况,并可对硬盘进行分区管理。
基本格式:
fdisk[-l](列出文件系统的分区)
使用fdisk必须要有root权限。
<5>磁盘挂载命令(mount)
挂载文件系统,它的使用权限是超级用户或/etc/fstab中允许的使用者。
挂载是指把分区和目录对应的过程,而挂载点是指挂载在文件树中的位置。
基本格式:
mount[选项][类型]设备文件名挂载点目录(-a、-l、-t、-f)
其中的类型是指设备文件的类型。
<6>.文件目录相关命令:
*cd(作用是改变工作目录)
基本格式:
cd[路径]
*ls(作用是列出目录的内容)
基本格式:
ls[选项][文件](-l:
一行输出一个文件;-a,-all列出目录中所有文件)
*mkdir(创建一个目录)
基本格式:
mkdir[选项]路径
*cat(连接并显示指定的一个和多个文件的有关信息)
基本格式:
cat[选项]文件1文件2…(-n;-b进行编号)
*cp:
将给出的文件或目录复制到另一文件或目录中。
*mv:
为文件或目录改名或将文件由一个目录移入另一个目录中。
*rm:
删除一个目录中的一个或多个文件或目录。
*chown:
修改文件所有者和组别。
*chgrp:
改变文件的组所有权。
(使用chown和chgrp必须拥有root权限)
*chmod:
改变文件的访问权限。
(使用chmod必须具有root权限)
*grep:
在指定文件中搜索特定的内容,并将含有这些内容的行标准输出。
*find:
在指定目录中搜索文件,它的使用权限是所有用户。
*locate:
用于查找文件。
其方法是先建立一个包括系统内所有文件名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。
因此其速度比find快很多。
*ln:
为某一个文件在另外一个位置建立一个符号链接.(−s建立符号链接(这也是通常惟一使用的参数)
<7>.压缩打包相关命令:
*gzip:
对文件进行压缩和解压缩,而且gzip根据文件类型可自动识别压缩或解压缩。
(使用gzip压缩只能压缩单个文件,而不能压缩目录,其选项“-d”是将该目录下的所有文件逐个进行压缩,而不是压缩成一个文件)
*tar:
对文件目录进行打包或解包。
(tar命令除了用于常规的打包之外,使用更为频繁的是用选项“-z”或“-j”调用gzip或bzip2(Linux中另一种解压工具)完成对各种不同文件的解压)
<比较合并文件相关命令>:
*diff:
比较两个不同的文件或不同目录下的两个同名文件功能,并生成补丁文件。
*patch:
命令跟diff配合使用,把生成的补丁文件应用到现有代码上。
<8>.网络相关命令:
*ifconfig:
用于查看和配置网络接口的地址和参数,包括IP地址、网络掩码、广播地址,它的使用权限是超级用户。
*ftp:
该命令允许用户使用ftp协议上传和下载文件。
<9>.联机帮助命令:
*man和help.(获取帮助)
~管道是Linux中信息通信的重要方式。
它是把一个程序的输出直接连接到另一个程序的输入,而不经过任何中间文件。
管道线是指连接二个或更多程序管道的通路。
在shell中字符”|”表示管道线。
如前例子中的ps–ef|grepntp所示,ps–ef的结果直接输入到grepntp的程序中。
grep、pr、sort和wc都可以在上述管道线上工作。
~
Linux启动过程:
内核引导阶段(kernelboot)
在grub或lilo等引导程序成功完成引导Linux系统的任务后,Linux就从它们手中接管了CPU的控制权。
在加载了内核之后,由内核执行引导的第一个进程就是INIT进程,该进程号始终是“1”。
INIT进程根据其配置文件“/etc/inittab”主要完成系统的一系列初始化的任务。
由于该配置文件是INIT进程执行的惟一依据,因此先对它的格式进行统一讲解。
inittab文件中除了注释行外,每一行都有如下格式:
id:
runlevels:
action:
process
第五章:
Linux文件系统
1、Linux系统中把CPU、内存之外所有其他设备都抽象为文件来处理。
进程只和文件系统打交道;文件系统还同时充当着设备管理接口的角色;文件系统是操作系统中与管理文件有关的所有软件和数据的集合。
2、Linux系统自身的文件系统称为ext2,它也是Linux默认的文件系统。
把ext2以及Linux支持的文件系统称为逻辑文件系统,Linux在传统的逻辑文件系统的基础上,增加了一个称为虚拟文件系统(VFS)的接口层。
3、虚拟文件系统在最上层,管理各种逻辑文件系统,屏蔽了它们之间的差异,为用户命令、函数调用和内核其他部分提供访问文件和设备的统一接口。
4、虚拟文件系统只存在于内存中,同时,它只有和其他实际存在于磁盘中的文件系统一起才能构成一个完整的文件系统。
5、Linux使用标准的目录结构-树型结构,无论操作系统管理几个磁盘分区,这样的目录树只有一个。
6、将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为“安装(mount)”。
把该子目录称为“安装点(mountpoint)”。
7、把Ext2、Minix、Ext等实际可使用的文件系统称为具体文件系统。
8、Ext2文件系统把它所占用的磁盘分区首先分为引导区(BootBlock)和块组(Blockgroup);
每一个块组中都由超级块(SuperBlock)、记录所有块组信息的组描述符表(GroupDescriptors)、块位图(DatablockBitmap)、i节点位图(inodeBitmap)、i节点区(inodeTable)和数据区(Datablocks)组成。
9、Ext2超级块是用来描述Ext2文件系统整体信息的数据结构,是Ext2的核心所在。
它是一个ext2_super_block数据结构。
10、块组是Ext2文件系统划分和管理文件系统的单位,每个块组都由一个组描述符(groupdescriptor)来具体描述。
11、Ext2和Unix类的文件系统一样,使用索引节点来记录文件信息。
每一个普通文件和目录都有唯一的索引节点与之对应,索引节点中含有文件或目录的重要信息(inode)。
12、Linux系统中,目录也是文件的一种,称为目录文件,每一个目录也由一个i节点来描述,i节点中文件类型标识这是一个目录文件,同时在对应的物理块中存放用来描述文件的目录项列表。
目录项列表用来描述一个目录所包含的全部文件和子目录,每一个目录项对应着一个文件或目录。
13、文件属性:
rwx(可读可写可执行);分成三组:
文件所有者(u),文件所有组(g),系统其他用户(o)。
14、VFS提供以下功能:
~记录可用的文件系统类型;
~把文件系统与对应的存储设备联系起来;
~处理面向文件的通用操作;
~涉及具体文件系统的操作时,把它们映射到相关的具体文件系统。
15、虚拟文件系统又称虚拟文件系统转换(VirualFilesystemSwitch,简称VFS)。
VFS并不是一个真正的文件系统。
与VFS相对,我们称Ext2、Minix、MSDOS等为具体文件系统。
VFS是一个软件层,是用户应用程序与具体文件系统实现之间的抽象层。
16、安装的所有物理文件系统不但依赖于VFS共存,而且也依靠VFS协同工作。
它的主要设计思想有以下3点:
(1)应用层:
VFS模型源于UNIX文件系统,使得用户可以直接使用标准UNIX文件系统调用来操作文件,无需考虑具体文件系统特性和物理存储介质,通过VFS访问文件系统,才使得不同文件系统之间的协作性和通用性成为可能。
(2)虚拟层:
在对所有具体文件系统的共同特性进行抽象的基础上,形成一个与具体文件系统实现无关的虚拟层,并在此层次上定义与用户的一致性接口。
(3)实现层:
该层使用类似开关表技术进行具体文件系统转接,实现各种文件系统的物理操作细节,每个文件系统是自包含的,包含文件系统实现的各种设施,如超级块、节点区、数据区以及各种数据结构和文件类的操作函数。
17、VFS的数据结构:
v超级块(superblock)对象:
存放系统中已安装文件系统的有关信息
v索引节点(inode)对象:
存放关于具体文件的一般信息
v目录项(dentry)对象:
存放目录项与对应文件进行链接的信息
v文件(file)对象:
存放打开文件与进程之间进行交互的有关信息
18、超级块是对一个文件系统的描述;索引节点是对一个文件物理属性的描述;而目录项是对一个文件逻辑属性的描述。
19、文件读写的基本步骤:
file=fget(fd),也就是调用fget()从fd获取相应文件对象的地址file,并把引用计数器file->f_count加1。
检查file->f_mode中的标志是否允许所请求的访问(读或写操作)
调用locks_verify_area()检查对要访问的文件部分是否有强制锁
调用file->f_op->read或file->f_op->write来传送数据。
这两个函数都返回实际传送的字节数。
另一方面的作用是,文件指针被更新
调用fput()以减少引用计数器file->f_count的值。
返回实际传送的字节数
第六章:
Linux进程分析
1、Linux中的每个进程由一个task_struct数据结构来描述,Linux中,任务(task)、和进程(process)是两个相同的术语,task_struct其实就是通常所说的“进程控制块”即PCB,包含了进程的描述信息、控制信息以及资源信息,task_struct容纳了进程的所有信息。
2、进程状态及转换:
为了对给定类型的进程(比如所有在可运行状态下的进程)进行有效的搜索,内核维护了几个进程链表:
所有进程链表,运行队列,等待队列。
所有进程链表:
所有的进程用task_struct中的*prev_task和*next_task组成一个双向循环链表。
链表的头和尾都是init_task。
3、在Linux中最主要的进程标识有进程号(PID,ProcessIdenityNumber)和它的父进程号(PPID,parentprocessID)。
其中PID惟一地标识一个进程。
PID和PPID都是非零的正整数。
4、当一个进程在某个CPU上正在执行时,内核如何获得指向它的task_struct的指针?
Current宏可以看成当前进程的进程描述符指针,在内核中直接使用。
举例:
比如current->pid返回在CPU上正在执行的进程的PID。
5、在Linux中获得当前进程的PID和PPID的系统调用函数为getpid和getppid。
6、进程间通信机制(IPC)。
7、为了控制进程的执行,内核必须有能力挂起正在CPU上执行的进程,并恢复以前挂起的某个进程的执行,这叫做进程切换(ProcessSwitching),任务切换,上下文切换(ContextSwitching)
8、进程上下文:
包含了进程执行需要的所有信息
用户地址空间:
包括程序代码,数据,用户堆栈等
控制信息:
进程描述符,内核堆栈等
硬件上下文
9、schedule()函数选择一个新的进程来运行,并调用context_switch进行上下文的切换,这个宏调用switch_to来进行关键上下文切换。
Switch_to利用了两个参数,prev(指向当前进程)和next(指向被调度的进程)。
10、进程调度中调度类型:
实时调度类rt_sched_class,完全公平调度类fair_sched_class和空闲进程调度类idle_sched_class。
11、进程的创建的三种机制:
~写时复制技术,Copy-On-Writing,COW。
写时复制技术允许父子进程能读相同的物理页。
~轻量级进程允许父子进程共享许多数据结构
页表
打开的文件列表
信号处理
~vfork
使用vfork创建的新进程能够共享父进程的内存地址空间。
父进程在这个过程中被阻塞,直到子进程退出或者执行一个新的程序。
12、fork()
v在Linux中创建一个新进程使用fork函数。
它执行一次却返回两个值。
fork函数用于从已存在进程中创建一个新进程。
v新进程称为子进程,而原进程称为父进程。
v这两个分别带回它们各自的返回值,其中父进程的返回值是子进程的进程号,而子进程则返回0。
v因此,可以通过返回值来判定该进程是父进程还是子进程。
得到父进程的复制品,子进程独有的只有进程号,资源使用和计时器等。
Fork()函数代价很大,执行速度不快。
13.exec函数族:
共六个函数都以exec开头。
exec函数族提供了一个在进程中启动另一个程序执行的方法。
它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。
14、exit和_exit:
都是用来终止进程的。
_exit()函数的作用是:
直接使进程停止运行,清除其使用的内存空间,并清除其在内核中的各种数据结构;exit()函数则在这些基础上作了一些包装,在执行退出之前加了若干道工序。
exit()函数与_exit()函数最大的区别就在于exit()函数在调用exit系统之前要检查文件的打开情况,把文件缓冲区中的内容写回文件,就是图中的“清理I/O缓冲”一项。
15、在一个进程调用了exit之后,该进程并不马上就完全消失,而是留下一个称为僵尸进程(Zombie)的数据结构。
16、wait和waitpid:
wait函数是用于使父进程(也就是调用wait的进程)阻塞,直到一个子进程结束或者该进程接到了一个指定的信号为止。
waitpid的作用和wait一样,但它并不一定要等待第一个终止的子进程,它还有若干选项,如可提供一个非阻塞版本的wait功能,也能支持作业控制。
第七章:
Linux下c编程基础
1、编辑器(vi/vim),编译器(gcc/g++),调试器(gdb),工程管理工具(make)
2、机器语言是与硬件平台(主要是cpu)有关的,所以编译生成应用程序就必须要区分编译生成的是在什么硬件平台下运行的应用程序。
3、可以移植必须满足的条件:
源代码中不涉及到与操作系统有关的系统调用。
4、POSIX表示可移植操作系统接口,并被接受为国际标准。
5、编辑器:
vi完成对所录入文字的编辑功能。
编译器:
gcc源代码->可执行代码
调试器:
gdb
项目管理器:
make有点类似于c++里的project
6、vi模式:
命令行模式(输入i进入到插入模式);插入模式(按ESC回到命令行模式);底行模式
7、gcc编译器:
Gcc的编译流程分为了4个步骤,分别为:
v预处理(Pre-Processing);
v编译(Compiling);
v汇编(Assembling);
v链接(Linking)。
警告信息:
-ansi;-pedantic.
8、gdb调试器:
Gdb进行调试的是可执行文件,而不是如“.c”的源代码,因此,需要先通过Gcc编译生成可执行文件才能用Gdb进行调试。
在Gdb中设置断点非常简单,只需在“b”后加入对应的行号即可。
要注意的是,在Gdb中利用行号设置断点是指代码运行到对应行之前将其停止。
在设置完断点之后,用户可以键入“infob”来查看设置断点情况,在Gdb中可以设置多个断点。
运行代码:
键入r(若想从指定行开始运行,那么r后面加上行号)
查看变量值:
p+变量
单步运行可以使用命令“n”(next)或“s”(step),它们之间的区别在于:
若有函数调用的时候,“s”会进入该函数而“n”不会进入该函数。
恢复程序运行:
在查看完所需变量及堆栈情况后,就可以使用命令“c”(continue)恢复程序的正常运行了。
Gdb中的命令主要分为以下几类:
工作环境相关命令、设置断点与恢复命令、源代码查看命令、查看运行数据相关命令及修改运行参数命令。
9、在一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux应用 知识点总结 linux 应用 知识点 总结