一、计算机组成及其功能
计算机组成包括硬件和软件两部分,硬件指计算机系统中各种物理装置,软件指各种需要的应用程序。
硬件系统
- 计算机硬件是指构成计算机的物理设备。所有计算机在基本结构上都遵循冯·诺依曼体系。link
冯·诺依曼设计思想包括三方面:
1.计算机应包括运算器、控制器、存储器、输入设备和输出设备五部件。
2.计算机内部的数据和指令以二进制表示。
3.程序和数据存放在存储器中,计算机执行程序时,无需人工干预,自动、连续地执行程序,并得到预期结果。
(1)、控制器
计算机的中枢神经,其功能时对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等
(2)、运算器
其功能是对数据进行各种算术运算和逻辑运算—对数据进行加工处理
(3)、存储器
存储器的功能是存储程序、数据和各种信号、命令等信息—对数据进行加工处理
(4)、输入设备
输入设备与输出设备合称为外部设备—外设,输入设备的作用是将程序、原始数据、文字、字符、控制命令或现场采集的数据等信息输入到计算机。常见的输入设备有键盘、鼠标、光输入机、磁带机、磁盘机等。
(5)、输出设备
输出设备将外计算机的中间部分或最后结果、机内的各种数据符号及文字或各种控制信号等信息输出来。微机常用的输出设备有显示终端CRT、打印机、激光印字机、光盘等。
软件系统
通常把计算机软件分为“系统软件”和“应用软件”两大类。
系统软件
系统软件指管理、控制和维护计算机及其外部设备,提供用户与计算机之间界面等方面的软件。相对于软件而言,系统软件里计算机系统的硬件比较近,而离用户关心的问题则远一些,它不专门针对具体的应用问题。
应用软件
一般指呢些能够直接帮助个人或单位完成具体工作的各种各样的软件,如文字处理软件、计算机辅助设计软件、企业事业单位的信息管理软件以及游戏软件等。应用软件一般不能独立在计算机上运行而必须由系统软件支持。支持应用软件运行的最为基础的一种系统软件就是操作系统。应用软件、特备是各种专用软件包经常是由专门的软件厂商提供。
二、内核功能及作用
1、进程管理
内核负责创建和销毁进程, 并处理它们与外部世界的联系(输入和输出). 不同进程间通讯(通过信号, 管道, 或者进程间通讯原语)对整个系统功能来说是基本的, 也由内核处理. 另外, 调度器, 控制进程如何共享 CPU, 是进程管理的一部分. 更通常地, 内核的进程管理活动实现了多个进程在一个单个或者几个 CPU 之上的抽象.
2、内存管理
计算机的内存是主要的资源, 处理它所用的策略对系统性能是至关重要的. 内核为所有进程的每一个都在有限的可用资源上建立了一个虚拟地址空间. 内核的不同部分与内存管理子系统通过一套函数调用交互, 从简单的 malloc/free 对到更多更复杂的功能.
3、文件系统
Unix 在很大程度上基于文件系统的概念; 几乎 Unix 中的任何东西都可看作一个文件. 内核在非结构化的硬件之上建立了一个结构化的文件系统, 结果是文件的抽象非常多地在整个系统中应用. 另外, Linux 支持多个文件系统类型, 就是说, 物理介质上不同的数据组织方式. 例如, 磁盘可被格式化成标准 Linux 的 ext3 文件系统, 普遍使用的 FAT 文件系统, 或者其他几个文件系统.
4、设备控制
几乎每个系统操作最终都映射到一个物理设备上. 除了处理器, 内存和非常少的别的实体之外, 全部中的任何设备控制操作都由特定于要寻址的设备相关的代码来进行. 这些代码称为设备驱动. 内核中必须嵌入系统中出现的每个外设的驱动, 从硬盘驱动到键盘和磁带驱动器. 内核功能的这个方面是本书中的我们主要感兴趣的地方.
5、网络
网络必须由操作系统来管理, 因为大部分网络操作不是特定于某一个进程: 进入系统的报文是异步事件. 报文在某一个进程接手之前必须被收集, 识别, 分发. 系统负责在程序和网络接口之间递送数据报文, 它必须根据程序的网络活动来控制程序的执行. 另外, 所有的路由和地址解析问题都在内核中实现.
三、常见Linux发行版及版本间联系与异同
1、常见的Linux发行版本
- Debian:运行起来及其稳定,非常实用于服务器。
- Gentoo:与Debian一样,这款操作系统包含数量众多的软件包。
- Ubuntu:是Debian的衍生版。
- Damn Vulnerable Linux:用于训练Linux管理员(因为其绑定了坏的、配置不当、过时的、容易被不法分子攻击的软件)
- 红帽企业级Linux:有服务器版本,支持众多处理器架构,包括x86和x86_64。
- Fedora:适用于那些想尝试最先进的技术,等不及程序的稳定版本出来。
- Kali Linux:Debian的一款衍生版,Kali旨在用于渗透测试。
- Arch Linux:是一款采用滚动发行方式操作系统只需要安装一次当有某个新版本就可以升级发行版本,不需要重新安装。
- openSUSE:发行版本是免费的,并不提供商业用途使用。
2、版本间联系与异同
(1)、联系
- 同属于Linux大家族,系统中都有Linux内核
(2)、异同
从大的方面来说,Linux发行版可以大致分为个人桌面版和企业服务器版
- 个人桌面版
面向个人用户。由于安装图形化界面,界面美观、操作方便、比较适合新手,但对于服务器版来说较消耗资源。
- 企业级服务器版
面向企业用户,系统稳定性好,资源消耗小,满足企业需求,但基本上都是命令行界面,需要一定的基础才能上手。
四、常见开原协议及协议间区别
Apache License 2.0
这是一个著名的非盈利开源组织Apache采用的协议,它励代码共享和尊重原作者的著作权,同时也允许代码修改,再发布(作为开源或商业软件)。
-
要求
1、在代码中保留作者提供的协议和版权信息
2、如果修改了代码,则必须在被修改的文件中进行说明。 -
允许的权利
商用、分发、修改、专利授权、私用、附加协议 -
禁止项
1、禁止因使用等造成影响责任承担、也就是说免责申明
2、不能使用相应的商标。
GPLv3
此协议是应用最为广泛的开源协议,拥有较强的版权自由要求,也赋予和保证了开源项目开发者广泛的权利。基本上,它允许用户合法复制,分发和修改软件,但衍生代码的分发需开源并且也要遵守此协议。此协议有许多变种,不同变种的要求略有不同。
-
要求
1、修改后的源码也需要公开
2、版权及协议也要于此协议一致
3、修改后,需要在相应的文件做说明, -
允许
商用,分发,修改,专利授权,私用 -
禁止
禁止因使用等造成影响责任承担、也就是说免责申明
静止在软件分发传播过程中附加上原来没有的协议条款等
提示:商业软件不能使用GPL协议的代码。
LGPL
其主要用于一些代码库,LGPL比起GPL它授予的权限较少,LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。因此使用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。注意是以类库的形式使用,也就是说如果修改了源代码的话则也必须使用LGPL协议贡献源码出来。
-
要求
1、公开使用了LGPL部分的代码,其余部分不需要公开。
2、可以库引用的方式用于商业软件。
3、在代码中保留作者提供的协议和版权信息 -
允许
商用、分发、修改、专利授权、私用、附加协议 -
禁止
禁止承担责任,(免责申明)、
MIT
宽松简单且精要的一个协议。在适当标明来源及免责的情况下,它允许你对代码进行任何形式的使用,也就是原作者只想保留版权,而无任何其他了限制,而你必须在发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的。
-
要求
1、在代码中保留作者提供的协议和版权信息 -
允许
商用、分发、修改、私用、附加协议 -
禁止
禁止承担责任,(免责申明)
BSD
BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。与MIT协议只存在细微差异。差别为MIT可以使用原名称进行宣传,而BSD不可以。
-
要求
在代码中保留作者提供的协议和版权信息 -
允许
商用、分发、修改、私用、附加协议 -
禁止
禁止承担责任,(免责申明)
Mozilla 2.0
是由Mozilla基金创建维护的。此协议旨在较为宽松的BSD协议和更加互惠的GPL协议中寻找一个折衷点,允许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者。这种授权维护了商业软件的利益,它要求基于这种软件得修改无偿贡献版权给该软件。
-
要求
1、公开源代码
2、在代码中保留作者提供的协议和版权信息 -
允许
商用、分发、修改、专利授权、私用、附加协议 -
禁止
1、禁止承担责任,(免责申明)
2、禁止使用商标
五、Linux哲学思想
1、一切皆文件(以哪个键设备亦如此)
所有资源在Linux上都已文件方式存在,包括硬件设备(设备文件)通讯方式。
eg:Linux系统中所有的设备都是作为文件的一个节点来挂载和使用的,比如光驱,一般挂载在/mnt/cdrom里。
2、单一目的的小程序(有众多目的单一的小程序组成)
一条命令完成一个任务,一串代码完成一任务,这些小程序彼此独立,代码简单,目的明确。
3、组合小程序完成复杂任务
一个复杂的任务不必使用一个大型的程序来独立完成,它由多个单独的小程序组合以完成复杂任务。这样便于排错,也让程序运行更完美。
4、文件保存配置信息
使用简单的文件编辑器,就可以完成配置。
5、尽量避免捕获用户接口
尽量不和用户进行交互,一个程序一旦开始运行,就不需要用户进行任何操作。
6、提供机制,而非策略
机制是泥胚,策略是可以制定各种细节。机制是接口,策略是数据流。管道是机制,应用管道处理各种数据是策略。AWK的读入行循环是机制,各种正则表达式与后附的处理操作是策略。
六、Linux目录结构及目录命名规定
1、目录结构
- /bin
bin 是Binary的缩写,这个目录存放着经常使用的命令
- /boot
这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件及镜像文件
- /dev
dev是Device(设备)的缩写,该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式相同
- /etc
这个目录用来存放所有的系统管理所需要的配置文件和子目录
- /home
用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是用用户的账户名命名。
- /lib
此目录里面存放着系统最近本的动态链接共享库,其作用类似于Windows里面DLL文件。几乎所有的应用程序都需要用到这些共享库。
- /lost+found
此目录一般情况下是空的,当系统非法关机后,这里存放一些文件
- /media
Linux系统会自动识别一些设备,例U盘、光驱等,当识别后,Linux会把识别的设备挂载到这个目录下。
- /mnt
系统提供该目录是为了让用户临时挂载别的文件系统,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里面的内容了。
- /opt
此目录是给主机额外安装软件所摆放的目录。比如安装一个oracle数据库则就可以放到这个目录下,默认是为空。
- /proc
此目录是一个虚拟目录,它是系统内存的映射,可以通过直接访问这个目录来获取系统信息。此目录的内容不在硬盘上而是在内存中,我们可以直接修改里面的某些文件,比如可以通过下面命令来屏蔽主机的ping命令,使别人无法ping你的主机
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
- /root
此目录为系统管理员,也称作超级权限者的用户主目录。
- /sbin
s就是Super User的意思,这里存放的是管理员使用的系统管理程序
- /selinux
此目录是Redhat/CentOS所特有的目录,Selinux回一个安全机制,类似于Windows防火墙,但是这套机制比较复杂,这个目录就是存放Selinux相关的文件。
- /srv
此目录存放一些服务启动之后需要提取的数据。
- /sys
这是Linux2.6内核一个很大变化。此目录下安装了2.6内核中新出现的一个文件系统sysfs。
sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。
该文件系统是内核设备树的一个直观反映。
当一个内核对象被创建时候,对应的文件和目录也在内核对象子系统中被创建。
- /tmp
此目录存放一些服务器启动后需要提取的数据。
- /usr
用户的很多应用程序和文件都放在这个目录下,类似Windows下的program file目录。
- /usr/bin
系统用户使用的应用程序。
- /usr/sbin
超级用户使用的比较高级的管理程序和系统守护程序。
- /usr/src
内核源代码默认放置目录。
- /var
此目录中存放着在不断扩充的东西,习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
- /run
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。若你的系统上有/var/run目录应该让它指向run。
2、目录命名规定
(1)、除了/之外所有字符都合法
(2)、有些字符最好不要使用,比如空格符、制表符、退格符、字符、: ? ,@ # \ | ; ’ " <>等
(3)、避免使用+、-或 · 来作为普通文件名的第一个字符
(4)、大小写敏感