运维部分:

Linux入门

系统基础

系统管理

shell脚本编程

服务和安全管理

AMP:httpd, MySQL(MariaDB),PHP

NMP:Nginx, MySQL(MariaDB),PHP

FTP,NFS,SAMBA

iptables,tcpwrapper

cache: Memcached,varnish

Linux Cluster:

LB: lvs, nginx

HA: keepalived

Ops:ansible, cobbler, zabbix


架构师部分:

AMT: httpd, MySQL(MariaDB), Tomcat

Tomcat Cluster

nginx,httpd

session sticky

session replication cluster

seesion server

LB: HAProxy

HA: Corosync + pacemaker

分布式存储系统:

CAP,BASE

mogilefs,glusterfs

MySQL MHA:HA cluster

MySQL 备份和恢复

MySQL replication及r-w splitting

Ops:puppet (saltstack)

虚拟化:

Linux系统原理,虚拟化技术原理

虚拟化网络:SDN(软件驱动网络,软件定义网络)

kvm虚拟化

Openstack 云栈

Docker:容器,容器云

ELK Stack:

Elasticsearch:倒排索引搜索引擎

Logstash:日志收集工具

Kibina:

大数据处理平台:Hadoop version 2,

系统优化

IT:

Infomation Technology,信息技术

Internet Technology,互联网技术


IT技术领域两大岗位:

研发:

硬件研发:

设计电路板


软件研发:

设计程序


应用(运维):

就是把别人开发的软件用好。

在Linux管理领域中通常称之为运维。

因此运维就是在应用其他建构在Linux生态圈中的各种应用程序的应用。

利用脚本的自动化特性,能够让某些应用工作能够自动完成。


冯·诺依曼体系:

运算器,控制器,存储器,输入设备,输出设备


内存

记忆体

主频:3.xGHz

DDR3:1333 1600MHz  DDR4:2133Mhz


程序:

面向过程语言:指令 + 数据

以指令为中心,围绕指令的执行选择所需要的数据;

面向对象语言:算法 + 数据结构

以数据(对象)为中心,围绕着选定好的对象组织算法;

Linux的发展历程

分时系统;电话  

AT&T  贝尔实验室  GE(PDP-11)  MIT

multics


Ken Thompson,Space Travel, PDP-7 Unics, Algo, Bacis

Denis Richey, C 


SystemV


Berkeley --> BSD Unix  BSD lite 4.0


Dos   Dirty OS


Xrox PARK 施乐


Novell 


IBM——AIX

SUN——SUNOS(Solaris)

HP——HP-UX


1985 Richard Stallman,GNU

GNU is NOT UNIX

Open Sources,开放源代码


GPL:GNU Public License,

GPLv1,GPLv2,GPLv3

LGPL


开源:自由获取,自由修改,自由分发,自由开发衍生版;


gcc:GNU C Compiler

ls


GNU/Linux


一个完整的操作系统 = Kernel + Application


李纳斯·托沃茨:李纳斯·托沃兹(LinusTorvalds),当今世界最著名的电脑程序员、***。Linux内核的发明人及该计划的合作者。托瓦兹利用个人时间及器材创造出了这套当今全球最流行的操作系统内核之一。使自由软件从产业思想运动演变成为市场商业运动,从此改变了软件产业,乃至IT产业的面貌。


***(没有恶意的)

Hacker(有恶意的***)


Andraw:Minix


1990,Freax,新闻组,Linux 0.01 0.02 0.03 0.99 ... 1.0


1991年10月,Linux 1.0

1994年,Linux 2.0


大教堂式

集市式


1994年北卡莱罗纳,Redhat,


Linux发行版:

RedHat

Debian

S.u.S.E


Linux的内核版本:

Linux-major.minor.release

major:主版本号

minor:次版本号

在2.x的时代里,

奇数:测试版,开发版;develop

偶数:稳定版;stable

release:小改动;


获取Linux内核的源代码:

http://kernel.org


kernel的功能:

驱动硬件

资源分配

进程管理

文件系统管理

安全防护

...


API:Application Programming Interface,应用编程接口;

ABI:Application Binary Interface,应用二进制接口;


CPU:

X86:

ix86:32bit

x86_64:64bit

ARM:

IBM:Power  AIX

HP:alpha  HP-UX

Apple:Power PC, ppc  MACOS

S.U.N:sparc SUNOS---Solaris

Motorala:M68000,M68K


Cross Compile:交叉编译;


在Linux系统中的应用程序一般由四部分组成:

二进制文件

库文件、头文件

配置文件

帮助文件


虚拟化:将底层硬件资源抽象为用户更容易读懂和使用的逻辑抽象层的技术;

VMWARE Workstation

VirtualBox 

HyperV

虚拟化网络:

桥接:

让虚拟机和物理机利用物理网络接口完成通信。

虚拟机可以访问互联网。

仅主机:

让虚拟机和物理机利用被虚拟出来的VMnet1网络接口完成通信,通信被限定在当前物理主机内部;


系统安装:

规划分区布局:

选择手动分区

"标准分区"

顺序:

1. /boot  200MB

2. swap   2048MB

3. /      50GB


为CentOS 6/7配置网络配置:

CentOS 7:图形界面的右上角选择有线配置

IPv4:

172.16.X.Y

255.255.0.0


CentOS 6:图形界面桌面的右上角选择网络图标点击右键选择编辑连接

选择System eth0,选择编辑,选中"自动连接",选择IPv4,添加,配置IP地址即可;

172.16.X.Y

255.255.0.0


注意:

1.将所有的虚拟机的网卡的工作模式设置为"仅主机(Host_Only)"

2.为物理机上的虚拟网络接口"VMnet1"配置IP地址:172.16.X.Y 255.255.0.0


在物理机上安装Xmanager或者SecureCRT,利用此类工具远程连接至CentOS主机


开始使用CentOS:

GUI:GNOME

CLI:

命令提示符:

[root@localhost ~]# 


root:当前成功登录系统的用户账户名称;

localhost:当前主机名称的主机名部分;

~:当前用户操作时的工作目录,~意思是家目录;

#:用户身份提示符;

#:表示超级用户身份

$:表示普通用户身份


命令的格式:

COMMAND OPTIONS ARGUMENT


COMMAND:本次想要执行的操作,想要发起的进程;

内部命令:也叫内建命令或内置命令;直接内建于shell的命令;

外部命令:通过安装某些应用程序而安装的命令;


OPTIONS:修正命令的执行效果的组成部分;

短选项:

-CHAR

-a, -b, -i, ...

某些特殊的命令还有特殊的短选项:

+CHAR

+C, ...

当同时使用多个短选项时,可以将其合并书写,如:

-a -b -i -c <==> -abci


长选项:

--WORD

--help, --all, --verbose, --list, ...


注意:当一个命令中同时有多个长选项时,不可以合并书写;


注意:

1.有些选项,其选项本身需要参数;

2.有些特殊的命令在写选项时,可以不写"-";有些特殊的命令,在写选项时,一定不能写"-";

3.有些特殊命令的长选项,只使用一个"-";


ARGUMENT(PARAMETERS):此次执行的命令的操作目标对象;

注意:

1.有的命令无需写参数;

2.有的命令必须写参数;

3.有的命令必须要写多个参数;


对应整个命令格式:

注意:

1.在书写命令的时候,COMMAND、OPTIONS、ARGUMENT之间必须使用至少一个空白字符进行分隔;

2.有些命令在执行的时候,OPTIONS和ARGUMENT可以交换位置;

3.由于文件系统的限制,导致命令中的COMMAND、OPTIONS、ARGUMENT必须区分大小写;


获取命令的使用帮助的几种方法:

1.man:针对于外部命令的帮助手册;

man九章:

1.用户命令(所有用户都可以执行的命令)

2.系统调用

3.C库调用

4.设备和特殊文件

5.配置文件格式

6.游戏相关的帮助信息

7.杂项

8.系统管理类命令

9.与内核相关的帮助信息


在每个man手册中都常见到的一些字段:

NAME:程序的名称及相关的功能的简单描述;

SYNOPSIS:命令使用的语法格式;

DESCRIPTION:程序的详细描述信息;

OPTIONS:选项的用法和选项的含义的详细说明;

AUTHOR:程序作者的信息

EXAMPLES:命令程序的使用范例;

REPORTING BUGS:报告程序中所包含的BUG的方式,通常是电子邮件;

SEE ALSO:额外参考的内容

FILE:与该程序相关的其他的文献资料,如配置文件,README文档等;


在帮助信息中可能出现的一些特殊符号的意义:

[]:可以省略不写,也可以根据需要选择使用;

{}:在花括号中一般包含竖线"|",表示,从所有项目中必须选择而且只能选择一个使用;"|"有或者之意;

<>:必须书写的内容;

...:可以有更多内容;


区分内部命令和外部命令的方法:

# type COMMAND

查找结果中显示为"内嵌"或者"buildin"字样的,则为内部命令;

其余的结果都为外部命令;


内部命令的帮助获取不使用man手册,而使用help命令;

# help BUILDIN_COMMAND


2.使用whereis命令获得帮助;

可以查看程序的二进制文件、源代码文件及帮助手册所在的位置;


3.whatis命令

可以获取被匹配到的命令的手册页的描述信息;


4.which命令

可以显示命令的别名的定义方式和命令的二进制文件的路径;


5.info命令

info COMMAND

获取命令的在线帮助文档;


6.有很多的程序有自带的帮助文档;

/usr/share/doc/APP_NAME-VERSION/

README:程序的相关信息;

INSTALL:程序的安装信息;

CHANGES:程序的版本更迭的历程相关的信息;

LICENSE:程序所遵循的许可证类型;

GPL

LGPL

BSD

Apache

MIT


7.搜索引擎

Google

mysql filetype:pdf

mysql site:51cto.com


8.相关的网站站点中的文档信息

wiki

FAQ


9.程序的发行方的官方站点提供的官方文档


10.参考书籍:

O'Reiley

Wrox

电子工业出版社


简单的系统管理类的命令:

注销:退出登录

exit

logout

Ctrll+d


重新引导:将运行于内存中的所有进程关闭,关闭系统内核,对于所有的计算机部件进行重新通电,加载内核,启动应用程序,打印登录提示符;

reboot

shutdown -r {#|now|time}  (推荐)

#:数字,表示相对时间,即#分钟之后重新引导;

now:现在,立即重新引导,相当于-t 0;

time:12:00

init 6


关闭系统:将运行于内存中的所有进程关闭,关闭系统内核,对于所有的计算机部件断电。

halt

poweroff

init 0

shutdown -h {#|now|time}  (推荐)


Linux的哲学思想:

1.一切皆文件

Linux把几乎所有的数据和资源都抽象(虚拟)成文件的形式,甚至包括硬件,网络通信设备所使用的套接字以及管道都是如此;


文件:一组有边界的位于存储设备中的流式数据;


2.由众多的功能单一的小程序组成,却可以实现复杂任务;

功能单一:每个小程序只做一件事,只实现一个功能;并且要做到最好;

复杂任务:可以根据业务逻辑或业务类型,尽可能完美的组合多个小程序,使多个小程序相辅相成,将功能发挥至极致;


3.尽量避免与用户直接交互;

在程序化,系统化,平台化,自动化的运维空间中,人是极其易出错的一个环节;尽量避免与用户直接交互可以尽可能的保证结果的准确性和过程的高效性;易于以编程的方式实现自动化任务的实施;


4.使用纯文本文件保存程序的配置信息;

在程序出现错误或者执行不畅的时候,可以使用文本编辑工具分析程序的错误原因,而不必依赖于二进制文件。


文件系统:

文件是分成两部分存放:

元数据:描述文件的属性

数据:文件的内容


分层编址方式:


在文件系统中,基于文件名引用文件,按名来进行文件存取。

在文件系统中,对于文件名有一系列的规定:

1.文件名不能包含"/"字符;

"/":表示根文件系统;所谓根文件系统,即为Linux文件的原初起点;

"/":表示路径的分隔符;

2.文件名的长度不能超过255字符;

3.在同一位置,文件名不能重复使用;

4.文件名称严格区分大小写;


文件系统使用路径的概念标识文件的位置;所谓路径,就是定位一个文件所在的位置时,所必须经过的目录的层级结构的集合;


文件系统中的路径的描述方式:

绝对路径:

一切以"/"开始查找的路径;


相对路径

一切以"当前工作目录"开始查找的路径;

".":表示当前工作目录;

"..":表示当前工作目录的父目录(上一级目录);


因此也可以说,一切以"."或".."开始查找的路径,叫做相对路径;而且在使用"."表示当前工作目录的时候,可以省略;


如何选择路径?选择绝对路径还是选择相对路径?

如果在查找文件时,目标文件和当前目录不顺路,就使用绝对路径;如果顺路就使用相对路径;


顺路指的是:当前工作目录被包含在绝对路径之中;


家目录:

每个用户登录系统时默认的当前工作目录;也是每个用户的起始目录;

也称为"Home Directory"


任何一个路径其实都是由两部分组成:

文件的基名:

basename

文件的目录名:

dirname

FHS:文件系统层级标准

bin:binary,所有用户(包括普通用户)可以执行的普通操作命令;

boot:引导操作系统启动的静态文件,包括:引导程序,Linux内核,initramfs等;

dev:device,设备

块设备:Block Device,随机访问,指的是能够实现数据存放的设备;

字符设备:Character Device,顺序访问(线性访问),指的是能够实现数据传输和数据处理功能的设备;

etc:External Text configure,存放主机中各应用程序的配置文件;

home:普通用户的默认家目录的根;

lib、lib64:Library,存放应用程序共享库的目录,内核的模块;

media:可移动设备的挂载点;

mnt:临时文件系统的挂载点;

opt:optional,可选的,以前此目录是非常流行的第三方应用程序的安装目录;

root:root用户的家目录;

run:保存一些进程的PID文件;

sbin:super binary,存放那些还有超级用户root能够执行的系统管理类的命令;

srv:存放由系统提供的服务的数据;

tmp:temporary,临时文件目录,系统每30天会自动清理该目录中的在30天以上没有访问过的文件;

usr:usually system root,Linux系统的第二根,现在主要用于安装第三方应用程序;

/usr/local:第三根,主要用于通过编译源代码的方式安装第三方应用程序;

/usr/src:存放第三方应用程序的源代码;

var:variable,变量,可变化的数据,数据库类的文件;


伪文件系统:其中存放的是内存中的数据通过操作系统映射的文件;

proc:process,进程,

sys:system


文件类型:

根据颜色区分文件类型:

黑色或白色:普通文本文件,regular file;

绿色:可执行文件,命令;

×××:设备文件,包括块设备和字符设备;

红色:包文件,包括:软件包,压缩包,归档包等;

深蓝色:目录文件;

青蓝色(天蓝色):符号链接文件,相当于windows系统中的快捷方式;

紫色(粉色):套接字文件;

棕色:管道文件;


根据文件类型的标记区分文件类型:

-:普通文件;

b:块设备文件;

c:字符设备文件;

d:目录文件;

l:符号链接文件;

p:管道文件;

s:套接字文件;


准确的区分文件类型:

file命令

# file /PATH/TO/SOMEFILE

常用的命令的使用方法:

1.echo (printf不用加-e就能执行\n换行 和\t制表符)

echo - display a line of text 回显 例:[root@localhost ~]# echo hello

                                                      hello       

                                       echo是内部命令 [root@localhost ~]# type echo

                                                      echo 是 shell 内嵌


常用选项:

-n:不换行;例:[root@localhost ~]# echo -n hello word

                 hello word[root@localhost ~]# 

-e:使用\所引导的转义序列生效;

                            例如:[root@localhost ~]# echo \\

                                  \

                                  [root@localhost ~]# echo -e \\

                                  \

                                  [root@localhost ~]# echo -e "ab\bc"

                                  ac

\n:换行

                            例如:[root@localhost ~]# echo -e "hello\nworld"

                                  hello

                                  world

\t:水平制表符


2.cd(内部命令)

Change the shell working directory.

切换工作目录:


cd [-L|[-P [-e]]] [dir]([]中的内容统统可以省略)


cd /PATH/TO/SOMEDIR:将工作目录切换至参数所代表的目录;

                   例如:[root@localhost ~]# cd etc/sysconfig/network-scripts/

                         [root@localhost network-scripts]#

cd:将工作目录切换至当前登录用户的家目录;相当于cd ~;

                      [root@localhost network-scripts]#cd  或[root@localhost network-                                                                      scripts]#cd ~

                      [root@localhost ~]# 

cd -:将工作目录切换至此前最后一次的工作目录;

shell提供了两个变量:

PWD

OLDPWD


注意,在SHELL中获取变量值的方法:变量名严格区分大小写;

echo ${VAR_NAME}

cd ~USERNAME:将工作目录切换至指定用户的家目录中;


3.pwd

Print the name of the current working directory.


4.ls

ls - list directory contents

注意:目录的内容是文件名;


ls [OPTION]... [FILE]...


在Linux的文件系统中,所有以"."作为文件名的起始字符的文件,都是隐藏文件;


常用选项:

-a, --all:显示所有文件,包括隐藏文件;

-A, --almost-all:显示除了"."和".."之外的所有文件,包括隐藏文件;

--color[=WHEN]:以不同的颜色来显示查询结果;

-d, --directory:显示目录本身,而不是目录中的文件名;

-h, --human-readable:在显示文件的大小的时候,显示为更加易读的格式;通常与-l选项一同使用;

-l:使用长列表格式显示文件的详细属性;

-rw-------.  1 root root    1458 12月 23 2016 anaconda-ks.cfg


-:表示文件类型;

rw-------:文件的权限位设置;

.:表示该文件是否具有特殊属性或扩展属性;

1:表示该文件被硬链接的次数;

root:文件的属主(所有者)

root:文件的属组

1458:表示文件的大小,在没有使用-h选项时,其单位为字节;

12月 23 2016:文件的时间戳之一,表示最后一次被修改的时间;

anaconda-ks.cfg:文件名


对于设备文件:

~]# ls -l /dev/sr0

brw-rw----. 1 root cdrom 11, 0 9月  24 10:50 /dev/sr0


11, 0:major, minor

major:主设备号,用于标识设备类型,进而确定需要加载何种驱动程序;

minor:次设备号,用于标识同一种设备类型中的不同的设备;


设备号默认使用8位二进制表示,所以默认的设备号的范围是0-255;

-r, --reverse:倒序输出结果

-R, --recursive:递归显示,如果目标目录中有子目录,则递归显示子目录的内容,依次递归下去;

-Z, --context:显示文件的SELinux安全上下文标签;


5.mkdir

mkdir - make directories,创建新目录;


mkdir [OPTION]... DIRECTORY...

-p, --parents:在创建目录的时候,如果其父目录不存在,则优先创建之;

-v, --verbose:为每个被创建的目录显示一条信息;

                       例如:[root@localhost ~]# mkdir -pv /tmp/a/b/c/d/e/f

                             mkdir: 已创建目录 "/tmp/a"

                             mkdir: 已创建目录 "/tmp/a/b"

                             mkdir: 已创建目录 "/tmp/a/b/c"

                             mkdir: 已创建目录 "/tmp/a/b/c/d"

                             mkdir: 已创建目录 "/tmp/a/b/c/d/e"

                             mkdir: 已创建目录 "/tmp/a/b/c/d/e/f"                              

6.rm(默认无法删除目录,可以添加-r实现)

rm - remove files or directories


rm [OPTION]... FILE...

-f, --force:暴力,强制删除;

-r, -R, --recursive:递归删除目录及目录中的内容;

                        例如:[root@localhost ~]# rm /tmp/a

                              rm: 无法删除"/tmp/a": 是一个目录

                              [root@localhost ~]# rm -rf /tmp/a 直接暴力删除tmp/a目录下的所有文件