首页 > 代码库 > Linux入门(一)

Linux入门(一)

一、Linux基础入门

获取知识--->把知识转换成技能

把知识转换成技能;

1.给你一份文档,你就能够做出来,//可能需要数百遍的练习

1.把知识转换成技能的速度

2.把技能转换成生产力的速度

3.只看结果,不看努力

2/8法则,有20%的人,掌握着80%的技能


Tools介绍:

Adobe Acrobat Professional7.0 200M //编辑PDf文档

VMware workstation version 12只有120M,短小精悍

32位OS的寻址能力只有4G=2^32次方=4*2^10M=4*2^10*2^10KB,只有3.2G内存能够用

vmware依赖于虚拟化

Edram //拓扑图绘制工具

FeiQ //局域网聊天工具

latern-installer-beta //翻墙工具,效果一般

subline //文本编辑工具

kwrite //linux下的文本编辑工具

kate //linux下另外一个文本编辑器

picpick //截图工具

putty //xmanager,ssh协议的客户端工具

WPS 有linux版本的


文本流:1278$233$990

//编辑器见到$后就换行,在计算机上存储的都是01,代码

主动学习和被动学习和巩固能力:

    主动学习:

做总结,动手实践:40%

讲给别人:70%

写博客://一周时间

    what,why,when,who, how;

    被动学习:

听课:10%

笔记:20%


二、运维介绍,大纲

第一阶段

Liunx入门:操作系统的介入概念,常见命令

存储知识,lvs,raid,LVM,crontab,{grep,awk,grep}

gzip,bzip2,xz

Linux系统管理:rpm包,yum使用

Linux服务

{DNS,CDN,vsftpd,NFS,samba}

httpd,lamp,lnmp,SSL

cache:memcached,varnish缓存系统

DB:mysql(mariadb)

安全:

HTTPS,selinux,iptables,认证模块{nsswitch,PAM}

编程:

shell

负载均衡集群:

硬件:

软件:lvs,haproxy,nginx,ats,perlbal,heartbea

Linux Cluster:

LB Cluster 负载均衡集群,LVS实现负载均衡

HA cluster Keepalived 保证LVS高可用

keepalived,heartbeat,haproxy

Linux Ops:自动运维工具

ansible//适用于中小企业环境使用的

cobbler

Linux Monitor:zabbix

小结:

入门,服务,安全,shell,HA,LB,自动,监控

第二阶段

HTTP的相关知识

tomcat,lnmt,lamt,session replication(tomcat内置的回话复制)

分布式存储系统:

MogileFS,GlusterFS,

LB cluster:haproxy、keepalived

HA Cluster:corosync+pacemaker,pcs,crmsh

MySQL:HA Cluster、MHA(第三方mysql高可用机制),备份和回复,MySQL replication(复制),read-write splitting分离

NoSQL:redis,mongodb,HBase

运维工具:puppet[saltstack],不太成熟,cobbler

虚拟化:

linux操作系统原理,虚拟化技术原理;

KVM虚拟化应用详解;更好用,

xen使用不再多,当KVM出来之后

虚拟化网络:SDN软件定义网络

OpenStack云栈,//不仅仅能够借助于虚拟化实现,并且能够管理物理机

//而且能够和容器结合起来

Docker:容器,容器云

ELK stack:ElasticSearch搜索引擎,不仅仅能够搜索日志,基于文档存储

logstash:日志收集工具

Kibana:日志展示工具

大数据:Hadoop,热在研发,并行存储及分析平台

HBase,Hive 在hadoop之上

Storm,Spark 可以在hadoop之上,也可以不

系统优化:

Python编程:只介绍语法,能够看懂别人的工具就行了,并不到研发


小结:

WEB{varnish,cdn,tomcat},集群架构实战,互联网集群架构,Openstack

Hadoop,KVM,NoSQL{mogileFS,FastDFS,MongoDB},ELK{logstash、kibana}

Docker{openvswitch},系统调优,监控(nagios,zabbix,cacti),

运维自动化{puppet,ansible,cobbler,saltstack,func,fabric}

Git,Python

IT技术领域:

    研发:

硬件:接口

CPU(运算器和控制器)、内存、输入、输出

机器语言:二进制指令,二进制数据

软件:

            汇编语言:最接近于机器语言,低级语言{汇编器)

    芯片制造商,为自己的芯片提供,每个芯片和另外一个芯片的通用性是不一样的

    高级语言:c,C++(编译器)

//大多数的高级语言,会先转换成汇编程序,然后再次转换成机器格式

    系统级:c,C++,代码量较大,操作系统

    应用级:java,Python,接近于人类,但是距离机器愈来愈远

    应用程序,开发周期短:ansible,puppet,....

程序写的程序代码:编程语言:

语言层次图:

|人类语言

|----------------------------------

|高级语言(应用级)//java,Python|

|----------------------------------

|高级语言(系统级)//c,C++      |

|+++++++++++++++++++++++++++++++++|

|低级语言(汇编)//驱动

|=================================|

|机器语言(0,1)

应用:

Linux运维:linux生态圈中的应用程序的应用

shell脚本编程:让某些应用功能能够自动完成;

Python:非常高级的语言,比java高级,实现起来比较简单

ansible,openstack//是使用Python写的

DevOps:

Development:

Operation:

三、操作系统发展

ENIARC:

CPU:运算器:负责计算

控制器:负责控制总线 //运算器和控制器是最核心的

寄存器:存储数据

缓存:一级、二级、三级缓存 

                    //寄存器和缓存,是为了提高计算机的性能的辅助性工具

存储器:内存,RAM(随机访问存储器)

Input:下指令,提供数据等

Output:输出数据等

指令集:CPU能够支持的所有的运算的集合

普通指令:+,-,等

特权指令:影响到其他程序的指令

一个单位:8bit,

1Bytes=8bits

内存编址:

32bit cpu:32根线,每根线只有0和1两种状态

//最多能够引用2^32次方个不同位置

//最多能够理解,4G个寻址

也就是说32bitcpu,最多只能使用4G的内存

程序=指令+数据

程序想要运行:

1.从disk加载到memory中

2.cpu从内存中加载指令和数据,进行计算

指令和数据都是被加载到内存中的

内存;编址的存储单元

过程式编程语言:

顺序执行:

循环执行:将整个循环体执行n次

选择执行:仅执行其中的一个分支,

寄存器:保存下一条指令的位置,

指令寄存器,数值寄存器

//例如做加法运算,第一次取第一个数值,第二次取第二个数值

//数值保存在数值寄存器中

CPU的缓存越大,命中率越高

内存只有1600MHz,CPU已经有4GHz

cache is king//缓存为王

cpu快,但是内存慢,中间层:CPU缓存

磁盘:既是输入设备,也是输出设备

3GHz:1s内能够做3G次操作,1s内处理0和1,的个数

不同的CPU所提供的微码编程接口是不同的

操作系统:由驱动演变而来,早期是没有OS概念的,后来

为了写一个通用的驱动,(驱动也有专用的)让程序能够跨平台运行

因此出现了OS

操作系统:

batch:批处理系统

job1$$job2$$job3 //计算机在某一时刻,只能够做一件事情

多任务:multi task//UNix,Linux多任务,操作系统

一个计算机同时运行多个程序

问题:一个程序的运行,占用另外一个程序的空间,导致混乱

解决:把内存划分为多个片,第一个程序占用第一片空间,第二个占用第二个

CPU划分时间片,进行分配

问题:需要一个仲裁者,进行分配时间片和内存空间

最早期的Unix是用汇编语言写的

1972年之后,Dennis Ritch使用C语言重新编写了Unix

但是每一种硬件,都不通用,因为底层是不同的

程序员写的程序:高级语言

编译器

{各种不同的硬件厂商生产的硬件}

//在C之下,还是又汇编的

1974年《美国计算机通信》Unix公之于众//走出bell实验室

当时美国对AT&T进行反垄断,当有人要的时候,必须无偿送出Unix

广为流传,因此发展迅速,

BSD(Berkeley system Distribution)

1980:DARPA

QDOS(quick and dirty operating system)

//早期bill gates买别人的,然后修改后,变成自己的卖给了IBM

//聪明的艺术家复制,伟大的艺术家偷窃

GNU:GNU is not unix

GPL:general Public license

//free:freedom,使用,获取源代码免费

FSF:free software foundation

X-Window:GPL

gcc:gnu c complier

vi:visual interface //但是这些程序都是泡在unix之上

... ...

UNIX分支:

    SUN:solaris

    IBM:AIX

    HP:HP-UNIX

    MACOS:


四、Linux基础入门

Linux 遵循GPL协定

BSD由于官司缠身,很多早期的研发者,纷纷转向linux

linux是由互联网开发的,但是TCP/IP和HTTP协议已经流行

larry wall:使用diff和patch可以在原有的系统上打补丁,

使得linux快速成长

CPU切片,内存分段,启动进程,以及关闭进程,都是OS的功能

负责对硬件进行控制

从OS角度来说:进程只占用了CPU的一个时间片,和内存的一片或多片

从进程来说:真个CPU都是我的,内存也是独占的,没有其他进程

linux,unix指的是kernel,而不包含上层的各种应用

内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。   

内核,指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。

完整的OS:

kernel+Application

狭义的OS:kernel

GUN的所有免费软件,都是跑在Unix之上的,

而Linux早期宣布的,linux只是kernel

www.top500.org 

OS的接口有两类:

    GUI:graphic user interface

    GNome:c,gtk研发环境

    KDE:c++,QT研发环境

    FACE:

    CLI:command line interface

    bash,zsh,sh,csh,ksh

OS的功能:

    驱动程序

    进程管理

    安全

    网络功能

    内存管理

    文件系统

    ...

OS之上有很多的软件,有一个特定的应用程序,用户接口

用户通过用户接口,进行程序的启动和关闭

OS把底层的复杂接口封装起来,然后对外提供更为简洁的接口//system call

把system call再次封装为更简单的接口:库,方便程序员的编写

程序员,写程序可以直接调用库,或者直接调用OS

|程序员写程序|

|-------------| //只需要调用库接口,如果直接system call的话,需要调用很多接口

|lib  |       | //libraries call

|-------------|

|OS           |  //system call

|—————————————|

|硬件接口     |

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

API:application program interface//自己写的程序,供别人调用,调用函数的时候使用

但是自己又不想告诉别人源码

//程序员面对的编程接口

POSIX:portable operating system,任何一种遵循POSIX标准的API

在A上能够运行,也能够在B上运行。

POSIX:是一个统一的API标准,要求提供统一的调用接口

ABI:application binary interface//

//程序应用者面对运行程序的接口

GNU:

源码:编译成为 二进制格式

gcc,glibc,vi,linux//全是源码的

//源码编译,需要编译程序(gcc),但是gcc也是源码的需要被编译

//GNU发布的各种程序都是源代码

发行商:把linux,glibc,gcc,vi等源码拿过来,编译成一个OS

例如redhat

最主流的发行商:

debian:kali,ubuntu,knopix,mint//社区,没有商业公司支持

//更难学,技术要求更高

arch:archlinux 不是主流发行版,但是也比较出名

slackware:suse,opensuse //德国,界面华丽,而且简介,强悍

redhat--->redhat enterprise{RHEL},centos{commutity enterprise OS}

    \> fedora Core:社区维护个人版redhat

//可以把centos认为认为RHEL的山寨版

各发行商,从linux官网拿到的都是源码,

然后自己编译好之后,提供稳定版本

发行版本号:

Linux:major.minor,release //主,次,修改(BUG)

www.kernel.org

GNU:

vi

gcc

发行版也有自己的版本号,这个和内核没有关系

RHEL:5.x,6.X,7.X

GPL和BSD以及Apache开源协议:

GPL:开源和免费,”传染性“

            允许免费使用,修改,但不允许修改后添加的代码作为闭源软件发布和销售

    这也就是我们为什么能用免费的Linux,以及各种商业公司开发的免费软件了

GPL协议的主要内容:

    使用类库引用,修改后的代码或者衍生代码,也必须采用GPL协议,也就是说,你的软件中有我的GPL代码,则必须开源和免费

        BSD:声明,不必免费

    再发布的源代码有原有的,则必须带有源代码的BSD协议再发布的二进制类库/软件,需在软件的文档,和版权声明包含原有的BSD协议不可以用开源代码的作者,机构名字做市场推广

    //商业集成,首选

Apache:

    和BSD类似,允许修改后再次发布

        android:

LGPL:

    主要为类库使用设计的开源协议,允许包含遵循LGPL类库的商业软件引用和发布和销售


1.PS1,PS2,PS3分别表示哪些内容:


    1、PS1——默认提示符 如下所示,可以通过修改Linux下的默认提示符,使其更加实用。在下面的例子中,默认的PS1的值是“\s-\v\$”,显示出了shell的名称的版本。我们通过修改,可以使其显示用户名、主机名和当前工作目录。


    2、PS2——再谈提示符

一个非常长的命令可以通过在末尾加“\”使其分行显示。多行命令的默认提示符是“>”。 我们可以通过修改PS2 ,将提示符修改为"continue->" 。

    3、PS3——Shell脚本中使用select时的提示符

你可以像下面示范的那样,用环境变量PS3定制shell脚本的select提示:

参考:

http://os.51cto.com/art/201205/334954.htm


2.随机数脚本:

产生随机数,并排序

#!/bin/bash

#

file=`mktemp a.XXXX` 

for i in {0..9} ;do

a[i]=${RANDOM}

echo ${a[i]} >> $file

done

sort -n $file


3.yum命令的update和upgrade

yum update和upgrade的区别

yum -y update //升级所有包同时也升级软件和系统内核

升级所有包,改变软件设置和系统设置,系统版本内核都升级

yum -y upgrade

升级所有包,不改变软件设置和系统设置,系统版本升级,内核不改变

yum -y update //升级所有包同时也升级软件和系统内核

yum -y upgrade //只升级所有包,不升级软件和系统内核


五、附加

http://mp.weixin.qq.com/s?__biz=MzA3OTgyMDcwNg==&mid=2650626943&idx=3&sn=ed38732454d398b9188acdebd4d04b19&chksm=87a459b2b0d3d0a483cf34532aa2c1a6dcf9dbf6b66ea1015e13f9f687e8221f93a7f1ef3b84&mpshare=1&scene=23&srcid=1221kz3W8gtDoGVdYvTb10JW#rd

1.linux主要发行版

Debian:ubuntu,kali---//deb扩展名

slackware:SUSE

Redhat:RHEL,centos,Fedora Cora--//rpm包管理

2.OS应该提供的功能

1、用户界面User interface

2、驱动管理Device drivers

3、网络通信Networking

4、文件系统FS

5、进程管理processing management

6、内存管理Memory management

7、安全机制security

3.命令

ifconfig  -s//显示摘要信息

echo

-n 不换行

-e 让转义字符生效

\n换行,\t水平制表符

tty

startx

export

aaa=bbb

export aaa //加入环境变量

env |grep aaa

export -n aaa //删除该变量

env |grep aaa

export PATH=$PATH:/usr/local/bin  //添加新的变量

pwd

-L  显示逻辑地址

-P  目录是软连接,显示实际物理地址

hitory

n

-a 添加记录

-r 从文件读取命令

-w 写入到文件中

-c 清空

!21 执23:00

-r  now

-r +30 ‘reboot now‘  //30min后重启,并提示reboot now

poweroff -w //只显示关机警告,并不真正关机

poweroff

-f 强制

-p 断电停机

-w 只显示警告

reboot

hwclock和date //UTC:universal time coordinated世界协调时间

clock和hwclock作用一样

clock --set --date="12/22/2016 21:05:01" 设置硬件时钟时间

date +%Y-%m-%d-%H-%M-%S

4.获取帮助信息:

内置命令:help bash

外部命令:man httpd

其他方式获取:

   1)info:获取Linux在线文档;

   2)合理利用搜索引擎Google来获取帮助信息;

   3)程序自身的帮助文档,有README、INSTALL、Changelog等;

   4)程序的官方文档

man帮助信息:

man1:用户命令

man2:系统调用,内核函数

man3:C库调用

man4:系统设备手册,包括特殊文件

man5:配置格式手册

man6:游戏的使用手册

man7:杂项

man8:系统管理手册,只有根用户才能使用


图1:计算机硬件系统

根据冯诺依曼计算机体系结构模型,中央处理器(CPU)与内部存储器(Memory)和I/O(输入/输出)设备合称为电子计算机三大核心部件。

技术分享

中央处理器(CPU,Central Processing Unit)

运算器主要由算数逻辑单元ALU和通用寄存器组成,主要用于完成算术运算和逻辑运算。


控制器是整个计算机的控制中心,它的主要功能是周而复始地取指令、分析指令,在根据指令功能向其他部件发出控制信号以执行指令。



存储器(Memory)

存储器主要用于存储计算机的程序和数据,根据作用可以在分为内部存储器(内存)和外部存储器,内部存储器容量小,速度快,与CPU通过系统总线相连,CPU可以直接访问。而外部存储器速度慢,CPU无法直接访问里面的数据,常用的外部存储器有硬盘、u盘、光盘等。


I/O设备(输入/输出设备)

输入设备用于将程序和数据输入到计算机存储器中,通常输入设备有鼠标、键盘、扫描仪、麦克风等。


输出设备通常用于将计算机存储器中的数据输出。常用的输出设备有显示器、音响、打印机等。


所有的外部设备都无法和CPU直接通信,必须通过接口(Interface)中转后才能和CPU通信。独立显卡、独立网卡等是典型的计算机接口设备。


计算机大多采用总线结构,系统总线将CPU。内存。各种接口相连接。计算机中的总线对外留有各种形式插接口,用于将计算机内的接口设备与CPU相连接。





图2:软件系统

技术分享



图3:linux发行版

技术分享

Linux入门(一)