Linux 初探 (基础认知篇)

linux 初探 (基础认知篇)

什么是linux?

Linux是开源的类Unix系统,单纯的术语Linux来说其实仅仅指由林纳斯.托瓦兹开发并于1991年发布的一款存在于内核空间的操作系统内核(kernel)。

为什么会开发要开发内核呢?

要从应用程序是如何在计算机上跑起来谈起,早期的应用程序需要了解CPU指令集利用汇编等语言进行开发。CPU的常见指令集架构:x86、x64(早期称其为amd64)兼容x86、m68000(m68k)、arm、power、power pc(ppc,桌面级power)。而这些不同厂商所生产的cpu指令集大多不同,基于此开发的程序彼此不兼容,因此,每开发一款软件都要针对不同指令集的cpu重写软件以实现相同的功能,直接面对硬件开发的程序移植非常之难。要使得程序能够在计算机上跑起来,必须先将硬件设备驱动使之工作接受程序的支配调度,意味着程序开发者须将不同设备的驱动开发一起写进程序中。简单的讲到这,想必知晓答案了吧!正是为了克服针对不同cpu架构开发的程序不兼容,移植又及其耗费精力,迫切需要一种与cpu等硬件没有太大关系的高级开发语言。将这种高级语言所开发的程序通过编译器(compile)翻译成为编译器所运行的硬件架构上可执行的汇编代码。当然,编译器也可运行在A计算机,为不同CPU架构的B计算机将程序转化为B可执行的代码,就是交叉编译。同样,为了克服程序员针对底层硬件开发,需要一种可以提供各种硬件驱动并组织起来将其抽象为统一接口的中间层、翻译官,无论您走到何种地域,不同地域的语言都会被翻译官,翻译为您所理解的母语,您想发表任何的观点只需要面对这位翻译官即可。于是乎主角linux kernel 呼之欲出,由kernel向下面对各种硬件规格的复杂性,并向上将其抽象成为一种统一的接口称为系统调用(system call)。

将内核功能中公共部分的代码再次封装成为库(libraries),向上提供统一规范的接口供程序调用。由于库在不同的操作系统中同种语言封装成的库和调用接口及其内部编码实现方式同,造成了程序在不同操作系统之间不兼容,给程序运行和移植带来麻烦,于是国际组织委员会发起pos(posix)标准来进行规范。

系统调用有两种形式

  • API(Application Programing Interface):系统调用编程接口,保证程序的可移植性,依赖于C库(labc)实现,遵循posix标准;
  • ABI (Application Binary interface):应用二进制接口,程序编译完成后形成固定格式二进制文件,windows的.exe,linux的ELF等,诠释了应用程序和操作系统之间的二进制接口。

Linux kernel很好的实现了上述功能。

我们知道一个完整的操作系统由权限较高调度硬件资源的内核空间(内核态)和权限较低的用户空间(用户态)组成。

那么用户空间的应用程序在何地呢?

事实上在linux kernel出现之前,非常不屑与Unix闭源的,收费许可的应用程序为伍的理查德斯托曼stallman 教授,开创了非营利性的自由软件基金会FSF(Free Software Foundation),并发起了GUN计划,其口号为GNU‘s Not Unix的递归缩写,主要任务就是开发自由的,开放的,源码提供的开源软件(open source software)。自由软件怎么能运行在闭源内核之上呢?一直苦于没有一款易用的开源的,自由的内核来使得自由软件运行。

Linux的诞生让两者走到一起,让自由,开源的GUN软件得以开花结果。组成真正意义上的GUN/Linux操作系统。

Linux 重要哲学思想:

  • 一切皆文本,包括硬件设备
  • 由多个单一功能的小程序组合,完成复杂的任务
  • 尽可能少的与用户交互,避免捕获用户接口
  • 使用纯文本文件保存配置信息

目前主流的Linux发行版:

Debian       ==>      Ubuntu   PC桌面推荐

RedHat      ==>      Centos    服务器领域

Slackware ==>      S.U.S.E

Gentoo

ArchLinux

如有任何错误请指正

时间: 2024-12-29 23:56:44

Linux 初探 (基础认知篇)的相关文章

Linux系统管理——基础命令篇

终于开始接触Linux,现在是一个标准的菜鸟,那么就踏踏实实,一步一步开始进阶,希望我的博客慢慢可以给后来人带来帮助. 废话少说,下面就是我所接触的Linux系统管理的一些基础命令,以及我个人添加的命令的释义,还望大大们多多指教. 一.Linux命令行基础 [[email protected] ~]# uname -r       //查看内核版本 [[email protected] ~]# uname -a       //查看内核相关详细信息 [[email protected] ~]#

初探LINUX之--基础知识篇

一 Linux哲学思想 1 一切都是一个文件(包含硬件) 2 小型,单一用途的程序 3 链接程序,共同完成复杂的任务 4 避免令人困惑的用户界面 5 配置数据存储在文本中 二 Linux重要概念 Shell是什么 在学习Linux的过程中,经常会听到Shell这个词.可能大家在使用Windows的时候有这种感觉,我要听歌,我打开一个播放器,那么音箱就可以出声音,要打印一片文档,我们只要在程序中点击一下打印按钮,打印就会自动的把文档打印出来.但是我们并没有自己手动的控制音箱和打印机等硬件设备,是因

Linux新手入门书籍推荐 鸟哥的linux私房菜-基础学习篇

这本书写的不错.赞~\(≧▽≦)/~ 2017-02-24 下午,我开始在Linux下写第一个.c程序,在终端打印hello world.gcc 源代码文件之后,输出可执行文件,但是 当我输入文件名执行它的时候,却提示我 无法找到命令.于是我找百度,查资料,花了半个小时,终于找到解决方法了, 输入"./filename"即可.... 2017-02-25 我看<基础学习篇>这本书,在P158页下面的例题讲解中找到了昨天下午异常的解析.我就很是感慨,心想:要是早看这本书,半个

【Linux】鸟哥的Linux私房菜基础学习篇整理(一)

最近,一直在写PPC的模拟器和汇编器,也在做设计.所以重新看了看<鸟哥的Linux私房菜>,还是有好多命令不太熟悉.就打算写几篇blog记下来. 1. nl [-bnw] filename:添加行号打印参数:-b:指定行号指定的方式,主要有两种: -b a:表示不论是否为空行,也同样列出行号(类似cat -n): -b t:如果有空行,空的那一行不要列出行号(默认值).-n:列出行号表示的方法,主要有三种: -n ln:行号在屏幕的最左方显示: -n rn:行号在自己字段的最右方显示,且不加0

Linux及Arm-Linux程序开发笔记(零基础入门篇)

Linux及Arm-Linux程序开发笔记(零基础入门篇)  作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/beer/archive/2011/05/05/2037449.html 目录 一.Arm-Linux程序开发平台简要介绍... 3 1.1程序开发所需系统及开发语言... 3 1.2系统平台搭建方式... 4 二.Linux开发平台搭建... 5 2.1安装虚拟工作站... 5 2.2安装Linux虚拟

【Linux】鸟哥的Linux私房菜基础学习篇整理(二)

1. dumpe2fs [-bh] devicename:查询superblock信息.参数:-b:列出保留为坏道的部分:-h:列出superblock的数据,不会列出其他的区段内容. 2. df [-ahikHTm] 目录或文件名:列出文件系统的整理磁盘使用量.参数:-a:列出所有的文件系统,包括系统特有的/proc等文件系统:-k:以KB的容量显示各文件系统:-m:以MB的容量显示各文件系统:-h:以人们易阅读的GB.MB.KB等格式自行显示:-H:以M=1000K替代M=1024K的进位方

【Linux】鸟哥的Linux私房菜基础学习篇整理(七)

1. test命令的测试功能.测试的标志:(1)关于文件类型的检测 test [-efdbcSpL] filename-e:该文件名是否存在:-f:该文件名是否为文件:-d:该文件名是否为目录:-b:该文件名是否存在且为一个block device设备:-c:该文件名是否存在且为一个character device设备:-S:该文件名是否存在且为一个Socket文件:-p:该文件名是否存在且为一个FIFO文件:-L:该文件名是否存在且为一个连接文件.(2)关于文件权限的检测 test [-r]

【Linux】鸟哥的Linux私房菜基础学习篇整理(九)

1. quotacheck [-avugfM] [/mount_point]:扫描文件系统并创建Quota配置文件.参数:-a:扫描所有在/etc/mtab内,含有quota支持的文件系统,加上此参数后,不必写/mount_point:-u:针对用户扫描文件与目录的使用情况,会新建aquota.user:-g:针对用户组扫描文件与目录的使用情况,会新建aquota.group:-v:显示扫描过程的信息:-f:强制扫描文件系统,并写入新的quota配置文件(危险):-M:强制以读写的方式扫描文件系

Bombe 【Linux】鸟哥的Linux私房菜基础学习篇整理(三)

1. gzip [-cdtv#] filename:压缩.参数:-c:将压缩的数据输出到屏幕上,可通过数据重定向进行处理:-d:解压缩的参数:-t:可以用来检验一个压缩文件的一致性,查看文件有无错误:-v:可以显示出原文件/压缩文件的压缩比等信息:-#:压缩等级,1最快(压缩比最差),9最慢(压缩比最好),默认6. 2. zcat *.gz:读取gzip压缩文件. 3. bzip2 [-cdkzv#] filename:压缩.参数:-c:将压缩过程中产生的数据输出到屏幕上:-d:解压缩的参数:-