20-数组相关 数组的赋值(声明) 1. declare -a 数组名 2. 数组名=(value1 value2 value3 value4 value5....) 调用数组中的所有值 ~]# echo ${ar[*]} ~]# echo ${ar[@]} 数组长度的获取,数组中的元素的个数 ${#ar[*]} 元素长度的获取 ~]# echo ${ar[1]} |wc -L #统计一行的字符数 ~]# echo -n ${ar[1]]} |wc -L #去掉换行符统计 数组的叠加 a=(1,3,5,7) b=(2,4,6) 数组的切片 ``` ${abc[*]:1} 从属组下标为1(指定值)开始取值,一直到属组尾部,为0时不写 ${ab[*]:1:3} 从数组下标为1处开始取三个值 ${ab[*]:(-2):2} 从倒数第二个下标开始取两个值 ``` 元素的切片: ``` ${ar[1]:2:3} 将ar[1]中的字符从下标为2处开始取三位值 ${ar[1]:2} 将ar[1]中的字符从下标为2处开始取值,取余下所有的字符 数组的替换(替换为空即删除) ${ar[*] /旧字符/新字符} "一个斜杠" 被匹配元素中字符无论出现几次,只替换数组中最开始匹配到的一次。 ${ar[*] //旧字符/新字符} "两个斜杠" 被匹配到元素中全部替换 ${ar[*] /#字符 /新字符} 替换行首的字符 ${ar[*] /%字符/新字符} 替换行尾的字符 ~]# rev #将字符反向输出 ``` 基础笔记综合整理 2018-10-13 评论 3685 次浏览
19-计划任务 计划任务 单次计划任务 服务atd必须开机启动 ~]# at 时间(确切时间)|now +#(minutes|hours|days) >需要执行的操作 >Ctrl+D提交操作 at的黑白名单配置文件: /etc/at.deny 默认存在且为空 /etc/at.allow 默认不存在,如果存在,优先级比at.deny高 1. 当白名单不存在,却黑名单为空的时候,所有用户都可以使用at命令 2. 当黑名单和白名单同时存在时,只有白名单中的用户可以使用at命令,且不受黑白名单影响,白名单的优先级比黑名单优先级高。 ~]# atq #查看at任务 ~]# at -c 任务号 #查看at任务 ~]# atrm # #删除指定任务号 循环计划任务:按照给定的时间周期,进行有规律的进行任务的执行 服务:crond 必须开机自启 命令:crontab * * * * * 分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-7,0/7为星期日) !!周和日一般不同时设置 时间的频率: */# 每几(分/时/日) 连续的时间1-5 (周一到周五,1日到5日) 不连续的时间 1,3,5 1,3,5日 周1、3、5 * 指定范围内的任意时间 ``` ~]# crontab -e #命令的绝对路径或具有执行权限的脚本 * * * * * /PATH/TO/SOMEWHERE/scripts ``` 基础笔记综合整理 2018-10-13 评论 4887 次浏览
18-日志收集服务器搭建 日志收集服务器实验 服务器搭建: ~]# vim /etc/rsyslog.conf #修改日志配置文件 选择使用UDP或者TCP传输,建议使用UDP,不占用连接资源。 开启模块:$ModLoad imtcp 开启端口:$InputTCPserverRun 514 客户机搭建: ~]# vim /etc/rsyslog.conf #修改配置文件 将对日志的操作定向到其他主机 @IP:514 采用UDP传输 @@IP:514 采用TCP传输 一般来说日志服务的端口为514 linux不依靠主机名识别,但日志的记录需要通过主机名区分 且主机名在日志记录时,使用的是简化的主机名(完整主机名中第一个点号之前的字符) 只有rsyslog识别的服务才能写入配置文件中 日志服务[连接符号] 日志等级 日志的记录位置 "." 将日志大于、等于指定等级的日志全部记录下来 ".=" 只记录指定等级的日志 ".!" 除了该等级外的日志都记录 日志等级: debug 一般的调试信息说明 info 基本的通知信息 notice 普通信息,又一定的重要性 warning 警告信息,但是还不影响到服务或系统的运行 err 错误信息,一般达到err等级的信息可以影响到服务或系统的运行 crit 临界状态信息,比err等级严重 alert 警告状态信息,比crit严重,必须立即采取行动 emerg 疼痛等级信息,系统已经无法使用 基础笔记综合整理 2018-10-12 评论 4918 次浏览
17-备份管理 备份管理: 数据的安全性(防护),和完整性(备份) 需要备份的数据: 系统层面:配置文件、用户资料(家目录)、相关密码 应用层:web:http:网页目录、配置文件目录、日志 mysql:配置文静、数据库文件(有专门的备份工具)、mysqlhotcopy、mysqldump、log-bin日志(记录所有对数据库进行增删改的操作,实时备份) 其他日志,如mysql的运行日志、慢查询日志。 如何进行备份: 选择备份工具:diff、cpio、cp、tar、zip……scp(ssh+cp)远程复制 备份工具应当有事高效率、安全、稳定 备份地点: 同端备份:在同一设备上复制成多份 多端备份:在不同设备上保存多份 异地备份(灾备):异地将文件保存多份(数据库一定要做灾备) 云备份:不安全,但是双双重备份,成本低。 备份的时机: 热备:数据不停止读写时进行备份 温备:仅停止数据写入,进行备份 冷备:停止数据的读写进行备份 备份周期 视备份数据重要程度、文件大小选择适当的时机 不得在服务器高负载时进行备份 备份的频率取决于数据的安全等级和数据量大小 备份结束后需要检查备份策略是否正常执行 测试备份数据的可用性,在测试服务器上进行测试恢复。 差异备份:先进行一次完整备份,每一次备份都是基于原始备份更新,因此备份会越来越大。 完整备份:完整备份就是将所有的数据全部备份,好处是恢复数据方便,但是占用资源庞大。 需要永久保存的文件至少保存两份 差异备份也属于增量备份的类型 差异备份相当于每一次备份时,都与原始备份进行比较。 增量备份:第一次为原始备份,之后的备份是以上一次备份数据作为参照进行的。 我们备份一个数据时,支持0-十个备份级别,第一次备份应当使用0级别,会将所有的数据完整的备份一次,第二次备份就可以使用1级别了,它会0级别的数据进行比较,把0级别备份后发变化的数据进行备份,。 只有在备份整个分区或者硬盘时,才能支持1-9的增量备份级别,而如果只备份某个文件或者不是分区的目录时,只能使用0级别进行完整备份。 ~]# dump --level #(0-9) 指定备份的级别,也可使用 -#指定备份级别 增量备份:先指定0,再指定1-2-3-4-5..... 差异备份:先指定0,再指定1-1-1-1-1.... -f 指定备份文件的名称 -u 备份文件系统时(分区),记录备份的时间于/etc/dumpdates中 -j 调用bzip2压缩库,压缩的文件后缀为".bz2" 一般来说,dump备份文件时以dump.*作为后缀方便理解 dump --level 0 -uj -f /root/boot.dump.bz2 /boot(操作对象) dump -0uj -f /root/boot.dump.bz2 /boot ~]# restore 恢复备份命令,需事先切换到需要恢复的目录下再执行,否则恢复到当前目录 ~]# restore -r #还原模式,还原数据 ~]# restore -i #交互模式,可以有选择的恢复 add 文件名|标记 extract 进行指定恢复的交互界面: >1 (固定值) >n (no) ~]# restore -t DumpFile #查看备份文档中的内容 ~]# restore -C -f DumpFile #将备份文件与源文件进行比较 ~]# restore -C 只能检查原始数据文件中丢失了哪些文件,对于新增的文件无法识别 ~]# restore -W #查询系统内进行过DUMP别分的分区,以及备份级别和备份时间 基础笔记综合整理 2018-10-12 评论 2445 次浏览
16-日志管理 日志管理:一般是自己编写管理脚本 日志的管理服务:syslog--->rsyslog(rsyslog向前兼容) rsyslog只针对系统相关日志,分析日志的类型,将日志保存到指定的位置,支持将日志通过TCP协议簇汇总到日志服务器,汇总后的日志通过主机名进行区分 常见的日志文件(系统默认的日志) /var/log/cron 记录了定时任务相关的日志 /var/log/cpus 记录了打印信息的日志 /var/log/dmesg 记录了系统在开机时内核自检的信息,也可以使用dmesg命令查看内核自检信息。 /var/log/btmp 记录错误登录日志,这是一个二进制文件,不能使用vim等文本查看工具直接打开,需要使用lastb命令查看。 /var/log/mail/log 记录邮件信息 /var/log/lastlog 记录系统中最后一次登录时间的日志,这个文件是二进制文件,需要使用lastlog命令查看。 /var/log/message 记录系统产生的重要信息日志,这个日志文件记录了linux系统的巨大多数重要信息,如果系统出现问题,首先要检查这个文件。 /var/log/secure 记录验证和授权方面的信息,只要涉及账号密码的操作都会记录到这个文件中。 /var/log/wtmp 永久记录所有用户的登录,注销信息、同时记录系统的启动、重启、关机事件、二进制文件,需要使用last命令进行查看。 /var/run/utmp 记录当前已登录用户的信息,这个文件会随着用户的登录和注销而不断变化、只记录挡圈登录用户的信息,使用w/who/users等命令查询 /var/log/httpd RPM包的apache服务的默认日志目录 /var/log/mail RPM包安装的邮件服务的额外日志目录 /var/log/samba RPM包安装的samba服务的日志目录 /var/log/sssd 守护进程安全服务目录 源码包的日志安装在指定的目录下 日志文件中的格式 事件的发生时间 服务器的主机名 服务名或者程序名 事件的集体信息 rsyslog配置文件 /etc/rsyslog.conf 第一列为日志类型和日志优先级的组合,每个类型和优先级的组合称为选择器。 第二列为保存日志的文件、服务器,或输出日志的终端,syslog根据选择器决定如何操作日志。 1. 日志的类型和优先级使用"."进行分隔 2. 规则定义越详细优先级越高,如:kernel、debug的优先级大于debug 3. "*"表示所有,如:*.debug表示所有类型的调试信息 kernel.* 表示内核产生的所有消息 4. 可以使用逗号","分割多个日志类型,使用分号";"分割多个选择器 日志类型.none表示此类型日志不记录 对日志的操作: 1. 将日志输出到文件:/var/log/message,/dev/console 2. 将消息发送给用户,多个用户使用逗号分隔 3. 通过管道将消息发送给用户程序,程序放到管道符后 4. 将消息发送给其它主机上的rsyslog进程 只有rsyslog识别的服务才能写入配置文件中 日志服务[连接符号] 日志等级 日志的记录位置 "." 将日志大于、等于指定等级的日志全部记录下来 ".=" 只记录指定等级的日志 ".!" 除了该等级外的日志都记录 日志等级: debug 一般的调试信息说明 info 基本的通知信息 notice 普通信息,又一定的重要性 warning 警告信息,但是还不影响到服务或系统的运行 err 错误信息,一般达到err等级的信息可以影响到服务或系统的运行 crit 临界状态信息,比err等级严重 alert 警告状态信息,比crit严重,必须立即采取行动 emerg 疼痛等级信息,系统已经无法使用 日志的轮替: 主要目的是为了防止单个文件过大,按照我们的规则对日志进行相应处理 主要依赖/etc/logrotate.conf配置文件,dateext参数实现日志的处理 weekly 每周对日志进行依次轮替 rotate 在轮替的过程中,自动创建信息的文件 dateext 使用日期作为日志文件的后缀 compress 是否压缩进行轮替的日志 size 大小,日志只有大于指定大小才进行轮替 missingok 如果日志不存在忽略该日志的警告信息 notifempty 如果日志为空文件,则不进行日志的轮替 系统自动进行日志轮替的原因: /etc/cron.daily/下有一个脚本,每天都运行,查看是否有符合轮替的日志,然后进行相应处理。 rsyslog所管理的服务:系统服务 logratate能管理绝大部分的日志,rpm包安装的包能够被logrotate管理,但是需要加入规则 将产生的日志按照预设的参数进行轮替。 日志文件类型改为压缩类型后,之前产生的日志将永久保存,不会删除。 ~]# logrotate -vf /etc/logratate.conf 强制执行日志的轮替 ~]# split FileName -b 按大小对文件进行切割(会切断行),单位自行指定 -l 按行进行切割 -d 声明文件切割后的文件前缀 -a 3 指定以数字作为后缀,且以三位数值显示 将工具(脚本)模块化的思路: 1. 写成函数文件/函数 2. 将每一个功能单独实现,在一个主脚本中去调用 日志(受rsyslog管理的日志),改名、移动后均会向其中写入日志,删除后不会创建新文件,也不会记录日志。?需要在产生日志的环境下验证,比如httpd日志 基础笔记综合整理 2018-10-11 评论 2373 次浏览
15-服务及进程管理 linux进程及作业管理 CPU划分为时间片(timeslice),分配给程序使用,根据优先级确定给哪个程序使用 内核负责进程的管理 CPU中有一个指针指令寄存器,其中记录的是下一条命令的指针(地址),保存当前进程的状态 内核的功能:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能 进程有生命周期,进程在内核中称为任务 task,struct,任务结构体,linux内核存储进程信息(元数据)的固定格式。 数组在内存中必须是连续的空间 链表在尾部加上指针,指向下一个数据 多个任务的task,strct组成的链表:task list任务列表 当中断发生时,必须由内核接管CPU 进程的创建:进程都是由父进程创建, 如果不写入数据则公共使用共享数据,只有在子进程需要写入数据时再copy一份进行写入操作,COW,写时复制。 子进程是父进程为完成某个功能创建的,子进程结束后由父进程销毁。 进程的优先级:0-139 0-99 (0很少使用)实时优先级,数字越大优先级越高 100-139 用户可调整优先级,数字越小,优先级越高 nice值:(-20)到(+19),对应100-139 通过调整nice值改变进程的优先级: 每个优先级有两个队列,一个为运行队列,一个为过期队列,每次只扫描140个运行队列的首部,当运行时间结束,与过期队列调换继续在CPU上运行。 内核负责资源的分配: 为了完成现代操作系统的管理,内核将自身在占用以外的内存划分为4K大小(页框),用于存放页面数据,页框:page Rfame 内核采用虚拟内存机制,使得每个程序都认为自己是独占内存,线性地址。线性地址与实际地址的对应关系由内核管理。 MMU:memory management unit,CPU中的内存管理单元,负责实时转换线性地址为真实地址。 缺页异常:内存中的页面不存在了,可能是被交换出去了,也可能在硬盘上存储,内存中的数据不是所有都可以交换的。 必须存在于内存中的,称为常驻内存级; 可以交换出去的,称为虚拟内存级。 IPC:Inter porcess communication 进程间通信 同一主机:single发信号 shm:shared memory 跨主机:socket 套接字 RPC:Remote Procecure Call 远程过程调用 linux内核:抢占式多任务 进程类型: 守护进程daemon,在系统引导过程过程中启动的进程,根终端无关的进程 用户进程:前台进程,跟终端相关,通过终端启动的进程。 进程状态: 运行态:running 就绪态(睡眠态) 可中断睡眠:Interruptable 不可中断睡眠:uninterruptable 等待数据载入 当一个进程向内核申请从磁盘获取数据时,内核先间数据载入内核空间,再将数据复制到进程内存中啊,一次IO分两段运行 停止态:stopped,暂停于内存中,但是不会被调度,除非手动启动 僵死态:Zombie,没有被回收的进程 进程分类: CPU-Bound CPU密集型,一般为非交互式 IO-Bound IO密集型,一般为交互式,交互式需要立即反应,因此优先级较高 家目录下的配置文件,只针对单个用户生效 ~/.bashrc 定义别名等 ~/.bash_profile 定义PATH环境变量 /etc/针对所有用户生效的配置文件 /etc/bashrc PS1、PATH、UID /etc/profile PATH、EUID(进程的有效用户ID) /etc/profile.d/*.sh 环境的执行顺序 ~/.bash_profile --> ~/.bashrc --> /etc/bashrc --> /etc/profile --> /etc/profile.d/*.sh ~/bash_logout该配置文件(脚本)会在正常退出终端时执行 ~]#id -ru #显示用户的真实UID /etc/issue 登录显示的信息 /etc/issue.net 远程登录时显示的登录信息(需要开启ssh调用),在登录完成后显示 /etc/ssh/sshd_config中Banner开启并指向/etc/issue.net文件 /etc/motd 不区分登录方式显示提示信息 ~]# stty -a #查看所有快捷键 centOS6中让自己写的脚本或者源码支持chkconfig 向放入/etc/init.d/下的脚本中添加两行信息 # chkconfig: 2345(生效的级别) 10(启动的顺序) 90(关闭的顺序) # description: 服务的描述信息 ~]# chkconfig -add 脚本名 验证是否成功:echo $? ~]# chkconfig --list |grep 服务名 #检查是否安装加入开机自启动 模块加载: /lib/modules/2.6.32.*/kernel ~]# lsmod #列出当前已启用的所有模块 ~]# modinfo Mode_Name #查看指定模块的详细信息,所有支持的模块都能够查看 ~]# modprobe Mode_Name #装载指定的模块到内核 当新加入一个模块(复制到目录下)时,本机不能够立即识别,需是同平台模块。 ~]# depmod #扫描模块,将新的模块信息写入 /lib/mudulles/2.6.32.*/modeles.dep 保存模块信息的模块,只有在modules.dep文件 ~]# modprobe -r MOD_NAME #卸载指定模块 系统管理: 进程是一个状态,是计算机中的程序关于某数据集合上的一次活动 线程是进程处理的最小单位,也称为轻量级进程 例如用户访问80的请求为线程 程序是代替人管理操作系统,完成特定的任务,解决特定问题的一段代码集合 ~]# ps aux (以BSD风格显示) USER 由哪个用户产生 PID 进程号 %CPU CPU使用百分比 %MEM 内存使用占比 VSZ 虚拟内存级,占用虚拟内存的大小 RSS 常驻内存级,占用真实内存的大小 tty 登录终端 STAT 进程状态 S 休眠状态 R 正在运行的程序 + 处于前台的进程 N 优先级较低的进程 < 优先级较高的进程 ! 多进程的(包含有子进程) s 进程的领导者 D 无法中断的休眠状态(uninterruptable) T 停止或被追踪 Z 僵尸进程,有些情况下,父进程被销毁,但是子进程驻留内存 L 被锁定进内存的进程,与系统启动相关 当windows蓝屏时报错为段内存地址空间,可通过这个地址判断蓝屏的原因 START 进程启动时间 TIME 进程运行的时间(在CPU上运行的总时间) COMMAND 由哪个命令产生的此进程 ~]# ps -le F 当前进程的权限 1 进程可复制 4 进程使用超级管理员权限 PPID 父进程 S 进程状态 C CPU使用占比 PRI 进程优先级(80或-40) PRI决定了进程获取资源的优先级 NI nice值 [PRI最终值=PRI原值+NI(可修改)] 可通过修改NI值来影响进程的优先级 ADDR 进程在内存中的地址(不锁定不显示) SZ(size) 进程占用内存大小 WCHAN 进程是否运行("-"表示正在运行) 优先级: NI的范围:("-20"到"+19") 普通用户只能调大NICE值0-19 1. nice -n # service httpd start #服务启动时指定优先级 2. renice -# PID #更改指定进程的优先级 默认NI为0 PRI为80 ~]# top [option] -d 秒数,指定刷新时间,默认为3秒 -b 使用批处理模式 -n # 指定次数,常与-b一同使用 -p PID #查看指定PID进程 -u 用户名,只看某一用户运行的进程 -s 安全模式,避免在交互式下出现错误 ~]# pstree [option] #进程树查看 -p 显示程序进程号 -u 显示进程的用户 ~]# kill [signal] PID #默认使用15信号,正常关闭 HUP (1) 通知进程重新加载配置文件 INT (2) 终端,同ctrl+C只能终端前台(占用终端的)进程 TERM (15) 终止,正常退出 CONT (18) 继续运行 STOP (19) 暂停--Ctrl+Z ~]# killall [signal] 进程名 #杀死一类进程 -I(大) 忽略大小写 ~]# pkill -t 终端号 #结束终端用户的登录 进程号:不区分终端 工作号:区分终端(工作号只能在相应终端中查看) 工作号只有位于后台的进程才有 ~]# jobs -l #显示PID(进程号),查看工作 fg #(工作号) #将指定工作号调回前台执行,默认调回工作号后带"+"号的。 bg #(工作号) #将后台进程(停止的)运行起来,依旧运行在后台。 将命令放入后台的方式: 1. 命令 & #在命令后加上"&"符,将命令放入后台 2. Ctrl+Z ; bg #将前台的进程放入后台,在执行后台的作业 一般来说进程都是与终端相关联的,只要终端关闭,其进程也会关闭 使命令脱离终端运行的方式 1. 写入/etc/rc.local(不建议) 2. 写入cron定时任务计划任务 3. nohup 命令 操作对象 & #使命令脱离终端运行 系统资源查看 ~]# vmstat #监控系统资源 procs 进程 r 运行队列中进程数量 b 阻塞队列的数量 Memory内存 swap 如这个值大于0,则表示物理内存不够用 si 每秒从磁盘读入内存的大小 so 每秒从内存读入磁盘的大小 system in 每秒CPU的中断数,包括时钟中断 cs 每秒上下文的切换次数(资源调用的次数) ~]# dmesg #查看内核的检测信息 /var/log/dmesg #只记录这一次开机时的检测信息 ~]# free #查看内存的使用情况 -b 以字节为单位显示 -k 以KB为单位显示 -m 以MB为单位显示 -g 以GB为单位显示 查看CPU信息 1. 逻辑CPU个数 cat /proc/cpuinfo |grep "processor" |wc -l 2. 物理CPU的个数 cat /proc/cpuinfo |grep "physicalid" | sort -u | wc -l 3. 每个物理CPU中core(核心)个数 cat /proc/cpuinfo |grep "cpu cores" | uniq | awk -F ":" '{print $2}' 4. 查看core id的数量,即为物理CPU上的core的个数 cat /proc/cpuinfo |grep "core id" |uniq |wc -l 非超线程CPU算力强 超线程CPU:能同时执行更多的进程,线程为核心数的两倍 ~]# uptime #系统启动时间和平均负载(一般使用top) ~]# uname #查看系统与内核相关信息 ~]# lsb_release -a ~]# lsof #列出进程打开或者正在使用的文件信息 ~]# lsof -p PID #查看某进程运行时所调用的资源 ~]# lsof -u UID #查看指定用户运行的进程调用了哪些文件 ~]# ldd COMMAND PATH #查看指定命令执行时要调用的库函数文件 !!有些恶意软件写入函数文件中,在特定的条件下才会被触发,列如执行某个命令,此时需要排查函数文件的文件数据修改时间,如果发现异常,替换为安全的文件。 基础笔记综合整理 2018-10-10 评论 2535 次浏览