引导过程与服务控制
linux操作系统引导过程:
开机自检 → MBR 引导 → GRUB 菜单 → 加载Linux内核 → init 进程初始化
开机自检:
服务器主机开机以后,将根据主板 BIOS 中的设置对 CPU(Central Processing Unit, 中央处理器)、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。
MBR引导:
运行放在MBR扇区里的启动菜单GRUB引导程序。
GRUB菜单:
系统控制权传递给 GRUB 以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载 Linux 内核文件,然后将系统控制权转交给内核。CentOS 7 采用的是 GRUB2 启动引导器。
GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置。 (即选择内核文件和系统类型)
加载Linux内核:
Linux 内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间, 负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个 Linux 操作系统的运行过 程。在 CentOS 系统中,默认的内核文件位于“/boot/vmlinuz-3.10.0-514.el7.x86_64”。 总结:把内核和镜像文件系统加载到内存中,使其可以使用。
init进程初始化:
为了完成进一步的系统引导过程,Linux内核首先将系统中的“/sbin/init”程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户进行登录。CentOS 7 采用的是 Systemd 启动方式。 总结:加载硬件驱动程序,内核把init进程加载到内存中运行。
系统服务控制
运行级别 systemd的target
0 target 关机状态,使用该级别时将会关闭主机
1 rescue.target 单用户模式,不需要密码验证即可登录系统,多用于系统维护
2 rescue.target 用户定义/域特定运行级别。默认等同于3
3 multi-user.target 字符界面的完整多用户模式,大多数服务器主机运行在此级别
4 multi-user.target 用户定义/域特定运行级别。默认等同于3
5 graphical.target 图形界面的多用户模式,提供了图形桌面操作环境
6 reboot.target 重新启动,使用该级别时将会重启主机
Runlevel //查看运行级别 第一个字符是上一次有没有切换字符 第二个为当前运行级别
systemctl get-default 运行target //永久修改运行级别
禁止用户登录 sell 需创建 在 /etc/nologin
安全终端配置:/etc/securetty
注释 tty5与tty6 禁止root用户登录到 tty5 与 tty6 的终端
临时切换运行级别:
init 0 //关机
init 1 //切换到单用户模式(single,维护模式)
init 3 //切换到字符界面的多用户模式
init 5 //切换到图形界面的多用户模式
init 6 //重启
chkconfig //设置开机启动项 与 运行级别 需先添加服务 才能进行管理
配置自定义启动服务 需 放在 /etc/init.d 文件夹中 配置完需要 给予 运行 权限 与 运行级别
参数:
--add <服务名称>:将一个服务添加到系统服务列表中。
--del <服务名称>:从系统服务列表中删除一个服务。
--level <运行级别> <服务名称> <on|off>:设置指定服务在指定运行级别上的启用或禁用状态。
--list <服务名称>:显示指定服务的启用状态和在各个运行级别上的配置
进程和计划任务管理
内核的功用:进程管理、内存管理、文件系统、网络功能、驱动程序、安全功能等
程序:
指特定的一系列动作、行动或操作,而这些活动、动作或操作必须以相同方式执行,借此在相同环境下恒常得出相同的结果(例如紧急应变程序)。粗略而言,程序可以指一序列的活动、作业、步骤、决断、计算和工序,当它们保证依照严格规定的顺序发生时即产生所述的后果、产品或局面。一个程序通常引致一个改变
保存在硬盘、光盘等介质中的可执行代码和数据。
静态保存的代码。
进程
运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位,
进程ID(Process ID,PID)号码被用来标记各个进程
UID、GID语境决定对文件系统的存取和访问权限
通常从执行进程的用户来继承
存在生命周期
都由其父进程创建
进程创建:
init:第一个进程,从 CentOS7 以后为systemd
进程:都由其父进程创建,fork(),父子关系,CoW:Copy On Write 写实更新,有数据写入子进程需要新的内存空间
进程的特征:
动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
并发性:任何进程都可以同其他进程一起并发执行;
独立性:进程是系统进行资源分配和调度的一个独立单位;
结构性:进程由程序、数据和进程控制块三部分组成。
进程的类型
僵尸进程:僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源。
线程:是将进程划分为两个或多个线程(实例)或子进程,由单处理器(单线程)或多处理器(多线程)或多核处理系统并发执行。 线程由线程ID、当前指令指针(PC)、寄存器和堆栈组成。而进程由内存空间(代码、数据、进程空间、打开的
协程:推广了协作式多任务的子例程,允许执行被挂起与被恢复。相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。协程更适合于用来实现彼此熟悉的程序组件,如协作式多任务、异常处理、事件循环、迭代器、无限列表和管道。
当出现IO阻塞的时候,由协程的调度器进行调度,通过将数据流立刻yield掉(主动让出),并且记录当前栈上的数据,阻塞完后立刻再通过线程恢复栈,并把阻塞的结果放到这个线程上去跑,这样看上去好像跟写同步代码没有任何差别,这整个流程可以称为coroutine,而跑在由coroutine负责调度的线程称为Fiber。
相关指令
pidof 参数 <进程名> //查询正在运行程序的进程ID
-s:以单个PID的形式输出,而不是一个PID列表
-x:同时查找指定进程名的可执行文件,而不仅限于进程名
ps -ef //显示所有运行的进程,包括系统级进程。这是最常用的格式
ps aux //显示所有运行的进程,包括所有用户的进程。tty 是否和终端有关
ps 参数 //显示当前终端会话中运行的与当前用户相关的进程
-a 列出不与terminal有关的所有process
-x 列出所有的进程
-e:显示所有进程,而不仅限于终端会话中的进程。
-f:显示完整的进程信息,包括父进程ID、会话ID、终端、启动时间、CPU占用等。
-u:显示与进程相关的用户信息,如用户ID和启动的CPU时间。
top 相较于 ps 可以实时查看 相关信息
top //相当于win任务管理器 快捷键 k kill 强制关闭指定程序
快捷键:
q:退出top命令。
k:发送信号给选定的进程(使用进程PID)。k kill 强制关闭指定程序
r:修改进程的优先级/调度策略(使用进程PID)。
f:在进程排序中切换字段。
o:修改排序方式。
H:在线程和进程之间切换。
M:按内存使用排序。
P:按CPU使用百分比排序。
T:按运行时间排序。
iostat 参数 //显示关于所有磁盘和CPU的汇总信息(默认显示一次)
<interval> <count>:显示间隔时间内的系统磁盘和CPU统计信息。<interval>表示间隔时间,<count>表示显示次数
-x:显示详细的扩展I/O统计信息,包括设备利用率、平均请求队列长度等
-p <device>:仅显示指定设备的统计信息,<device>是设备名称(如:sda、sdb)
pstree 参数 PID/用户 //树状结构显示信息
-a:显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-p < pid> : 显示指定进程及其子进程,同时显示每个进程的PID
-u:显示进程的用户名称
lsof 参数 //查看正被打开的文件
-i:显示网络连接信息 可查询指定端口号的进程 类如 :80 :90
-c <进程名>:仅显示指定进程打开的文件
-t:仅显示文件的进程ID
-n:不解析主机名和端口信息
vmstat //监控系统资源
显示字段意思:
procs:显示有关进程和处理器的信息,如运行队列长度、进程上下文切换次数等
memory:显示有关系统内存使用情况的信息,如物理内存总量、空闲内存、缓冲区和缓存内存、交换空间使用量等
swap:显示有关交换空间使用情况的信息,如交换分区总量、已使用的交换空间大小等
io:显示有关系统输入/输出操作的信息,如块设备的读写操作次数、读写速率等。
system:显示有关系统中断和上下文切换的信息
cpu:显示有关 CPU 使用情况的信息,如用户态和系统态的 CPU 活动时间、CPU 等待磁盘 I/O 的时间等
进程的前后台调度:
& //在命令行尾加入“&”符号,把命令放到后台执行
Ctrl+Z 组合键 //将当前进程挂起,即调入后台并停止执行
jobs //查看处于后台的任务列表
fg 任务序号 //将后台进程恢复到前台运行,可指定任务序号
bg 任务序号 //将一个在后台暂停的任务,变成继续执行
结束进程
kill [信号] PID //将 信号发送给 指定进程
0 EXIT程序退出时收到该信息
1 HUP挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化
2 INT表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号
3 QUIT退出。键盘退出使用 "Ctrl+\ "
9 KILL杀死进程,即强制结束进程
11 SEGV段错误
15 TERM正常结束进程,是 kill 命令的默认信号
18 CONT继续
19 STOP暂停
killall [参数] [信号] 进程名 //与交互形式结束进程
-i:交互式,询问是否要杀死某个进程。
-I:忽略进程名的大小写。
pkill [信号] 进程名 //结束进程 可以用正则表达式搜索进程
-U:根据进程所属的用户名终止相应进程
-t:根据进程所在的终端终止相应进程
定时执行指定操作
at <时间> [选项] //在指定时间 执行某项操作 (一次性)
绝对时间(24小时格式):HH:MM,例如 14:30 表示下午两点半
相对时间:now + X minutes/hours/days/weeks,例如 now + 1 hour 表示一小时之后
明确日期和时间:MMDDHHMM,例如 08251100 表示8月25日上午11点
-f <脚本文件>:指定要运行的脚本文件
-r <任务号>:删除指定的任务
-d:删除所有任务
crontab [选项] <文件或命令> //在指定时间 执行某项操作 (可以循环执行)
-e:编辑当前用户的 crontab 文件
-l:列出当前用户的 crontab 内容
-r:从系统中删除当前用户的 crontab 文件
-u <用户名>:指定要操作的用户的 crontab 文件
配置文件:
全局配置文件,位于文件:/etc/crontab
系统默认的设置,位于目录:/etc/cron.*/
用户定义的设置,位于文件:/var/spool/cron/用户名
文件内格式:* * * * *
第一个"*"一小时当中的第几分钟(minute)0~59
第二个"*"一天当中的第几小时(hour)0~23
第三个"*"一个月当中的第几天(day)1~31
第四个"*"一年当中的第几个月(month)1~12
第五个"*"一周当中的星期几(week)0~7(0和7都代表星期日)
可使用符号:
*(星号)代表任何时间。比如第一个"*"就代表一小时中每分钟都执行一次的意思
,(逗号)代表多个不连续的时间点。比如 "0 8,12,16 * * * 命令" 就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令
-(中杠)代表连续的时间范围。比如"0 5 * * 1-6 命令",代表在周一到周六的凌晨 5 点 0 分执行命令
/(正斜线)代表每隔多久执行一次(即间隔的时间频率)。比如"*/10命令",代表每隔 10 分钟就执行一次命令