Linux读书心得与笔记.docx
- 文档编号:595926
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:98
- 大小:8.82MB
Linux读书心得与笔记.docx
《Linux读书心得与笔记.docx》由会员分享,可在线阅读,更多相关《Linux读书心得与笔记.docx(98页珍藏版)》请在冰点文库上搜索。
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显示当前系统
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 读书 心得 笔记