1.bash的特性之: 变量
程序: 指令 + 数据 或者= 算法 + 数据结构
指令:由程序文件提供
数据:文件,管道,变量,io设备
变量: 变量名+指向的内存空间
变量存储的类型:整数,浮点,字符 。。。。。
变量名:只能包含数字,字母,下划线,且不能以数字开头,程序保留字。(见名知义,)
变量替换:把变量名出现的位置替换为其所指向的内存空间数据。
变量引用:$hostname
2.bash变量类型:本地变量:作用域仅为当前shell进程
环境变量:作用域仅为当前shell进程及其子进程(通常为大写字符)
局部变量:作用域仅为某代码片段(函数上下文)
特殊变量:shell内置的有特殊功用的变量($?;)
位置参数变量:当执行脚本的shell进程传递的参数
查看变量:set env 环境变量export declare -x 撤销变量:unset 变量名 设置只读变量,无法重新赋值且不支持撤销,随shell进程终止而终止。(readonly 变量名 或者declare -r 变量名)
shell脚本编程:利用系统上的命令及编程组件进行编程(过程式编程,解释运行,依赖于外部程序文件运行)
根据运行方式分类:
编译运行(相对速度快): 源代码 -》编译器(编译)-》程序文件
解释运行: 源代码 -》 运行时启动解释器,由解释器边解释边运行
如何写shell脚本:
脚本第一行,定格给出shebang,解释路径,用于指明解释执行当前脚本的解释器程序文件
常见解释器: #!/bin/bash #!/usr/bin/python #!/usr/bin/perl
shell脚本就是命令的堆积,但很多命令不具有幂等性,需要用程序逻辑来判断运行条件是否满足,避免其运行中发生错误。
3.bash的配置文件:
profile类: 为交互式登入的shell进程提供配置
全局:对所有用户都生效 ./etc/profile 和 /etc/profile.d/*.sh
局部:只对当前用户生效 ~/.bash_profile
功效:用于定义环境变量,运行命令和脚本
bashrc类:为非交互式登入的shell进程提供配置
全局: /etc/bashrc
用户个人:~/.bashrc
功效:定义本地变量,定义命令别名
4. 登入类型:
交互式登入shell进程: 直接某终端输入账号密码后登入打开的shell进程;使用su -username命令执行的登入切换。
读取文件顺序:/etc/profile -> /etc/profile.d/*.sh -> ~/.bash_profile -> ~/.bashrc -> /etc/bashrc
非交互式登入shell进程: su username执行的登入切换;图形界面下打开的终端;运行的脚本
读取文件顺序: ~/.bashrc -> /etc/bashrc ->/etc/profile.d/*.sh
5.命令行中定义的特性:作用域为当前shell进程的生命周期
6.配置文件定义的特性:只对重新开启的shell进程有效 (要想立即生效,可用命令行执行一边遍,或让shell进程读取配置文件source /PATH/FROM/CONF_FILE)
7.文本处理工具:
Linux上文本处理三剑客:
grep:文本过滤工具(模式pattern)
sed:stream editor 流编辑器,文本编辑工具
awk:Linux上实际为gawk,文本报告生成器(格式化文本)
正则表达式 Reguai Expression REGEXP
由一类特殊字符及文本字符所编写的模式,其中有些字符不代表其字面意义,而是用于表示控制或通配的功能
分两类: 基本正则表达式 grep egrep -G
扩展正则表达式 egrep grep -E
元字符: 基本正则表达式元字符
字符匹配: .:匹配任意单个字符 []:匹配指定范围内的任意单个字符 [^] :匹配指定范围外的任意单个字符 【 [:digit:]表示所有数字 [:lower:]匹配所有小写字母 [:upper:] 匹配所有大写字母 [:alpha:]匹配所有字母包括大小写[:alnum:] 匹配包含数字 [:punct:]匹配所有标点符号 [:space:]匹配空白行】
匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数
*匹配前面字符任意次,0,1,多次; .*:表匹配任意长度的任意字符; \?:匹配其前面的字符0次或1次,即前面字符可有可无; \+:匹配其前面的字符1次或多次,至少会出现一次; \{m\}:匹配其前面字符出现m次; \{m,n\}:匹配其前面字符至少出现m次最多出现n次;
位置锚定:^:行首锚定; $:行尾锚定; ^$:匹配空白行; ^[[:space:]]*$:匹配空行或包含空白字符的行; \<:词首锚定; \>:词尾锚定; \< \>:匹配完整单词
练习: 找出文件中的两位数或三位数 grep "\<[0-9]\{2,3\}\>" 找出以至少一个空白字符开头,且后面是非空白字符的行grep "^[[:space]]\+[^[:space:]]"
grep: 作用:文本搜索工具,根据用户指定的模式(过滤条件)对目标文本逐行匹配检查,打印匹配到的行。
模式:由正则表达式的元字符及文本字符所编写的过滤条件。(正则表达式引擎)
常用选项:-i 忽略大小写; -o仅显示匹配到的字符; -v反向选取; -E支持使用扩展正则表达式元字符; -A n 显示匹配到的后n行;-B n 显示匹配到的前n行; -C n 显示匹配到的前后各n行.
后向引用:引用前面的分组括号的模式所匹配到的字符。
扩展正则表达式元字符:
字符匹配:一样
次数匹配:?:0或者1次; +:前一个字符至少一次; {m}:其前的字符出现m次;{m,n}“至少出现n次最多出现m次;
位置锚定:一样
分组及引用:()
反向引用:\n
文本查看及处理工具:wc,cut,sort,uniq.diff, patch
wc:word count 能显示文本的行数-l,单词数-w,字节数-c
cut:从文件中的中截取某列 -d:以指定的字符为分隔符 -f:挑选出的字段(1,3-5,9表挑选12459字段)
sort:给文本按一定规则排序 -t:指定字段分隔符 -k:用于排序比较的字段; -n基于数字大小进行排序;-r进行逆序排序;-f:忽略字符大小写 ; -u:消除重复的行
uniq:报告或移除重复的行 -c:显示每行重复的次数 -u:仅显示未曾重复的行 -d仅显示重复过的行
diff:逐行比较两个文件的不通之处 -u:显示不同之处的前几行及后几行默认是3行
patch:打补丁 -R:逆向补丁,还原; -i:打补丁
fstab文件: 设备 挂载点 文件系统类型 挂载选项 转储频率 自检次序
文件=
元数据:indode 存储于inode table中
+
数据:data blocks 存储下级文件或目录的文件名与其inode对应关系 (故文件名存储于上一级目录中)
删除文件:将此文件指向的所有data block标记为未使用状态,将此文件的inode标记为未使用。
复制文件:就是新建文件
移动文件:同一个文件系统,移动文件仅仅是映射inode号而已改变的是路径。不同文件系统分区就是复制数到目标文件。
(软)符号链接:权限 -l 777 (条件:跨文件系统或分区 是目录 )
硬链接:指向同一个inode。
bash脚本文件格式:注释信息(时间,脚本描述,作者等),代码注释,
变量:局部变量,本地变量,环境变量,位置参数变量,特殊变量:$0:表脚本文件路径本身,$#:脚本参数的个数,$*:所有参数,$@:所有参数
数据类型:字符型,数值型,
增强型赋值:变量做某种算术运算后回存到此变量中,let i=$i+n 或 let i+= 1 自增:let i++ 自检:let i--
过程式编程语言的代码执行顺序:
顺序执行:逐条执行
选择执行: 单分支if语句 if 测试条件
then 代码分支
fi
双分支if语句: if 测试条件
then
条件为真时执行的分支
else
条件为假时执行的分支
fi
循环执行:代码片段(循环体)要执行0、1或多次
RAID:Redundant Arrays of Inexpensive Disks 廉价冗余磁盘阵列 优点: 提高IO能力(并行能力),提高其耐用性(磁盘冗余)
级别:多块硬盘组织在一起的工作方式有所不同 分区格式:fd
RAID实现的方式(装系统前,BIOS上设置): 外接式磁盘阵列:通过扩展卡提供适配能力
内接式RAID:主板集成RAID控制器
软件上实现:centos6上的软件RAID的实现。结合内核中的mdadm模式化工具,支持的级别0,1,4,5,6,10,JBOD。模式:创建-C,装配-A,监控-F,管理-r.-a.
级别:(0-6)
RAID-0: 条带卷 strip 简单的来说就是将多块硬盘平行链接在一起的磁盘组织结构
提高了IIO能力,但耐用性降低了,可用于临时或非重要性文件,可用空间为最小空间磁盘*磁盘个数,无冗错能力,最少磁盘数2个。
RAID-1: 镜像卷 mirror
读性能力提升,写性能略有下降,可用空间1*min磁盘容量,有冗余能力,最少磁盘数2个
RAID-4: 奇偶校验 读写性能提升,可用空间N-1 最少磁盘3个,冗余能力:可允许坏一块硬盘。奇偶校验信息单独用一块盘存储,导致该盘负荷相对较大。
RAID-5::奇偶校验 读写性能提升,可用空间N-1 最少磁盘3个,冗余能力:可允许坏一块硬盘。奇偶校验信息交叉存放。每块盘的负载压力相同
RAID6:最少需要四块磁盘,读写性能力提升,有冗错能力,可用空间n-2.可允许坏2块盘,校验盘有两个,
混合类型:
RAID-10:先两两一组做成RAID-1,再把一堆RAID-1做成RAID -0
读写性能提升,可用磁盘n/2,有容错能力,每组镜像最多只能坏一块,最少4块
RAID-01:先分两组做成RAID-1,再把这两组做成RAID-0.
RAID-50:最少6个磁盘
RAID-7::
JBOD:将多块磁盘的空间合并成一个大的连续空间使用
常见级别:0,1,5,10,50,JBOD
逻辑卷管理器 LVM2 LVM:logical volume manager version:2 分区格式:8e
dm:device mapper 将一个或多个底层块设备组织成一个逻辑设备的模块
/dev/mapper/VG_name-lv_name
pv管理工具: pvs:简要pv信息显示 pvdisplay:显示pv详细信息 pvcreate:创建pv
vg管理工具:vgs:简要vg信息显示 vgdisplay:显示vg详细信息 vgcreate:创建vg -s指定pe大小 vgextend:增加vg vgruduce:移除vg
lv管理工具:lvs 简要lv信息显示,lvdisplay 显示lv详细信息 lvcreate 创建lv
扩展逻辑卷:lvextend -L +num(或直接输入目标值)
缩减逻辑卷:umount取消挂载,e2fsck -f强制检测和修复文件系统,resize2fs把文件系统缩减到指定大小 lvreduce -L。然后在挂载上去就可以用了。
快照卷的创建:snapshot
lvcreate -L 指定大小,-p r 指明有读权限,-s指明这是一个快照,-n指明快照名字 原卷名字
dd命令:convert and copy file 可指定复制多少字节
用法: dd if=原文件路径 of=目标文件路径及名字 bs=(block size 单位字节) count= (复制多少个bs)一般用户磁盘对拷复制。
btrfs文件系统: (B-tree,butter fs)核心特性: 支持写时复制更新机制,复制,更新及替换指针。而非就地更新;支持多物理卷btrfs可由多个底层物理卷组成,支持RAID,以联机添加移除修改;数据及元数据校验码:极大的保证了数据的可靠性;支持子卷,支持快照和增量快照机制,支持透明压缩。 主要取代ext3/4,centos7主要是xfs文件系统。
文件系统创建
mkfs.btrfs: -L -:指定卷标 d:指定类型(RAID0,5,6,10) -m: -O:列出
btrfs filesize show:查看B-tree文件系统属性详情 ; 挂载文件系统:mount -t btrfs 挂载设备 挂载点; 透明压缩机制:mount -o compress=lzo 挂载设备 挂载点。
Zabbix 监控系统属性:
监控指标:硬件设备是否损害(传感器),内存空间使用率,软件使用状态,业务指标,系统是否处于正常安全状态。
采样:周期性获取某个关注指标相关的数据 存储:历史数据(保存时间较短),趋势数据(聚合数据,保存周期较长) 展示:webgui app gui 报警:邮件,短信,微信等
被监控的对象:主机,交换机,路由器,UPS...
开源监控项目:
cacti:采样,(存储,展示,报警)一般
naglos:不存储,采样,报警,不展示。
ganglla:
zabbix:采样,存储,展示,报警都很强大
zabbix程序组件:zabbix_get:命令行工具 测试向agent发送数据采集请求; zabbix_sender :命令行,测试向server端发送数据zabbix_java_gateway:Java网关
zabbix server:服务守护进程,负责接收agent发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其组织进行。
database storage:存储系统,专用于存储所有配置信息,以及由zabbix收集的数据。
web interface:zabbix的gui接口,通常和server运行在同一主机上。
proxy:可选组件,代理服务器,常用于分布式监控环境中,代理server收集部分被监控端的监控数据并统一发往server端。
agent:部署在被监控主机上,负责收集本地数据并发往server端或porxy端。
zabbix逻辑组件:
主机组host group 主机hosts 应用applications 监控项items 触发器trigges 事件events 动作actions:条件condition和操作operation 媒介media:发送通知的通道 通知notifications 远程命令remote command 报警升级escalation 模板template 图形graph 屏幕screens 幻灯slide show
特性:
数据采样:snmp,agent,ipml,jmx
报警:步进升级
数据存储:MySQL/pgsql
展示:PHP程序 实时绘图:graph,screen,slide,map,show
支持监控模板,网络自动发现,分布式监控,API支持二次开发
zabbix安装:(前提yum安装的lamp)
1.设置zabbix database /etc/my.cnf 添加skip_name_resolve=ON innodb_file_per_table=ON
创建数据库: CREATE DATABASE zabbix CHARSET 'utf8';
创建连接的主机及用户和密码:GRANT ALL ON zabbix.* TO 'zabbix '@' 127.0.0.1' IDENTIFIED BY '123';
用户授权:FLUSH PRIVILEGES;
2.服务器安装server端及agent端
#yum install -y zabbix-server-mysql-3.2-el7.x86_4.rpm zabbix-get-3.2-el7.x86_64.rpm
程序环境:
配置文件: /etc/zabbix/zabbix_server.conf unit file:zabbix-server.service
导入数据库脚本,已生成数据库环境:rpm -ql zabbix-sever-mysql
gzip -d /usr/share/doc/zabbix-server-mysql-3.2/create.sql.gz
mysql -u zabbix -h 127.0.0.1 -p123 zabbix </usr/share/doc/zabbix-server-mysql-3.0/create/sql
主要zabbix有3个脚本需依次导入:
zabbix-server配置启动