我们将开始这篇文章的,因为你按下电源按钮,直到你都带有一个命令行界面的登录屏幕把你的RHEL 7服务器上的那一刻会发生什么的全面和简要版本。
Linux引导过程
请注意:
1.相同的基本原则也适用,也许小的修改,其他Linux发行版,以及,
2.将下面的描述并不意在表示引导过程的详尽解释,但只基本面。
Linux引导过程
1. POST(加电自检)初始化并执行硬件检查。
2.如果POST完成时,系统控制被传递到第一阶段引导加载程序,其存储在任一硬盘中的一个(使用的BIOS和MBR旧的系统),或专用(U)的电喷的引导扇区划分。
3.第一阶段引导加载程序然后加载第二阶段的引导加载程序,最常用GRUB( 大统一的Boot Loader),它位于里面的/ boot,进而加载内核和基于RAM的初始文件系统(也称为initramfs的 ,它包含执行最终安装实际根文件系统所需的必要操作的程序和二进制文件。
4.我们提出了一个闪屏,让我们选择一个操作系统和内核启动:
启动菜单屏幕
5.内核设置连接到系统的硬件和一旦根文件系统已被安装,具有PID 1,从而将初始化其它进程,并与一个登录提示我们呈现启动过程。
注意 :如果我们希望在以后的时间这样做,我们可以检查这个过程中使用的具体dmesg命令 ,并使用我们在本系列前面的文章中已经说明了过滤工具,它的输出。
登录屏幕和过程PID
在上面的例子中,我们使用了著名的ps命令来显示当前进程的父进程的列表(或者换句话说,来启动的过程)是systemd(即最现代的Linux发行版已经切换系统和服务经理到)在系统启动期间:
# ps -o ppid,pid,uname,comm --ppid=1
请记住,-o标志(简称-format)允许您呈现PS的输出自定义格式,以适应使用中的人ps的 标准格式说明符部分指定的关键字,您的需求。
在您将要定义的PS,而不是使用默认的持续输出另一种情况是,当你需要找到那些造成显著的CPU和/或内存负载的进程,并相应地对它们进行排序:
# ps aux --sort=+pcpu # Sort by %CPU (ascending) # ps aux --sort=-pcpu # Sort by %CPU (descending) # ps aux --sort=+pmem # Sort by %MEM (ascending) # ps aux --sort=-pmem # Sort by %MEM (descending) # ps aux --sort=+pcpu,-pmem # Combine sort by %CPU (ascending) and %MEM (descending)
自定义ps命令输出
SystemD简介
在Linux世界中很少有决策导致比主要的Linux发行采用systemd更多的争议。 Systemd的倡导者名称作为其主要优点有以下事实:
1. Systemd允许在并行系统启动过程中进行更多的处理(相对于较旧的SysVinit,它总是趋向因为它开始比较慢处理一个接一个,检查如果一个依赖于另一个,然后等待后台程序启动,以便更多的服务可以启动),和
2.它的工作原理是在运行系统中的动态资源管理。 因此,服务在需要时启动(以避免在未使用时消耗系统资源),而不是在引导期间没有有效原因启动。
3.向后兼容的SysVinit脚本的兼容性。
Systemd由systemctl效用的控制。 如果你来自一个背景的SysVinit,那么你会很熟悉:
- 服务工具,它-in那些旧的系统-用于管理的SysVinit脚本和
- 该chkconfig的工具,它提供更新和查询系统服务的运行级别信息的目的。
- 关机 ,你必须已经使用多次要么重新启动或停止正在运行的系统。
下表显示了使用这些传统工具和systemctl之间的相似性:
旧工具 | Systemctl等效 | 描述 |
服务名称开始 | systemctl开始名称 | 开始名称(其中name是服务) |
服务名称停止 | systemctl停止名称 | 停止名 |
服务名condrestart | systemctl尝试重新启动名称 | 重新启动名称(如果它已在运行) |
服务名称重新启动 | systemctl重新启动名称 | 重新启动名称 |
服务名称重新加载 | systemctl重载名称 | 重新加载名称的配置 |
服务名状态 | systemctl状态名称 | 显示名称的当前状态 |
service -status-all | systemctl | 显示所有当前服务的状态 |
chkconfig名称 | systemctl启用名称 | 启用名称在单元文件(符号链接指向的文件)中指定的启动时运行。 启用或禁用服务在启动时自动启动的过程包括在/ etc / systemd / system目录中添加或删除符号链接。 |
chkconfig名称关闭 | systemctl禁用名称 | 禁用名称在启动时运行,如单元文件中指定的(符号链接指向的文件) |
chkconfig -list名称 | systemctl已启用名称 | 验证是否当前已启用名称(特定服务) |
chkconfig -list | systemctl -type = service | 显示所有服务,并指出是启用还是禁用 |
shutdown -h now | systemctl poweroff | 关闭机器(停止) |
shutdown -r now | systemctl重新启动 | 重新启动系统 |
Systemd还推出单元的概念(其可以是一个服务,一个安装点,装置,或者网络套接字)和目标(这是systemd如何管理在同一时间启动多个相关的过程,并且可以被认为是-虽然没有equal-的运行级别的基于SysVinit的系统相当。
加起来
与过程管理相关的其他任务包括但不限于以下能力:
1.调整执行优先级,直到系统资源的使用涉及进程:
这是通过renice只能实用程序,其改变的一个或多个正在运行的进程的调度优先级来实现。 简单来说,调度优先级是一项功能,允许内核(目前在版本=> 2.6)给定的过程(从-20到19又名美好的事物,在一个范围内)来分配系统资源,按照分配的执行优先级。
renice只能基本语法如下:
# renice [-n] priority [-gpu] identifier
在上面的普通指令,第一个参数是要使用,而另一种说法可以解释为进程ID(这是默认设置)的优先级值,进程组ID,用户ID或用户名。 普通用户(除root之外)只能修改他或她拥有的进程的调度优先级,并且只增加最佳级别(这意味着占用更少的系统资源)。
进程调度优先级
2.根据需要杀死(或中断正常执行)进程:
在更精确的来讲,杀进程赋予它发送一个信号要么完成其通过执行正常(SIGTERM = 15)或立即(SIGKILL = 9) 终止或pkill的命令 。
这两个工具的区别在于前者用于完全终止特定进程或进程组,而后者允许您根据名称和其他属性执行相同操作。
此外,pkill的捆绑了指派,,这表明你将受到影响应该pkill的使用的PID。 例如,在运行之前:
# pkill -u gacanepa
查看一目了然地看出哪些是由gacanepa拥有的PID这可能是有用的:
# pgrep -l -u gacanepa
查找用户的PID
默认情况下, 杀灭和pkill的SIGTERM信号发送到进程。 正如我们上面提到的,这个信号可以忽略不计(在这个过程完成它的执行还是不错的),所以当你真的需要停止正在运行的进程有一个有效的原因,则需要在命令行上SIGKILL信号:
# kill -9 identifier # Kill a process or a process group # kill -s SIGNAL identifier # Idem # pkill -s SIGNAL identifier # Kill a process by name or other attributes
结论
在这篇文章中,我们已经在RHEL 7系统解释了引导过程的基本知识,并分析了一些可用来帮助您管理使用的常用工具和systemd特有的命令流程的工具。
请注意,此列表不打算涵盖此主题的所有响铃和口哨,所以随意添加您自己的首选工具和命令到本文使用下面的注释表。 欢迎提出问题和其他意见。