Linux基础

news2025/1/21 4:45:32

一、Linux发展历程

1.1、Linux前身-Unix

        1968年Multics 项目

        MIT|、Bell 实验室、美国通用电气有限公司走到了一起,致力于开发Multics项目。到后期由于开发进度不是很好,MIT 和Bell实验室相继离开这个项目的开发,最终导致项目搁浅。

        1970年 Unix诞生

        当时在开发Multics项目的时候,实验室中有一个开发成员Ken Thompson(汤姆森.肯 UNIX之父)开发了一 款游戏 (ravel space:遨游太空),因为两个实验室相继离开项目开发,导致这名开发人员没法玩游戏。后来他提议组织人员重新在Multics项目之上重新的开发,也就出现了1970 年的Unix。当时Unix操作系统是使用的汇编语言(机器语言)开发的。

        1973年用C语言重写 Unix

        因为汇编语言有一一个最大的局限性,对于计算机硬件过于依赖。导致移植性不好,所以后斯在1973年使用了C语言对其进行重新开发。

        1975年Bell 实验室允许大学使用Unix

        1975年Bell 实验室允许大学使用Unix操作系统用于教学作用,而不允许用于商业用途。

        1984年Richard Stallman(斯特曼)发起了开发自由软件运动,成立了自由软件基金会(Free Software Foundation)和GNU(GNU’s not Unix)项目,其主要目标是建立一套完整自由的可移植的类Unix操作系统。GNU的几个重要的系统:

                1、Emacs 代码编辑器工具

                2、GNU C(gcc)

                3、GNU C Library (glibc)

                4、bash shell

        1985年,为了避免GNU开发的自由软件被其他人用作专利软件,因此创建GPL(General Public License)版权声明;

        GPL(General Public License) 一个开源产品的协议,意思为在当前开源产品的基础上二次开发必须公开源码。

1.2、Linux 诞生

        Linux的开发作者,Linux之父, linus(李纳斯. 托瓦兹)。

        李纳斯当时学校使用的就是Unix 操作系统,他使用bash、gcc等工具写了一个内核程序,可以在386机器上运行,放到了学校为学生开放的网站上,原先他把文件命名写成了Linus's Unix,后期网络管理发现之后觉得这个名字不好,自己手动的将名字改成Linux.随后其他同学下载之后发现这个版本还是挺好用的,随后都把自己代码贡献给李纳斯。从此开始Linux的发展之路。

                1991年0.0.1版本

                1992年0.0.2 版本

                1994年1.0 版本

                2003年2.6 版本

        上述提及的版本号并不是分支版本,而是指linux的内核版本。

二、Linux系统特点

        1、免费且开源

        2、完全兼容POSIX 1.0标准

        3、多用户、多任务

        4、拥有良好的界面

        5、支持多种平台

        6、Windows属于:单用户、多任务,Linux属于:多用户、多任务。

三、Linux 分支

        现在比较有名的ubuntu、debian、 centos(Community Enterprise Operating System)、 redhat、 suse 等等 。

        1、Debian:Debian运行起来极其稳定,这使得它非常适合用于服务器。

        2、Gentoo:与Debian一样,Gentoo这款操作系统也包含数量众多的软件包。Gentoo并非以预编译的形式出现,而是每次需要针对每个系统进行编译。

        3、Ubuntu:Ubuntu是Debian的一款衍生版,侧重于它在这个市场的应用,在服务器、云计算、甚至一些运行Ubuntu Linux的移动设备上很常见。

        4、Damn Vulnerable Linux:易受攻击的Linux,根本不是一般意义上的优秀的Linux发行版,它的目的在于借机训练Linux管理员。

        5、红帽企业级Linux:这是第一款面向商业市场的Linux发行版。它有服务器版本,支持众多处理器架构。

        6、CentOS:CentOS是一款企业级Linux发行版,它使用红帽企业级Linux中的免费源代码重新构建而成。这款重构版完全去掉了注册商标以及Binary程序包方面一个非常细微的变化。

        7、Fedora:Fedora是红帽公司的一个测试平台,产品在成为企业级发行版之前,在该平台上进行开发和测试。Fedora同是一款非常好的发行版,有庞大的用户论坛,软件库中还有为数不少的软件包。Fedora同样使用YUM来管理软件包。

        8、Kali Linux:Kali Linux是Debian的一款衍生版。Kali旨在用于渗透测试。

        9、Arch:Arch是一款采用滚动发行方式的操作系统,只要安装一次就够了,每当发行了某个新版本,就可以升级发行版,无需重新安装。Pacman是Arch Linux的软件包管理器。Arch Linux既支持X86处理器架构,又支持X86_64架构,安装程序可以从光盘或U盘来运行。

        10、OpenSuse:OpenSuse这款Linux发行版是免费的,并不供商业用途使用,仍然供个人使用。OpenSuse的真正竞争对手是红帽企业级Linux。它使用Yast来管理软件包。有了Yast,使用和管理服务器应用程序就非常容易。

四、Linux系统架构

 

        Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。

        内核的接口是一个软件层,称之为系统调用(如上图中的阴影部分),通用库函数是建立在系统调用接口之上,应用程序可以自由的使用这两者。Shell是一种特殊的应用程序,它提供接口来运行其他的应用程序。广义上来说,操作系统是内核和所有其他的软件的集合,这些软件使得计算机能够发挥作用,并给予计算机以独有的特性。其他的软件包括系统工具,应用程序,shells,通用函数库等等。

4.1、系统调用

        为了方便调用内核,Linux将内核的功能接口制作成系统调用(system call)。系统调用看起来就像C语言的函数。你可以在程序中直接调用。Linux系统有两百多个这样的系统调用。用户不需要了解内核的复杂结构,就可以使用内核。系统调用是操作系统的最小功能单位。一个操作系统,以及基于操作系统的应用,都不可能实现超越系统调用的功能。

        在命令行中输入$man 2 syscalls可以查看所有的系统调用。你也可以通过man 2 read来查看系统调用。在这两个命令中的2都表示我们要在2类(系统调用类)中查询 (具体各个类是什么可以通过$man man看到)

        系统调用提供的功能非常基础,所以使用起来很麻烦。一个简单的给变量分配内存空间的操作,就需要动用多个系统调用。Linux定义一些库函数(library routine)来将系统调用组合成某些常用的功能。上面的分配内存的操作,可以定义成一个库函数(像malloc()这样的函数)。再比如说,在读取文件的时候,系统调用要求我们设置好所需要的缓冲。我可以使用Standard IO库中的读取函数。这个读取函数既负责设置缓冲,又负责使用读取的系统调用函数。使用库函数对于机器来说并没有效率上的优势,但可以把程序员从细节中解救出来。库函数就像是汉字的偏旁部首,它由笔画组成,但使用偏旁部首更容易组成字,比如“铁”。当然,你也完全可以不使用库函数,而直接调用系统函数,就像“人”字一样,不用偏旁部首。

4.2、Linux shell

        shell是一个特殊的应用。很多用户将它称为命令行 。shell是一个命令解释器(interpreter),当我们输入“ls -l”的时候,它将此字符串解释为

                1、在默认路径找到该文件(/bin/ls),

                2、执行该文件,并附带参数“-l”。

        Shell接着通过系统调用指挥内核,实现具体的重定向或者管道。在没有图形界面之前,shell充当了用户的界面,当用户要运行某些应用时,通过shell输入命令,来运行程序。shell是可编程的,它可以执行符合shell语法的文本。这样的文本叫做shell脚本(script)。可以在架构图中看到,shell下通系统调用,上通各种应用,同时还有许多自身的小工具可以使用。Shell脚本可以在寥寥数行中,实现复杂的功能。

  UNIX的一条哲学是让每个程序尽量独立的做好一个小的功能。而shell充当了这些小功能之间的“胶水”,让不同程序能够以一个清晰的接口(文本流)协同工作,从而增强各个程序的功能。这也是Linux老鸟鼓励新手多用shell,少用图形化界面的原因之一。

        目前主要有下列版本的shell。

                1、Bourne Shell:是贝尔实验室开发的。  

                2、BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell,大部分linux的发行套件使用的都是这种shell。

                3、Korn Shell:是对Bourne SHell的发展,在大部分内容上与Bourne Shell兼容。

                4、C Shell:是SUN公司Shell的BSD版本。

4.3、Linux文件系统

        Linux 系统能够支持的文件系统非常多,除 Linux 默认文件系统 Ext2、Ext3 和 Ext4 之外,还能支持 fat16、fat32、NTFS(需要重新编译内核)等 Windows 文件系统。也就是说,Linux 可以通过挂载的方式使用 Windows 文件系统中的数据。Linux 所能够支持的文件系统在 "/usr/src/kemels/当前系统版本/fs" 目录中(需要在安装时选择),该目录中的每个子目录都是一个可以识别的文件系统。

4.4、Linux内核

        Linux内核是世界上最大的开源项目之一,内核是与计算机硬件接口的易替换软件的最低级别。它负责将所有以“用户模式”运行的应用程序连接到物理硬件,并允许称为服务器的进程使用进程间通信(IPC)彼此获取信息。

        内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。如图:

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/40786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

接口测试用例设计方法方式和流程一文到底

目录 1、通用信息校验 1、URL校验 2、请求方法校验 3、请求头 4、接口鉴权 2、接口参数校验 1、参数的必填项校验 2、参数的选填项校验 3、参数长度校验 4、参数数据类型校验 5、参数的有效性校验 6、参数的唯一性校验 7、参数关联项校验 3、其他补充项 1、幂等…

Kafka必问面试题

一、说说你对kafka的理解 kafka本身是一个流式处理平台,同时也具有消息系统得能力,在我们得系统中更多得是把kafka作为一个消息队列系统来使用 而如果来介绍kafka,大致可以分为这几块: kafka集群元数据得管理,集群得…

【云原生 | Kubernetes 实战】04、k8s 名称空间和资源配额

目录 一、什么是命名空间? 二、namespace 应用场景 三、namespacs 使用案例 四、namespace 资源限额 一、什么是命名空间? Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间。 命名空间namespace…

《基础IO》

【一】C文件接口 我们使用C语言向文件写入东西的时候,基本上的套路都是先打开文件,然后调用C的文件接口,向文件中输入相应的数据,然后关闭文件。 a.size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream …

AlibabaP9整理出微服务笔记:Spring微服务不止架构和设计

微服务是一种架构风格,也是一种针对现代业务需求的软件开发方法。微服务并非发明出来的,确切地说是从之前的架构风格演进而来的。 但是深入介绍Spring Boot、Spring Cloud、Docker、 Mesos和Marathon掌握响应式微服务设计原则,轻松构建大规模…

每天五分钟机器学习:常用的聚类算法——k均值的运行原理和实现

本文重点 K-均值是聚类算法之一,该算法接受一个没有标签的数据集,然后将数据聚类成不同的簇。 k-均值运行原理 K-均值是一个迭代算法,假设我们想要将数据聚类成k个组,其方法为: 1.首先选择 k 个随机的点(样本点),称为聚类中心。 2.遍历数据集中的每一个数据,计算距离…

single sign on 与 cas

single sign on 与 cas cookie与session与token、普通登录、单点登录、三种常见实现方式、cas-server、cas-client 注:oauth2 是保护服务端资源,即受 oauth2 保护的资源能不能被客户端访问;cas 是保护用户信息,即该用户有没有权…

第五届传智杯【初赛】- F-二人的大富翁游戏

F-二人的大富翁游戏 题目预览 题目背景(推荐阅读 题目预览) 如果遇到提交失败,请多次刷新,多次提交,会有成功几率 作为大学生,莲子和梅莉有着比高中时更为闲暇的课余时光。在没有课的时候,她们喜欢玩大富翁这一游戏…

08.OpenWrt-连接wifi网络

08.OpenWrt-连接wifi网络 8.1 连接其他wifi热点上网 rootOpenWrt:/# cat /etc/config/wireless config wifi-device ‘radio0’ option type ‘mac80211’ option path ‘platform/10300000.wmac’ option channel ‘1’ option band ‘2g’ option htmode ‘HT20’ option …

NFIQ怎么使用?NFIQ2.0软件怎么操作来进行图片质量得分计算?NFIQ2.0支持什么图片格式

一、背景 前段时间准备写个指纹图像生成论文,结果需要用NFQI进行分析,参考的论文中都是结果,还是折线图,看着好厉害,但论文中没有说明具体咋出来的值。网上找了半天相关的,一个有用的信息都没有,好不容易找…

一文带你学透Java Servlet(建议收藏)

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:前端开发者…

【滤波跟踪】扩展卡尔曼滤波的无人机路径跟踪【含Matlab源码 2236期】

⛄一、EKF算法简介 扩展卡尔曼滤波是利用泰勒级数展开方法将非线性滤波问题转化成近似的线性滤波问题,利用线性滤波的理论求解非线性滤波问题的次优滤波算法。其系统的状态方程和量测方程分别如式(1)、式(2)所示: 式中,X(k)为n维的随机状态向量序列,Z(k)为n维的随机量测向量序…

【图像处理】基于图像聚类的无监督图像排序问题(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

推荐算法高级案例-通过WideDeep算法进行特征组合的商品推荐详细教程 代码+数据

案例知识点 推荐系统任务描述:通过用户的历史行为(比如浏览记录、购买记录等等)准确的预测出用户未来的行为;好的推荐系统不仅如此,而且能够拓展用户的视野,帮助他们发现可能感兴趣的却不容易发现的item;同时将埋没在长尾中的好商品推荐给可能感兴趣的用户。 方法概述:…

R语言与RStudio的下载与安装方法

本文介绍R语言及其集成开发环境RStudio的下载、安装方法。 R语言是一个属于GNU操作系统的开源软件,在数据统计与分析、可视化等方面具有优秀的表现;而RStudio则是R语言的集成开发环境(IDE),可以帮助我们更好地编辑、调…

《PyTorch深度学习实战》学习小结

前言 PyTorch是Facebook发布的一款非常具有个性的深度学习框架,它和Tensorflow,Keras,Theano等其他深度学习框架都不同,它是动态计算图模式,其应用模型支持在运行过程中根据运行参数动态改变,而其他几种框架…

【Mysql】内置函数

文章目录内置函数日期函数字符串函数数学函数其他函数内置函数 内置函数一般放在SQL语句里帮助我们执行一些逻辑. 日期函数 函数名称描述current date()获取当前日期current time()获取当前时间current_timestamp()获取当前时间戳date(datetime)返回 datetime 参数的日期部分…

Unity演示Leetcode开香槟过程

文章目录Unity演示Leetcode开香槟过程示意图一:示意图二(速度变为上图的5倍)主要步骤与难点C#脚本代码:香槟杯子液体页面变化以及杯子边缘的绘画Shader代码杯子边缘液体流出的效果的Shader代码:Unity演示Leetcode开香槟…

shell中的printf实践:美颜的九九乘法表

一 简介 Linux系统中除了echo命令可以输出信息,还可以使用printf命令实现相同的效果。功能描述:printf命令可以格式化输出数据。printf命令的语法格式如下。 printf [格式] 参数 常用的格式字符串及功能描述下表: 应用案例: 输出…

配置anaconda环境变量

conda环境变量的配置配置环境变量找到anaconda安装位置打开环境变量配置设置输入python命令跳入商店问题总结配置环境变量 找到anaconda安装位置 首先下载好conda环境,例如我下载在D盘 打开环境变量配置设置 可以按winS进入搜索框,输入环境变量&…