《Linux从小白到高手》理论篇(七):Linux的时间管理运行级别启动过程原理详解

news2024/12/24 11:37:48
  1. List item
    本篇将介绍Linux的时间管理&运行级别相关知识,并将深入介绍Linux的启动过程及原理。

Linux的时间管理

Linux 时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称 RTC)时钟。系统时钟是指当前 Linux Kernel 中的时钟,而硬件时钟则是主板上由电池供电的时钟,这个硬件时钟可以在BIOS 中进行设置。当 Linux 启动时,硬件时钟会去读取系统时钟的 设置,然后系统时钟就会独立于硬件运作。
Linux 中的所有命令(包括函数)都是采用的系统时钟设置。在 Linux 中,用于时钟查看和设置的命令主要有date、hwclock 和 clock。其中,clock 和 hwclock 用法相近,只用一个就行,只不过 clock 命令除了支持 x86 硬 件体系外,还支持 Alpha 硬件体系。

1、查看时间

查看系统时间:
使用 date 命令可以显示当前系统的日期和时间。例如:date,输出格式通常为“星期几 月份 日期 小时:分钟:秒 时区 年份”。

date +"%Y-%m-%d %H:%M:%S" 

可以以特定格式显示时间,如“2024-09-30 12:30:00”。
查看硬件时钟时间:

`sudo hwclock --show:`

显示硬件时钟时间。硬件时钟通常是计算机主板上的时钟芯片所保存的时间。

2、设置时间

设置系统时间:

sudo date -s "YYYY-MM-DD HH:MM:SS",

将系统时间设置为指定的时间格式,其中“YYYY-MM-DD HH:MM:SS”是具体的时间值。
例如:sudo date -s “2024-10-01 10:30:00”。
设置硬件时钟时间:

sudo hwclock --set --date="YYYY-MM-DD HH:MM:SS"

例如:sudo hwclock --set --date=“2024-10-01 10:30:00”。
同步系统时间和硬件时钟:
将系统时间写入硬件时钟:

sudo hwclock --systohc

将硬件时钟时间读取到系统时间:sudo hwclock --hctosys。

3、时区设置

查看当前时区:

`timedatectl | grep "Time zone"`

可以查看当前系统的时区设置。
cat /etc/timezone:在某些系统上也可以通过查看这个文件来确定时区。
设置时区:
使用 timedatectl 命令:

sudo timedatectl set-timezone timezone_name,

其中“timezone_name”是你想要设置的时区名称,如“Asia/Shanghai”。
直接修改配置文件:
对于基于 Debian 的系统,修改 /etc/timezone 文件,将其内容改为所需的时区名称,然后执行

sudo dpkg-reconfigure --frontend noninteractive tzdata 

使更改生效。
对于基于 Red Hat 的系统,修改 /etc/sysconfig/clock 文件,设置 ZONE 变量为所需的时区名称,如 ZONE=“Asia/Shanghai”,然后执行 sudo hwclock --systohc 同步硬件时钟。
4、时间同步服务
NTP(Network Time Protocol)服务:
安装:
在 Ubuntu 系统:sudo apt install ntp。
在 CentOS 系统:sudo yum install ntp。
配置:
主要配置文件通常是 /etc/ntp.conf。可以在这个文件中添加或修改时间服务器地址。例如:server ntp_server_address,其中 ntp_server_address 可以是公共的 NTP 服务器地址,如 pool.ntp.org、time.windows.com 等。
启动和管理:
启动服务:(不同系统服务名称可能略有不同)。

sudo systemctl start ntpd

停止服务:

sudo systemctl stop ntpd。

重启服务:

sudo systemctl restart ntpd。

设置服务在系统启动时自动启动:

sudo systemctl enable ntpd。

检查状态:

sudo systemctl status ntpd,

可以查看服务的运行状态、上次同步时间等信息。
chrony 时间同步服务:
安装:
在 Ubuntu 上可以使用 sudo apt install chrony,在 CentOS 上可以使用 sudo yum install chrony。
配置:
通常需要修改 /etc/chrony.conf 文件,添加或修改时间服务器地址。
启动和管理:
启动服务:

sudo systemctl start chronyd。

停止服务:

sudo systemctl stop chronyd。

重启服务:

sudo systemctl restart chronyd。

设置服务在系统启动时自动启动:

sudo systemctl enable chronyd。

检查状态:

sudo systemctl status chronyd。

Linux的运行级别

在 Linux 系统中,运行级别(runlevel)用于定义系统的不同运行状态。不同的运行级别会启动不同的服务集合,以满足特定的系统需求。

1. 运行级别的原理

在目录 /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 为开头的链接文件,系统将启动对应的服务
通过这种方式来实现 “不同的运行级别运行不同的程序和服务”

2、运行级别的概念

传统的运行级别定义:
0:关机。
1:单用户模式,主要用于系统维护,如重置密码等。
2:多用户模式,没有网络服务。
3:多用户模式,有网络服务,通常是服务器的常用运行级别。
4:用户自定义运行级别,一般很少使用。
5:图形化多用户模式,类似于运行级别 3 但带有图形界面。
6:重启。
现代系统的变化:
许多现代 Linux 发行版,如 Systemd 主导的系统,运行级别的概念有所变化,但仍然保留了一些类似的功能划分。例如,Systemd 使用 “target” 来替代传统的运行级别,但其功能和目的在一定程度上与传统运行级别相似。

3、查看当前运行级别

使用 runlevel 命令可以查看系统当前的运行级别和上一次的运行级别。例如:输出可能是 “N 5”,其中 “N” 表示上一次运行级别未知,“5” 表示当前运行级别为图形化多用户模式。在 Systemd 系统中,可以使用以下命令查看当前的目标(类似于运行级别):systemctl get-default,它将显示当前系统的默认启动目标,例如 “graphical.target” 对应传统的运行级别 5。

4、切换运行级别

在传统的 init 系统中,可以使用 init 命令来切换运行级别。例如:sudo init 3 将系统切换到多用户模式(有网络服务)。在 Systemd 系统中,切换目标(类似运行级别)的方法如下:

sudo systemctl isolate multi-user.target 

相当于切换到传统的运行级别 3。

sudo systemctl isolate graphical.target 

相当于切换到传统的运行级别 5。

5、配置默认运行级别

对于传统的 init 系统:
编辑 /etc/inittab 文件可以配置系统的默认运行级别。例如,将 “id:5:initdefault:” 改为 “id:3:initdefault:” 可以将系统默认启动到多用户模式(有网络服务)。
在 Systemd 系统中:
使用 systemctl set-default 命令来设置默认启动目标。例如:

sudo systemctl set-default multi-user.target 

设置系统默认启动到类似于传统运行级别 3 的状态。

sudo systemctl set-default graphical.target 

设置系统默认启动到类似于传统运行级别 5 的状态。
了解和正确管理运行级别对于系统的稳定运行和满足特定需求非常重要。在进行运行级别切换或配置时,要谨慎操作,确保不会影响系统的正常运行和关键服务。

Linux的启动

1、Linux的启动流程

在这里插入图片描述
在这里插入图片描述
1.加载BIOS
计算机电源加电质检,首先加载基本输入输出系统(Basic Input Output System,BIOS),BIOS中包含硬件CPU、内存、硬盘等相关信息,包含设备启动顺序信息、硬盘信息、内存信息、时钟信息、即插即用(Plug-and-Play,PNP)特性等。加载完BIOS信息,计算机将根据顺序进行启动。
2.读取MBR
读取完BIOS信息,计算机将会查找BIOS所指定的硬盘MBR引导扇区,将其内容复制到0x7c00地址所在的物理内存中。被复制到物理内存的内容是Boot Loader,然后进行引导。
3.GRUB引导
GRUB启动引导器是计算机启动过程中运行的第一个软件程序,当计算机读取内存中的GRUB配置信息后,会根据其配置信息来启动硬盘中不同的操作系统。
4.加载Kernel
计算机读取内存映像,并进行解压缩操作,屏幕一般会输出“Uncompressing Linux”的提示,当解压缩内核完成后,屏幕输出“OK, booting the kernel”。系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。
5.设定Inittab运行等级
内核加载完毕,会启动Linux操作系统第一个守护进程init,然后通过该进程读取/etc/inittab文件,/etc/inittab文件的作用是设定Linux的运行等级。
6.加载rc.sysinit
读取完运行级别,Linux系统执行的第一个用户层文件/etc/rc.d/rc.sysinit,该文件功能包括:设定PATH运行变量、设定网络配置、启动swap分区、设定/proc、系统函数、配置Selinux等。
7.加载内核模块
读取/etc/modules.conf文件及/etc/modules.d目录下的文件来加载系统内核模块。该模块文件,可以后期添加或者修改及删除。
8.启动运行级别程序
根据之前读取的运行级别,操作系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
9.读取rc.local文件
操作系统启动完相应服务之后,会读取执行/etc/rc.d/rc.local文件,可以将需要开机启动的任务加入到该文件末尾,系统会逐行去执行并启动相应命令。
10.执行/bin/login程序
执行/bin/login程序,启动到系统登录界面,操作系统等待用户输入用户名和密码,即可登录到Shell终端,如图3-7所示,输入用户名、密码即可登录Linux操作系统,至此Linux操作系统完整流程启动完毕。,

2,Linux中常用的启动引导工具:

1、GRUB(Grand Unified Bootloader)
功能特点:
–是最常见的 Linux 启动引导程序之一。
–支持多操作系统启动,可以在一台计算机上引导多个不同的操作系统,如 Linux、Windows 等。
–提供菜单界面,用户可以在启动时选择要启动的操作系统或内核版本。
–可以通过编辑配置文件来定制启动选项,如设置默认启动项、调整内核参数等。
使用方法:
配置文件通常是 /boot/grub/grub.cfg,但不建议直接编辑这个文件,而是通过修改 /etc/default/grub 和运行 sudo update-grub 命令来更新 GRUB 配置。在 GRUB 菜单界面,可以使用键盘方向键选择启动项,按回车键启动。还可以按 e 键编辑启动项的内核参数等。
2、LILO(Linux Loader)
功能特点:
–早期的 Linux 启动引导程序。
–相对简单,占用空间小。
–可以直接安装在主引导记录(MBR)中。
使用方法:
–配置文件是 /etc/lilo.conf,修改配置后需要运行 sudo lilo 命令使配置生效。
–在启动时,LILO 会显示一个简单的启动菜单,用户选择启动项即可。
3、Systemd-boot
功能特点:
–是一种相对较新的启动引导程序,通常与 Systemd 初始化系统配合使用。
–简洁高效,快速启动。
–支持 UEFI 系统,并且可以自动检测和加载内核及初始 RAM 磁盘。
使用方法:
–配置文件通常位于 /boot/loader/entries/ 目录下,以 .conf 为后缀的文件。
–系统会根据配置文件自动生成启动菜单,用户在启动时选择相应的启动项。
这些启动引导工具在不同的 Linux 发行版和场景中可能会有不同的使用和配置方法。在选择启动引导工具时,需要考虑系统的需求、硬件环境和个人偏好等因素。

本篇完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者。

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

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

相关文章

STM32CubeMX创建STM32H743工程

1、下载安装STM32CubeMX STM32CubeMX是STM32Cube工具家族中的一员,从MCU/MPU选型,引脚配置,系统时钟以及外设时钟设置,到外设参数配置,中间件参数配置,它给STM32开发者们提供了一种简单,方便&a…

华为OD机试 - 积木最远距离(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

[Everything] 文件搜索工具的下载及详细安装使用过程(附有下载文件)

快速搜索文件名及其所在路径 下载链接在文末 下载压缩包后解压 !!安装路径不要有中文 解压后得到文件 双击exe文件得到 选择简体中文,点击OK 点击“我接受” 更改安装目录,最好不要放在C盘,点击下一步 点击下一步 点…

使用SNAP工具处理Sentinel-1数据应注意磁盘和内存问题

近期使用SNAP处理数据比较多,有一些心得给大家分享一下!在预处理Sentinel-1数据 的过程中出错基本上是有3种情况: 磁盘被写满 由于JAVA优化一般是通过空间换效率的方式。所以SNAP为了提高效率,本版本升级增加了数据本地缓存的比重…

zabbix7.0监控linux主机案例详解

前言 服务端配置 链接: rocky9.2部署zabbix服务端的详细过程 环境 主机ip应用zabbix-server192.168.10.11zabbix本体zabbix-client192.168.10.12zabbix-agent zabbix-server(服务端已配置) 具体实现过程 zabbix-client配置 安装zabbix-agent 添加扩展包 dnf -y instal…

nlp任务之预测中间词-huggingface

目录 1.加载编码器 1.1编码试算 2.加载数据集 3.数据集处理 3.1 map映射:只对数据集中的sentence数据进行编码 3.2用filter()过滤 单词太少的句子过滤掉 3.3截断句子 4.创建数据加载器Dataloader 5. 下游任务模型 6.测试预测代码 7.训练代码 8.保…

MKV转MP4丨FFmpeg的简单命令使用——视频格式转换

MKV是一种视频封装格式,很好用,也是OBS的默认推荐录制格式,因为不会突然断电关机而导致整个视频录制文件丢失。 但是MKV无法直接导入PR中剪辑,最直接的方法是将MKV转换为MP4格式,最方便且安全无损的转换方法便是用FFmp…

AD软件的分屏显示功能

1.鼠标右键点击上面的窗格,选择“垂直分布”,即可以将AD软件分屏,左边选择原理图,右边选择PCB即可以方便去设计PCB的布局。实现原理图和pcb文件的同时查看。 还可以建立起2个图之间的联动关系。 比如我们在电路图里面选择stm32 m…

Threejs中使用A*算法寻路导航

<!DOCTYPE html> <html><head><title>Threejs中使用A*算法寻路导航&#xff0c;Threejs室内室外地图导航</title><script type"text/javascript" src"libs/three.js"></script><script type"text/javas…

MySQL | union all 和union(去重和不去重)

题1&#xff1a; 现在运营想要分别查看学校为山东大学或者性别为男性的用户的device_id、gender、age和gpa数据&#xff0c;请取出相应结果&#xff0c;结果不去重。 示例&#xff1a;user_profile 根据示例&#xff0c;你的查询应返回以下结果&#xff1a; UNION&#xff08…

【C/C++】 秋招常考面试题最全总结(让你有一种相见恨晚的感觉)

目录 1.C程序编译链接过程 2.浅拷贝和move有区别吗 3.深拷贝和浅拷贝的区别 4.空类的大小 5.类的继承有几种方式&#xff0c;区别是什么&#xff1f; 六、extern 关键字的作用 七、static关键字的作用 八、指针和引用的区别 九、C内存分配方式 十、结构体对齐…

manim中的桌面设计和实现转换

在这段代码中&#xff0c;我们实现了一系列富有创意和动态效果的数学表达式展示。这种展示方式不仅能够吸引观众的注意力&#xff0c;还能有效地传达复杂的数学概念。代码主要围绕一个点 dot 展开&#xff0c;它逐步转变为不同的数学公式和符号&#xff0c;每个转变过程都伴随着…

JUC高并发编程5:多线程锁

1 锁的八个问题演示 标准访问&#xff0c;先打印短信还是邮件 class Phone{public synchronized void sendSMS() throws InterruptedException {System.out.println("----------sendSMS");}public synchronized void sendEmail(){System.out.println("-------…

AndroidStudio导入so文件

点击app 右键依次选择New-Floder-JNI Floder 创建jni目录 将需要的so文件拷贝到jni目录 在app目录下&#xff0c;build.gradle文件的android{}中添加&#xff1a; sourceSets {main{jniLibs.srcDirs [src/main/jni]}}点击一下Sync Project with Gradle Files 然后编译生成AP…

第7届医联赛圆满举行,鱼跃医疗连续6年保障赛事安全

9月22日-26日&#xff0c;第7届医联赛戈壁群英会在甘肃瓜州举行&#xff0c;来自全国各地的3000名医药行业企业家代表齐聚一堂&#xff0c;开启为期3天的身心极限挑战——徒步穿越81公里的戈壁滩。鱼跃医疗连续6年全程保障参赛者的生命安全&#xff0c;助力赛事圆满完成。 鱼跃…

大模型初学者指南:笔记本电脑上用 ollama 运行大模型!

之前国外有一初学者小哥在Google Colab&#xff08;A100 40G&#xff09;利用DPO微调Mistral 7B&#xff0c;微调后的模型在基准测试中取得不错的成绩&#xff0c;从那时起&#xff0c;我觉得在笔记本电脑上运行/微调大模型并非遥不可及的。 对于初学者而言&#xff0c;如果能…

[论文精读]Multi-Channel Graph Neural Network for Entity Alignment

论文网址&#xff1a;Multi-Channel Graph Neural Network for Entity Alignment (aclanthology.org) 论文代码&#xff1a;https:// github.com/thunlp/MuGNN 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&a…

插上网线无法连接网络,控制面板以太网消失 | 如何重装网络驱动

如果你确定你的网线没问题&#xff0c;网线插口没问题&#xff0c;那你大概率就是驱动问题&#xff0c;可以试一下本方法。 0 以太网消失 事情是这样的&#xff0c;我工作时候需要接内网&#xff0c;插网线&#xff0c;摸鱼时候连外网&#xff0c;我就把网线关了。 每次插网线…

飞致云开源社区月度动态报告(2024年9月)

自2023年6月起&#xff0c;中国领先的开源软件公司FIT2CLOUD飞致云以月度为单位发布《飞致云开源社区月度动态报告》&#xff0c;旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况&#xff0c;以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源运营…