linux

linux 核心概念详解

Posted by leone on 2017-04-18

linux

linux 简介

什么是linux

Linux是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布,在加上用户空间的应用程序之后,成为Linux操作系统。Linux也是自由软件和开放源代码软件发展中最著名的例子。只要遵循GNU通用公共许可证(GPL),任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。大多数Linux系统还包括像提供GUI的X Window之类的程序。除了一部分专家之外,大多数人都是直接使用Linux发行版,而不是自己选择每一样组件或自行设置。

Linux严格来说是单指操作系统的内核,因操作系统中包含了许多用户图形接口和其他实用工具。如今Linux常用来指基于Linux的完整操作系统,内核则改以Linux内核称之。由于这些支持用户空间的系统工具和库主要由理查德·斯托曼于1983年发起的GNU计划提供,自由软件基金会提议将其组合系统命名为GNU/Linux,但Linux不属于GNU计划,这个名称并没有得到社群的一致认同。

Linux最初是作为支持英特尔x86架构的个人计算机的一个自由操作系统。当前Linux已经被移植到更多的计算机硬件平台,远远超出其他任何操作系统。Linux可以运行在服务器和其他大型平台之上,如大型计算机和超级计算机。世界上500个最快的超级计算机90%以上运行Linux发行版或变种,包括最快的前10名超级计算机运行的都是基于Linux内核的操作系统。Linux也广泛应用在嵌入式系统上,如手机(Mobile Phone)、平板电脑(Tablet)、路由器(Router)、电视(TV)和电子游戏机等。在移动设备上广泛使用的Android操作系统就是创建在Linux内核之上。

通常情况下,Linux被打包成供个人计算机和服务器使用的Linux发行版,一些流行的主流Linux发布版,包括Debian(及其派生版本Ubuntu、Linux Mint)、Fedora(及其相关版本Red Hat Enterprise Linux、CentOS)和openSUSE等。Linux发行版包含Linux内核和支撑内核的实用程序和库,通常还带有大量可以满足各类需求的应用程序。个人计算机使用的Linux发行版通常包含X Window和一个相应的桌面环境,如GNOME或KDE。桌面Linux操作系统常用的应用程序,包括Firefox网页浏览器、LibreOffice办公软件、GIMP图像处理工具等。由于Linux是自由软件,任何人都可以创建一个匹配自己需求的Linux发行版。

发展现状

1994年3月,Linux1.0版正式发布,Marc Ewing成立Red Hat软件公司,成为最著名的Linux经销商之一。早期Linux的引导管理程序(boot loader)使用LILO(Linux Loader),早期的LILO存在着一些难以容忍的缺陷,例如无法识别1024柱面以后的硬盘空间,后来的GRUB(GRand Unified Bootloader)克服这些缺点,具有‘动态搜索内核文件’的功能,可以让用户在引导的时候,自行编辑引导设置系统文件,透过ext2或ext3文件系统中加载Linux Kernel(GRUB通过不同的文件系统驱动可以识别几乎所有Linux支持的文件系统,因此可以使用很多文件系统来格式化内核文件所在的扇区,并不局限于ext文件系统)。

今天由Linus Torvalds带领下,众多开发共同参与开发和维护Linux内核。理查德·斯托曼领导的自由软件基金会,继续提供大量支持Linux内核的GNU组件。一些个人和企业开发的第三方的非GNU组件也提供对Linux内核的支持,这些第三方组件包括大量的作品,有内核模块和用户应用程序和库等内容。Linux社区或企业都推出一些重要的Linux发行版,包括Linux内核、GNU组件、非GNU组件,以及其他形式的软件包管理系统软件

系统架构

Linux内核支持各种硬件架构,为软件(包括可能的专有软件)提供公共平台。
基于Linux的系统是一个模块化的类Unix操作系统。Linux操作系统的大部分设计思想来源于20世纪70年代到80年代的Unix操作系统所创建的基本设计思想。Linux系统使用宏内核,由Linux内核负责处理进程控制、网络,以及外围设备和文件系统的访问。在系统运行的时候,设备驱动程序要么与内核直接集成,要么以加载模块形式添加。

Linux具有设备独立性,它内核具有高度适应能力,从而给系统提供了更高级的功能。GNU用户界面组件是大多数Linux操作系统的重要组成部分,提供常用的C函数库,Shell,还有许多常见的Unix实用工具,可以完成许多基本的操作系统任务。大多数Linux系统使用的图形用户界面创建在X窗口系统之上,由X窗口(XWindow)系统通过软件工具及架构协议来创建操作系统所用的图形用户界面。

已安装Linux操作系统包含的一些组件:

  • 启动程序:例如GRUB或LILO。该程序在计算机开机启动的时候运行,并将Linux内核加载到内存中。

  • init程序:init是由Linux内核创建的第一个进程,称为根进程,所有的系统进程都是它的子进程,即所有的进程都是通过init启动。init启动的进程如系统服务和登录提示(图形或终端模式的选择)。

  • 软件库包含代码:可以通过运行的进程在Linux系统上使用ELF格式来执行文件,负责管理库使用的动态链接器是“ld-linux.so”。Linux系统上最常用的软件库是GNU C库。
    用户界面程序:如命令行Shell或窗口环境

Linux发行版

Ubuntu是一个流行的桌面Linux发行版。
Linux发行版指的就是通常所说的“Linux操作系统”,它一般是由一些组织、团体、公司或者个人制作并发行的。Linux内核主要作为Linux发行版的一部分而使用。通常来讲,一个Linux发行版包括Linux内核,以及将整个软件安装到计算机上的一套安装工具,还有各种GNU软件,和其他的一些自由软件,在一些Linux发行版中可能会包含一些专有软件。发行版为许多不同的目的而制作,包括对不同计算机硬件结构的支持,对普通用户或开发者使用方式的调整,针对实时应用或嵌入式系统的开发等等。当前,超过三百个发行版被积极的开发,最普遍被使用的发行版有大约十二个。较为知名的有Debian、Ubuntu、Fedora和openSUSE等。

一个典型的发行版包括:Linux内核,GNU库和各种系统工具,命令行Shell,图形界面底层的X窗口系统和上层的桌面环境等。桌面环境有如KDE或GNOME等,并包含数千种从办公包,编译器,文本编辑器,小游戏,儿童教育软件,到科学工具的应用软件。

很多发行版含有LiveCD的方式,就是不需要安装,放入系统光盘或其它介质进行启动,就能够在不改变现有系统的情况下使用。比较著名的有Damn Small Linux,Knoppix等。LiveCD的相关技术进步至此,很多的发行版本身的安装光盘也有LiveCD的功能。

Linux的应用

今天各种场合都有使用各种Linux发行版,从嵌入式设备到超级计算机(Super Computer),并且在服务器领域确定了地位,通常服务器使用LAMP组合。在家庭与企业中使用Linux发行版的情况越来越多。并且在政府中也很受欢迎,巴西联邦政府由于支持Linux而世界闻名。有新闻报道俄罗斯军队自己制造的Linux发行版的,做为G.H.ost项目已经获取成果.印度的喀拉拉邦计划在向全联邦的高中推广使用Linux。中华人民共和国为获取技术独立,在龙芯过程中排他性地使用Linux。 在西班牙的一些地区开发了自己的Linux发行版,并且在政府与教育领域广泛使用,如埃斯特雷马杜拉地区的gnuLinEx和安达卢西亚地区的Guadalinex。葡萄牙同样使用自己的Linux发行版Caixa Mágica,用于Magalh?es笔记本电脑和e-escola政府软件。法国和德国同样开始逐步采用Linux。

传统的Linux用户一般都是专业人士。他们愿意安装并设置自己的操作系统,往往比其他操作系统的用户花更多的时间在安装并设置自己的操作系统。这些用户有时被称作“黑客”或是“极客”。

使用Linux主要的成本为移植、培训和学习的费用,早期由于会使用Linux的人较少,并且在软件设计时并未考虑非专业者的使用,导致这方面费用极高。但这方面的费用已经随着Linux的日益普及和Linux上的软件越来越多、越来越方便而降低,但专业仍是使用Linux的主要成本。

然而随着Linux慢慢开始流行,有些原始设备制造商(OEM)开始在其销售的计算机上预装上Linux,Linux的用户中也有了普通计算机用户,Linux系统也开始慢慢出现在个人计算机操作系统市场。Linux在欧洲、美国和日本的流进程度较高,欧美地区还发行Linux平台的游戏和其他家用软件。Linux开源社群方面也是以欧洲、美国、日本等发达国家的人士居多。

每个孩子一台笔记本电脑这一项目正在催生新的更为庞大的Linux用户群,计划将包括发展中国家的几亿学童、他们的家庭和社区。在2007年,已经有六个国家订购了至少每个国家一百万台以上免费发放给学生。Google、Red Hat和eBay是该项目的主要支持者。

基于其低廉成本与高度可设置性,Linux常常被应用于嵌入式系统,例如机顶盒、移动电话及移动设备等。在移动电话上,Linux已经成为IOS的主要竞争者;而在移动设备上,则成为Windows CE与Palm OS外之另一个选择。当前流行的TiVo数字摄影机使用了经过定制后的Linux。此外,有不少硬件式的网络防火墙及路由器,例如部分LinkSys的产品,其内部都是使用Linux来驱动、并采用了操作系统提供的防火墙及路由功能。

Linux的起源

Unix的历史

Unix系统于1969年在AT&T的贝尔实验室诞生,20世纪70年代,它逐步盛行,这期间,又产生了一个比较重要的分支,就是大约1977年诞生的BSD(Berkeley Software Distribution)系统。从BSD系统开始,各大厂商及商业公司开始了根据自身公司的硬件架构,并以BSD系统为基础进行Unix系统的研发,从而产生了各种版本的Unix系统,如:SUN公司的solaris,IBM公司的AIX,HP公司的HP UNIX等。Unix系统诞生、发展的时间及版本分支,Linux系统诞生于1991年左右,因此,可以说Linux是从Unix发展而来的。

Unix的五大优秀特性

  • 技术成熟,可靠性高
    使用Unix系统时,即时运行若干年也无需重启,它依然可以工作得非常好。毫不夸张地说,只要计算机硬件不坏,Unix就很难出问题。

  • 极强的可伸缩性
    Unix支持的CPU处理器体系架构非常多,包括Intel/AMD及HP-PA、MIPS、PowerPC、UltraSPARC、ALPHA等RISC芯片,以及SMP、MPP等技术。

  • 强大的网络功能
    Internet互联最重要的协议TCP/IP就是在Unix上开发和发展起来的。此外,Unix还支持非常多的常用网络通信协议,如NFS、DCE、IPX/SPX、SLIP、PPP等。

  • 强大的数据库支持能力
    Oracle、DB2、Sybase、Informix等大型数据库,都把Unix作为其主要的数据库开发和运行平台,一直到目前为止,依然如此。

  • 强大的开发功能
    正是Unix促使了C语言的诞生,并相互促进与发展,成为当时工程师的首选操作系统和开发环境。互联网早期有重大意义的软件新技术的出现几乎都在Unix上,例如:TCP/IP、WWW、JAVA、XML等。

Unix操作系统革命

70年代中后期,由于各厂商和商业公司开发的Unix及内置软件都是针对自己公司特定的硬件,因此在其他公司的硬件上基本无法直接运行,而且当时没有人对开发基于x86架构的CPU的系统感兴趣。另外,70年代末,Unix又面临了突如其来的被AT&T回收版权的重大问题,特别是要求禁止对学生群体提供Unix系统源代码,这样的问题一度引起了当时Unix业界的恐慌,也因此产生了商业纠纷。

由于Unix面临版权回收问题,以及代码不开源等的问题,这直接或间接的导致了新的类Unix系统的诞生以及自由软件运动的建立和发展。

1984年,Richard Stallman发起了开发自由软件的运动,并成立了自由软件基金会(Free Software Foundation,FSF)和GNU项目。当时发起这个自由软件运动和创建GNU项目的目的其实很简单,就是想开发一个类似Unix系统、并且是自由软件的完整操作系统,也就是要解决70年代末Unix版权问题以及软件源代码面临闭源的问题,这个系统叫做GNU操作系统。

也是在80年代初期,同样是由于之前的Unix系统版权和源代码限制等问题,使得当时大学里教学Unix系统的束缚很大。因此,当时的一个大学的教授,名字为Andrw Tanenbaum(谭邦宁),于大概1984年开始着手编写新的用于教学的Unix系统,目标是开发新的Unix系统尽可能和原来的Unix系统兼容,并且可以运行与x86 PC平台,这个系统的名字为Minix。

Linux的诞生

Linux系统的诞生开始于芬兰赫尔辛基大学的一位计算机系的学生,名字为Linus Torvalds。在大学期间,他接触到了学校的Unix系统,但是当时的Unix系统仅为一台主机,且对应了多个终端,使用时存在操作等待时间很长等一些不爽的问题,无法满足年轻的Linus Torvalds的使用需求。因此他就萌生了自己开发一个Unix的想法,于是不久,他就找到了前文提到的谭邦宁教授开发的用于教学的Minix操作系统,他把Minix安装到了他的I386个人计算机上。此后,Torvalds又开始陆续阅读了Minix系统的源代码,从Minix系统中学到了很多重要的系统核心程序设计理念和设计思想,从而逐步开始了Linux系统雏形的设计和开发。

linux的发展历程简介

1、1984年,Andrew S.Tanenbaum开发了用于教学的Unix系统,命名为MINIX。

2、1989年,Andrew S.Tanenbaum将MINIX系统运行与x86的PC计算机平台。

3、1990年,芬兰赫尔辛基大学学生Linus Torvalds首次接触MINIX系统。

4、1991年,Linus Torvalds开始在MINIX上编写各种驱动程序等操作系统内核组件。

5、1991年底,Linus Torvalds公开了Linux内核源代码00.2版(http://www.kernel.org)。

6、1993年,Linux1.0版发行,Linux转向GPL版权协议。

7、1994年,Linux的第一个商业发行版Slackware问世。

8、1996年,美国国家标准技术局的计算机系统实验室确认Linux版本1.2.13(由Open Linux公司打包)符合POSIX标准。

9、1999年,Linux的简体中文发行版问世。

10、2000年后,Linux系统日趋成熟,涌现大量基于Linux服务器平台的应用,并广泛应用于基于ARM技术的嵌入式系统中。

注意:Linux Torvalds公开的Linux内核源码并不是我们现在使用的Linux系统的全部,而仅仅是Linux内核kernel部分的代码。

Linux核心概念

自由软件与FSF

自由软件

简单地理解,自由软件的核心就是没有商业化软件版权制约,源代码开放,可无约束自由传播。

自由软件基金会FSF

FSF(Free Software Foundation)的中文意思是自由软件基金会,是Richard Stallman与1984年发起和创办的。FSF的主要项目是GNU项目。它的目标是建立自由发布和可移植的类Unix操作系统产品。GNU项目本身产生的主要软件包括:Emacs编辑软件、gcc编译软件、bash命令解释程序和编程语言,以及gawk(GNU’s awk)等。

GNU介绍

GNU的全称为GNU’s not unix,意思是"GNU不是UNIX",GNU计划,又称革奴计划,是由Richard Stallman在1984年公开发起的,是FSF的主要项目。这个项目的目标是建立一套完全自由的和可移植的类Unix操作系统。

GNU类Unix操作系统是由一系列应用程序、系统库和开发工具构成的软件集合,例如:Emacs编辑软件、gcc编译软件、bash命令解释程序和编程语言,以及gawk(GNU’s awk)等,并加上了用于资源分配和硬件管理的内核。

但是GNU自己的内核Hurd仍在开发中,离实用还有一定的距离。因此,这个GNU系统并没有流行起来。现在的GNU系统通常是使用Linux系统的内核、加上GNU项目贡献的一些组件,以及其他相关程序组成的,这样的组合被称为GNU/Linux操作系统。

到1991年Linux内核发布的时候,GNU项目已经完成了除系统内核之外的各种必备软件的开发。在Linux Torvalds和其他开发人员的努力下,GNU项目的部分组件又运行到了Linux内核之上,例如:GNU项目里的Emacs、gcc、bash、gawk等,至今都是Linux系统中很重要的基础软件。

GPL介绍

GPL全称为General Public License,中文名为通用公共许可,是一个最著名的开源许可协议,开源社区最著名的Linux内核就是在GPL许可下发布的。GPL许可是由自由软件基金会(Free Software foundation)创建的。

1984年,Richard Stallman发起开发自由软件的运动后不久,在其他人的协作下,他创立了通用公共许可证(GPL),这对推动自由软件的发展起来至关重要的作用,那么,这个GPL到底是什么意思呢?

简单的理解,GPL许可的核心,是保证任何人有共享和修改自由软件的自由,任何人有权取得、修改和重新发布自由软件的源代码权利,但都必须同时给出具体更改的源代码。

虽然这个Linux内核是基于GNU通用公共许可的,但是Linux内核并不是GNU计划的一部分。

Linux系统组成

Linux操作系统的核心为Linus Torvalds开发的Kernel,Linux内核之上的组件分为几部分:一部分是GNU的组件,如Emacs、gcc、bash、gawk等;另一些重要组成部分则来自加利福利亚大学Berkeley分校的BSD Unix项目和麻省理工学院的X Windows系统项目,以后在这之后成千上万的程序员开发的应用程序等(见表1-1)。正式Linux内核与GNU项目、BSD Unix以及MIT的X11(X Windows)的结合,才使得整个Linux操作系统得以很快形成,并得到了发展,进而组成了今天优秀的Linux系统。

表Linux系统各组成部分的贡献人员

Linux内核 GNU组件(gcc、bash 其他应用程
开发者Linux Torvalds 项目发起人Richard Stallman BSD Unix和X Windows以及成千上万的程序员

Linux的特点

Linux为什么受欢迎?

Linux系统之所以受到广大计算机爱好者的喜爱,主要原因有两个:

一、Linux属于自由软件,用于不用支付任何费用就可以获得系统和系统的源代码,并且可以根据自己的需要对源代码进行必要的修改,无偿使用,无约束地自由传播。

二、Linux具有Unix的全部优秀特性,任何使用Unix操作系统或想要学习Unix操作系统的人,都可以通过学习Linux来了解Unix,同样可以获得Unix中的几乎所有优秀功能,并且,Linux系统更开放,社区开发和全世界的使用者也更活跃。

Linux更多特点介绍

  • 可以说Linux是Unix在PC计算机上的克隆版,仿Unix内核构建,同Unix指令集向下几乎完全兼容。

  • 是一个完善的多用户、多任务,支持多进程、多CPU的系统。

  • 具有很高的系统稳定性与可靠性。

  • 具有很高的系统安全性。

  • 有完善的网络服务,支持HTTP、FTP、SMTP、POP、SAMBA、SNMP、DNS、DHCP、SSH、TELNET等。

  • 是基于GNU许可,自由开放的系统。

  • 有大量第三方免费应用程序。

  • 得到了众多业界厂商支持,如IBM、ORACLE、INTEL、HP、MOTO、Google等。

  • 有完善的大型数据库平台,包括Oracle、DB2、Sybase、MySQL、Postgres等。

  • 有完善的图形用户界面,包括GNOME、KDE等。

  • 有完善的开发平台,包括C/C++、Java、Perl等,支持各类图形界面API,如GTK+、QT等。

3.Linux几大模块

* 文件管理

* 用户管理

* 磁盘与挂载

* 软件相关

* 压缩编译

* 网络管理
$ ntpdate -u ntp.api.bz 同步时间(后面的IP是中国时间服务器)

* 进程管理

* 服务相关

* 启动过程

* shell

linux常用软件详解

vim 详解

vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。

vi的基本概念

基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)

  • 命令行模式 command mode

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 底行模式 last line mode。

  • 插入模式(Insert mode)

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。

  • 底行模式(last line mode)

将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。
不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。

vi的基本操作

linux终端快捷命令

快捷键 功能
Tab 自动补全
Ctrl+a 光标移动到开始位置
Ctrl+e 光标移动到最末尾
Ctrl+k 删除此处至末尾的所有内容//剪切命令行中光标所在处之后的所有字符(包括自身)
Ctrl+u 删除此处至开始的所有内容//剪切命令行中光标所在处之前的所有字符(不包括自身)
Ctrl+d 删除当前字符
Ctrl+h 删除当前字符前一个字符
Ctrl+w 删除此处到左边的单词 //剪切光标所在处之前的一个词(以空格、标点等为分隔符)
Ctrl+y 粘贴由 Ctrl+u , Ctrl+d , Ctrl+w 删除的单词
Ctrl+l 相当于clear,即清屏
Ctrl+r 查找历史命令
Ctrl+b 向回移动光标
Ctrl+f 向前移动光标
Esc+b 移动到当前单词的开头
Esc+f 移动到当前单词的结尾
Ctrl+t 将光标位置的字符和前一个字符进行位置交换
Alt+t 交换当前与以前单词的位置
Alt+u 把当前词转化为大写(光标在词首)
Alt+l 把当前词转化为小写(光标在词首)
Alt+c 把当前词汇变成首字符大写
Ctrl+& 恢复 ctrl+h 或者 ctrl+d 或者 ctrl+w 删除的内容
Ctrl+S 暂停屏幕输出
Ctrl+Q 继续屏幕输出
Ctrl+Left-Arrow 光标移动到上一个单词的词首
Ctrl+Right-Arrow 光标移动到下一个单词的词尾
Ctrl+p 向上显示缓存命令
Ctrl+n 向下显示缓存命令
Ctrl+d 关闭终端
Ctrl+xx 在EOL和当前光标位置移动
Ctrl+x@ 显示可能hostname补全
Ctrl+c 终止进程/命令
Shift +上或下 终端上下滚动
Shift+PgUp/PgDn 终端上下翻页滚动
Ctrl+Shift+n 新终端
alt+F2 输入gnome-terminal打开终端
Shift+Ctrl+T 打开新的标签页
Shift+Ctrl+W 关闭标签页
Shift+Ctrl+C 复制
Shift+Ctrl+V 粘贴
Alt+数字 切换至对应的标签页
Shift+Ctrl+N 打开新的终端窗口
Shift+Ctrl+Q 管壁终端窗口
Shift+Ctrl+PgUp/PgDn 左移右移标签页
Ctrl+PgUp/PgDn 切换标签页
F1 打开帮助指南
F10 激活菜单栏
F11 全屏切换
Alt+F 打开 “文件” 菜单(file)
Alt+E 打开 “编辑” 菜单(edit)
Alt+V 打开 “查看” 菜单(view)
Alt+S 打开 “搜索” 菜单(search)
Alt+T 打开 “终端” 菜单(terminal)
Alt+H 打开 “帮助” 菜单(help)

另外一些小技巧包括:在终端窗口命令提示符下,连续按两次 Tab 键、或者连续按三次 Esc 键、或者按 Ctrl+i 组合键,
将显示所有的命令及工具名称。Application 键即位置在键盘上右 Ctrl 键左边的那个键,作用相当于单击鼠标右键。