What:计算机的组成是什么?
计算机的主要部件:
CPU:可分为运算器、控制器、寄存器、缓存等
存储器:比如内存。执行程序时,会将程序及相关数据加载进内存,供CPU读取
输入设备:比如:键盘。用于下达指令及输入数据。
输出设备:比如显示器。用户显示和输出指令执行的结果等
冯诺依曼体系中提出的五大部件为:运算器、控制器、存储器、输入、输出
How:计算机如何工作的?
1. 硬盘等存储介质用于存放程序及数据。
程序 = 指令 + 数据
2. 用户通过输入设备,下达执行某个程序
3. 计算机会先将该程序及相关数据加载到内存中。
因为CPU只能直接访问内存
内存在内部是划分存储单元,每个单元为8bit
内存中每个单元都有编址。
4. CPU先读取该指令,当需要用到数据时,再从内存中载入响应数据
CPU要能执行某指令,首先它得要支持。而CPU所能支持的指令集合称之为指令集。不同的CPU,指令集也不同。
指令集中指令又可分为两类:普通指令、特权指令
CPU有位长之分。目前有32位和64位CPU
不同的位长,代表CPU同一时间可以访问内存单元的数量的多少
5. 如果第一个指令运行完后,结果还需和其他数据再进行运算,那么CPU会先将该结果放入寄存器中,待用时再取出。
6. 最后将结果输出到输出设备

Why:为什么有了内存,还需要有CPU缓存?
由于内存的频率远低于CPU频率。因此通过CPU缓存来解决速度不同的问题。减少等待时间,提高CPU效率。
缓存为王~!
What:那么什么是操作系统?

操作系统是由内核和众多应用程序组合而成的。
而内核位于硬件之上,应用程序之下。它驱动了硬件,并向上提供了系统调用,使得程序员能方便的调用系统资源。
内核(kernel)的作用:
1、驱动底层硬件
2、将各底层硬件资源抽象成简单的资源
3、管理各程序的运行,把有限资源分配给各程序
对于CPU,通过时隙复用
对于内存,通过空间复用
它的存在,使得所有程序在任意时候都认为自己是独占着系统资源。对于程序而言,所要面对的也只有操作系统而已
Linux发行版本1、Linux的发行版
Linux内核以及在其上运行的软件都是基于开源协定,以源码的方式共享出来,任何人都可以随意拿来编译安装。也因此增加了使用难度。
为了方便安装,很多组织和公司便提供了在不同平台上已编译好的Linux系统。我们称之为发行版。发行版依旧须遵循开源协定,对外免费共享出来。
2、常见的Linux发行版:
主流的有三种 Debian , Slackware , Red Hat
DebianDebian ,或者称Debian系列,包括Debian和Ubuntu等。Debian是社区类Linux的典范,是迄今为止最遵循GNU规范的Linux系统。Debian最早由Ian Murdock于1993年创建,分为三个版本分支(branch): stable, testing和unstable。Debian最具特色的是 apt-get /dpkg 包管理方式,其实Redhat的YUM也是在模仿Debian的APT方式,但在二进制文件发行方式中,APT应该是最好的了。Debian的资料也很丰富,有很多支持的社区,有问题求教也有地方可去。
Ubuntu 是基于Debian的unstable版本加强而来,可以这么说Ubuntu就是一个拥有Debian所有的优点,以及自己所加强的优点的近乎完美的Linux桌面系统。根据选择的桌面系统不同,有多个版本可供选择,比如基于unity的 Ubuntu ,基于Gnome的 Ubuntu Gnome ,基于KDE的 Kubuntu ,基于LXDE的 Lubuntu 以及基于Xfce的 Xubuntu 等。特点是界面非常友好,容易上手,对硬件的支持非常全面,是最适合做桌面系统的Linux发行版本。
Red HatRedhat ,应该称为Redhat系列,Redhat linux是全球在服务器上应用最广泛的linux操作系统,在效率、扩展性、可靠性、安全性、集成虚拟化等都具备领先其他linux的特点,被誉为最值得信赖的数据中心平台系统,其主要应用在服务器领域。Redhat系列的包管理方式采用的是基于 RPM 包的 YUM 包管理方式,包分发方式是编译好的二进制文件。
RHEL (Redhat Enterprise Linux),Redhat为期提供完善的售后服务,并以服务提供收费。
CentOS (Community ENTerprise Operating System),它是来自Red Hat Enterprise Linux依照开放源代码规进行重新编译而成的,并且仅仅是将logo标识替换掉。所以也可以说CentOS是redhat服务器的免费版。新版的CentOS大约每两年发布一次,每个版本大概每6个月更新一次,CentOS也提供技术支持,但仅限于社区的官方邮件、论坛和聊天室,并且CentOS不负任何商业责任。
Fedora ( 由原来的Redhat桌面版本发展而来,免费版本 ) ,Redhat会将最新的技术或程序用在这个发行版中,以作测试之用。
SlackwareSlackware 由Patrick Volkerding创建于1992年。算起来应当是历史最悠久的Linux发行版。曾经Slackware非常的流行,但是当Linux越来越普及,用户的技术层面越来越广(更多的新手)后,Slackware渐渐的被新来的人们所遗忘。尽管如此,Slackware仍然深入人心(大部分都是比较有经验的 Linux老手)。Slackware稳定、安全,所以仍然有大批的忠实用户。由于Slackware尽量采用原版的软件包而不进行任何修改,所以制造新 bug的几率便低了很多。Slackware的版本更新周期较长(大约1年),但是新版本的软件仍然不间断的提供给用户下载。
SUSELinux 原是以Slackware Linux为基础,并提供完整德文使用界面的产品。SUSE 有两个linux版本,一个是open SUSE,另一个是Enterprise linux,Enterprise linux是为企业而设计的,要长期使用,需要收一定的费用的。而前一个是完全按照开源社区的要求,是免费的和放开源代码的。 Zypper 和 Yast 是 SUSE Linux 平台上的软件包管理工具,他们的底层使用了 RPM 。
Linux的哲学思想1、一切皆文件:
在Linux中最核心的思想便是一切皆文件,从普通文件到设备,在Linux上都是以文件形式放置。Linux的文件类型有:普通文件、目录文件、块设备文件、字符文件、符号链接文件、命名管道和套接字文件。就连内核和进程的运行状态也以文件的方式存放着。2、由众多功能单一的程序组成,一个程序只做一件事,切做好。
在Linux上每一个指令便是一个小程序,而每一个指令只负责一件事,通过不同的命令选项,完善了指令的功能。3、组合单一的小程序完成复杂任务。
体现在了Linux的小巧精简。Linux上的没有像windows那样,每个软件大道几百M。甚至几十G。他们通过组合小程序实现复杂功能,复用了相同功能的程序,减小软件的大小,提高了软件开发的效率。4、尽量避免与用户交互。
这也是为了,能方便shell脚本的开发。减少交互,就能方便的将单一小程序组合起来使用。5、使用文本文件保存配置信息
这点说道根本也是一切皆文件的体现,一个文本编辑器便能完成所有软件的配置,不需要额外的应用程序。Linux上的命令
命令提示符:prompt(bash)
#:管理员账户,为root;拥有最高权限,能执行所有操作
$:普通用户,非root用户;不具有管理权限,不能执行系统管理类操作
命令的语法通用格式:
#COMMANDOPTIONSARGUMENTS
COMMAND:发起一命令:请求内核将某个二进制程序运行为一个进程;
命令本身是一个可执行的程序文件:二进制格式的文件,有可能会调用共享库文件;
命令必须遵循特定格式规范:ELF(Linux), exe(Windows),msi (Windows)
可以使用file命令查看:

命令分为两类:
Qg建命令:由shell程序的自带的命令
外部命令:独立的可执行程序文件,文件名即命令名
可使用type命令查看:

OPTION:指定命令的运行特性;
选项有两种表现形式:
短选项:-C,例如-l,-d
注意:有些命令的选项没有-;
如果同一命令同时使用多个短选项,多数可合并:-l-d=-ld
长选项: word,例如 help, human-readable
注意:长选项不能合并;
注意:有些选项可以带参数,此称为选项参数;
ARGUMENTS:命令的作用对象;命令对什么生效;
不同的命令的参数;有些命令可同时带多个参数,多个之间以空白字符分隔;
常用命令:ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date
【 ifconfig 】:configure a network interface 配置网络接口

【 echo 】:display a line of text
echo[SHORT-OPTION]…[STRING]…-n:不进行换行
-e:让转义符生效
1、\n:换行
2、\t:制表符

在shell中string可以使用引号,单引号和双引号均可用
1、单引号:强引用,变量引用不执行替换
2、双引号:弱引用,变量引用会被替换

注意:变量引用的正规符号:${name},只不过一般花括号可以省略
【 tty 】:print the file name of the terminal connected to standard input
终端:
串行终端
/dev/ttyS#
物理终端
/dev/console
虚拟终端:图形终端
/dev/tty#
伪终端:远程连接,图形环境打开的命令接