2015年3月24日 第一节 Linux基础知识讲解


一、导语及背景知识:

计算机发展到现代已经发展了四代;并且呈现加速发展趋势;

1945-1956年,电子管时代,ENIAC

1956-1968年,晶体管时代, 开始穿线编程语言;

60年代中后期,中小规模集成电路时代

电流方向:负极——>正极

电流在运动过程中会有损耗,所以以通电与否来代表二进制,而不是以电压多少来代表具体数字;

CPU=运算器(加法器等)+控制器(电路控制开关)

CPU的主频代表的是cpu电路在单位时间内完成的开关闭合的次数及能力。所以,主频越高则输入输出能力就越强。

70年代,超大规模集成电路;


    1.编程语言:

解题空间:代表计算机计算能力--机器语言;

问题空间:人类问题--自然语言。

编程语言的执行过程就是自然语言转换为机器语言的执行过程。

①低级语言

微码编程接口:汇编语言,原生的与计算机01代码一一对应,性能高效。

执行过程:汇编语言-->汇编器-->01代码

②高级语言:与汇编语言相比更加接近自然语言;

运行过程:高级语言-->编译器-->汇编语言-->机器语言;

③编程语言执行过程:

操作界面(输入设备)-->硬件-->程序(运行依赖硬件,处理操作)-->输出结果

键盘是标准的输入设备;

屏幕是标准的输出设备。

2.程序:指令+数据

指令集分为: 精简指令集

复杂指令集


3.冯 诺依曼结构:5大部件:运算器、控制器、存储器、输入设备、输出设备。

CPU:运算器和控制器(中央处理器)

CPU只和内存交互!

内存:可编址存储单元;


00, 01, 10, 11


32操作系统每次读取32bit;32bits, 2^32, 2^10=1024


1024*1024*1024*4 bytes

1024*1024*4 k bytes

1024*4 m bytes

4 g bytes

五大部件运行过程:内存--(内存控制器:寻址)--CPU(控制器)--CPU(运算器)--CPU(控制器)--内存


二、操作系统的发展历程:

1.Unix

CTSS: Compatible Time-Sharing System 兼容分时系统;

BATCH: job1 $$$$$$ job2 $$$$$ job3 ;批处理系统


*进程:活动状态的程序,执行中的程序


2.Multics,

MULTIiplexed Information and Computing Service 

项目应为功能设置太强大、太广泛,而解散,其中的Ken、Dennis、Doog等人均参与该项目。



3.Unix

ken thompson, dennis ritchie,dogg

为打星际旅行,寻找到一个DEC生产的PDP-7,(当时版本为PDP11)


开发小型的文件系统


Unics:  (后改名为Unix)

Uniplexed  Information and Computing Service 


Unix:汇编语言,B语言写程序 

C语言:兼具低级语言特性的高级语言

1973:用C重写Unix



Berkeley, BSRG兴趣小组, 

1977 Bill Joy 【SUN创始人】,创建BSD发行版: 

1980, DARPA, 美国国防先进研究项目局,需求开发 TCP/IP,BSD获得授权。

Unix中世纪,为版权打官司,闭源;

现在主要Unix发行版: System V, BSD Lite

BSD: FreeBSD(386平台), OpenBSD, NetBSD

4.Windows


Bill Gates :

QDOS

QDOS+GUI=Windows 1.0

VAX(VMS)+GUI+QDOS=widows NT

WindowsNT+OS/2=Windows Vista & Windows 7


5.Linux:

Linus 芬兰,赫尔辛基大学

Linus, Linux


Richard Stallman, GNU(GNU is Not Unix)运动, Free

GPL: General Public License (free)

①自由学习,自由修改;

②处于任何目的获取源代码;

③可以自由分发源代码;

④自由创建延伸版。

https://www.gnu.org/copyleft/gpl.html

https://www.gnu.org/licenses/gpl-2.0.html

LGPL: lesser GPL

gcc, gnu c complier,编译器。

FSF: Free Software Fundation 自由软件基金会

X window:开源,遵循GPL协定。 图形管理协议。


Stallman 试图开发HURD内核,作为操作系统。但进展缓慢。


Linux 1.0, Unix-like 类Unix系统。

开发及版本控制:

patch: Larry Wall(语言学家), perl,相当于版本控制软件


GNU, Linux = GNU/Linux


6.MAC OS

脱身于BSD,乔布斯

7.MINIX: Andrew, 4000行


三、经验教训总结:

Unix的历史教训:

别和低价灵活的方案较劲;

越开源越繁荣;


Uinx的哲学基础:

①让每个程序只做好一件事;如果有新任务,那么就新启一个程序,而不要在原程序中增加功能;

②假定每个程序的输出,都会做为另一个程序的输入;输出中不要有无谓信息干扰;不要交互式输入;

③尽可能早地将设计和编译的程序投入试用,哪怕是系统级的程序也不例外;

④使用工具而不是人力来减轻负担;


简而言之:一个程序只做一件事,并做好;程序间要能互相协作;程序要能处理文本流;


Rob Pike: C语言大师:

①除非你确定,否则不要轻易修改代码;

②评价算法复杂度:O(n),只有当n很大的时候,才能体现出花哨的算法的优势来,但是n通常很小;

③数据压倒一些,即编程的核心是数据。



四、操作系统介绍:


1.计算机结构简介:

底层硬件

系统级开发OS-- C、C++

系统级开发库(System Call)--C、C++

提供共享功能模式,作为程序组成部分而存在,是指是指令功能模块;

减少程序体积

Windows:dll: dynamic link labrary

Linux:so: shared object

应用开发App-Shell --Perl、Python

用户

2.CPU架构类型:

①复杂指令集

X86:Intel,AMD,32Bits-->PC Server

X64:ADM64                -->PC Server

ARM:只做技术规范,后给三星、高通生产。知本主义,32Bits & 64Bits

②精简指令集

IBM Power 高性能,高价格

PowerPC 高性能,高价格

SUN Sparc,Unlrasparc

摩托罗拉 M68000 M68k

惠普 Alpha

2.OS的功用:

1、将硬件规格抽象为系统调用(System Call);硬件管理

2、进程管理;多任务,分片

3、文件系统;

4、硬件驱动;

5、网络协议栈;

6、安全功能;

7、内存管理;

3.shell:用户接口,用户与OS交互。


*终端类型介绍:

a.MainFrame框架介绍:

主机--分屏器--终端(n)

Linux模拟了MainFrame框架的模式。

b.分类:

物理终端--控制台--/dev/console

虚拟终端--tty --/dev/tty(n) 

@@@ tty @@@:显示当前终端;

Ctrl+Alt+F(n):切换到tty(n);默认tty7为图形终端;

伪终端--SSH或Telnet远程连接打开的终端--/dev/pts/(n)

串行终端--  --/dev/ttys(n)

图形终端--GNOME & KDE -- Ctrl+Alt+F(n)

启动终端:$startx Ctrl+Alt+F7

后台启动:$startx & Ctrl+Alt+F7

第二次启动:$startx -- :1 & |Ctrl+Alt+F8

第三次启动:$startx -- :2 & |Ctrl+Alt+F9

①CLI:命令行接口,Command Line Interface

sh, bash, ksh, zsh, csh, tcsh

用户工作环境:

命令提示符:

root:#

普通:$


作用:提供命令行界面;

 提供编程界面;

@@@@ echo $SHELL:显示当前shell @@@@


②GUI:图形用户接口,Graphic User Interface,提供桌面环境

X window:图形界面管理协议

Gnome:C语言开发,gtk环境

KDE:C++开发,QT环境

Xfce:轻量级

③用户:

管理员:管理权限;

命令提示符:#

普通用户:系统资源使用权限

 命令提示符:$

④定制shell工作环境:通过内置变量实现:[变量的实质是内存空间]

变量赋值:VAR_NAME=VALUE

echo $VAR_NAME:显示变量值

echo $SHELL:显示当前用户shell

echo $PS1:显示命令提示符信息

PS1:定义命令提示符前的信息:

\u:用户名称

\h:主机名称,短名称

\H:主机名称,长名称

\w:当前路径,相对路径

\W:当前路径,绝对路经

\$: 提示字符

定义方法:

export PS1=

export PS1=‘\033[3(n)m***\033[0m‘*其中n表示1-7的数字,代表其中颜色;




4.软件及软件接口:

①接口:

API:Application Programming Interface,应用编程接口;为库的调用规范和接口;

POSIX:IEEE制定的统一的API规范,前身POS(Portable Operating System)

ABI:Application Binary Interface:编译后二进制源码与内核、CPU相关,不同平台及操作系统均不兼容。

②自由软件:

GPL:较为严格

LGPL;Lesser GPL

Apache:较为松散

BSD:较为松散



5.系统运行模式:


①用户模式:

②内核模式:

程序在运行时,一般只使用普通命令集。

当程序需要调用库时,库做系统调用,从而软中断,系统做运行模式转换。

CPU指令集分为四层:

环0,硬件级别调用,只用内核才有权限

环1,未使用

环2,未使用

环3,普通命令集,


五、Linux发行版:


1、Linux发行版简介:

Linux:项目源代码,独立存在;

常见开源协定:****开源软件也是有版权的!!**** CopyRight & CopyLeft

GNU:GPL开源协定

gcc, bash, vim, openssl

Apache: Apache开源协定

BSD: BSD开源协定

Linux发行版:

Kernel+GNU程序+系统安装程序


Linux内核

网址:https://www.kernel.org/

最新版本:3.19.2

version: major.minor.release

major: 主版本号

minor: 次版本号

release:发行号,修正号

2、三大常见Linux发行版:

①Red Hat

Fedora:桌面版

CentOS:社区企业版,Community ENTerprise OS 

RHEL:企业版,Red Hat Enterprise Linux

*CentOS与RHEL完全兼容。

②slackware

S.u.S.E

OpenSUSE:北美

③Debian

Ubuntu

3、其他常见Linux发行版:

Gentoo: 高级发行版

LFS:linux from scratch

kali:主要用于安全测试领域;

Android:java虚拟机

Linux + java vm + android

ios:

基于FreeBSD

开发采用object-C


六、Linux 哲学思想:

一切皆文件(包括硬件);

由众多目的单一的小程序组成;

组合小程序完成复杂任务;

尽量避免跟用户交互;为了方便脚本编程实现程序自动化运行;

使用文本文件保存程序的配置数据;


K.I.S.S:Keep It Simple, Stupid.


七、Linux的文件系统:

①一切皆文件;

②层级格式的树状结构:

③数据类别:

元数据(metadata):索引文件

数据(data):文件内容

④路径:

路径分隔符:/

相对路径:从当前位置开始定义的路径表示方式


绝对路径:从根开始定位的路径表示方式

④文件表示方法:

a.名字

严格区分大小写

可以使用除了/以外的任意字符

b.数字:inode

⑤目录:

家目录/主目录:

/root:

/home/USERNAME

工作目录/当前目录:working directory:

#pwd: print working directory

八、Linux命令:

1.分类:

内建命令:buildin,shell自带的基本命令;

外置命令:独立于shell之外的有这可执行程序文件:

#type CMD:查看命令类别


2.命令使用方法:在命令提示符下键入命令;

命令书写格式:COMMAND OPTIONS ARGUMENTS

例:ls -a /root

OPTIONS:选项

形式:

   -CHAR:短选项,多个段选项可以合并;

   --WORD:长选项,

功能:定义命令运行行为


ARGUMENTS:参数

功能:致命命令的作用对象。

!注意:有些选项自身也可以带参数,用于指定选项的作用方式或者作用对象;

例:mkfs -t btrfs /dev/sda3将/dev/sda3格式化为btrfs文件格式;

3.命令使用帮助:

===================================================

九、总结:

1.命令总结:

-----------------------------------------------

#tty:显示当前终端类别

#startx &:启动图形终端,后台 Ctrl+Alt+F7

startx -- :1启动另一个图形终端 Ctrl+Alt+F8

startx -- :2启动第三个图形终端 Ctrl+Alt+F9

#echo $VAR_NAME

echo $LANG  :查看当前系统默认语言

echo $SHELL :显示当前默认shell

echo $PS1   :显示命令提示符信息;

\u:

\h

\H

\w

\W

export PS1=[\u@\h \w]\$*默认形式,可依据上面选项更改

export PS1=‘\033[3(n)m    \033[0m‘*n=[1-7]数字,代表不同颜色,可以更改文字的默认颜色;


#pwd:查看当前工作路经

#type CMD:查看命令类型 

--------------------------------------------------------

2.作业问答:

a.什么事GPL,有设么限定?

    3.书籍推荐:

     《穿越计算机的迷雾》

    《上帝掷骰子吗——量子物理史话》


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。