我
我
channel(通道) 日志输出方式,如:syslog(记录到/var/log/messages中)、文本文件、标准错误输出或 /dev/nullcategory(类别) 日志的消息类别,如:查询消息或动态更新消息等module(模块) 产生消息的来源模块名称facility(设备) syslog 设备名severity(严重性) 消息的严重性等级
criticalerrorwarningnoticeinfodebug [ level ]dynamic 是一个特殊的值,它匹配服务器当前的调试级别定义了某个严重性级别后,系统会记录包括该级别以及比该级别更严重的级别的所有消息。比如定义级别为 error,则会记录 critical 和error 两个级别的信息。对于系统管理员来说,一般记录到 info 级别就可以了。
一些概念
在系统中,一个进程只认为自己存在
父shell 子shell 父子shell之间设置环境互相独立
shell 也是一个程序
cat /etc/shells 查看系统支持的shell ,没有的可以安装,并不说明不支持
exit 退出当前 shell 程序
bash 的特性:
1. 命令历史
2. 管道 重定向
3. 命令别名
4. 命令行编辑
5. 命令行展开
6. 命令行通配
7. 变量
8. 编程
命令历史:
history
1. -c 清空命令历史(仅限于内存缓冲区当中)
2. -d 删除某一条命令历史
3. -w 将命令历史保存到某个文件中,缺省值 .bash_history 文件 // 替换重定向,谨慎使用
4. -a 将命令历史保存到某个文件中,缺省值 .bash_history 文件 // 追加重定向
5. !n 执行命令历史中的第n条命令
6. !-n 执行命令历史中倒数第n条命令
7. !word 执行命令历史中最近一次以 word 开始的命令 不一定是一个单词,一个字母也行,必须要能唯一标识该命令 不错
8. !! 执行上一次命令
9. !$ 引用上一条命令的最后一个参数 比如上一次 ls /etc 那么 ls !$ 就等价于 ls /etc ls + esc + . 也可以达到i相同效果 不错
命令行编辑:
1. ctrl+a 光标快速跳转到命令行行首
2. ctrl+e 光标快速跳转到命令行行尾
3. ctrl+u 快速删除光标位置到命令行行首的字符 不包括当前字符
4. ctrl+k 快速删除光标位置到命令行行尾的字符 包括当前字符
5. ctrl+l 清屏 等同 clear
命令行展开:
1. 命令补齐:在 PATH变量搜索命令并补齐(PATH变量必须正常,输入要补齐命令的字符数一定要能够唯一标识这条命令;tab键补齐) 按两次 tab键 ,会列出以某个或某些字符开始的所有命令
2. 路径和文件补齐:在系统路径中查找
3. 命令行补齐功能不能补齐选项,即参数
4. 命令替换 就是把命令中的子命令替换成子命令执行结果的过程
5. 接上,经常用到shell脚本编程中 $(command) `command`
6. 接上, ""(双引号):弱引用(可以实现变量的替换,把变量名替换为变量值)
7. 接上, `` (反引号): 命令引用
8. 接上, ''(单引号):强引用(不能完成变量替换)
命令别名:
1. alias 别名=command alias 定义的别名只在当前shell生效 直接输入 alias 会打印所有命令别名
2. 执行 alias命令时,command最好用'' (单引号) 含括起来,没有参数不用也行,有参数一定要用 双引号亲测也行
3. unalias 别名 取消 该别名
命令行通配:globbing
1. *:匹配任意长度的任意字符
2. ?:匹配任意单个字符
3. []:匹配指定范围内的任意单个字符
4. [^]:匹配指定范围外的任意单个字符
5. [:space:] : 表示空格
6. [:punct:]:表示所有标点符号
7. [:lower:]:表示所有小写字母
8. [:upper:]:表示所有大写字母
9. [:alpha:]: 表示所有字母(大小写)
10. [:digit:]:表示所有数字
11. [:alnum:]:表示所有数字和大小写字母
12. 并不能很准确的匹配,要追求精确,还是要用正则表达式
管道,IO重定向
计算机体系结构:
控制器:CPU,读取系统指令
运算器:CPU,运算
存储器:RAM(内部存储器:易失性存储器)
输入设备:输入数据,如键盘,硬盘等
输出设备:显示指令执行结果,如显示器,音响,硬盘等
计算机总线:
地址总线:负责内存寻址
数据总线:负责传输数据
控制总线:负责控制指令
寄存器:CPU中临时存储空间
I/O设备
程序:指令+数据
指令:由程序提供,负责加工数据
数据:系统中数据可以有多种来源,比如来自变量,来自文件,来自输入设备等
标准输入输出设备
标准输入设备:文件描述符为 0
标准输出设备:文件描述符 为 1
标准错误输出设备:显示器(stderr) 文件描述符为 2
三种数据流
当在Linux中打开一个文件时,内核会反复调用,对于文件标识就很重要了,用文件描述符来标识文件,文件加载完成后用数字标识
fd:file descriptor (文件描述符)
IO重定向:把默认输入输出数据来源重新定向到其他的文件或设备
输出重定向: 通过重定向到终端名可以实现不同终端之间的交流 (使用 tty 来查看当前终端的名字)
2> 错误覆盖输出重定向
touch /dir_name/{a.txt,b.txt,c.txt} 在其他目录同时创建多个文本
&> 混合覆盖输出重定向 &>> 混合追加输出重定向
输入重定向:
管道:
tr:实现字符转换,不修改源文件 cat /etc/passwd | tr 'a-z' 'A-Z' 把 /etc/passwd 的所有字母转换为大写字母
tee:ls /etc/ | tee cws.txt 同时输出到屏幕和保存到文件中
六、DNS服务器的类型:
1、主DNS:可以完成数据的修改
2、辅助DNS:辅助DNS服务器向主DNS服务器请求数据更改
serial number:请求序列号
refresh:请求更新时间
retry:请求重试时间(该时间一定小于更新时间)
expire:过期时间
minittl:否定答案的缓存时间
如果在expire(过期时间)内,主DNS依然没有响应辅助DNS请求,辅助DNS也将停止工作
3、缓存DNS服务器:只做区域的高速DNS缓存查询
DNS转发器:不负责查询,只负责转发
时间单位: D(天) W(周) H(小时) 默认的时间单位是秒
六、DNS解析记录
DNS主要资源记录类型(RRT:Resource Record Type)
1、A记录:正向解析记录,把FQDN解析为IP地址
www.gooann.com. 600 IN A 192.168.1.1
或简写为
www 600 IN A 192.168.1.1
2、PRT记录(Pointer):反正指针,把IP地址解析成FQDN
192.168.1.1 600 IN PTR www.gooann.com.
或简写为:
1 600 IN PRT www.gooann.com.
3、MX(Mail Exchanger):邮件交换记录 abc@gooann.com
优先级:0-99,数字越小优先级越高
gooann.com. 600 IN MX 10 mail.gooann.com.
gooann.com. 600 IN MX 20 mail2.gooann.com.
mail.gooann.com. 600 IN A 192.168.1.2
mail2.gooann.com. 600 IN A 192.168.1.3
4、NS记录(Name Server):名称服务器,指明该区域中哪台主机是DNS服务器(通常位于DNS服务器区域数据库中第二行)
gooann.com. 600 IN NS ns1.gooann.com.
gooann.com. 600 IN NS ns2.gooann.com.
gooann.com. 600 IN NS ns3.gooann.com.
ns1.gooann.com. 600 IN A 192.168.10.10
ns2.gooann.com. 600 IN A 192.168.10.20
ns3.gooann.com. 600 IN A 192.168.10.30
5、SOA记录(start of authority):起始授权机构,指明该区域中哪台DNS是主DNS服务器,必须位于区域数据库文件中的第一行
gooann.com. 600 IN SOA ns1.gooann.com. admin.gooann.com. (
1000 ; serial number
300 ; refresh
200 ; retry
500 ; expire
30 ; minittl
)
6、CNAME记录:(Canonical Name):别名
www.gooann.com. 600 IN A 192.168.10.1
www2.gooann.com. 600 IN CNAME www.gooann.com.
七、区域文件格式:
名称(name) 缓存时间(TTL:可省略) IN(intenet) RRT(资源类型) 数据(value)
DNS正向区域数据库:
gooann.com. 600 IN SOA ns1.gooann.com. admin.gooann.com. ( //SOA记录
1000 ; serial number
300 ; refresh
200 ; retry
500 ; expire
30 ; minittl
)
gooann.com. 600 IN NS ns1.gooann.com. //NS记录
gooann.com. 600 IN NS ns2.gooann.com.
ns1.gooann.com. 600 IN A 192.168.10.3 //A记录
ns2.gooann.com. 600 IN A 192.168.10.4
www.gooann.com. 600 IN A 192.168.10.1
ftp.gooann.com. 600 IN A 192.168.10.2
mail.gooann.com. 600 IN A 192.168.10.5
gooann.com. 600 IN MX 10 mail.gooann.com. //MX记录
DNS反向区域数据库:(10.168.192.in-addr.apra)
gooann.com. 600 IN SOA ns1.gooann.com. admin.gooann.com. (
1000 ; serial number
1H ; refresh
200 ; retry
500 ; expire
30 ; minittl
)
gooann.com. 600 IN NS ns1.gooann.com.
gooann.com. 600 IN NS ns2.gooann.com.
3.10.168.192.in-addr.arpa 600 IN PTR ns1.gooann.com.
4.10.168.192.in-addr.arpa 600 IN PTR ns1.gooann.com.
1.10.168.192.in-addr.arpa 600 IN PTR www.gooann.com.
2.10.168.192.in-addr.arpa 600 IN PTR ftp.gooann.com.
5.10.168.192.in-addr.arpa 600 IN PTR mail.gooann.com.
gooann.com. 600 IN MX 10 mail.gooann.com.
每台设备上都配置主机到IP地址的映射,各设备独立维护自己的映射表,而且只供本设备使用
建立一套域名解析系统(DNS),只在专门的DNS上配置主机到IP地址的映射,网络上需要使用主机名通信的设备,首先需要到DNS服务器查询主机所对应的IP地址
1)递归查询:不知道的服务器会代替帮你查询在该模式下DNS 服务器接收到客户机(也可能是DNS服务器)请求,必须使用一个准确的查询结果回复客户机。如果DNS 服务器没有存储查询DNS 信息,那么该服务器会代替询问其他服务器,该过程反复,直到得到解析结果,再一步步返回给源客户机。(2)迭代查询:服务器不知道,但是会告诉你你去询问谁DNS 服务器会向客户机提供其他能够解析查询请求的DNS 服务器地址,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果为止。这个查询过程可能会由你的本地DNS服务器帮你完成。
1、应用层:应用程序、用户接口2、表示层:编码转换、压缩、解压、加密等3、会话层:建立、维护、拆除会话4、传输层规定了应用程序的的接口协议:TCP【9】、UDP【10】 PDU:数据段5、网络层:为数据传输选择一条最优路径,采用尽力而为的发送方式工作设备:路由器【4】 PDU:数据包 逻辑地址:IP地址协议:IP【5】、ARP【6】、RARP【7】、ICMP【8】6、数据链路层:使用MAC地址(48位2进制,前24位厂商,后24位为设备地址)传输数据帧工作设备:交换机【1】 协议:ARP、RARP 数据帧格式:【2】7、物理层:介质和信号(双绞线、光线、同轴电缆和模拟信号、数字信号),物理层关心的是电气特性、规程特性、功能特性、物理特性,从数据链路层接收数据转换为bit流,为数据传输提供安全的通信通道【1】交换机功能:自学习:学习源MAC以及进入的接口广播:转发:过滤:更新:【2】数据帧格式:
版本:4位,标识IP地址的版本,常用的是IPv4和IPv6首部长度:4位,可变长度,根据可选项变化优先级与服务类型:8位,提供第三层的服务质量总长度:16位,IP包头总长度标识符:16位,为分段数据打上标记,方便到目标地址重新组装标志:3位,第一位没有设置,第二位是DF,决定是否分片,0代表部分片,1代表分片;第三位是MF:代表更多的片,只有数据的最后一片值为0段偏移量:13位,代表数据片在整个数据中的位置TTL:8位,生命周期,数据包经过路由器个数,数据包每经过一个路由器,TTL值减一,当TTL值为0时,数据还没有到达目标地址,该数据将被丢弃,一般设置为32或64协议号:8位,标识上层协议号首部校验和:16位,验证发送端和接收端数据的完整性源地址:32的IP地址目标地址:32的IP地址可选项:松散路由 严格路由 路由标记 时间戳
硬件类型协议类型硬件地址长度协议长度Opcode发送方MAC地址发送方IP地址目的MAC地址目的IP地址
ICMP报文的前4个字节是统一的格式,共有三个字段:即类型,代码和检验和.接着的4个字节的内容与ICMP的类型有关,https://www.cnblogs.com/kzloser/articles/2582349.html#a3
源端口目的端口序列号指定ack号包头头长度Flags(标志位):
URG:紧急指针有效位,标记紧急数据ACK:确认序列号有效位PSH:通知接收端把数据交给进程,不要在缓冲区中停留RST:请求重新建立三次握手SYN:请求建立三次握手FIN:请求断开连接
窗口大小:
适当的窗口大小TCP窗口大小比例系数
校验和
以消除发送方使接收方缓存溢出的可能性,是一个速度匹配服务,即发送发速率与接收方应用程序的读取速率相匹配。发送方维护一个接收窗口,该接收窗口给发送方指示了接收方还有多少缓存空间剩余发送方:LastSent-LastAcked≤rwnd(接收窗口)接收方:LastRcvd-LastRead≤RcvBuffer
在发送方新增一个额外变量 cwnd(拥塞窗口),LastSent-LastAcked≤min{ cwnd, rwnd}TCP拥塞控制算法:慢启动拥塞避免快速恢复总结:线性增,乘性减
三个简单工具:检验和确认超时
systemd特性
1.平行处理所有服务,加速开机流程:旧的init启动脚本是一项一项任务依序启动的模式,因此不相依的服务也是得要一个一个的等待.systemd可以让所有的服务同时启动,因此系统启动的速度变快了
2.一经要求就回应的on-demand启动方式:systemd全部就是仅有一只systemd服务搭配systemctl指令来处理,无须其他额外的指令来支援.不像systemV还要init,chkconfig,service...等等指令.此外,systemd由于常驻存储器,因此任何要求(on-demand)都可以立即处理后续的daemon启动的任务.
3.服务依赖性的自我检查:由于systemd可以自订服务相依性的检查,因此如果B服务是架构在A服务上面启动的,那当你在没有启动A服务的情况下仅手动启动B服务时,systemd会自动帮你启动A服务!
4.按照daemon功能分类:systemd管理的服务非常多,首先systemd先定义所有的服务为一个服务单位(unit),并将该unit归类到不同的服务类型(type)去.systemd将服务单位(unit)区分为service,socket,target,path,snapshot,timer等多种不同的类型(type),方便管理员的分类与记忆.
5.将多个daemons集合成为一个群组:如同systemV的init里头有个runlevel的特色,systemd亦将许多的功能集合成为一个所谓的target项目,这个项目主要在设计操作环境的建置,所以是集合了许多的daemons,也就是执行某个target就是执行好多个daemon的意思!
6.向下兼容旧有的init服务脚本:基本上,systemd是可以兼容于init的启动脚本的,因此,旧的init启动脚本也能够通过systemd来管理,只是更进阶的systemd功能就没有办法支援了.
7.systemd有些地方无法完全取代init!包括:在runlevel的对应上,大概仅有runlevel1,3,5有对应到systemd的某些target类型而已,没有全部对应;
8.全部的systemd都用systemctl这个管理程序管理,而systemctl支援的语法有限制,不像/etc/init.d/daemon就是纯脚本可以自订参数,systemctl不可自订参数.;
几个重要概念:
Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器.
Systemd是一个系统管理守护进程、工具和库的集合,用于取代SystemV初始进程.Systemd的功能是用于集中管理和配置类UNIX系统.
在Linux生态系统中,Systemd被部署到了大多数的标准Linux发行版中,只有为数不多的几个发行版尚未部署.Systemd通常是所有其它守护进程的父进程,但并非总是如此.
CentOS7启动流程:
# lsinitrd /boot/initramfs-3.10.0-514.el7.x86_64.img //查看虚根文件系统
其中init链接到 /usr/lib/systemd/systemd 程序
在内核载入完毕、进行完硬件侦测与驱动程序载入后,内核会启动第一个进程systemd, systemd 最主要的功能就是准备软件执行的环境,包括系统的主机名称、网络设定、语言设置、文件系统及其他服务的启动。 而所有的动作都会通过 systemd 的预设启动服务集合/etc/systemd/system/default.target设定。 另外, systemd 已经舍弃沿用多年的 system V 的 runlevel!
常见的操作环境 target 与兼容于 runlevel 的等级可以作为预设的操作环境 (default.target) 的主要项目有: multi-user.target 以及 graphical.target 这两个。当然还有rescue.target, emergency.target, shutdown.target 等等,以及 initrd.target!但是过去的 systemV 使用的是一个称为 runlevel (执行等级) 的概念来启动系统的,systemd 为了兼容于旧式的 systemV 操作行为, 所以也将 runlevel 与操作环境做个结合!你可以使用底下的方式来查询两者间的对应关系
# ll -d /usr/lib/systemd/system/runlevel*.target
# yum -y install bash-completion //补齐参数或选项
# systemctl list-dependencies graphical.target //查看启动依赖关系
# systemctl list-dependencies mutli-user.target //查看字符界面启动依赖关系
sysinit.target完成的功能:
1.特殊文件系统装置的挂载:包括 dev-hugepages.mount dev-mqueue.mount 等挂载服务,主要在挂载跟巨量存储器分页使用与讯息队列的功能。 挂载成功后,会在 /dev 底下建立 /dev/hugepages/, /dev/mqueue/ 等目录;
2.特殊文件系统的启用:包括磁碟阵列、网络磁碟 (iscsi)、LVM 档案系统、档案系统对照服务 (multipath) 等等,也会在这里被侦测与使用到!
3.开机过程的讯息传递与动画执行:使用 plymouthd 服务搭配 plymouth 指令来传递动画与讯息
4.日志式登录档的使用:就是 systemd-journald 这个服务的启用啊!
5.载入额外的核心模块:透过 /etc/modules-load.d/*.conf 档案的设定,让核心额外载入管理员所需要的核心模块!
6.载入额外的核心参数设定:包括 /etc/sysctl.conf 以及 /etc/sysctl.d/*.conf 内部设定!
7.启动系统的随机数产生器:随机数产生器可以帮助系统进行一些密码加密演算的功能
8.设定终端机 (console) 字形
9.启动动态装置管理员:就是udev
basic.target完整的功能:
1.载入 alsa 音效驱动程序;
2.载入 firewalld 防火墙:CentOS 7.x 以后使用 firewalld 取代 iptables 的防火墙设定,虽然最终都是使用 iptables 的架构, 不过在设定上面差很多。
3.载入 CPU 的微指令功能;
4.启动与设定 SELinux 的安全上下文
5.将目前的开机过程所产生的开机信息写入到 /var/log/dmesg 当中
6.由 /etc/sysconfig/modules/*.modules 及 /etc/rc.modules 载入管理员指定的模块!
7.载入 systemd 的 timer 功能;
systemd 启动 multi-user.target 下的服务:
启动服务设定的脚本目录:
/usr/lib/systemd/system (系统预设的服务启动脚本设定)
/etc/systemd/system (管理员自己开发与设定的脚本设定)
而使用者针对主机的本机服务与服务器网络服务的各项 unit 若要 enable 的话,就是将它放到 /etc/systemd/system/multi-user.target.wants/ 这个目录底下做个链接,这样就可以在开机的时候去启动他。
与sys V兼容的rc.local操作:
# chmod +x /etc/rc.d/rc.local
# systemctl start rc-local
# systemctl enable rc-local
unit分类:
.service:一般服务类型(serviceunit):主要是系统服务,包括服务器本身所需要的本机服务以及网络服务
.socket:套接字(socketunit):主要是IPC(Inter-processcommunication)的传输讯息(socketfile)功能.这种类型的服务通常在监控讯息传递的套接字,当有透过此套接字传递讯息来说要连结服务时,就依据当时的状态将该用户的要求传送到对应的daemon,若daemon尚未启动,则启动该daemon后再传送用户的要求.
.target:执行环境类型(targetunit)
.mount:文件系统挂载相关的服务(automountunit/mountunit):例如来自网络的自动挂载、NFS档案系统挂载等与档案系统相关性较高的程序管理.
.path:侦测特定档案或目录类型(pathunit):某些服务需要侦测某些特定的目录来提供队列服务,例如最常见的打印服务,就是透过侦测打印队列目录来启动打印功能!
.timer:循环执行的服务(timerunit):这个东西有点类似anacrontab!不过是由systemd主动提供的,比anacrontab更加有弹性!
与systemd的daemon运作过程相关的目录简介:
1;/usr/lib/systemd/system/:使用CentOS官方提供的软件安装后,预设的启动脚本设定档都放在这里
2./run/systemd/system/:系统执行过程中所产生的服务脚本,这些脚本的优先序要比/usr/lib/systemd/system/高!
3./etc/systemd/system/:管理员依据主机系统的需求所建立的执行脚本,其实这个目录有点像以前/etc/rc.d/rc5.d/Sxx之类的功能!执行优先序又比/run/systemd/system/高!
4./etc/sysconfig/*:几乎所有的服务都会将初始化的一些选项设定写入到这个目录下,举例来说,mandb所要更新的manpage索引中,需要加入的参数就写入到此目录下的man-db当中!而网络的设定则写在/etc/sysconfig/network-scripts/这个目录内.
5./var/lib/:一些会产生资料的服务都会将他的资料写入到/var/lib/目录中.举例来说,数据库管理系统Mariadb的数据库预设就是写入/var/lib/mysql/这个目录下!
6./run/:放置了好多daemon的暂存档,包括lockfile以及PIDfile等等.
systemctl项目简介:
#cat /usr/lib/systemd/system/sshd.service
.service大概能够将整个设定分为三个部份,就是:
[Unit]:unit本身的说明,以及与其他相依赖daemon的设定,包括在什么服务之后才启动此unit之类的设定值;
[Service],[Socket],[Timer],[Mount],[Path]..:不同的unittype就得要使用相对应的设定项目.我们拿的是sshd.service来当模板,所以这边就使用Service来设定.这个项目内主要在规范服务启动的脚本、环境设定档档名、重新启动的方式等等.
[Install]:这个项目就是将此unit安装到哪个target里面去的意思!
至于设定档内有些设定规则还是得要说明一下:
设定项目通常是可以重复的,例如我可以重复设定两个After在设定档中,不过,后面的设定会取代前面的!因此,如果你想要将设定值归零,可以使用类似『After=』的设定,亦即该项目的等号后面什么都没有,就将该设定归零了(reset).
如果设定参数需要有『是/否』的项目(布尔值,boolean),你可以使用1,yes,true,on代表启动,用0,no,false,off代表关闭!
空白行、开头为#或;的那一行,都代表注解!
Unit部分说明:
Description:服务的描述信息
Documentation:提供给管理员的一些帮助文档!提供的文件可以是如下的格式:Documentation=http://www....Documentation=man:sshd(8)Documentation=file:/etc/ssh/sshd_config
After:说明此unit是在哪个daemon启动之后才启动的意思!基本上仅是说明服务启动的顺序而已,并没有强制要求里头的服务一定要启动后此unit才能启动.以sshd.service的内容为例,该服务提到After后面有network.target以及sshd-keygen.service,但是若这两个unit没有启动而强制启动sshd.service的话,那么sshd.service应该还是能够启动的!这与Requires的设定是有差异的!
Before:与After的意义相反,是在什么服务启动前最好启动这个服务的意思.不过这仅是规范服务启动的顺序,并非强制要求的意思.
Requires:明确的定义此unit需要在哪个daemon启动后才能够启动!就是设定依赖服务啦!如果在此项设定的前面服务没有启动,那么此unit就不会被启动!
Wants:与Requires刚好相反,规定的是这个unit之后最好还要启动什么服务比较好的意思!不过,并没有明确的规定就是了!主要的目的是希望建立让使用者比较好操作的环境.因此,这个Wants后面接的服务如果没有启动,其实不会影响到这个unit本身!
Conflicts:代表冲突的服务!也就是这个项目后面接的服务如果有启动,那么我们这个unit本身就不能启动!我们unit有启动,则此项目后的服务就不能启动!
[Service]部分说明:
Type:说明这个daemon启动的方式,会影响到ExecStart!一般来说,有底下几种类型
simple:预设值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于存储器中.
forking:由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务.原生的父程序在启动结束后就会终止运作.传统的unit服务大多属于这种项目,例如httpd这个WWW服务,当httpd的程序因为运作过久因此即将终结了,则systemd会再重新生出另一个子程序持续运作后,再将父程序删除.
oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在存储器中.
dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作! 因此设定这个项目时,通常也要设定BusName=才行!
idle:与simple类似,意思是,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执 行.这类的daemon通常是开机到最后才执行即可的服务!
比较重要的项目大概是 simple, forking 与 oneshot 了!毕竟很多服务需要子程序 (forking),而有更多的动作只需要在开机的时候执行一次(oneshot),例如文件系统的检查与挂载啊等等的。
EnvironmentFile:可以指定启动脚本的shell环境!例如 sshd.service 的设定档写入到 /etc/sysconfig/sshd 当中!你也可以使用 Environment= 后面接多个不同的 Shell 变量来给予设定!
ExecStart:就是实际执行此 daemon 的指令或脚本程序。你也可以使用 ExecStartPre (之前) 以及 ExecStartPost (之后) 两个设定项目来在实际启动服务前,进行额外的指令行为。 但需要特别注意的是,指令串仅接受『指令 参数 参数...』的格式,不能接受 <, >, >>, |, & 等特殊字符,很多的 bash 语法也不支援喔! 所以,要使用这些特殊的字符时,最好直接写入到指令脚本里面去!不过,上述的语法也不是完全不能用,亦即,若要支援比较完整的 bash 语法,那你得要使用 Type=oneshot 才行喔! 其他的 Type 才不支持这些字符。
ExecStop:与 systemctl stop 的执行有关,关闭此服务时所进行的指令。
Restart:当设定 Restart=1 时,则当此 daemon 服务终止后,会再次的启动此服务。举例来说,如果你在 tty2 使用文字界面登入,操作完毕后登出,基本上,这个时候 tty2 就已经结束服务了。 但是你会看到荧幕又立刻产生一个新的 tty2 的登入画面等待你的登入!那就是 Restart 的功能!除非使用 systemctl 强制将此服务关闭,否则这个服务会源源不绝的一直重复产生!
RemainAfterExit:当设定为 RemainAfterExit=1 时,则当这个 daemon 所属的所有程序都终止之后,此服务会再尝试启动。这对于 Type=oneshot 的服务很有帮助!
TimeoutSec:若这个服务在启动或者是关闭时,因为某些缘故导致无法顺利『正常启动或正常结束』的情况下,则我们要等多久才进入『强制结束』的状态!
KillMode:可以是 process, control-group, none 的其中一种,如果是 process 则 daemon 终止时,只会终止主要的程序 (ExecStart 接的后面那串指令),如果是 control-group 时, 则由此 daemon 所产生的其他 control-group 的程序,也都会被关闭。如果是 none 的话,则没有程序会被关闭喔!
RestartSec:与 Restart 有点相关性,如果这个服务被关闭,然后需要重新启动时,大概要 sleep 多少时间再重新启动的意思。预设是 100ms (毫秒)。
Install部分说明:
WantedBy:这个设定后面接的大部分是 *.target unit !意思是,这个 unit 本身是附挂在哪一个 target unit 底下的!一般来说,大多的服务性质的 unit 都是附挂在 multi-user.target 底下!
Also:当目前这个 unit 本身被 enable 时,Also 后面接的 unit 也请 enable 的意思!也就是具有相依性的服务可以写在这里呢!
Alias:进行一个连结的别名的意思!当 systemctl enable 相关的服务时,则此服务会进行连结档的建立!以 multi-user.target 为例,这个家伙是用来作为预设操作环境 default.target 的规划, 因此当你设定用成 default.target 时,这个 /etc/systemd/system/default.target 就会链接到 /usr/lib/systemd/system/multi-user.target !
systemctl命令详细使用说明:
1.首先检查你的系统中是否安装有systemd并确定当前安装的版本
#systemd--version
2.检查systemd和systemctl的二进制文件和库文件的安装位置
# whereis systemd
# whereis systemctl
3.检查systemd是否运行
# ps-eaf | grepsystemd
注意:systemd是作为父进程(PID=1)运行的.在上面带(-e)参数的ps命令输出中,选择所有进程,(-a)选择除会话前导外的所有进程,并使用(-f)参数输出完整格式列表(即-eaf).
4.分析systemd启动进程
# systemd-analyze
5.分析启动时各个进程花费的时间
# systemd-analyze blame
6.分析启动时的关键链
# systemd-analyze critical-chain
7.列出所有可用单元
# systemctl list-unit-files
8.列出所有运行中单元
# systemctl list-units
9.列出所有失败单元
# systemctl --failed
10.检查某个单元(如cron.service)是否开机自启
#systemctl is-enabled crond.service
11.检查某个单元或服务是否运行
# systemctl status firewalld.service
使用Systemctl控制并管理服务
12.列出所有服务(包括启用的和禁用的)
#systemctl list-unit-files --type=service
13.Linux中如何启动、重启、停止、重载服务以及检查服务(如httpd.service)状态
#systemctl start httpd.service
#systemctl restart httpd.service
#systemctl stop httpd.service
#systemctl reload httpd.service
#systemctl status httpd.service
注意:当我们使用systemctl的start,restart,stop和reload命令时,我们不会从终端获取到任何输出内容,只有status命令可以打印输出.
14.如何激活服务并在启动时启用或禁用服务(即系统启动时自动启动服务)
# systemctl is-active httpd.service
# systemctl enable httpd.service
# systemctl disable httpd.service
15.如何屏蔽(让它不能启动)或显示服务(如httpd.service)
#systemctl mask httpd.service
#systemctl unmask httpd.service
16.使用systemctl命令杀死服务
# systemctl kill httpd
# systemctl statu shttpd
使用Systemctl控制并管理挂载点
17.列出所有系统挂载点
#systemctl list-unit-files --type=mount
18.挂载、卸载、重新挂载、重载系统挂载点并检查系统中挂载点状态
#systemctl start tmp.mount
#systemctl stop tmp.mount
#systemctl restart tmp.mount
#systemctl reload tmp.mount
#systemctl status tmp.mount
19.在启动时激活、启用或禁用挂载点(系统启动时自动挂载)
#systemctl is-active tmp.mount
#systemctl enable tmp.mount
#systemctl disable tmp.mount
20.在Linux中屏蔽(让它不能启用)或可见挂载点
# systemctl mask tmp.mount
#s ystemctl unmask tmp.mount
使用Systemctl控制并管理套接口
21.列出所有可用系统套接口
#systemctl list-unit-files --type=socket
22.在Linux中启动、重启、停止、重载套接口并检查其状态
#systemctl start cups.socket
#systemctl restart cups.socket
#systemctl stop cups.socket
#systemctl reload cups.socket
#systemctl status cups.socket
23.在启动时激活套接口,并启用或禁用它(系统启动时自启动)
#systemctl is-active cups.socket
#systemctl enable cups.socket
#systemctl disable cups.socket
24.屏蔽(使它不能启动)或显示套接口
#systemctl mask cups.socket
#systemctl unmask cups.socket
服务的CPU利用率(分配额)
25.获取当前某个服务的CPU分配额(如httpd)
# systemctl show -p CPUShares httpd.service
注意:各个服务的默认CPU分配份额=1024,你可以增加/减少某个进程的CPU分配份额.
26.将某个服务(httpd.service)的CPU分配份额限制为2000CPUShares/
#systemctl set-property httpd.service CPUShares=2000
#systemctl show -p CPUShares httpd.service
CPUShares=2000
注意:当你为某个服务设置CPUShares,会自动创建一个以服务名命名的目录(如httpd.service),里面包含了一个名为90-CPUShares.conf的文件,该文件含有CPUShare限制信息,你可以通过以下方式查看该文件:
# vim /etc/systemd/system/httpd.service.d/50-CPUShares.conf
[Service]
CPUShares=2000
27.检查某个服务的所有配置细节
#systemctl show httpd
28.分析某个服务(httpd)的关键链
#systemd-analyze critical-chain httpd.service
29.获取某个服务(httpd)的依赖性列表
#systemctl list-dependencies httpd.service
30.按等级列出控制组
# systemd-cgls
31.按CPU、内存、输入和输出列出控制组
# systemd-cgtop
控制系统运行等级
32.启动系统救援模式
#systemctl rescue
33.进入紧急模式
# systemctl emergency
34.列出当前使用的运行等级
# systemctl get-default
35.启动运行等级5,即图形模式
#systemctl isolate runlevel5.target
或
#systemctl isolate graphical.target
36.启动运行等级3,即多用户模式(命令行)
#systemctl isolate runlevel3.target
或
#systemctl isolate multiuser.target
36.设置多用户模式或图形模式为默认运行等级
#systemctl set-default runlevel3.target
#systemctl set-default runlevel5.target
37.重启、停止、挂起、休眠系统或使系统进入混合睡眠
#systemctl reboot
#systemctl halt
内核:/boot/vmlinuz-versioninitramfs:/boot/initramfs-kernel_version内核模块:/lib/modules/kernel_version/kernel内核源码:/usr/src/kernels/kernel_version内核版本:/proc/version系统内核功能:/proc/sys/kernel
# lsmod:查看系统中加载的内核模块结果解释:第一列:module:模块的名称第二列:size:模块的大小第三列:userd by:此模块是否被其他模式使用(依赖关系)
# depmod:更新模块的依赖关系并创建依赖关系文件/lib/modules/kernel_version/modules.dep:解决linux模块依赖关系的文件-A:查找比/lib/modules/kernel_version/modules.dep新的模块,如果有,才会更新,并写入改文件-n:不写入依赖关系文件,直接输出到屏幕上-e:显示当前已经加载的但不可执行的模块名称# modinfo:查看模块的信息modinfo modules_name# insmod:加载模块insmod 模块绝对路径如:# insmod /lib/modules/2.6.32-642.el6.x86_64/kernel/fs/cifs/cifs.ko# rmmod:删除模块rmmod 模块名称# modprobe:加载删除模块(不需要模块的完整路径)-c:列出目前系统中的所有的模块-l:列出/lib/modules/2.6.32-642.el6.x86_64/kernel当中所有模块的完整文件名-f:强制加载-r:删除某个模块,类似于rmmod
GRUB分阶段启动:
stage1:第一个阶段,位于BootLoader,为了引导第二阶段
stage1_5:识别文件系统
stage2:加载启动设置等等,读取配置文件/boot/grub/grub.conf
GRUB修复:
有两种模式:1、重启后自动进入GRUP命令模式,可以输入grub.conf的文件内容来修复;2、光盘启动,进入救援模式
1、重启后自动进入GRUP命令模式,可以输入grub.conf的文件内容来修复:
2、光盘启动,进入救援模式,输入以下命令:
# chroot /mnt/sysimage
# grub-install --root-directory=/ /dev/sda (/:grub目录的父目录;/dev/sda:指定的第一块磁盘)
# grub 命令
grub> root (hd0,0)
grub> setup (hd0)
grub> quit
# 在grub目录下建立新的conf文件
# exit
# reboot
为GRUB启动菜单添加密码:
# grub-crypt --sha-512 //生成加密密码
# vim /boot/grub/grub.conf,在hiddenmenu添加一行
password --encryped 生成的密文
为系统添加启动密码:
# grub-crypt --sha-512 //生成加密密码
# vim /boot/grub/grub.conf,在title中添加一行
password --encryped 生成的密文(encryped 改为相应的加密算法名称)
进程管理:kernel+process
CPU:ring0:内核空间 ring1-2:库文件等 ring3:用户空间
CPU读取的数据都来自内存
内存:内核空间和用户空间
RAM:易失性存储器
ROM:只读存储器,存储硬件信息等
启动过程:
--POST(加电自检:PowerOnSelfTest)
--BIOS(基本输入输出系统:Basic Input Output System:硬件信息;Boot sequence:启动顺序)
--MBR(主引导记录;446字节bootloader)
--启动菜单(Linux启动菜单:GRUB)
--kernel
--initramfs(虚拟根文件系统,CentOS6),相当于加载到7C00的那一段代码,把/proc /sys /dev目录复制到根文件系统
initrd:CentOS5
--/sbin/init
kernel作用:驱动和检测系统外围硬件或程序
文件系统
安全管理
网络管理
进程管理
驱动程序
内核设计:
单内核:把所有的功能都集成到内核中去
Linux使用单内核,但是采用模块化设计(/lib /lib64)
/lib/modules/'内核版本号为名称的目录'/kernel,其中modules.dep解决系统中依赖关系
arch:平台架构相关
crypto:安全加密
drivers:驱动程序
fs:文件系统
kernel:内核
lib:内核库 .ko.xz(kernel object)
mm:内存管理
net:系统中的TCP/IP协议栈
sound:声卡
微内核:把每个功能都做成小模块(Windows solaris)
Linux运行级别:0-6
0:halt关机
1:单用户模式(root, 无须登录), single, 维护模式;
2: 多用户模式,会启动网络功能,但不会启动NFS;维护模式;
3:多用户模式,正常模式;文本界面; CLI:command line interface
4:预留级别;
5:多用户模式,正常模式;图形界面; GUI:graphical user interface
6:重启
chroot:改变根目录
ldd:查看二进制文件所依赖的库文件
文件查找命令: which locate find
which:查找命令字所在的位置
locate:模糊匹配(只要包含关键字的文件都查找出来)
不是实时的,基于数据库查找, updatedb升级locate数据库
查找速度特别快
find:查看文件或目录的工具
特点: 实时查找
精确查找
遍历整个指定目录中的文件,速度很慢
支持多种查找条件(属主,属组,权限,文件名等)
语法: find [find_path] [条件] [处理动作]
find_path:如果不写,默认在当前工作目录查找
条件:如果不写,会查找出该路径下所有的文件
处理动作:默认打印到屏幕上 print
条件:(匹配标准)
-name file_name:根据文件名进行查找,区分大小写
查找条件通配符:
*:通配任意个数的任意字符 # find /etc/ -name "pass*" # find /etc/ -name "*pass"
?:通配单个的任意字符 # find /etc/ -name "passw*"
-iname file_name:根据文件名进行查找,不区分大小写
-regex PATTERN:根据正则表达式的模式进行查找
-user:通过属主进行查找
-group:通过属组进程查找
-uid UID:通过UID号进行查找
-gid GID:通过GID号进行查找
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
-type:根据文件类型进行查找
-b:块设备
-c:字符设备
-d:目录
-f:文件
-p:命名管道
-s:套接字文件
-l:链接文件
-size [+ | -] num [k|m|g]
-size 5k:精确匹配
+:大于
-:小于
根据时间戳进行查找: # stat file_name //查看文件的时间戳
[+ | -] 也起作用
-atime:时间单位为天,access时间
-mtime:时间单位为天,modify时间
-ctime:时间单位为天,change时间
-mmin:时间单位为分钟,modify时间
-amin:时间单位为分钟,access时间
-cmin:时间单位为分钟,change时间
根据权限查找:
-perm MODE:
MODE:num(如644),精确匹配
/MODE:/num任意一位匹配
-MODE:-num文件权限能够完全包含此MODE时才能匹配
条件组合:
-a:同时满足多个条件,比如查找属主是tom并且权限为644的文件
-o:满足一个条件即可,比如查找属主是tom或者权限为644的文件
-not:不满足条件的被查找出来
出来动作:
-print:默认动作,默认查找结果打印到屏幕
-ls:默认以类似于ls -l的形式显示结果的信息
-ok COMMAND {} \;执行动作时提示用户是否执行,必须以\;结尾,{}代表文件名占位符
-exec COMMAND {} \;执行动作时不提示用户直接执行,必须以\;结尾,{}代表文件名占位符
1、查找/var目录下属主为root并且属组为mail的所有文件;
find /var -user root -a -group mail
2、查找/usr目录下不属于root,bin,或student的文件;
find /usr -not -user root -a -not -user bin -a -not -user student
find /usr -not \( -user root -o -user bin -o -user student \)
3、查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件;
find /etc -mtime -7 -not \ ( -user root -o -user student \)
find /etc -mtime -7 -not -user root -a -not -user student
4、查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,并将其属主属组均修改为root;
find / \( -nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \;
5、查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc.largefiles文件中;
find /etc -size +1M >> /tmp/etc.largefiles
6、查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息;
find /etc -not -perm /222 -ls
任务计划:调度性的任务
分为:
一次性任务计划:at、batch
周期性任务计划:cron、anacron
一次性任务计划:
一、at命令
1、at:设置系统在某一个时间点执行的任务,执行结果以邮件的方式发送给任务发起者
依赖atd服务,所以需要:
# systemctl start atd
# systemctl enable atd
# systemctl status atd
2、语法:
# at data_time
at>at_command1 //输入需要执行的命令
at>at_command2
at>ctrl+d 保存退出
data_time:时间日期写法
绝对时间:
HH:MM:具体时间点
DD.MM.YY:天.月.年
YY-MM-DD:年-月-日
MM/DD/YY:月/日/年
HH:MM YY-MM-DD:
相对时间:
at now+3minutes:从任务计划创建开始计时,3分钟以后执行
3、与at命令相关的文件:
Linux中设置at任务后,会在/var/spool/at/目录生成at任务计划的文件,按照文件名的排序顺序执行
权限:
/etc/at.allow:at任务计划的白名单,仅允许此文件中的用户执行at
/etc/at.deny:at任务计划的黑名单,仅拒绝次文件中的用户执行at
系统先查找/etc/at.allow,再去查找/etc/at.deny,如果两个文件都没有,可以执行
4、at命令:设置at任务计划
-l:查看系统中at任务列表,相当于atq
-r:删除系统中的at任务列表,相当于atrm
-d:删除系统中的at任务列表,相当于atrm
-c:列出后续at任务的具体指令内容
二、batch
1、batch:用法和at相同,不过batch任务计划是在CPU空闲时执行(当CPU的平均负载小于0.8时,uptime:查看CPU的平均负载)
依赖batchd服务,所以需要:
# systemctl start batchd
# systemctl enable batchd
# systemctl status batchd
2、语法:
# batch data_time
batch>batch_command1
batch>batch_command2
batch>ctrl+d 保存退出
data_time:时间日期写法:
绝对时间:
HH:MM:具体时间点
DD.MM.YY:天.月.年
YY-MM-DD:年-月-日
MM/DD/YY:月/日/年
HH:MM YY-MM-DD:
相对时间:
at now+3minutes:从任务计划创建开始计时,3分钟以后执行
周期性任务计划:
系统周期性任务:
日志轮换:logrotate
登录文件分析:logwatch任务
创建locate数据库:updatedb
创建man帮助信息数据库:CentOS6:makewathis CentOS7:mandb
RPM软件登录文件的创建
与网络相关的分析行为:
用户周期性任务:
cron:设置周期任务计划
anacron:当cron周期性任务由于某种原因没有执行,anacron重新执行cron任务
一、cron
1、cron:
依赖crond服务,所以需要:
# systemctl startcrond
# systemctl enablecrond
# systemctl statuscrond
2、相关文件:
权限控制文件:
/etc/cron.allow和/etc/cron.deny
/etc/cron.allow:白名单
/etc/cron.deny:黑名单,默认情况下系统只保留/etc/cron.deny
cron相关的配置文件:
/etc/crontab:cron配置文件
/etc/cron.d/:cron辅助配置文件目录
/var/spool/cron/:cron任务计划的配置文件目录,用户设置完cron任务后,会生成以用户名名称的cron文件
/etc/crontab文件解析:
SHELL=/bin/bash:cron任务计划执行使用的shell程序
PATH=/sbin:/bin:/usr/sbin:/usr/bin:cron任务计划命令搜索地址
MAILTO=root:cron任务计划执行结果发送给哪个用户
/etc/daily/ /etc/hourly/ /etc/monthly/ /etc/weekly/,这些目录下存放了固定的周期性任务
cron.hourly:cron工具去执行
cron.daily,cron.weekly cron.monthly是由anacron工具去执行
3、操作:
crontab:设置/查看/删除等cron任务计划,执行结果以邮件方式发送给任务发起者
-e:会通过文本格式建立,在文本中编辑cron任务内容,语法见下文
-u:为指定用户设置cron任务计划(只有root用户能够使用)
-l:查看cron任务列表
-r:删除所有的cron列表
设置任务语法:
系统设置:
分 时 日 月 周 用户 命令
用户设置:
分 时 日 月 周 命令
时间取值范围:
分钟:0-59
小时:0-23
日期:1-31
月份:1-12或jan,feb,mar,apr ...
周:0-7或sun,mon,tue,wed,thu,fri,sat,其中0和7都代表周日
时间的特殊写法:
通配:*代表任意时间 10 17 * * * cat /etc/fstab
离散时间段:,(逗号) 5,15,30,45,56 17 * * * cat /etc/fstab
连续时间段:-(中横线) 00 23 * * 1-5 cat /etc/fstab
间隔时间段:*/n */5 * * * * cat /etc/fstab 00 10 */5 * * cat /etc/fstab(分不能通配)
4、cron设置任务计划时注意事项:
CPU和内存资源集中使用时的问题:
# vim /etc/crontab
1,6,11,16,21,26,31,36,41,46,51,56 * * * * root COMMAND1
取消一些不必要的输出:设置命令时可以重定向输出
时间的检验:设置时间时,周与日月不可并存
安全的检验:通过/var/log/cron的内容查看cron任务计划中是否有非法任务
环境变量:系统命令查找和cron任务命令位置由$PATH变量决定,设置cron任务时,使用命令的绝对路径
二、anacron
1、anacron:当cron周期性任务由于某种原因(如关机)没有执行,anacron重新执行cron任务
2、语法:
anacron [options] [job]
-s:依据时间记录文件去判断是否执行
-f:强制执行
-n:立刻运行未执行的任务,不需要延时
3、anacron执行流程:
1:由/etc/anacrontab分析到cron.daily天数为1天
2:由/var/spool/anacron/cron.daily取出最近一次执行anacron时间戳
3:由2步骤分析出的时间戳和cron任务进行比较,查看哪些cron任务超过1天时间没有执行
4:准备执行指令,根据/etc/anacrontab的设置,将延时执行
5:延时时间过后,执行指令
进程管理命令:ps top pstree pgrep pidof kill killall bg fg jobs
ps:process status:进程状态查看,运行ps那个时刻系统进程状态;BSD风格(不使用连字符),sys V风格(使用连字符),GNU长选项(使用两个连字符)
a:显示和终端有关的进程
u:显示进程用户的信息
x:显示和终端无关的进程
-e:显示所有进程信息
-l:显示进程长格式
-F:显示进程的完整信息
ps aux:结果解析
USER:该进程是有哪个用户发起的
PPID:父进程号
PID:进程号 /proc目录存放着进程相关的信息 在CentOS7:PID为1的进程是systemd 在CentOS6 中PID为1的进程是init进程,PID为1的进程是系统中所有进程的父进程
%CPU:该进程占用的CPU百分比
%MEM:该进程占用内存的百分比
VSZ:虚拟内存集(计算进程所占物理内存时,物理内存包括共享库的空间)
RSS:常驻内存集(进程中不能被交换出去的数据)
TTY:运行在哪个终端
STAT:进程状态
D:不可中断睡眠状态
S:可中断睡眠状态
R:运行状态
T:停止状态
Z:僵尸状态
s:session leader:会话的领导者
<:优先级较高的进程(用户不可控)
N:优先级较低的进程(用户可控进程)
l:多线程进程
L:在内存中锁定分页
+:前台进程组中的进程
START:进程启动时间
TIME:该进程在CPU中实际运行的时长
COMMAND:该进程命令名称
ps -elF:结果解析
PRI:系统分配的优先级(用户不可更改)
NI:nice值,nice值的修改会影响pri的值,他们的总和不变
调整进程的nice值:调整正在运行进程的nice
renice [nice_num] PID
指定进程运行的nice值(让某个命令以指定nice运行)
nice -n [nice_num] COMMAND
top:动态查看进程状态,每隔3秒刷新一次进程状态信息
top结果解析:
第一行:当前系统时间 系统运行时长 登录系统的用户个数 过去1分钟,5分钟,15分钟平均负载
第二行:进程总数 正在运行的进程数 睡眠的进程数 停止状态进程数 僵尸状态进程数
第三行(按1键可以查看每个CPU的信息):CPU相关信息: us:用户进程所占CPU百分比 sy:系统进程所占CPU百分比 ni:nice所占CPU百分比 id:空闲进程所占CPU百分比 hi:硬件中断所占CPU百分比 si:软件中断所占CPU百分比 st:被hypervisor偷走的CPU的百分比
第四行:物理内存相关信息
第五行:交换分区相关信息
top交互式命令:
M:按所占内存百分比进行排序
P:按所占CPU备份比进行排序
T:按进程运行时长进行排序
c:是否显示COMMAND列完整路径
l:是否显示top第一行
t:是否显示top中第二行和第三行
m:是否显示内存的相关信息
k:杀死某个进程
q:退出top进程
pstree:查看进程树(查看父子进程关系)
pgrep:查看某个进程PID号 pgrep process_name
pidof:查看某个进程PID号 pidof process_name
kill:杀死某个进程(向进程传递某个信号)
-l:查看信号列表:
1:SIGHUP:不停止服务的情况下,重新读取配置文件,并且应用配置文件中的设置
2:SIGINT:Ctrl+c 中断某个进程
9:SIGKILL:强制杀死某个进程
15:SIGTERM:终止某个进程(默认信号),相当于会有预警
kill语法:
kill -sig_num PID
kill -sig_name PID
kill %num:杀死后台的某个作业,%不能省略,num为使用jobs命令查看时的序号
信号:进程间的通信(IPC)
内存共享等
killall:杀死整个进程树,用法同kill
bg:把进程调入后台继续运行
fg:把后台的进程调入前台运行
fg num:将后台序号为num的进程调入前台
jobs:查看后台运行的作业
+:下一次将要运行的后台作业
前台-->后台:
ctrl+z:把正在运行的进程调入后台,并停止运行
&:启动时直接调入后台运行,末尾加上该符号
进程的概念:
可以定义为:可并发执行的程序在一个数据集合上的运行过程。进程可以申请和拥有系统资源。传统操作系统中,进程是一个可以独立调度的基本单位(现代操作系统中为线程)。进程是一个动态的概念,它是“活的”,它有产生、运行、消亡的过程。进程与程序不是等同概念,程序是一个静态的概念,是指令和数据的集合,作为一种文件可长期存放在存储介质中。
进程的相关概念:父子关系 进程状态 优先级
1、进程状态:
task_uninterruptible:不可中断睡眠 mkdir:系统调用,硬件:I/O 1ms
task_interruptible:可中断睡眠
stopped:停止状态(不能被调入CPU运行)
zombie:僵尸状态(结束父进程才能够退出当前进程的僵尸状态):进程运行完成后没有释放CPU和内存资源
2、进程优先级:
0-139数字,共140个优先级,数字越小,优先级越高
0-99:系统分配优先级(用户不可控优先级)
100-139:nice值 (用户可控优先级);-20到19;root用户可以任意调整nice值;普通用户只能调整0-19
高优先级进程:获取更多的CPU运行时长,更优先的让CPU执行
进程的特性:
动态性
并发性
独立性
异步性
CPU分环运行:
0环:特权环,运行内核
1-2环:库文件
3环:进程环
task struct:进程的数据结构(存放在内存的内核空间中),相当于进程控制块
task struct结构:状态 进程信息和内核栈 运行列表(指令等) MM(内存管理):memory mangement PID:进程ID号 群组信息 用户信息 文件系统 文件描述符等,同时也维护页表寄存器
进程内存结构:
forbidden:内核空间
program text:指令
data+bss:全局变量
heap:堆空间,进程运行时调用的数据等
shared library:共享库
stack:栈空间,局部变量
线程的概念:
现代操作系统中,将传统的进程分离,即将资源申请和调度分开,进程作为资源的申请和拥有的单位,而进程作为调度的基本单位。thread:线程,轻量级进程
线程与进程的比较:
调度
并发性
拥有资源
系统开销
lock:死锁 自旋锁等
由于临界区的存在导致了该概念的产生,临界区使用原则:忙则等待、有限等待、空闲让进、让权等待
编译安装: RPM YUM
RPM,一键安装,方便,二进制程序,但存在一下问题:
1:功能不齐全,功能冗余
2:版本滞后
因此我们需要自己定制软件包:源代码编译为安装应用程序
编译环境:
gcc:GNU C Complier
gcc-c++:
安装编译环境: # yum -y groupinstall "Development Tools"
automake:生成Makefile.in(半成品)文件
autoconf:生成脚本文件configure,在源代码目录中
make:最终使用make进行编译,但其本身并不是编译器,是项目管理工具,按照Makefile文件中的定义的顺序去编译。
执行编译安装步骤:
1:获取源代码并解压:
# tar xf xxx.tar.gz
# tar xf xxx.tar.bz2
2:执行configure脚本(在源码目录中运行),及错误处理
功能:1:检查应用程序所需要的编译环境 2:生成Makefile 3:定制应用程序功能
选项:--help:查看该脚本帮助信息
--prefix=PATH:定义应用程序安装路径
--sbin-path=PATH:定义应用程序的二进制程序路径
--conf-path=PATH:定义应用程序配置文件路径
--enable--XXXX:开启某项功能(如应用程序支持该功能,但默认不安装)
--disable--XXX:关闭某项功能(如应用程序支持该功能,默认安装,但是用户不需要)
--with--XXX:开启某项功能(如应用程序支持该功能,但默认不安装)
--without--XXX:关闭某项功能(如应用程序支持该功能,默认安装,但是用户不需要)
--user=USER:指定应用程序执行的用户
--group=GROUP:执行应用程序执行的组
解决configure错误信息
1:用without关闭这项功能
2:安装所需的环境,安装所需环境的devel包
3:make:按照Makefile文件定义的顺序去编译源程序
-j N:多个线程一起编译
4:make install:安装应用程序
编译安装完成后工作:
1、添加应用程序的二进制程序到系统路径: 系统查找 $PATH
1.1:为二进制程序做链接文件,如: 缺点:占用inode值
# ln -s /usr/local/tengine/sbin/* /usr/sbin(文件数量较少时采用)
# ln -s /usr/local/tengine/sbin /usr/sbin/tengine(文件数量较多时采用)
1.2:修改/etc/profile文件,如添加如下内容:
PATH=$PATH:/usr/local/tengine/sbin
然后使其生效:source /etc/profile
1.3:在/etc/profile.d/目录中建立name.sh的文件,添加如下类似内容:
PATH=$PATH:/usr/local/tengine/sbin
重新登录生效
2、添加应用程序的库文件到系统库/usr/lib /usr/lib64:
2.1:为库文件做链接文件
# ln -s /usr/local/APP_NAME/lib/* /usr/lib
# ln -s /usr/local/APP_NAME/lib /usr/lib/APP_NAME
2.2:在/etc/ld.so.conf.d/目录下建立APP_NAME.conf,把应用程序的库文件位置添加进去:
/usr/local/app_name/lib
执行如下命令生效:
ldconfig
-v:显示加载库文件过程
3、添加用用程序的头文件到系统头文件 /usr/include:
3.1:为头文件做链接文件
# ln -s /usr/local/APP_NAME/include/* /usr/include
# ln -s /usr/local/APP_NAME/include /usr/include/APP_NAME
4、添加应用程序的帮助信息:
4.1:man -M PATH bin_name,只是查询,并没有添加
-M:指定帮助信息的位置
4.2:man配置文件:系统默认帮助/usr/share/man
CentOS6:/etc/man.conf添加:
MANPATH [help_path]
CentOS7:/etc/man_db.conf添加:
MANPATH_MAP [help_path]
install:安装软件包update:升级软件包check-update:检查软件包的升级信息upgrade:更新软件包remove:卸载软件包list:显示所有已经安装和未安装的软件包yum list installed \ uninstalledinfo:查看软件包信息yum info nameclean:清除软件包一些信息search:查看指定软件包相关的软件包deplist:查询软件包依赖关系列表repolist:查看可用的yum源repolist [all|enabled|disabled]repoinfo:查看可用yum源的信息repoinfo [all|enabled|disabled]groupinstall:安装软件包组groupremove:卸载指定软件包组groupinfo:查看软件包组的信息grouplist:显示所有已经安装和未安装的软件包组
[name]name=: //引用变量baseurl: //yum仓库, $releasever:发行版本 $basearch:cpu架构集 $arch:cpu架构enabled: //是否启用该yum仓库gpgcheck: //是否进行完整性和校验和检测gpgkey: //用于完整性检验和的检测文件
192.168.10.10:yum源ftp: # mount /dev/cdrom /media# yum -y install vsftpd# systemctl start vsftpd# systemctl enable vsftpd# cp -rf /media/ /var/ftphttpd:# mount /dev/cdrom /media# yum -y install httpd# systemctl start httpd# systemctl enable httpd# cp -rf /media/ /var/www/html/192.168.10.20:yum客户端ftp:vim ftp.repo[ftp]name=ftp_repobaseurl=ftp://192.168.10.10/mediaenabled=1gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7httpd:# vim httpd.repo[httpd]name=httpd_repobaseurl=http://192.168.10.10/mediaenabled=1gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7file:# mount /dev/cdrom /media# vim file.repo[file]name=file_repobaseurl=file:///mediaenabled=1gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
设备文件: /dev/
b:块设备
c:字符设备
主设备号(MAJOR):标识某一类设备,第5列
次设备号(MINOR):标识一类设备下不同设备,第6列
mknod:创建设备:mknod [OPTION]... NAME TYPE [MAJOR MINOR]
-m:设置权限
磁盘:
IDE ATA:hd 主板:2IDE接口(慢,被淘汰)
SATA:sd(现在常用)
SCSI:sd(服务器常用)
USB:sd
Linux以字母标识磁盘的个数 a:第一块 b:第二块(顺序是根据系统根据当前主机接入的硬盘识别顺序来 定,先识别出来的就是第一块,然后就是第二块)
Linux用数字标识分区:1-4标识主分区或扩展分区 逻辑分区从5开始
格式化分类:
低级格式化:划分磁道
高级格式化:为分区装载文件系统
文件系统:内核功能,FAT32 NTFS EXT2 EXT3 EXT4 XFS等
mkfs : make file system创建文件系统命令
-t:指定文件系统
如: mkfs -t ext3 dev_name
vfs:虚拟文件系统,相当于一个内核接口,mkfs调用VFS来实现创建文件系统
分区工具:
fdisk:针对MBR分区类型的工具
gdisk:针对GPT分区类型的工具
fdisk:交互式工具常用命令
语法:fdisk [options] <disk> change partition table
fdisk [options] -l <disk> list partition table(s)
fdisk -s <partition> give partition size(s) in blocks
n:创建一个新分区
p:创建主分区
e:创建扩展分区
d:删除一个分区
l:显示linux支持的分区类型
m:显示帮助信息
p:显示当前分区列表
q:不保存退出
w:保存更改并退出
t:更改分区的系统ID-
磁盘ID: 在fdisk工具下 l(L)命令即可显示所有分区及ID
5:扩展分区
82:交换分区
83:linux系统分区
8e:LVM(逻辑卷管理)
/proc/partitions:查看系统分区情况
分区后进行挂载:
mount:挂载工具
mount src des 如:mount /dev/sdb1 /sdb1
实现开机自动挂载 : blkid:查看设备UUID
/etc/fstab添加内容:
UUID=id号 挂载点 文件系统 默认选项 是否开机检查 是否备份
UUID=8567c02b-fac2-46d3-984e-b9fd8c9a2072 /sdb1 xfs defaults 0 0