首页 > 代码库 > 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入门(一)