Linux读书心得与笔记.docx

上传人:b****1 文档编号:595926 上传时间:2023-04-29 格式:DOCX 页数:98 大小:8.82MB
下载 相关 举报
Linux读书心得与笔记.docx_第1页
第1页 / 共98页
Linux读书心得与笔记.docx_第2页
第2页 / 共98页
Linux读书心得与笔记.docx_第3页
第3页 / 共98页
Linux读书心得与笔记.docx_第4页
第4页 / 共98页
Linux读书心得与笔记.docx_第5页
第5页 / 共98页
Linux读书心得与笔记.docx_第6页
第6页 / 共98页
Linux读书心得与笔记.docx_第7页
第7页 / 共98页
Linux读书心得与笔记.docx_第8页
第8页 / 共98页
Linux读书心得与笔记.docx_第9页
第9页 / 共98页
Linux读书心得与笔记.docx_第10页
第10页 / 共98页
Linux读书心得与笔记.docx_第11页
第11页 / 共98页
Linux读书心得与笔记.docx_第12页
第12页 / 共98页
Linux读书心得与笔记.docx_第13页
第13页 / 共98页
Linux读书心得与笔记.docx_第14页
第14页 / 共98页
Linux读书心得与笔记.docx_第15页
第15页 / 共98页
Linux读书心得与笔记.docx_第16页
第16页 / 共98页
Linux读书心得与笔记.docx_第17页
第17页 / 共98页
Linux读书心得与笔记.docx_第18页
第18页 / 共98页
Linux读书心得与笔记.docx_第19页
第19页 / 共98页
Linux读书心得与笔记.docx_第20页
第20页 / 共98页
亲,该文档总共98页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Linux读书心得与笔记.docx

《Linux读书心得与笔记.docx》由会员分享,可在线阅读,更多相关《Linux读书心得与笔记.docx(98页珍藏版)》请在冰点文库上搜索。

Linux读书心得与笔记.docx

Linux读书心得与笔记

Linux部分:

Linux驱动程序有三种:

字符设备(义字符为单位进行输入输出,如串口,显示器)驱动,块设备(以数据为单位进行输入输出,如移动硬盘)驱动,和网络设备驱动。

驱动开发实例:

蜂鸣器,按键,串口,触摸屏,网络,USB,液晶屏等,还有难度更大有最小系统的启动开发。

项目实现:

网络文件传输服务程序;WEB服务器;移植mediaplay播放器;开发嵌入式视频服务器(从摄像头进行视频采集,基于H.264协议(是一个压缩协议))

嵌入式系统软件结构一般包含四个层面:

(硬件;)驱动层程序;实时操作系统(RTOS);操作系统的应用程序接口(API);应用程序。

Bootloader,有启动模式(初始化硬件)和下载模式(下载代码)

黑盒测试:

1、压力测试:

例如将运行的进程加大,看是否出问题

2、边界测试:

采取一些边界值,看系统是否出错

3、异常测试:

如函数只能接受整形,如若接受字符型,则系统如何反应是报错还是接受

4、错误测试:

给一个错误数据看系统是否进行出错处理

5、随机测试:

给一个随机值看系统如何进行处理

6、性能测试:

如将系统运行三五天,看系统是否还正常

白盒测试(覆盖测试):

1、语句测试:

2、判定和分支测试:

3、条件覆盖:

Linux:

1、实现网络通信及资源共享2、提供网络服务软件3、应用程序接口

补丁?

补丁是对于大型软件系统(如微软操作系统)在使用过程中暴露的问题BUG(一般由黑客或病毒设计者发现)而发布的解决问题的小程序。

linux特点:

多任务、多用户;支持多种文件系统(ext2、ext3);采用虚拟内存管理(swap空间(swap分区就是交换分区))技术;可移植性;设备独立性(上层不能直接调用底层,必须一层一层往下);丰富的网络功能;提供源代码。

Linux的组成:

1、Linux的核心是Kernel,他是一个操作系统的最底层的东西,有他来掌管整个硬件资源的工作状态(即运行程序和管理硬件像打印机和磁盘等硬件设备的核心程序);

2、Shell:

上层的应用与下层的接口,提供接口,文本解析程序,批处理文件(Shell是用户的用户界面,提供了用户与内核进行交互操作的一种接口,也是程序的解析器);

3、文件系统:

是文件存放在磁盘德国存储设备上的组织方法;

4、应用系统:

包括文本编辑、程序语言、XWindow、办公套件、Internet工具、数据库;

date命令:

显示日期的指令

pwd命令:

显示当前目录

cd命令:

返回上级目录

cal命令:

显示日历的指令,若只有一个cal,则是指显示当月的日历,若cal年份,则显示这一年的日历,若cal月份年份,则显示这一年这一月的日历。

bc命令:

简单好用的计算器,当录入bc后光标所在地就是在等待用户的录入,当计算完成之后,输入quit命令则就退出bc的命令。

ls命令:

查看文件与目录

-a:

全部的文件,连同隐藏的文件(即开头为.的文件)

-A:

列出全部的文件,不包括隐藏文件(即开头为.或..这两个目录)

-i:

列出文件的inode(引索节点)号码

(每个存储设备或存储设备分区被格式化为文件系统后,有两部分组成,即a、Block,用来存储数据的;b、inode,用来存储这些数据的信息,这些信息包括文件大小、属性、归属的用户组、读写权等。

如:

若存储设备为一本书,则Block为书的内容,inode则为书的目录)

-l:

列出长数据串,包含文件的属性、权限、大小以及最近的修改时间

cp命令:

文件之间的覆盖copy,同时还可以进行文件的连接命令使用方法:

cp源文件目标文件

-a:

相当于-pdr的意思

-f:

强制的意思,在覆盖文件时无需在询问用户是否进行覆盖操作

-i:

一般覆盖操作默认这种指令,都是覆盖时再次询问用户是否进行覆盖,要回答y或n

rm命令:

移除文件或目录命令使用方法:

rm文件或目录

-f:

就是force的意思,忽略不存在的文件,不会出现警告信息

-i:

互动模式,再删除前会询问用户是否删除(这种是默认的方式)

-r:

递归删除,常用在目录的删除,这是非常危险的参数!

(使用的时候要非常注意,以免删错文件)

mv命令:

移动文件或目录,或更名

-f:

force强制的意思,如有目标文件已经存在,不会询问而直接覆盖

-i:

如目标文件已经存在时,就会询问是否覆盖

-u:

若目标文件已经存在,且source比较新,才会更新(update)

touch命令:

可以创建一个文件命令使用方法:

touch文件名(touch./-aaa-创建了一个在/目录下-aaa-的文件)

mkdir命令:

用来创建一个子目录命令用法:

mkdir/home/vitest(在home的目录下创建一个名为vitest的子目录)

rmdir命令:

用来删除空子目录命令的用法:

rmdirvitest(删除当前目录下的vitest子目录(该子目录必须是空的))如若删除的并不是空目录,则可以用该指令:

rm–frvitest/(代表的是删除非空目录vitest的删除)

在Linux的操作系统中进入命令窗口的方法:

1、点击鼠标右键,选择“打开终端”;2、ctrl(有的电脑还要+shift)+alt+F1进入纯字符界面,在命令提示行后面输入命令alt+F7退出纯字符界面。

Vi的几种工作模式:

1、编辑模式(在刚进入shell编写环境中直接按i字母键即可),如删除行,添加行,复制某一行2、字符模式,输入相应字符3、底行模式(用Esc:

)(退出、保存)

在shell中编写的程序,如若要停止该程序,则用ctrl+C(是系统提供的停止任何程序的功能键),或者按下q即可。

vitest.sh指令可以建立一个shell文本文件,同时建成之后可以打开文本编辑,对test文本进行文本输入。

Shell的两种执行方式:

1、用./ttl.sh(执行文件ttl中的内容)2、shttl.sh(执行ttl中的内容)注:

两种的执行方式虽然不同,但是执行的结果是一样的。

Shell的基本的路径的环境变量如echo(可以进行回显后面的内容,以及路径的回显环境变量用$并且后跟大写)

Shell中引号分为两种:

1、双引号,双引号括起来的字符,除$(后跟变量名)、倒引号、和反斜线(\)(表示一个续行)仍保留其特殊功能外,其余字符通常作为普通字符对待。

2、单引号,单引号括起来的都是以字符串看待。

文件内容查阅:

cat:

由第一行开始显示文件内容

tac:

由最后一行开始显示内容,与cat刚好相反

nl:

显示的时候顺便输出行号

more:

一页一页的显示内容

less:

与more用法相同,但是比more更好的是可以进行翻页操作

head:

只看头几行

tail:

只看结尾几行

od:

以二进制的方式读取文件内容

chmod可以改变文本格式。

Ps:

查看系统进程的命令

Sync指令:

在内存中尚未被更新的数据,会被写入硬盘中,即该指令用来进行数据的写入动作。

输入输出重定向符:

(1)、“<”输入重定向符,把命令(可执行程序)的标准输入重新定定向到指定文件

(2)、“>”输出重定向符,命令写到指定文件中(若这个文件还没建立则当输入重定向的文件名后,系统会生成给文件,并把内容写入到该文件中)。

Shell中注释以#开头。

什么是文字接口?

回答:

就是在linux界面中单右——>在终端中打开——>弹出的界面,(若以root身份打开则是#,以其他身份则是$)输入指令的每一行就是文字接口。

这一段代码是为什么?

为什么明明创建了一个目录s123,但是创建好了之后去又进不去这个目录?

是因为这个目录是空目录吗?

并且我以为权限不够将权限修改为777后,还是不能进入这个目录?

回答:

在上面的指令中有错误在最后一个cd指令中建立的s123目录并没有在/下,所以在cd/s123根本在/下找不到s123.

在链接中,通过ls–li的指令可以查到当前目录下的文件(文件名不同)的信息,其中信息中含有inode值,若文件的inode值相同,则说这几个文件是硬链接。

Intest.shtest1.sh命令:

是指建立了test.sh的硬链接test1.sh。

创建硬链接文件有什么好处或功能?

回答:

硬链接的作用是允许一个文件拥有多个有效路径名,这用用户就可以建立硬连接到重要文件,以防止“误删”的功能。

因为对应该目录的索引节点有一个以上的连接。

只删除一个连接并不影响索引节点本身和其他的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放,即文件真正删除的条件是与之相关的所有硬连接文件均删除。

即,硬链接就相当于是一个文件的多个备份,与之inode相同的文件的内容是相同的,并且给其中一个,其他的几个也跟着改变。

硬链接的形式:

(硬连接后两个文件的权限没变,inode没变,只是连接个数增加)

ln-stest.shtest1.sh指令:

是指建立test.sh的软连接test1.sh。

软连接与硬链接都是文件的备份所用,但是软连接的原连接被删除,则软连接虽然还存在,但是不能打开该文件,无法在对软连接进行查看和编辑。

但是,若原链接还在,只要对连接中的其中一个文件作修改,则相关的连接文件都相应做了修改,这一点是和硬链接一样的。

软连接的形式:

(软连接的inode变了,文件权限也不一样,权限变成了777,连接个数没变)

为什么会这样?

为什么进不去目录shilu中?

回答:

这个问题同上面的问题一样,同样在最后查询shilu这个目录时,不应该加/,因为shilu这个目录并没有在/中。

(1)、档案类型。

[d]表示为目录;[-]表示为档案;[l]表示为软连接档案;[b]表示为装置文件里面的可供存储的接口设备;[c]表示为装置文件里面的串行端口设备,如键盘、鼠标。

(2)、三个字母为一组。

[r]表示可读,对应数字为4;[w]表示可写,对应数字为2;[x]表示可执行,对应数字为1,(如果还有一种方法修改权限:

4为SUID,2为SGID,1为Stickybit)第一组表示拥有着之属性;第二组,所属群组之属性;第三组,其他人对此之属性。

当只有同一组当中[r]、[x]同时具备时,对应的用户才可进入该目录。

(3)、数字。

表示该文件的硬链接的个数。

(4)、文件然后是档案拥有者。

(5)、文件所属群组

(6)、文件大小

(7)、文件创建时间或最后一次的修改日期。

月份日期时间

(8)、文件名字。

如果名字前加了一个[.],则表示该文件为隐藏文件

chgrp指令:

改变档案所属群组

chown指令:

改变档案所属人;

chmod指令:

改变档案的属性、SUID、等等的特性;

问题:

chown(修改文件拥有者的指令)chgrp(修改拥有者所属群组的指令)不会用?

umask指令:

指定在建立文件是预设的权限掩码(权限掩码是有3个八进制的数字所组成,将现有的存取权限减掉权限后掩码后,即可产生建立文件时预设的权限)。

which指令:

查看可执行档案位置

whereis指令:

查看档案的位置

find指令:

实际搜寻硬盘去查询文件名称。

file指令:

可以用来查看这个档案类型,还可以用来观看档案是否被加入SUID等

SMB服务(Samba服务器)协议是一种在两台机器之间共享文件、打印机和接口的标准化协议,它允许linux与unix系统之间进行数据资源共享,以及linux与window系统之间共享数据资源(体会:

SMB服务就是相当于自己的电脑登陆其他机器,并且共享了其他机器上的数据资源)。

该服务是linux与windows系统之间文件共享。

Squid是运行于linux系统上的代理服务器,他是登陆网站之后自动对网站有了备份。

DNS是域名解析,用于域名和IP之间的转换,即,比如说或www.224.....都可以登陆西安邮电学院的网站,但是在登录真正中使用的是后者,而DNS就是承担这个转化的工作。

ftp命令用于两台机器中的上传和下载文件。

Ping命令是基于TCP/IP协议中的ICMP(网络控制报文协议,主要用于传送报文),用法:

ping主机IP地址|主机名;

dutest.sh指令:

目前磁盘的档案容量,并且输出是以KB为单位的,用MB的则用-m,该目录占用了多少容量的则用-s;

ext2、ext3、swap这三个是什么东东?

回答:

都是文件系统,其中ext2、ext3大部分是一样的,只有ext3中有inode;而swap值安装linux系统是位交换分区,该分区相当于windows的虚拟内存,内部采用swap文件系统,是一个独立的分区,就是内存与磁盘的缓冲地带,它的大小设置为你的内存大小的两倍;而系统安装完后设置就叫swap文件,好处是丰富linux系统安装的弹性,可以应对种复杂安装环境。

问题:

fdisk指令没办法使用,使用时不对?

只能使用一个fdisk-l的指令,其他的切割分区没办法执行?

进程管理:

程序的执行(顺序(按顺序执行如单用户单进程的dos,程序独占整个cpu资源)、并发(程序在宏观上是同时几个执行,微观上是交替使用cpu资源))

进程是一个具有一个一定独立功能的程序,是单独的一个关于某个数据集合的一次运行活动。

进程有三种状态:

阻塞(等待)、就绪、运行;

互斥:

有若干进程都要使用某一共享资源,任何时刻最多允许一个进程使用,若要

要是用该资源的进程必须等待,直到占用该资源者释放了该资源为止。

临界资源:

操作系统中将一次只允许一个进程访问的资源称为临界资源;

临界区:

进程总访问临界资源的程序代码段称为临界区。

临界区前面增加的代码叫进入区,后面加的代码叫退出区。

同步:

异步环境下的一组并发进程(合作进程)因直接制约,使得个进程按一定的速度执行的过程称为进程间的同步。

同步和互斥:

互斥是同步的一种情况;

记录型信号量:

structsemaphore

{

`intvalue;//value是表示临界资源的数目

PCB*L;//进程控制块指针

}S;

P操作:

value减1;判断value是否大于等于0,若大于,则进程继续执行;若小于,则信号量相对应的等待队列L中,然后转进程调度。

其中value为负值,则表示有进程进入阻塞状态,value为负几则表示有几个进程处于等待(阻塞)状态中。

S操作:

value加1;若结果大于0,进程继续执行;若小于0,则从该信号量的等待队列L中唤醒一个等待进程,然后返回原进程继续执行或转进程调度。

进程间通信:

进程间传送数据。

控制信息则低级;大量数据则高级。

进程调度:

(1)、高级调度(作业调度):

用于决定把外存上处于后备队列中的哪些作业调入内存,准备执行。

(2)、中级调度:

按一定的算法在内存和外存之间进行进程对换,目的在于缓和内存的紧张。

(3)、低级调度:

将内存中就绪队列中的作业分配处理机,使其执行。

进程调度算法:

先来先服务调度算法FCFS;短进程优先调度算法SPF;高优先级优先调度算法HPF;时间片轮转法;(绿色为一般常用算法)多级反馈队列调度算法;

死锁:

多个进程竞争资源而形成的一种僵局,若无外力作用使得进程都将永远不能再向前推进。

产生原因:

竞争资源;进程推进顺序不当。

产生死锁的必要条件(一下四条件必须都满足时,才会发生死锁):

互斥条件;请求和保持条件;不剥夺条件;环路等待条件。

线程:

linux进程实体组成:

正文段、用户数据段、系统数据段。

进程状态:

运行状态、等待状态、暂停状态、僵死状态。

Linux编程:

在使用vi时的编辑命令:

x表示删除光标所在位;

dd删除光标所在行,并且将其内容存储到编辑缓冲区中;

yy表示复制光标所在行,并将其存储到编辑缓冲区中;

p从编辑缓冲区中的内容粘贴到光标所在行的下一行;

u取消上一次的操作(恢复功能);

h、j、k、l分别为左、下、上、右方向键;

1G表示移动光标到文件的第一行;

G表示移动光标到最后1行;

:

N表示移动光标到第N行;

:

setnumber表示设置显示行号;

:

setnonumber表示取消显示行号;

:

x表示保存文件并退出;:

x!

强制保存文件并退出

:

q表示不保存退出,:

q!

表示强制退出

:

w表示保存不退出,:

w!

强制保存文件不退出,:

w(!

)file表示(强制)另存为file给出的文件名,不退出

:

rfile(read)读入file制定的文件内容插入到光标位置

注销快捷键:

ctrl+alt+backspace

gcc的使用:

gcc相当于C语言中的编译器,如果编译时不添加编译文件类型,则将默认生成“a.out”的文件,若要看程序的执行结果,则直接输入./a.out,或./file(file为文件名)但前提是该.c文件已是编译过的;

格式:

gcc[option]file

-c表只是编译不链接,生成目标文件“.o”

-S表只是编译不汇编,生成汇编代码

-E表只进行预编译,不做其他处理

-g表在可执行程序中包含标准调试信息

-ofile表把输出文件输出到file里

-Idir在头文件的搜索路径列表中添加dir目录

-Ldir表在库文件的索索路径列表中添加dir目录

-static表链接静态库

-llibrary表连接名为library的库文件

Makefile文件描述了软件包中文件之间的关系,提供更新每个文件的命令。

可执行文件靠目标文件来更新,目标文件靠编译源文件来更新。

(有点像shell)

在Makefile文件中目标文件和依赖文件之间用:

隔开,并以空格隔开;编译时变量前一定加${变量};clean:

中没有依赖文件,后面跟rm–f*.o(表示强制删除.o的文件);Makefile中,可使用续行号(\)将一个单独的命令行延续成几行,但要注意在续行号(\)后面不能跟任何字符(包括空格);

Makefile文件中$<表示后面跟变量为第一个依赖文件名;$@表示后面加变量为目标文件名;$^表示所有不重复的依赖文件,以空格分开;

gdb可以调试目标文件,在编译时一定要加上-g参数,表示可以用gdb来调试,若不加,则是没办法用gdb来调试。

file命令:

装入想要调试的可执行的文件

run命令:

执行当前被调试的程序

kill命令:

停止正在调试的应用程序

list命令:

列出正在调试的应用程序的源代码

break命令:

设置断点

watch命令:

设置监视点,监视表达式的变化

next命令:

下一行代码,不进入代码内部

print命令:

显示表达式的值

delete命令:

删除断点,指定一个一个断点号码,则删除制定断点,不指定参数则删除所有的断点

shell命令:

执行linuxshell命令

make命令:

不退出gdb而重新编译生成可执行文件

quit命令:

退出gdb

(在中嵌ppt的第十一课中)

问题:

在centos中compress(压缩指令,且压缩后文件后缀为*.Z的文件)指令不识别?

指令gzip(生成的是*.gz的文件)压缩后,不会解压?

程序和进程:

程序放在磁盘文件中的可执行文件,即编译过后的二进制代码。

进程:

程序的执行实例,也称为任务。

每个linux进程都有一个唯一的数字标识符,叫做进程ID,进程ID是一个非负整数;进程ID为1通常是init进程,该进程绝不会终止。

其他进程都是由Init进程派生出来的。

Linux的进程结构:

有三段:

代码段(程序运行的流程,即程序代码)、数据段(存放全局变量、静态变量、常数、动态数据分配空间)、堆栈段(存放基本的临时变量,子程序返回地址、子程序的参数以及程序的局部变量)

在程序运行中哪些变量存放在堆中,哪些存放在栈中?

回答:

全局变量、静态变量存放在堆中,如在C中的malloc申请的空间就放在堆中;子函数入口的临时变量,局部变量放在栈中。

驱动程序启动在内核空间中进行的,init进程在用户进程空间中进行

获取进程ID的相关函数:

Fork函数:

表示有当前进程再生成进程,新进程被称为子进程;该函数被调用一次,返回两次。

两次返回的区别是子进程的返回值是0,而父进程的返回值则是子进程的进程ID,大于0的

注:

上面的两个头文件都要有,才能正确调用fork函数;pid_t表示的返回的是整形值;

子进程创建的时候将父进程中的所有的信息(包括代码段、数据段、堆栈段以及上下接口)复制一份放到自己的空间中,但是父进程设置的锁,子进程不继承。

父进程、子进程的区别:

Fork的返回值;进程ID、不同的父进程ID;子进程的运行时间、调整时间、设置时间设置为0;父进程设置的锁,子进程不继承;子进程的未决告警被清除;子进程的未决信号设置为空集。

(Linux的时间精度可以精确到MS。

Fock函数的例程:

#include

#include

#include

#include

Intmain(void)

{

pid_tresult;

result=fork();

if(result==-1)

{

perror(“fork”);//perror()函数是封装过的函数,是显示错误信息的代码及出错原//因的,在linux中的perror()函数是专门打印差错的函数;

exit;

}

elseif(result==0)

{

printf(“Thereturnvalueis%d\ninchildprocess!

\nMyPIDis%d\n”,result,getpid());

}//打印了返回值即0,说明是在子进程当中,并显示了本进程的ID号

else

{

Printf(“Thereturnvalueis%d\ninfatherprocess!

\nMyPIDis%d\n”,result,getpid()”);

}//打印返回值即子进程的ID号,并且调用了函数显示了本进程的ID号

}

注:

在我的虚拟机中没办法编译该程序,编译出错,在虚拟机中是以test.sh编写的?

Vfork函数:

该函数是fork的扩展,该函数只是复制父进程中的变化了的变量值,并不是完全复制父进程中所有数据段和堆的数据,该函数的调用序列和返回值与fork相同,但两者语义不同。

在fork之后经常跟随着exec,作为替代,使用了写时复制(copy-on-write,COW)的技术。

这些区域由父、子进程共享,而且内核将它们的存取许可权改变为只读的。

如果有进程试图修改这些区域,则内核为有关部分,典型的是虚存系统中的“页”,做一个拷贝。

exec函数:

(是一个函数集)

注:

在linux中的程序的注释用C语言的标准方式,即/**/方式,虽然//方式不会出错,但是还是不要用。

Linux进程间通信(IPC):

目的:

数据传输、共享数据、通知事件、资源共享、进程控制

现在linux使用的进程间通信方式:

管道和有名管道(FIFO)、信号(signal)、消息队列、共享内存(必须将共享内容映射到共享空间之后才能共享内存)、信号量、套接字(socket)(主要运用于网络编程中);。

显示后台进程的指令为:

ps–e或ps-A|grepvsftpd,整句代码的含义为:

ps显示所有进程之后进行查询筛选一下看看vsftpd这个进程在不在

显示前台进程的指令为:

ps|grepvsftpd,其中的ps显示当前系统

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2