- 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 发行版和场景中可能会有不同的使用和配置方法。在选择启动引导工具时,需要考虑系统的需求、硬件环境和个人偏好等因素。
本篇完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者。