Linux 学习笔记(9)

九、 运行级别
1 Linux 系统的运行级别 (runlevel)
Linux 系统有 7 个运行级别, Linux 系统任何时候都运行在一个指定的运行级别上,不同的运行级
别所运行的程序和服务不尽相同,所要完成的工作和要达到的目的也不相同
· 运行级别 0 系统停机 (halt) 状态,系统的默认运行级别不能设为 0 ,否则不能正常启动
· 运行级别 1 单用户工作 (single user) 状态, root 权限,用于系统维护,禁止远程登陆
· 运行级别 2 多用户 (multiuser) 状态 ( 没有 NFS)
· 运行级别 3 完全的多用户 (multiuser) 状态 ( NFS) ,登陆后进入控制台命令行模式
· 运行级别 4 系统未使用,保留
· 运行级别 5 X11 控制台 (xdm gdm kdm) ,登陆后进入图形 GUI 模式 · 运行级别 6 系统正常关闭并重启 (reboot) ,默认运行级别不能设为 6 ,否则不能正常启动
2 、运行级别的原理
在目录 /etc/rc.d/init.d 下有许多服务器脚本程序,一般称为服务 (service) , 在 /etc/rc.d
7 个名为 rcN.d 的目录,其中 N=0-6 ,对应于系统的 7 个运行级别, rcN.d 目录下,都是
一些符号链接文件,这些链接文件都指向 init.d 目录下的 service 脚本文件,这些链接文件的命
名规则是 "K+nn+ 服务名 " "S+nn+ 服务名 " ,其中 nn 2 位数字:
: rc3.d 目录下的链接文件 S80sendmail 就指向 service 脚本文件 ../init.d/sendmail
系统会根据指定的 runlevel 进入对应的 rcN.d 目录,并按照文件名顺序检索目录下的链接文件
• 对于以 K 为开头的链接文件,系统将终止对应的服务
• 对于以 S 为开头的链接文件,系统将启动对应的服务
通过这种方式来实现 " 不同的运行级别运行不同的程序和服务 "
3 /etc/inittab 配置文件详解
init 的进程号是 1 ,从这一点就能看出, init 进程是系统所有进程的起点, Linux 在完成核内引导以后,
就开始运行 init 程序, init 程序需要读取设置文件 /etc/inittab inittab 是个不可执行的文本文件,他有若
干行指令所组成。在 Redhat 系统中, inittab 的内容如下所示 ( 以“ ###" 开始的中注释为笔者增加的 )
如果你改变了 inittab 文件,那么要使他立即生效,需要使用一个命令: init q
#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
### 表示当前缺省运行级别为 5(initdefault)
id:5:initdefault:
### 启动时自动执行 /etc/rc.d/rc.sysinit 脚本 (sysinit)
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
### 当运行级别为 5 时,以 5 为参数运行 /etc/rc.d/rc 脚本, init 将等待其返回 (wait)
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
### 在启动过程中允许按 CTRL-ALT-DELETE 重启系统
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
### 2 3 4 5 级别上以 ttyX 为参数执行 /sbin/mingetty 程序,打开 ttyX 终端用于用户登录,
### 如果进程退出则再次运行 mingetty 程序 (respawn)
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
### 5 级别上运行 xdm 程序,提供 xdm 图像方式登录界面,并在退出时重新执行 (respawn)
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
以上面的 inittab 文件为例,来说明一下 inittab 的格式。其中以 # 开始的行是注释行,除了注释行之
外,每一行都有以下格式:
id:runlevel:action:process
对上面各项的周详解释如下:
1. id
id 是指入口标识符,他是个字符串,对于 getty mingetty 等其他 login 程序项,需求 id tty 的编
号相同,否则 getty 程序将不能正常工作。
2. runlevel
runlevel init 所处于的运行级别的标识,一般使用 0 6 S s 0 1 6 运行级别被系统保留:
其中 0 作为 shutdown 动作, 1 作为重启至单用户模式, 6 为重启; S s 意义相同,表示单用户模式,
且无需 inittab 文件,因此也不在 inittab 中出现,实际上,进入单用户模式时, init 直接在控制台
/dev/console )上运行 /sbin/sulogin 。在一般的系统实现中,都使用了 2 3 4 5 几个级别,在 Redhat
系统中, 2 表示无 NFS 支持的多用户模式, 3 表示完全多用户模式(也是最常用的级别), 4 保留给用户
自定义, 5 表示 XDM 图像登录方式。 7 9 级别也是能使用的,传统的 Unix 系统没有定义这几个级别。
runlevel 能是并列的多个值,以匹配多个运行级别,对大多数 action 来说,仅当 runlevel 和当前运行级
别匹配成功才会执行。
3. action
action 是描述其后的 process 的运行方式的。 action 可取的值包括: initdefault sysinit boot bootwait
等:
initdefault 是个特别的 action 值,用于标识缺省的启动级别;当 init 由核心激活以后,他将读取 inittab
中的 initdefault 项,取得其中的 runlevel ,并作为当前的运行级别。如果没有 inittab 文件,或其中没有
initdefault 项, init 将在控制台上请求输入 runlevel
sysinit boot bootwait action 将在系统启动时无条件运行,而忽略其中的 runlevel
其余的 action (不含 initdefault )都和某个 runlevel 相关。各个 action 的定义在 inittab man 手册
中有周详的描述。
4. process
process 为具体的执行程序。程序后面能带参数。
第三部分:系统初始化
init 的设置文件中有这么一行:
si::sysinit:/etc/rc.d/rc.sysinit
他调用执行了 /etc/rc.d/rc.sysinit ,而 rc.sysinit 是个 bash shell 的脚本,他主要
init 的设置文件中有这么一行:
si::sysinit:/etc/rc.d/rc.sysinit
他 调用执行了 /etc/rc.d/rc.sysinit ,而 rc.sysinit 是个 bash shell 的脚本,他主要是完成一些系统初始化的
工作, rc.sysinit 是每一个运行级别都要首先运行的重要脚本。他主要完成的工作有:激活交换分区,检
查磁盘,加载硬件模块及其他一些需要优先执行任务。 rc.sysinit 约有 850 多行,不过每个单一的功能还是比较简单,而且带有注释,建议有兴趣的用户能自行
阅读自己机器上的该文件,以了解系统初始化所周详情况。由于此文件较长,所以不在本文中列出来,
也不做具体的介绍。
rc.sysinit 程序执行完毕后,将返回 init 继续下一步。
第四部分:启动对应运行级别的守护进程
rc.sysinit 执行后,将返回 init 继续其他的动作,通常接下来会执行到 /etc/rc.d/rc 程序。以运行级别 5
为例, init 将执行设置文件 inittab 中的以下这行:
l5:5:wait:/etc/rc.d/rc 5
这一行表示以 5 为参数运行 /etc/rc.d/rc /etc/rc.d/rc 是个 Shell 脚本,他接受 5 作为参数,去执行 /etc/rc.d
/rc5.d/ 目录下的所有的 rc 启动脚本, /etc/rc.d/rc5.d/ 目录中的这些启动脚本实际上都是一些链接文件,
而不是真正的 rc 启动脚本,真正的 rc 启动脚本实际上都是放在 /etc/rc.d/init.d/ 目录下。而这些 rc 启动
脚本有着类似的用法,他们一般能接受 start stop restart status 等参数。
/etc/rc.d/rc5.d/ 中的 rc 启动脚本通常是 K S 开头的链接文件,对于以以 S 开头的启动脚本,将以 start
参数来运行。而如果发现存在相应的脚本也存在 K 打头的链接,而且已处于运行态了 ( /var/lock/subsys/
下的文件作为标志 ) ,则将首先以 stop 为参数停止这些已启动了的守护进程,然后再重新运行。这样做
是为了确保是当 init 改动运行级别时,所有相关的守护进程都将重启。
至于在每个运行级中将运行哪些守护进程,用户能通过 chkconfig setup 中的 "System Services" 来自行
设定。常见的守护进程有:
amd :自动安装 NFS 守护进程
apmd: 高级电源管理守护进程
arpwatch :记录日志并构建一个在 LAN 接口上看到的以太网地址和 IP 地址对数据库
autofs :自动安装管理进程 automount ,和 NFS 相关,依赖于 NIS
crond Linux 下的计划任务的守护进程
named DNS 服务器
netfs :安装 NFS Samba NetWare 网络文件系统
network :激活已设置网络接口的脚本程序
nfs :打开 NFS 服务
portmap RPC portmap 管理器,他管理基于 RPC 服务的连接
sendmail :邮件服务器 sendmail
smb Samba 文件共享 / 打印服务
syslog :一个让系统引导时起动 syslog klogd 系统日志守候进程的脚本
xfs X Window 字型服务器,为本地和远程 X 服务器提供字型集
Xinetd :支持多种网络服务的核心守护进程,能管理 wuftp sshd telnet 等服务
这些守护进程也启动完成了, rc 程序也就执行完了,然后又将返回 init 继续下一步。
第五部分:建立终端
rc 执行完毕后,返回 init 。这时基本系统环境已设置好了,各种守护进程也已启动了。 init 接下来会打
6 个终端,以便用户登录系统。通过按 Alt+Fn(n 对应 1-6) 能在这 6 个终端中转换。在 inittab 中的以下
6 行就是定义了 6 个终端:
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6 从上面能看出在 2 3 4 5 的运行级别中都将以 respawn 方式运行 mingetty 程序, mingetty 程序能打
开终端、设置模式。同时他会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个
登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给 login 程序来验证用户的身份。
第六部分:登录系统,启动完成
对于运行级别为 5 的图像方式用户来说,他们的登录是通过一个图像化的登录界面。登录成功后能直接
进入 KDE Gnome 等窗口管理器。而本文主要讲的还是文本方式登录的情况:
当我们看到 mingetty 的登录界面时,我们就能输入用户名和密码来登录系统了。
Linux 的账号验证程序是 login login 会接收 mingetty 传来的用户名作为用户名参数。然后 login
对用户名进行分析:如果用户名不是 root ,且存在 /etc/nologin 文件, login 将输出 nologin 文件的内容,
然后退出。这通常用来系统维护时防止非 root 用户登录。只有 /etc/securetty 中登记了的终端才允许 root
用户登录,如果不存在这个文件,则 root 能在所有终端上登录。 /etc /usertty 文件用于对用户作出附加
访问限制,如果不存在这个文件,则没有其他限制。
在分析完用户名后, login 将搜索 /etc/passwd /etc/shadow 来验证密码及设置账户的其他信息,比如:
主目录是什么、使用何种 shell 。如果没有指定主目录,将默认为根目录;如果没有指定 shell ,将默认
/bin/bash
login 程序成功后,会向对应的终端在输出最近一次登录的信息 ( /var/log/lastlog 中有记录 ) ,并检查用
户是否有新邮件 ( /usr/spool /mail/ 的对应用户名目录下 ) 。然后开始设置各种环境变量:对于 bash 来说,
系统首先寻找 /etc/profile 脚本文件,并执行他;然后如果用户的主目录中存在 .bash_profile 文件,就执
行他,在这些文件中又可能调用了其他设置文件,所有的设置文件执行后后,各种环境变量也设好了,
这时会出现大家熟悉的命令行提示符,到此整个启动过程就结束了。
4 、相关命令
4.1 、查看当前系统运行等级
[root@test ~]# runlevel
N 5
//’N’ 代表先前的 Runlevel; ‘5’ 代表目前的 Runlevel
4.2 、切换系统运行等级
#init N
// 切换到运行级别 N
# init 0
// 关机
# init 6
// 重启动系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/716990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RH850P1X芯片学习笔记-Generic Timer Module -ATOM

文章目录 ARU-connected Timer Output Module (ATOM)OverviewGLOBAL CHANNEL CONTROL BLOCK ATOM Channel architectureATOM Channel modesSOMP-Signal Output Mode PWMSOMP - ARUSOMC-Signal Output Mode CompareSOMC - ARUSOMC – COMPARE COMMANDSOMC – OUTPUT ACTIONATOM …

Python缩进规则

Python的缩进规则是Python语法中非常重要的一部分&#xff0c;也是Python语言独特的特点之一。在Python中&#xff0c;缩进被用来表示代码块的层次结构&#xff0c;而不是像其他语言一样使用大括号或关键词。这种缩进规则使得Python代码更加简洁、易读、易于理解&#xff0c;同…

python模块百科_操作系统接口_os【一】

python模块百科_操作系统接口_os【一】 os --- 多种操作系统接口一、相关模块1.1 os.path 文件路径1.2 fileinput 文件读取1.3 tempfile 临时文件和目录1.4 shutil 高级文件和目录1.5 platform 操作系统底层模块 二、关于函数适用性的说明2.1 与操作系统相同的接口2.2 支持字节…

Git版本管理常用指令

Git常用命令 一、基本指令二、本地仓库管理三、远程仓库管理四、分支管理五、储藏区六、标签管理一、基本指令 查看Git安装版本:git --version 查看log指令的帮助信息:git log --help 配置Git用户名:git config --global user.name “xxxxx” 配置Git邮箱: git config --…

2024年腾讯云新用户优惠券领取入口及使用教程

随着云计算技术的不断发展和普及&#xff0c;越来越多的个人和企业选择使用云服务。腾讯云作为国内领先的云服务提供商&#xff0c;为了吸引新用户&#xff0c;经常推出各种优惠活动&#xff0c;其中就包括新用户专属优惠券&#xff0c;本文将为大家分享腾讯云新用户优惠券的领…

5个好玩神奇还免费的工具网站收藏不后悔-搜嗖工具箱

生命倒计时 http://www.thismuchlonger.com 这是一个相哇塞的网站&#xff0c;可以让我们静下心来好好想想我们来这个世界究竟为了什么&#xff0c;因为当我们作为命运的主宰者。敲打键盘设定好自己一生长度的时候&#xff0c;我们的剩余寿命已经成绝对值&#xff0c;一旦生命…

创建型模式之原型模式

一、概述 1、工作原理&#xff1a;将一个原型对象传给要发动创建的对象(即客户端对象),这个要发动创建的对象通过请求原型对象复制自己来实现创建过程 2、通过克隆方法所创建的对象是全新的对象&#xff0c;它们在内存中拥有新的地址&#xff0c;每一个克隆对象都是独立的 3…

MySQL 中的 varchar 和 char 有什么区别?MySQL中 in 和 exists 区别?

MySQL 中的 varchar 和 char 有什么区别&#xff1f; char 是一个定长字段,假如申请了char(10)的空间,那么无论实际存储多少内容.该字段都占用 10 个字符,而 varchar 是变长的,也就是说申请的只是最大长度,占用的空间为实际字符长度1,最后一个字符存储使用了多长的空间. 在检索…

李沐动手学习深度学习——3.6练习

本节直接实现了基于数学定义softmax运算的softmax函数。这可能会导致什么问题&#xff1f;提示&#xff1a;尝试计算exp(50)的大小。 可能存在超过计算机最大64位的存储&#xff0c;导致精度溢出&#xff0c;影响最终计算结果。 本节中的函数cross_entropy是根据交叉熵损失函数…

JavaScript之数据类型

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 数据类型   Java…

20.图

图的基本概念 1.图的定义 由顶点和边组成的集合&#xff0c;G(V,E) 2.基本概念 邻接点&#xff1a; 对于无向图u v来说&#xff0c;uv互为邻接点 对于有向图u->v来说&#xff0c;v是u的邻接点&#xff0c;但u不是v的临界点 路径&#xff1a; 一个顶点到另一个顶点所经过的…

从Poincare猜想看中国数学的国际地位

2006年丘成桐学派利用北京晨兴数学中心&#xff0c;宣布一名俄国学者Poincare猜想研究中存在错误&#xff0c;已经由华裔学者朱熹平和曹怀东纠正过来&#xff0c;但数年以后我发现作为千禧七问题之一的Poincazre猜想&#xff0c;英国克莱数学所还是把1百万美元奖金送给俄国人。…

蓝桥杯:卡片

题目 小蓝有很多数字卡片&#xff0c;每张卡片上都是数字0 到9。 小蓝准备用这些卡片来拼一些数&#xff0c;他想从1 开始拼出正整数&#xff0c;每拼一个&#xff0c;就保存起来&#xff0c;卡片就不能用来拼其它数了。 小蓝想知道自己能从1 拼到多少。 例如&#xff0c;当小…

动态规划-最长公共子串(c)

动态规划 动态规划&#xff08;dynamic programming&#xff09;是一种算法设计方法。基本思想是在对一个问题的多阶段决策中&#xff0c;按照某一顺序&#xff0c;根据每一步所选决策的不同&#xff0c;会引起状态的转移&#xff0c;最后会在变化的状态中获取到一个决策序列。…

vs code更新后json文件无法识别通配符 ,编译多文件失败的解决办法

问题描述 在Mac或者LInux上&#xff0c;进行C/C相同路径下进行多文件编译时&#xff0c;之前设置好的json文件突然不能解释通配符&#xff0c;并且将带有单引号的地址传给clang&#xff0c;由于*.c被扩在单引号中&#xff0c;clang找不到文件导致失败。 如果将命令端中的指令复…

云服务器无法Ping通解决

问题: 使用公网IP地址PING云服务器,无法PING通 但是可SSH到服务器,表示通信链路是正常的,可能是端口或路径规则未开放导致 登陆云服务器后台,进行安全组规则查看,发现ICMP没有放行 添加允许ICMP连接规则 成功PING通云服务器

LeetCode——二叉树(Java)

二叉树 简介[简单] 144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历二叉树层序遍历[中等] 102. 二叉树的层序遍历[中等] 107. 二叉树的层序遍历 II[中等] 199. 二叉树的右视图[简单] 637. 二叉树的层平均值[中等] 429. N 叉树的层序遍历[中等] 515. 在每个…

Java接口

接口的定义 抽象方法的集合&#xff0c;接口通常以interface来声明。一个类通过继承接口的方式&#xff0c;从而来继承接口的抽象方法。 接口并不是类&#xff0c;编写接口的方式和类很相似&#xff0c;但是他们属于不同的概念。类描述的是对象的属性和方法。接口则包含类要实…

AcWing 4726. 寻找数字

解题思路 在这个二插搜索树中寻找&#xff0c;4和7数量相等&#xff0c;并且大于n的最小数。 相关代码 import java.util.*;public class Main {static String s;static List<Integer> res new ArrayList<>();static long n;static long ansLong.MAX_VALUE;publ…

递归实现指数型枚举(c++题解)

题目描述 从 1~n 这 n(n<16) 个整数中随机选取任意多个&#xff0c;输出所有可能的选择方案。 输入格式 一个整数n。 输出格式 每行一种方案。同一行内的数必须升序排列&#xff0c;相邻两个数用恰好1个空格隔开。对于没有选任何数的方案&#xff0c;输出空行。 样例 …