data/method/一些思考/工作材料/01—Linux简介.txt

244 lines
22 KiB
Plaintext
Raw Normal View History

2024-01-29 10:44:43 +08:00
一、Linux发展简史
1、什么是嵌入式操作系统
嵌入式操作系统Embedded Operating System简称EOS嵌入式系统是以应用为中心以计算机技术为基础并且软、硬件可裁剪适用于对功能、可靠性、成本、体积、功耗有严格要求的专用性计算机系统。
嵌入式操作系统是一种用途广泛的系统软件,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。
不同于以Windows为代表的个人PC操作系统以Linux为代表的嵌入式操作系统具有以下特性
1.专用性:
嵌入式操作系统的个性化很强,其中的软件系统与硬件系统结合非常紧密,一般要针对特定的硬件进行系统开发移植,即使同一品牌、同一系列的产品也需要根据系统硬件的变化做出修改。
2.可裁剪:
嵌入式操作系统不要求其功能设计上过于复杂。由于嵌入式系统一般针对小型电子设备,系统资源有限,因此该产品非必要的功能需要尽可能的删减。
3.高效可靠:
高实时性是嵌入式操作系统的基本要求,而且软件代码也要求保证高质量与高可靠性。
4.应用广泛
5.需要开发工具和环境:
嵌入式系统开发需要专用的开发工具与环境。由于其本身不具备自主开发能力,即使设计完成后用户通常也不能对程序某功能进行修改,必须借助一套专用的开发工具与环境才能进行开发。开发阶段有“主机”和“目标机”的概念,主机用于程序开发,目标机作为最后的执行机。开发阶段需要交替结合进行。
常见的嵌入式操作系统LinuxWindows CEVxWorksSymbianAndroidMeegochromeOS等
2、Linux系统简介
1一切要从UNIX系统讲起
1969年AT&T公司美国电话电报公司的贝尔实验室与MIT合作开发了UNIX操作系统旨在开发一个用于大型、并行、多用户的操作系统。最早由Ken Thompson、Dennis Ritchie同时也是C语言创始人和Douglas McIlroy三人负责研发。
1971年Ken Thompson向学院申请了一台PDP-11/24机器只有24K内存与500K磁盘第一版的UNIX系统就诞生在这台电脑上。同时著名的fork()系统调用(开启多进程)也是在这一时间段出现的。
到了1973年Ken Thompson与Dennis Ritchie深感使用汇编语言编写系统移植太过头疼因此他们想采取高级编程语言完成UNIX系统的第三版。一开始他们试图使用Fortran但是失败了后来Dennis Ritchie整合了BCPL语言形成B语言然后在B语言的基础上进行大幅度的修改这就是大名鼎鼎的C语言。于是Dennis Ritchie成功的使用C语言完成了UNIX第三版内核的开发。而C语言与UNIX系统的完美连体很快就成为了世界的主导。
2UNIX系统版本内讧战争
20世纪70年代AT&T开始注意到UNIX系统所带来的商业价值。公司的律师开始着手保护UNIX系统并让其成为了商业机密。从1979年的UNIXv7版本开始UNIX禁止大学使用UNIX源码包括在授课过程中学习与研究。1980年UNIX分成了两个版本线一个是Berkeley的BSD UNIX版本另一个是AT&T的UNIX版本。竞争最终引发了UNIX的战争。
1982年Joy创建了SUN公司并提供了SunOS系统而随后几年AT&T则发布了UNIX System V的第一版。
3Linux的横空出世
林纳斯·本纳第克特·托瓦兹Linus Benedict Torvalds, 1969年~ 出生于芬兰赫尔辛基市著名的电脑程序员、黑客。在《时代》周刊根据读者投票评选出的二十世纪100位最重要人物中林纳斯居然排到了第15位而从20世纪的最后几年就开始霸占全球首富称号的盖茨不过才是第17位。
1991年4月Linus为了让自己寝室内的电脑运行与实验室的电脑一样的系统开始研究minixUnix系统的一个精简版系统。
1991年的10月5日林纳斯·托瓦兹在comp.os.minix新闻组上发布消息正式向外宣布Linux内核的诞生Freeminix-like kernel sources for 386-AT
1993年大约有100余名程序员参与了Linux内核代码编写/修改工作其中核心组由5人组成此时Linux 0.99的代码大约有十万行用户大约有10万左右。
1994年3月Linux1.0发布代码量17万行采用GPL协议。
3、GNU与GPL
1GNU
GNU的英文全称是"GNU is Not Unix"递归缩写程序员的幽默又称革奴计划是由Richard Stallman在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统。由于GNU在英文中原意为非洲牛羚因此GNU计划的图标就是一个牛羚。
GNU计划下的著名软件有Linux系统、gcc编译器、make工程管理器、OpenOffice办公等
2GPL
GNU计划认为任何软件都应当以自由软件发布。要想让一款软件成为“自由软件”必须使用自由软件许可证来发布。通常使用GPL或与GPL兼容的许可证发布。
GPLGNU General Public LicenseGNU通用公共许可证。GPL对GNU下的软件有以下要求
1.它要求软件以源代码的形式发布,并规定任何用户能够以源代码的形式将软件复制或发布给别的用户。
2.如果用户的软件使用了受GPL保护的任何软件的一部分那么该软件就继承了GPL软件并因此而成为GPL 软件,也就是说必须随应用程序一起发布源代码。
3.GPL并不排斥对自由软件进行商业性质的包装和发行也不限制在自由软件的基础上打包发行其他非自由软件。
4、脱颖而出的Linux系统——Ubuntu
Ubuntu中译“乌班图”是一个以桌面应用程序为主的Linux系统其名称Ubuntu来自非洲南部祖鲁语的"Ubuntu"一词,意为“人性”“人道待人”“我的存在是因为大家存在”,是非洲的一种传统价值观,类似中国的“仁爱”“众生平等”。
Ubuntu由马克·舍特尔沃斯创立其首个版本—4.10发布于2004年10月20日它以Debian为开发蓝本。与Debian稳健的升级策略不同Ubuntu每六个月便会发布一个新版其中每年4月发布的为稳定版10月发布的为测试版不稳定版。有些带有LTS字样意为长期支持版。
2014年2月20日Ubuntu操作系统正式登陆魅族MX3国际版。
二、Linux体系结构
Linux系统大致分为Linux内核、Shell、文件系统、应用程序4大部分
//见附图1
1、内核
内核是操作系统的核心,具有一个操作系统最基本的功能,它负责管理系统的进程、内存、设备驱动、文件和网络系统,直接决定系统的性能与稳定性。
Linux系统内核大概可分为内存管理部分、进程管理部分、设备驱动管理部分、文件系统部分和网络管理部分等。
//见附图2
1.系统调用接口System Call Interface简称SCI系统调用提供了从用户空间到内核的函数调用。
2.进程管理Process Management主要用于处理进程/线程虚拟化空间、创建、杀死、活动进程间资源共享等需求。
3.内存管理Memory Management内核负责管理可用内存的方式以及物理和虚拟映射所使用的硬件机制。
4.虚拟文件系统Virtual File System简称VFS虚拟文件系统是Linux内核中非常重要的组成部分它提供了一个通用接口对象隔离了系统调用接口与内核支持的文件系统在二者之间提供了一个交换层这样可以屏蔽不同文件系统中对不同文件读写操作的差异简化程序开发。
5.网络堆栈Network Stack网络系统的分层体系结构例如传输控制协议TCP/UDP、网络协议Internet Protocol简称IP等。
6.设备驱动Device Drivers提供设备驱动程序用于运转特定的硬件设备。
7.依赖体系结构代码ArchLinux在运行时虽然采用独立的体系结构但是有些元素必须考虑特定体系结构才能正常操作并提高效率。arch子目录内定义了内核源代码中依赖于体系结构的部分。例如对于典型的桌面操作系统使用i386目录。
Linux内核用于控制进程、输入与输出、文件系统操作、内存管理等并且Linux内核支持多用户、多任务模式。
/**********Linux版本号***********/
查看当前计算机版本信息uname -a
Linux的版本号有两种版本
第一种由三个数字组成r.x.y
r目前发布的内核主版本
x偶数表示稳定版奇数表示测试版
y错误补丁修补次数
主版本号在内核结构有较大变化时才会变更。
例如2009年发布的2.6.27版表示主版本为Linux2稳定版修订了27次
第二种major.minor.patch-build.desc
1.major主版本号
2.minor次版本号新增功能时会发生变化偶数表示稳定版奇数表示测试版
3.patch对次版本的修订次数
4.build表示编译或构建次数每次编译可能对少量程序做优化修改但一般没有大的功能性变化
5.desc描述当前版本的信息。例如一些内核版本中有SMP表示多对称处理器Symmetric MultiProcessing
Linux版本号简史
0.02:1991年10月5日Linus Torvalds将这个版本内核代码发布到了Minix新闻组很快得到了反应。Linus在其他热心支持者的帮助下推出了第一个稳定工作版。
0.11:1991年12月8日发布在Internet上已经是可以正常运行的内核版本。
0.95:1992年3月8日加入了虚拟文件系统
1.0:1994年3月14日Linux核心开发团队正式组建Linux用于也越来越多
2.0:1996年2月9日
2.6:2003年12月17日与之前的相比首次支持多处理器运算和64位计算支持高效率处理本机POSIX的线程库NPTL改进了性能、安全、驱动程序等诸多方面。
目前最新的内核版本是4.10.2和4.11-rc2。有关不同内核版本信息与下载可以去Linux内核官网https://www.kernel.org/查看更多信息。
/**********Linux版本号end********/
2、Shell
Shell中文翻译为“壳”为了区别于Kernel“核”是Linux内的一个命令行解释器它为使用者提供使用界面用户在Shell内输入指令Shell接收用户的指令然后调用相关程序或指令。
另一方面Shell又是一种程序设计语言。作为一门解释性语言提供各种变量、参数、循环与分支等。
Shell基本上可以分为两大类
1图形界面Shell例如Gnome等
2命令行式Shell例如Bourne Shell最早的Shell、bash、csh以及Windows系统的cmd.exe等
有关Shell的具体介绍我们将在后续课程中讲解。
3、其他操作系统组件
Linux还包括图形用户界面GUI、应用程序管理、编程工具例如GCC、Java eclipse等、配置服务器等组件。这里就不一一介绍。
三、Vim简介
Linux系统内支持多种文本编辑器常用的有gedit、OpenOffice、emacs等但是使用最为广泛的文本编辑器还是Vim
Vim是Linux系统下一个功能强大、高度可定制的文本编辑器它基于VI同时又增加了许多新的特性。Vim与Emacs并列为类Unix系统用户最喜欢的文本编辑器。
Vim的设计理念是“命令组合”。例如指令"2dd"其中2代表重复两次第一个d代表删除第二个d代表当前行。另外vim的许多快捷键与正则表达式类似^ $等),方便记忆。
由于程序员在写代码的时候双手需要时刻停留在键盘上因此Vim专门针对程序员进行了优化例如分割视窗、多级撤销、定位代码、控制光标等操作这样程序员的双手就无需离开键盘去点击鼠标。而且Vim无需使用图形化界面这也就意味着对于某些极端情况例如图形桌面系统全面崩溃等Vim是唯一一种可靠的编辑器。
//当然还有很多人习惯于可视化的编辑界面习惯于使用鼠标操作对于这些人来说使用Vim反而效率低下他们更倾向于诸如Notepad++等文本编辑器以及VS等IDE开发环境。
1、Vim指令——开始编辑
Vim有三种模式命令模式、插入模式、底行模式。进入Vim的时候默认为命令模式在这个模式下能对文本进行命令操作但是无法输入文本。若想输入文本需要进入到插入模式。从命令模式进入插入模式有以下几种方式虽然都是进入插入模式但是有所区别主要区别在于进入插入模式后的光标位置使用的时候要选取合适的进入插入模式的方式。
从插入模式退出回到命令模式按键ESC
新增append简写为a
a从光标所在位置后面开始新增
A从光标所在行最后的地方开始新增
插入insert简写为i
i从光标所在位置前面开始插入
I从光标行所在的第一个非空白字符前面开始插入
开始open简写为o
o在光标所在行的下一行新增一行并开始插入
O在光标所在行的上一行新增一行并开始插入
2、Vim指令——删除与修改
删除字符
x删除光标所在字符相当于delete
X删除光标前面的字符相当于backspace
s删除光标所在字符并进入插入模式
S删除光标所在行并进入插入模式
删除多个字符/行
dw删除光标所在单词直至词尾
dd删除光标所在行
dj删除光标所在行与下一行
cw或ce删除光标所在单词在光标后的字符并进入插入模式
cb删除光标所在单词在光标前的字符并进入插入模式
cc删除当前行并进入插入模式
3、Vim指令——保存与退出
:q文件未修改不保存退出
:q!:文件修改,不保存强制退出
:wq文件修改保存退出
:x等价于:wq
:w存盘
:w 文件名:存入文件名的文件中
:w! 文件名:强制存入文件名的文件中
4、Vim指令——控制光标移动
b移动到当前单词开始
e移动到当前单词结尾
w移动到下一个单词
h向前移动
j向下移动
k向上移动
l向后移动
5、Vim指令——拷贝与粘贴
yw复制光标所在单词在光标后的字符至剪贴板
yy复制当前行至剪贴板
p将剪贴板内容粘贴在光标后
P将剪贴板内容粘贴在光标前
6、Vim指令——其他指令
u撤销操作
/关键字查找关键字按n查看下一个
.(小数点符号):重复你的上一个指令
有关Vim的指令还有很多时间有限不再介绍更多。有兴趣的同学可以查阅相关资料。
四、Linux系统软件包管理机制
最初的Linux系统没有合理的软件管理机制应用程序开发者将二进制程序直接发送给用户用户再逐一自行安装。这样做十分不便。
Debian系统首次提出了“软件包”的管理机制——deb软件包。deb软件包将应用程序的二进制文件、配置文件、帮助界面man等其他与软件相关的文件合并打包在一个文件内用户使用软件包就可以直接完成获取、安装、卸载、查询、更新等系列操作。随后Redhat系统基于deb的概念也推出了自己的软件包管理机制——rpm软件包。
随着Linux系统的不断发展壮大软件与软件之间的依赖关系也愈发变得错综复杂用户在安装软件的时候十分麻烦。这时Debian系统又推出了软件包管理器——APT。APT可以自动检测软件包间的依赖关系并且可以利用internet自动获取软件包并安装。APT的出现使得deb软件包被广泛地使用。由于Ubuntu系统是基于Debian系统研发的因此Ubuntu系统也采用deb软件包管理机制。
在Ubuntu系统内有两种deb软件包分别为二进制软件包常见为.deb后缀和源码包常见.dsc后缀。可以使用file命令查看软件包的类型。
1、软件包的命名规则
软件包命名遵循以下规则:
Filename_Version-Reversion_Architecture.deb
其中:
Filename软件包名称
Version版本信息
Reversion修订版本信息
Architecture体系架构
例如有软件g++软件包名为g++_4.1.2-9ubuntu2_i386.deb
g++:软件包名
4.1.2软件版本为4.1.2
9ubuntu2修订版本信息
i386基于x86架构
2、dpkg与APT
1dpkg
在Ubuntu系统中最常用的两个管理软件包的工具是dpkg和APT。
dpkg是最早的deb软件包管理工具他在Debian提出软件包管理机制之后就诞生了。使用dpkg可以实现软件包的安装、编译、卸载、打包等操作。由于当时系统与Internet的限制dpkg的功能十分有限它没有考虑到未来软件包间错综复杂的依赖关系以及如何帮助用户从网络上获取软件包的问题因此我们就发明了APT工具。
dpkg相关命令
dpkg -i 软件包名安装一个在本地文件系统上的deb软件包
dpkg -r 软件包名:移除一个已安装的软件包
dpkg -P 软件包名:移除已安装的软件包以及配置文件
dpkg -L 软件包名:列出安装软件包的清单
dpkg -s 软件包名:显示软件包安装状态
2APTAdvanced Packaging Tool
由于dpkg有种种弊端因此人们发明了APT来管理软件包。APT系列工具可能是deb软件包管理工具中功能最强大的工具。APT提供软件包的安装、更新、查询、卸载、升级以及检查依赖关系等一系列操作且无需用于操作自动完成。
Ubuntu采用集中式仓库机制管理软件。将每种软件分门别类地存放在不同的软件仓库中进行管理。然后将软件仓库存放在许许多多的镜像服务器内供用户获取。
由于每一位用户所处的网络环境不同因此不可能随意访问所有镜像服务器。为了选择可访问的服务器在Ubuntu系统中文件/etc/apt/sources.list用于配置最适合访问的镜像服务器节点地址。但即便如此配置文件只是告知Ubuntu系统可以访问哪些镜像服务器地址但是该服务器上有什么地址却并不清楚。因此在每个镜像服务器上都有一个软件资源列表清单索引文件以便用户机查询。同时借由索引文件APT还可以自动检测软件包之间的依赖关系大大简化了用户安装软件的流程。因此APT成为了Ubuntu系统内最受欢迎的软件包管理工具。
APT的软件包获取地址文件在/etc/apt/sources.list中这个文件本质上就是一个普通的文本文件在管理员授权下可以用任意文本编辑器编辑。
/***************************
!!!注意!!!(这是一个悲伤的故事)
不要擅自修改该文件内容,即使想修改也请事先做好备份工作
修改完毕后保存文件后执行apt-get update命令更新配置文件
***************************/
APT提供一组命令供用户选择以下是一些常见的命令
//注意大多数的apt命令都需要管理员权限运行因此使用时常常与sudo一起使用
apt-get最常用用于管理软件包包括安装、更新、卸载等操作
apt-cache查询软件包信息
apt-cdrom安装CD-ROM内软件包
……
在这些命令中我们最常用的是apt-get。apt-get本身并没有软件包管理功能而是提供了一个软件包管理平台在该平台上使用子命令来完成具体的操作任务。
1apt-get命令格式
apt-get 子命令 [可选指令] 软件包名
子命令:
update下载更新软件包列表信息
upgrade升级软件包到最新版本
install下载软件包并安装
remove卸载软件包
autoremove自动卸载不满足依赖关系的软件包
source下载源码
clean删除缓存内已下载的包
check检查系统中依赖关系的完整性
可选指令:
-d仅下载而不解压安装
-f修复系统中存在的软件包依赖性问题
--purge与remove一起使用完全卸载软件包
--reinstall与install一起使用重新安装该软件包
-b下载源码包后编译生成相应的软件包
-y对所有询问都做yes回答apt在执行时不再进行任何提示
-h获取帮助信息
-v获取apt-get版本号
当我们执行apt-get install命令后APT就可以自动完成整个安装过程而无需考虑软件包的版本、优先级、依赖关系等。
apt-get install安装软件大致分为4步
1.扫描本地存放的列表,寻找镜像服务器上的软件包
2.进行软件包依赖性检查,找到支持该软件正常运行的所有软件包
3.从镜像服务器中下载相关软件包
4.安装软件并配置相关文件
练习使用APT安装以下软件然后运行软件并查看效果
1.sl小火车
2.cmatrix弹幕
3.xchatUbuntu聊天室
4.cowsay 或 xcowsay老牛说
5.fortune-zh诗词
2apt-cache命令格式
apt-cache 子命令 [可选指令] 软件包名
子命令:
showpkg获取二进制软件包的常规描述信息
showsrc获取源码包的常规描述信息
show获取二进制软件包的详细描述信息
stats获取统计信息
dump获取软件源内所有软件包的简要信息
search检索软件包
depends获取该软件包的依赖信息
rdepends获取所有依赖于该软件包的软件包
pkgnames列出所有已安装的软件包的名称
policy获取软件包当前的安装状态
练习查看xchat这个软件的相关信息
答案sudo apt-cache showpkg xchat