6、操作系统:操作系统也是一堆应用程序,管理计算机的所有活动以及驱动中的硬件。
操作系统至少包含如下核心功能:
1)系统呼叫接口(System call interface):方便开发者与核心进行沟通,提供接口供开发者使用
2)程序管理(Process control):CPU支持多任务运算,核心必须能控制这些工作,有效分配CPU资源,安排程序工作顺序
3)内存管理(Memory managerment):内存非常重要,所有代码与数据必须先进入内存中,才能供CPU使用
4)文件管理系统(Filesystem managerment):输入输出,文件格式等,如果不支持某个文件系统,那么你将无法使用
5)装置驱动(Device drivers):是硬件管理的核心之一,没有驱动程序,核心就无法让硬件工作。
第一章 Linux是什么与如何学习
1、Linux与Unix历史
(1)现代操作系统雏形:1969年以前,电脑主要用于军事、高科技,一般人难以接触,而且架构设计难用、接口复杂、周期长;程序设计者通过读卡纸上面打印,输入主机进行计算;后来操作系统有所改良,可以键盘输入,但是毕竟主机只有一部,大家还是要等待;1960年代初,麻省理工发明了兼容分时系统(Compatible Time-Sharing System),它可以通过多个终端(terminal)来进入主机,来利用主机资源进行计算。这种兼容分时系统可以成为现代操作系统的鼻祖,在当时属于划时代的技术!
(2)Multics计划失败:兼容分时系统可以运行不到30个终端,1965年以前后,由贝尔实验(Bell)、麻省理工(MIT)、通用电气(GE)共同发起Multics计划——目标让大型主机可以提供300个以上终端。1969年以后该计划落后,资金短缺,Bell实验室退出该计划;原本参与Multics计划的人从中获取一些电子,Ken Thompson是其中一位。
(3)简化版Unics诞生:Thompson有一台PDP-7主机,他希望针对这部主机开发一个操作系统核心程序;非常巧合的1969年八月份,趁着Thompson的妻儿去美国西部弹琴,他用一个月的时间用汇编语言编写了核心程序,以及一个小小的文件系统,这个系统就是Unix的原型;他对Multics庞大的复杂系统做了不少简化,于是同事们戏称他这个系统为——Unics。Thompson的系统有两个重要的概念:一所有程序、系统装置都是文件;二不管构建编辑器还是附属文件,所有文件只有一个目的,且要有效完成目标;这些概念对后来的Linux发展有着重要的影响。
(4)Unics的发展(C语言重写):因为Thompson的系统太好用,在贝尔实验室内部广为流传;因为汇编语言无法跨平台,后来Thompson与Ritchie合作以B高阶语言重写,但是B语言编译核心效果不好,后来Dennis Ritchie将B语言重新改写成C语言,再以C语言重写Unics,至此最后正式发行Unix版本。贝尔实验室属于AT&T,它忙于商业活动,对Unix不支持不排斥,Unix当时并不被一般人所接受,但是是学术研究者的福音。因为是C语言与硬件性相关不大,因为Unix很容易移植。
(5)Unix各个版本的发展:1977年,伯克利大学的Bill Joy在Unix的源码基础上改成适合自己机器的版本,这个版本命名为Berkeley Software Distribution(BSD),它是Unix的一个很重要的分支;Bill Joy后来Sun公司的创办者;后来安装在x86上的FreeBSD即是从BSD改版而来;由于AT&T的开发态度,很多商业公司开发了自家的Unix版本,如AT&T自家的System V,IBM的 AIX等。因为当时内业协议的概念,自家的操作系统虽然核心架构虽然大同小异,但是核心(Kernel)必须与硬件结合,因此各家操作系统,只能在自家的硬件上运行。1979年System V第七个版本以后有所改善,另一大特色支持x86个人计算机。
(6)开源Minix诞生:AT&T处于商业考虑,打算收回Unix版权,特别在第七版中提到“不可对学生提供源码”的限制;Andrew Tanenbaum教授为了教授学生认识Unix,完全不看Unix核心源码(为了避免版本)的基础上,在1984年编写了Minix这个Unix Like的核心程序,他完全兼容Unix,1986年完成;作为老师主要用于教学,所以对Minix点到为止,只提供源码,没有商业运作。
(7)GNU计划发展:Richard Stallman1984年发起GUN(GNU is Not Unix的缩写)计划,目标建立一个自由、开发的Unix操作系统(Free Unix);由于开发操作系统难度太大,Stallman就先着手开发Unix能运行的软件,并开源免费;当时的软件都需要编译,他决定开发一个C语言编译程序GNU C Compiler(gcc),当时C语言版本多,但是都是专利,如果他写的C编译器足够优秀可以让GNU计划出现在大众面前;刚开始并不顺利,他就将原来开发的Emacs程序编辑器移植到Unix上,可以检验语法错误,当时来说太棒了;后来成立了自由软件基金会(FSF,Free Software Foundation);最终完成了GCC,同时还撰写了很多函数库(GUN C library),以及后来被操作系统使用的基本接口BASH shell,这些豆子1990年左右完成。
GNU发展的几个重要软件:Emacs、GNU C(GCC)、GNU C Library(glibc)、Bash shell;很多开发者利用这些工具壮大了自由软件;但是GNU最初的建立一个自由的Unix操作系统的构想并没有实现。
(8)Linux正式诞生:1991年,芬兰大学生Linus Torvalds 在BBS发帖,宣称他以bash、gcc、等GNU软件的工具写了一个小的核心程序,该核心程序是个玩具,不像GUN那么专业,不过核心程序可以在Intel的386极其上面运行;从此开始了Linux的不平凡之路。
2、Torvalds 的Linux发展
(1)Torvalds进入赫尔辛基大学,有机会接触到只有16个终端的Unix操作系统,他在思考为何不着急搞一部Unix来玩;后来他知道有一个类似Unix的系统,并且与Unix兼容,可以泡在Intel 386机器上,这就是Tanenbaum的Minix,他还可以获取到Minix的源码;幸运的是他有机会贷款买了一部Intel的386来玩,由于以往接触的Unix都是多任务操作,因此他对386硬件也进行了测试,得到的结果是支持多任务操作。
(2)在Minix上Torvalds发现虽然它很棒,但是创造者教授却不愿意增强功能,因此他决定自己改写核心程序;这时候他需要能够进行工作的环境,以及可以将源码编译成可执行文件的编译程序;这时候GNU假话提供的bash工作环境以及gcc编译程序等起作用了,让Torvalds可以专心撰写核心程序;Torvalds让GNU的自由软件核心程序与386紧紧结合在一起;他的这个小小的操作放在BBS上,他只是觉得好玩,另外他希望别人给更多的建议和回馈来发展这个操作系统;因为当时他防止核心的那个FTP网站目录为:Linux,所以大家便称这个核心为Linux;此时的Linux就是那个kernel。
(3)为了让自己的Linux能兼容Unix,他参考标准的POSIX规范对Linux进行改造,这使Linux与Unix可以共享软件;大量的志愿开发者加入到项目中来,大家组成一个不见面的虚拟团队,一起来帮助Torvalds改善Linux。
(4)早期的Linux由Torvalds针对386写的,跟386硬件有很大相关性,所以早期Linux不具备移植性;因为开源,可以修改代码去适应环境,1994年以后Linux被开发到很多硬件上面去了,除了支持x86,还支持IBM、HP等公司的硬件,以及后来的小型单反计算机、基于ARM架构的智能手机(Android)、平板灯,都是Linux的核心。
3、Linux的版本号,Torvalds根据核心的发展分类两大类不同核心编号:一发展中版本(development)主、次版本为奇数,这种版本是为了测试与发展新功能;新的功能会增加到这种版本中;测试没有问题后放入下一个稳定版本中;二是稳定版(stable)主、次版本为偶数,核心功能成熟后加入此版本,一般家庭、企业版本用稳定的Linux平台。
4、区分Linux版本与Linux distribution版本,前者2015年核心(kernel)只到4.0,后者发行版一般指第三方开发的Linux操作系统;如CentOS 7.x,Ubuntu 14.x等,是第三方开发商自己命名的Linux的版本号。
5、Linux的出现让GUN计划有了自己自己的核心程序,GNU软件不必只能跑在Unix上了;Linux用了很多GNU软件,因此Stallman认为Linux全名应该叫——GNU/Linux;后续很多自由软件都以Linux为开发测试平台。
6、虽然Torvalds负责开发的Linux备Kernel与Kernel提供的功能,以及上边运行的各种软件,已经是一个相当完整的操作系统了;不过这种操作系统很难,早期由黑客工程师维护,没有考虑一般使用者的能力;后来很多商业公司将Linux kernel(含tools)与各种软件整合起来,再加上自己具有创意的工具程序,并形成用户可以直接安装的Linux系统;这个“Kernel+Software+Tools+可完全安装的程序”,我们称之为Linux distribution,中文翻译Linux发布商套件。
7、为了让Linux distribution差异不至于太大,这些开发商依据Linux Standard Base规范来开发,以及目录架构的File system Hierarchy Standard标准规范,因此大家其实差异不大.
8、Linux distribution 主要分为两大类,一种以RPM方式安装软件的系统,包括Red Hat、Fedora、SUSE、CentOS等;一种是使用Debian的dpkg方式安装软件的系统,包括Debian、Ubuntu、B2D等。另外按性质分为社群版(Fedora、Ubuntu、OpenSUSE,建议这些可以作为个人桌面计算机);商业版(Red Hat、SUSE,这些用在服务器上);社区版会加入新的功能,会有一些bug,商业版则是听过一段时间测试磨合,才将稳定版软件放进去。CentOS是抓RHEL的源码来重新编写的Linux distribution,所以号称兼容REHL。
9、Linux的应用角色
(1)企业环境应用:网络服务器、关键人物(数据库、重要软件等)、学术机构高效运算任务
为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!
这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。
本份面试集锦涵盖了
- 174 道运维工程师面试题
- 128道k8s面试题
- 108道shell脚本面试题
- 200道Linux面试题
- 51道docker面试题
- 35道Jenkis面试题
- 78道MongoDB面试题
- 17道ansible面试题
- 60道dubbo面试题
- 53道kafka面试
- 18道mysql面试题
- 40道nginx面试题
- 77道redis面试题
- 28道zookeeper
总计 1000+ 道面试题, 内容 又全含金量又高
- 174道运维工程师面试题
1、什么是运维?
2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
3、现在给你三百台服务器,你怎么对他们进行管理?
4、简述raid0 raid1raid5二种工作模式的工作原理及特点
5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
7、Tomcat和Resin有什么区别,工作中你怎么选择?
8、什么是中间件?什么是jdk?
9、讲述一下Tomcat8005、8009、8080三个端口的含义?
10、什么叫CDN?
11、什么叫网站灰度发布?
12、简述DNS进行域名解析的过程?
13、RabbitMQ是什么东西?
14、讲一下Keepalived的工作原理?
15、讲述一下LVS三种模式的工作过程?
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
17、如何重置mysql root密码?
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!