Skip to main content

2.系统启动流程和登录

linux启动流程

  1. BIOS/UEFI阶段:

    • 计算机通电后,BIOS/UEFI 被加载。BIOS 执行 POST(Power-On Self-Test),检查硬件设备的状态。
    • BIOS/UEFI 从固定的启动设备(通常是硬盘)加载引导扇区(Master Boot Record,MBR)。
  2. 引导加载程序阶段:

    1. MBR 中包含引导加载程序(Boot Loader)(如 GRUB)。GRUB 被加载到内存中。
    2. GRUB 读取配置文件(通常是 /boot/grub/grub.cfg)以确定要加载的内核和初始化 RAM 文件系统(initramfs)。
  3. 内核初始化阶段:

    • Linux 内核(通常是 vmlinuz)被加载到内存。
    • 内核初始化硬件设备、建立虚拟文件系统(rootfs)和挂载根文件系统。
  4. initramfs 阶段:

    • 初始内存文件系统(initramfs)是一个临时的根文件系统,包含必需的驱动程序和工具,以便在根文件系统挂载之前完成系统初始化。
    • 内核执行 initramfs 中的 init 脚本。
  5. Switch Root 阶段:

    • 一旦初始化完成,内核切换到真正的根文件系统,通常是一个包含完整 Linux 系统的文件系统。
  6. 用户空间初始化阶段:

    • 在传统的 init 系统中,init 进程是第一个用户空间进程。在现代系统中,通常是 systemd
    • systemd 作为 init 进程,负责启动系统上的各个服务单元。
  7. 运行级别切换(或 Target 切换):

    • 在传统系统中,可以通过运行级别来确定系统启动后的状态,但在 systemd 中,通常使用 target 来实现类似的功能。
    • systemd 启动时默认加载一个 target,例如 multi-user.target(多用户模式) 或 graphical.target(图形用户界面模式)。
  8. 服务启动阶段:

    • systemd 启动各个服务单元,每个服务单元负责启动一个特定的服务或守护进程。
    • 服务单元的配置文件通常位于 /etc/systemd/system/lib/systemd/system
  9. 登录管理器阶段:

    • 对于图形用户界面,登录管理器(如 GDM、LightDM)负责提供登录界面,等待用户登录。
  10. 用户登录和桌面环境阶段:

    • 用户通过登录管理器登录系统后,登录管理器启动用户的会话。
    • 启动用户选择的桌面环境,例如 GNOME、KDE、Xfce。

GRUB

GRUB(GRand Unified Bootloader)是一个用于引导多个操作系统的引导加载程序。在Rocky Linux中,GRUB用于启动Rocky Linux以及其他已安装的操作系统。

GRUB通常随着Rocky Linux的安装一起安装。在安装过程中,它会被设置为默认的引导加载程序,并被安装到硬盘的引导扇区。

配置文件

GRUB的主要配置文件是 /etc/default/grub/boot/grub2/grub.cfg

  • /etc/default/grub文件包含了引导选项的默认值
  • /boot/grub2/grub.cfg文件是由 grub-mkconfig命令自动生成的,通常不需要手动编辑。它包含了引导菜单的完整配置信息,包括每个引导项的配置以及菜单的外观和行为。直接编辑此文件可能会导致配置丢失或不正确的引导行为。有些系统中该文件名可能为:grubenv

配置文件简介

下面是 /etc/default/grub文件的一个示例以及其中一些常见选项的解释:

# /etc/default/grub

GRUB_TIMEOUT=5 # 引导菜单显示时间(秒)
GRUB_DEFAULT=saved # 默认引导项
GRUB_DISABLE_SUBMENU=true # 禁用子菜单
GRUB_TERMINAL_OUTPUT=console # 控制台输出
GRUB_CMDLINE_LINUX="rhgb quiet" # 内核启动参数
GRUB_DISABLE_RECOVERY="true" # 禁用恢复模式
GRUB_ENABLE_BLSCFG=true # 启用BLS配置

# 如果使用密码保护引导菜单,请取消注释下面的行,并将your_password替换为实际密码
# GRUB_PASSWORD=your_password
  • GRUB_TIMEOUT:指定引导菜单显示的时间(秒)。在倒计时结束后,GRUB会自动选择默认引导项。
  • GRUB_DEFAULT:指定默认的引导项。可以是一个数字(引导菜单中的项目编号,从0开始),或者是 saved,表示选择上次选择的引导项。
  • GRUB_DISABLE_SUBMENU:如果设置为 true,禁用子菜单,所有引导项将显示在主菜单中。
  • GRUB_TERMINAL_OUTPUT:指定GRUB输出的终端设备。在大多数情况下,你不需要修改这个选项。
  • GRUB_CMDLINE_LINUX:指定传递给内核的启动参数。在引号中放置参数,例如 "rhgb quiet"
  • GRUB_DISABLE_RECOVERY:如果设置为 true,禁用恢复模式选项。
  • GRUB_ENABLE_BLSCFG:如果设置为 true,启用Boot Loader Specification(BLS)配置。

修改 /etc/default/grub配置文件后,需要运行 grub2-mkconfig命令更新 /boot/grub2/grub.cfg文件。

grub2-mkconfig -o /boot/grub2/grub.cfg		#生成新的/boot/grub2/grub.cfg文件

主要功能

  • 引导选项

    • GRUB提供了一个菜单,列出了系统中可用的操作系统和内核。在启动时,用户可以从菜单中选择要启动的操作系统。
    • 如果系统中安装了多个操作系统(如Windows和Linux),GRUB允许用户在启动时选择要启动的操作系统。
  • 内核参数

    • 可以在GRUB菜单中为要启动的内核指定参数。这对于调试、修复和自定义系统行为非常有用,例如添加调试参数或修改内存分配。
    • 当系统内核更新时,GRUB会自动为新内核生成一个引导选项,用户可以在菜单中选择要启动的内核版本。
  • 子菜单

    • 当系统中存在多个内核时,GRUB可以为每个内核生成一个子菜单。这使得在启动时可以选择特定的内核版本。
  • 恢复模式

    • 如果系统无法启动或出现问题,可以使用GRUB的恢复模式选项进入系统修复模式或单用户模式进行修复操作。
  • 自定义脚本

    • 可以通过编辑GRUB配置文件和使用预启动脚本来定制GRUB的行为,例如添加自定义菜单项、修改启动参数等。

常用命令

  • grub2-install: 将GRUB安装到引导扇区。
  • grub2-mkconfig: 根据当前系统配置自动生成 grub.cfg文件。
  • grub2-editenv: 编辑GRUB环境变量。
  • grub2-set-default: 设置默认引导项。

示例:

#将GRUB安装到引导扇区。
grub2-install /dev/sda

#根据当前系统配置自动生成grub.cfg文件。
grub2-mkconfig -o /boot/grub2/grub.cfg

#编辑GRUB环境变量。
grub2-editenv - set default=0

#设置默认引导项。
grub2-set-default 0

#重启系统并选择引导项。
grub2-reboot "Rocky Linux"

#生成用于GRUB的加密密码。
grub2-mkpasswd-pbkdf2

#编辑GRUB环境变量。
grub2-editenv - set next_entry=2

#探测设备信息。
grub2-probe --target=device /boot/grub2/grub.cfg

Linux内核

Linux内核是Linux操作系统的核心部分,负责管理系统的核心功能,包括进程管理、内存管理、文件系统、设备驱动、网络等。以下是Linux内核的一些主要特性和功能:

  1. 进程管理: Linux内核负责创建、调度和终止进程,以及管理进程间的通信。
  2. 内存管理: 管理系统内存,包括虚拟内存、物理内存的分配和释放,页表管理等。
  3. 文件系统: 提供文件系统支持,包括文件的创建、读取、写入、删除等操作。
  4. 设备驱动: 管理硬件设备,与硬件进行通信,提供对设备的抽象接口。
  5. 系统调用: 提供用户空间程序与内核交互的接口,包括进程控制、文件操作、网络通信等。
  6. 网络协议栈: 实现网络协议,包括TCP/IP协议栈,用于实现网络通信。
  7. 调度器: 决定哪个进程在特定时刻运行,以及如何分配CPU时间。

Linux运⾏机制

Linux采用分时多任务的运行机制,多个进程共享系统资源。以下是Linux运行机制的一些关键概念:

  1. 进程: 程序的执行实例,每个进程有独立的地址空间,包括代码、数据、堆栈等。
  2. 调度器: 决定哪个进程在特定时刻运行,通过时间片轮转的方式实现多任务。
  3. 文件系统: Linux将所有东西都视为文件,包括硬件设备、网络连接等,统一了对这些资源的访问。
  4. 用户空间和内核空间: Linux将操作系统分为用户空间和内核空间,用户空间包括用户程序运行的环境,内核空间是内核运行的环境。用户程序通过系统调用与内核交互。
  5. 虚拟内存: 使用虚拟内存技术,将物理内存和磁盘空间结合起来,提高系统的稳定性和性能。
  6. 多用户支持: 多个用户可以同时登录和使用系统,每个用户有独立的用户空间。

运行级别

Linux运行级别(Runlevel)是一种系统状态,决定了在系统启动时要运行的服务和进程。

在传统的Unix和Linux系统中,运行级别通常用数字表示,每个数字代表一种特定的系统配置。

不同的运行级别定义了不同的系统状态和服务。

级别分类

  • 运行级别 0:关机(Halt)系统关闭,完全停机。
  • 运行级别 1:单用户模式(Single User Mode)系统进入单用户模式,只有 root 用户可以登录,用于系统修复和维护。
  • 运行级别 2:多用户模式,没有 NFS(Multi-User Mode, No Networking)与运行级别 3 类似,但没有网络服务。
  • 运行级别 3:多用户模式(Multi-User Mode)完全的多用户模式,支持网络服务。
  • 运行级别 4:未使用(Unused)没有标准定义,通常保留供用户自定义。
  • 运行级别 5:图形界面(Graphical User Interface)启动图形用户界面(GUI),通常是通过显示管理器(如X Display Manager)启动。
  • 运行级别 6:重新启动系统(Reboot)

常用级别有:0(关机),1(修复系统),3(多用户模式),6(重启)

查看当前系统的运行级别:

命令:

  • runlevel
  • who -r
runlevel
N 3
#或
who -r
run-level 3 2023-12-23 20:48

系统目录结构

  • /bin: 是Binary的缩写,这个目录存放着最经常使用的命令。
  • /sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
  • /home:存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
  • /root:该目录为系统管理员,也称作超级权限者的用户主目录。
  • /lib:系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
  • /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
  • /etc:所有的系统管理所需要的配置文件和子目录my.conf。
  • /usr/local:用户的很多应用程序和文件都放在这个目录下,一般是通过编译源码的方式安装的程序。,类似与windows下的program files目录。
  • /boot:启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
  • /proc:一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。
  • /srv:service的缩写,该目录存放一些服务启动之后需要提供的数据。
  • /sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs。
  • /tmp:存放一些临时文件。
  • /dev:类似windows的设备管理器,把所有的硬件用文件的形式存储。
  • /media:linux系统会自动识别一些设备,例如U盘光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了。
  • /opt:这是给主机额外安装软件所摆放的目录,如安装ORACLE数据库就可放到该目录下。默认为空。
  • /var:这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件。

忘记了root密码,怎么重置root密码

  • 重启系统,在启动过程中,在 GRUB 内核选择菜单界面按e,
  • 在内核行(/vmlinux-5.14.0...),把 ro 后面的参数删除,并添加 rd.break 参数,执行ctrl+x启动
  • 以读写的方式挂载真实的根 mount -o remount,rw /sysroot
  • 切换到真实的根 chroot /sysroot
  • 使用passwd修改密码 passwd root
  • 创建selinux标签文件/.autorelabel(根下面的隐藏文件) touch /.autorelabel
  • 两次exit会重启系统

注意点:

如果直接在内核行添加 rd.break 而不删除 ro 后面的内容的话,可能会卡在进入紧急模式界面,所以需要把 ro 后面的内容删除

远程登录Linux系统

常用软件 xshell,winscp,windows或linux自带的ssh客户端,还有vnc。

ssh连接服务器

ssh常用命令

创建SSH密钥对
ssh-keygen -t rsa -b 2048		#创建SSH密钥对
ssh-copy-id username@remote_host #复制本地公钥到远程服务器
# 或手动
cat ~/.ssh/id_rsa.pub | ssh username@server_ip 'cat >> ~/.ssh/authorized_keys'

密钥对是2个文件:id_dsa(私钥)和id_dsa.pub(公钥)

生成一个2048位的RSA密钥,这将把你的公钥添加到远程服务器的 ~/.ssh/authorized_keys文件中,实现无密码登录。

连接到远程服务器
ssh username@remote_host				#连接到远程服务器
ssh -p port_number username@remote_host #指定端口号
ssh -i path/to/private_key username@remote_host #使用密钥进行身份验证
  • username 是你在远程服务器上的用户名。
  • remote_host 是你要连接的远程服务器的地址。
  • port_number 是远程SSH服务的端口号,默认是22。
  • path/to/private_key 是你的私钥文件的路径。
复制文件到远程服务器
scp local_file username@remote_host:/path/to/destination	#复制文件到远程服务器
scp username@remote_host:/path/to/remote_file local_destination #远程服务器复制文件到本地
  • local_file 是本地文件的路径。
  • /path/to/destination 是远程服务器上的目标路径。
使用代理跳板连接:
ssh -J jump_host username@target_host
  • jump_host 是跳板主机的地址。
  • target_host 是最终目标主机的地址。
使用SSH代理
ssh -D local_port username@remote_host		#这会创建一个本地SOCKS代理,可用于隧道连接和匿名浏览。
ssh-add -D #清除SSH代理中的所有密钥
在本地端口转发到远程服务器
ssh -L local_port:remote_host:remote_port username@jump_host
  • local_port 是本地端口。
  • remote_host 是最终目标主机的地址。
  • remote_port 是最终目标主机上的端口。
压缩SSH连接
ssh -C username@remote_host
在后台运行SSH
ssh -fN username@remote_host
断开SSH连接
exit
Ctrl + D

禁用密码登录使用公钥登录

步骤:

  1. 生成SSH密钥对

    ssh-keygen -t rsa		#生成id_rsa(私钥)和id_rsa.pub(公钥)文件
  2. 复制公钥到目标服务器

    ssh-copy-id username@server_ip	#将公钥复制到目标服务器的~/.ssh/authorized_keys文件中。
  3. 验证SSH连接

    ssh username@server_ip
  4. 禁用密码登录

    sudo vim /etc/ssh/sshd_config
    #修改以下内容
    PasswordAuthentication no #禁用密码登录

    确保公钥登录已经正常工作后,再设置此项,不然会报远程主机没有保存公钥之类报错。

  5. 重启SSH服务

    sudo systemctl restart sshd

sshd服务配置文件详解

#sshd服务配置文件详解
Port 22  # SSH 预设使用 22 这个 port,您也可以使用多的 port !
Protocol 2,1  # 选择的 SSH 协议版本,可以是 1 也可以是 2 ,如果要同时支持两者,就必须要使用 2,1 这个分隔了!
ListenAddress 0.0.0.0  
#监听的主机适配卡
PidFile /var/run/sshd.pid  # 可以放置 SSHD 这个 PID 的档案!左列为默认值
LoginGraceTime 600 # 当使用者连上 SSH server 之后,会出现输入密码的画面,在该画面中,在多久时间内没有成功连上 SSH server ,就断线!时间为秒!
Compression yes  # 是否可以使用压缩指令?
HostKey /etc/ssh/ssh_host_key # SSH version 1 使用的私钥
HostKey /etc/ssh/ssh_host_rsa_key # SSH version 2 使用的 RSA 私钥
HostKey /etc/ssh/ssh_host_dsa_key # SSH version 2 使用的 DSA 私钥
KeyRegenerationInterval 3600   # 由前面联机的说明可以知道, version 1 会使用 server 的 Public Key ,每隔一段时间来重新建立一次!时间为秒!
ServerKeyBits 768   # Server key 的长度!
SyslogFacility AUTH  # 当有人使用 SSH 登入系统的时候,SSH会记录信息
LogLevel INFO     # 登录记录的等级---全部
PermitRootLogin no  # 是否允许 root 登入!预设是允许的,但是建议设定成 no!
UserLogin no      # 在 SSH 底下本来就不接受 login 这个程序的登入!
StrictModes yes      # 当使用者的 host key 改变之后,Server 就不接受联机
RSAAuthentication yes   # 是否使用纯的 RSA 认证!?仅针对 version 1 !
PubkeyAuthentication yes  # 是否允许 Public Key ?只有 version 2
AuthorizedKeysFile .ssh/authorized_keys #设定若要使用不需要密码登入的账号时,那么那个账号的存放档案所在档名!
RhostsAuthentication no  # 本机系统不使用 .rhosts , .rhosts 不安全!
IgnoreRhosts yes      # 是否取消使用 ~/.ssh/.rhosts 来做为认证!
RhostsRSAAuthentication no # 针对 version 1 ,使用 rhosts 档案在/etc/hosts.equiv配合 RSA 演算方式来进行认证!
HostbasedAuthentication no # 这个项目与上面的项目类似,不过是给 version 2 使用的!
IgnoreUserKnownHosts no  # 是否忽略家目录内的 ~/.ssh/known_hosts 这个档案所记录的主机内容
PasswordAuthentication yes # 密码验证
PermitEmptyPasswords no  # 上面那一项如果设定为 yes 的话,这一项就最好设定为 no ,这个项目在是否允许以空的密码登入!
ChallengeResponseAuthentication yes # 挑战任何的密码认证!所以,任何 login.conf规定的认证方式,均可适用!
PAMAuthenticationViaKbdInt yes # 是否启用其它的 PAM 模块!启用这个模块将会导致 PasswordAuthentication 设定失效!
与Kerberos 有关的参数设定!底下不用设定
  KerberosAuthentication no
  KerberosOrLocalPasswd yes
  KerberosTicketCleanup yes
  KerberosTgtPassing no
有关在 X-Window 底下使用的相关设定
  X11Forwarding yes
  X11DisplayOffset 10
  X11UseLocalhost yes
PrintMotd no # 登入后是否显示出一些信息呢?例如上次登入的时间、地点等,预设是 yes ,但是,如果为了安全,可以考虑改为 no !
PrintLastLog yes      # 显示上次登入的信息!可以啊!预设也是 yes !
KeepAlive yes       # 一般而言,如果设定这项目的话,那么 SSH Server 会传送KeepAlive 的讯息给 Client 端,以确保两者的联机正常!在这个情况下,任何一端死掉后, SSH 可以立刻知道!而不会有僵尸程序的发生!
UsePrivilegeSeparation yes # 使用者的权限设定项目!
MaxStartups 10       # 同时允许几个尚未登入的联机画面?
DenyUsers *        # 设定受抵挡的使用者名称

限制用户或IP登录

说明:

一般要实现这种功能时,先安装VPN,然后客户端登录VPN,然后通过内网IP登录SSH。

注意:

更改配置文件时,记得留个后门,以防把自己锁在主机外,测试配置正常后,再关闭后门。

限制用户SSH登录

只允许指定用户进行登录(白名单):

在/etc/ssh/sshd_config配置文件中设置AllowUsers选项,(配置完成需要重启 SSHD 服务)格式如下:

AllowUsers    aliyun [email protected]  
# 允许 aliyun用户 和从 192.168.1.1 登录的 test 帐户通过 SSH 登录系统。

只拒绝指定用户进行登录(黑名单):

在/etc/ssh/sshd_config配置文件中设置DenyUsers选项,(配置完成需要重启SSHD服务)格式如下:

DenyUsers    zhangsan aliyun    #Linux系统账户  
# 拒绝 zhangsan、aliyun 帐户通过 SSH 登录系统

限制IP SSH登录

说明:

这里的IP是指客户端IP,不是服务器IP

下面的例子使用了hosts.allow文件的配置方式,目的是快,但也有不灵活的,建议改成iptables的方案。

linux 服务器通过设置 /etc/hosts.allow/etc/hosts.deny这个两个文件限制或者允许某个或者某段IP地址远程 SSH 登录服务器,方法比较简单,且设置后立即生效,不需要重启SSHD服务,具体如下:

/etc/hosts.allow添加

sshd:192.168.0.1:allow  #允许 192.168.0.1 这个IP地址SSH登录
sshd:192.168.0.:allow #允许192.168.0.1/24这段IP地址的用户登录,多个网段可以以逗号隔开,比如192.168.0.,192.168.1.:allow

/etc/hosts.allow添加

sshd:ALL #允许全部的ssh登录 

hosts.allow和hosts.deny两个文件同时设置规则的时候, hosts.allow文件中的规则优先级高 ,按照此方法设置后服务器只允许192.168.0.1这个IP地址的SSH登录,其它的IP都会拒绝。

/etc/hosts.deny添加

sshd:ALL #拒绝全部IP

VNC连接远程服务器

在Rocky linux8.5下安装vncserver

#安装 Gnome 桌面
dnf groupinstall "Server with GUI" -y

#安装vncserver:
dnf install tigervnc-server

#复制文件(将安装的vnc的配置文件复制到运行环境):
cp /lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:2.service
#这里的数字是启动vnc的端口号,我用的2表示端口号是5902,也就是加上了一个5900

#修改模板文件,替换其中的[Service】部分:
vim /etc/systemd/system/vncserver@:2.service
[Service]
Type=forking
User=root
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=-/usr/bin/vncserver -kill %i
ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i"
PIDFile=/root/.vnc/%H%i.pid
ExecStop=-/usr/bin/vncserver -kill %i

#设置vnc密码,这里输入两次密码,然后键入n,表示不启动单独查看用的密码:
vncpasswd

#启动vncserver:
systemctl start vncserver@:2.service

#在相应的防火墙打开外网对5902端口的访问
firewall-cmd --add-port=5902/tcp --permanent
#也可以以服务形式放行
sudo firewall-cmd --add-service=vncserver --permanent

关机、重启和用户注销

关机

常用命令

shutdown

  • 该命令用于安全地关闭系统。
  • 可以使用 shutdown 来设置系统关机的时间,
  • 同时可以选择是否通知所有登录用户,并在关机前执行 sync 以确保数据同步。

poweroff

  • shutdown 的一部分,它用于完全关闭系统电源。
  • 通常,当系统进入关机状态后,shutdown 会调用 poweroff。因此,执行 poweroff 与执行 shutdown 的效果是一样的,都会导致系统完全关闭。

系统关闭流程

一般的关机步骤是先执行 sync 命令确保数据同步,然后使用 shutdownpoweroff 关机。

shutdown -h now		#关机并立即执行
shutdown -h +1 #设置关机定时器(例如,1分钟后关机):
shutdown -c #取消关机
shutdown -H(--half) #将系统关闭到一个类似于关机的状态,但并不完全断电。

poweroff #立即关机

使用 shutdown 命令的 -H 选项可以将系统设置为半关机状态,在这个状态下,计算机通常会停止运行操作系统,但硬件设备和电源可能仍然处于一些低功耗的状态,以便更快地重新启动。

重启

reboot now		#重启并立即执行
shutdown -r +1 #设置重启定时器(例如,1分钟后重启):

注销

logout			#注销当前用户(回到登录屏幕), 在图形运行级别无效,在运行级别3有效。
su username #切换用户:

sync

  • sync:把内存的数据同步到磁盘上

查看当前登录的用户:

who

who
fams_itoper01 pts/1 2024-02-17 21:40 (192.168.123.160)

强制注销用户:

pkill -KILL -u username

注意:

  • 关机前通知在线用户,以防发生数据损失。
  • 确保在执行关机和重启命令时小心,以免意外中断系统。

系统语言设置

查看当前生效的语言包

sudo localectl

查看安装的语言包

sudo locale -a

查看源上有哪些语言包

sudo dnf list | grep glibc-langpack

安装中文语言包

sudo dnf install glibc-langpack-zh #安装中文语言包

设置默认语言

sudo localectl set-locale LANG=zh_CN.utf8

Reference link

#文章内容参考以下链接

https://github.com/shiguangwl/Linux_Note

#ssh限制用户或ip参考

https://www.cnblogs.com/EasonJim/p/8334122.html

https://www.cnblogs.com/EasonJim/p/8338931.html #iptable实现方式

#Rocky linux9.0安装vncserver

https://blog.csdn.net/carrousel0516/article/details/124004332

#语言设置

https://blog.csdn.net/weixin_43092290/article/details/130965878