引导过程与服务控制 进程和计划任务管理

97 阅读12分钟

引导过程与服务控制

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 表示825日上午11-f <脚本文件>:指定要运行的脚本文件
    -r <任务号>:删除指定的任务
    -d:删除所有任务



crontab [选项] <文件或命令>   //在指定时间 执行某项操作  (可以循环执行)

    -e:编辑当前用户的 crontab 文件

    -l:列出当前用户的 crontab 内容

    -r:从系统中删除当前用户的 crontab 文件

    -u <用户名>:指定要操作的用户的 crontab 文件


配置文件:

全局配置文件,位于文件:/etc/crontab

系统默认的设置,位于目录:/etc/cron.*/

用户定义的设置,位于文件:/var/spool/cron/用户名


文件内格式:* * * * *   

第一个"*"一小时当中的第几分钟(minute0~59

第二个"*"一天当中的第几小时(hour0~23

第三个"*"一个月当中的第几天(day1~31

第四个"*"一年当中的第几个月(month1~12

第五个"*"一周当中的星期几(week)0~707都代表星期日)

可使用符号:

*(星号)代表任何时间。比如第一个"*"就代表一小时中每分钟都执行一次的意思

,(逗号)代表多个不连续的时间点。比如 "0 8,12,16 * * * 命令" 就代表在每天的 80 分、120 分、160 分都执行一次命令

-(中杠)代表连续的时间范围。比如"0 5 * * 1-6 命令",代表在周一到周六的凌晨 50 分执行命令

/(正斜线)代表每隔多久执行一次(即间隔的时间频率)。比如"*/10命令",代表每隔 10 分钟就执行一次命令