1. 程式人生 > >13.系統啟動和服務管理

13.系統啟動和服務管理

## 1 centos6的啟動 ### 1.1 Linux系統概述 - 核心功能:程序管理、記憶體管理、網路管理、驅動程式、檔案系統、安全功能等 - 根檔案系統(rootfs):程式和 glibc 庫 核心的兩個流派: - 巨集核心(monolithic kernel):又稱單核心和強核心,Unix,Linux 把所有系統服務都放到核心裡,所有功能集成於同一個程式,分層實現不同功能,系統龐大複雜, Linux其實在單核心核心實現了模組化,也就相當於吸收了微核心的優點 - 微核心(micro kernel):Windows,Solaris,HarmonyOS 簡化核心功能,在核心之外的使用者態儘可能多地實現系統服務,同時加入相互之間的安全保護,每 種功能使用一個單獨子系統實現,將核心功能移到使用者空間,效能差 ### 1.2 CentOS 6啟動流程 ##### 1.2.1 硬體啟動 開機或重啟主引導扇區的讀取流程 1. BIOS加電自檢(Power On Self Test -- POST) 2. 讀取主引導記錄(MBR)。當BIOS檢查到硬體正常並與CMOS中的設定相符後,按照CMOS中對啟動裝置的設定順序檢測可用的啟動裝置。 3. 當檢測到有啟動裝置滿足要求後,BIOS將控制權交給相應啟動裝置。 加電自檢資料儲存位置: - 主機板的ROM,BIOS,這裡儲存著有關計算機系統最重要的基本輸入輸出 程式,系統資訊設定、開機加電自檢程式和系統啟動自舉程式等 - 主機板的RAM,:CMOS互補金氧半導體,這裡儲存各項引數的設定,按次序查詢引導裝置,第一個有載入程式的裝置為本次啟動裝置 ##### 1.2.2 啟動載入器bootloader BIOS尋找到第一個可啟動的裝置(通常為硬碟),而後從MBR中載入啟動程式,然後把控制交給這段程式碼。MBR位於硬碟的前512位元組內。 **載入程式**(英語:boot loader)是指引導作業系統的程式。第一階段載入程式位於主引導記錄(MBR),用以引導位於某個分割槽上的第二階段載入程式,如NTLDR、BOOTMGR和GNU GRUB等。 主引導記錄(MBR)最開頭是第一階段引導程式碼。其中的硬碟載入程式的主要作用是檢查分割槽表是否正確並且在系統硬體完成自檢以後將控制權交給硬碟上的載入程式 GRUB是Linux系統中所用的載入程式,這是一個來自GNU專案的多作業系統啟動程式。 **GRUB 啟動階段** - primary boot loader : 1st stage:MBR的前446個位元組 1.5 stage: mbr 之後的扇區,讓stage1中的bootloader能識別stage2所在的分割槽上的檔案系統 - secondary boot loader :2nd stage,分割槽檔案/boot/grub/ GRUB的步驟1包含在MBR中。由於受MBR的大小限制,步驟一所做的幾乎只是裝載GRUB的下一步驟(存放在硬碟的其它位置),也就是引出1.5或者2階段。 ##### 1.3.3 載入 kernel kernel 自身初始化過程 1. 探測可識別到的所有硬體裝置 2. 載入硬體驅動程式(藉助於ramdisk載入驅動) 3. 以只讀方式掛載根檔案系統 4. 執行使用者空間的第一個應用程式:/sbin/init 核心的組成部分: - 核心檔案:/boot/vmlinuz-VERSION-release ramdisk:輔助的偽根系統,載入相應的硬體驅動,ramdisk --> ramfs 提高速度 CentOS 5 /boot/initrd-VERSION-release.img CentOS 6 以後版本 /boot/initramfs-VERSION-release.img ##### 1.3.4 init初始化 ###### 1.3.4.1 執行級別 這個階段首先通過init程式獲取使用者執行級別 不同版本系統init程式的型別: CentOS 5之前 ​ 配置檔案:/etc/inittab Upstart: init,CentOS 6 ​ 配置檔案:/etc/inittab, /etc/init/*.con Systemd:systemd, CentOS 7 ​ 配置檔案:/usr/lib/systemd/system ​ /etc/systemd/system 執行級別:為系統執行或維護等目的而設定;0-6:7個級別,一般使用3, 5做為預設級別 ```bash 0:關機 1:單使用者模式(root自動登入), single, 維護模式 2:多使用者模式,啟動網路功能,但不會啟動NFS;維護模式 3:多使用者模式,正常模式;文字介面 4:預留級別;可同3級別 5:多使用者模式,正常模式;圖形介面 6:重啟 ``` ###### 1.3.4.2 初始化指令碼 sysinit ```bash /etc/rc.d/rc.sysinit ``` 初始化指令碼的功能: ```bash [root@centos6 ~]#cat /etc/init/rcS.conf (1) 設定主機名 (2) 設定歡迎資訊 (3) 啟用udev和selinux (4) 掛載/etc/fstab檔案中定義的檔案系統 (5) 檢測根檔案系統,並以讀寫方式重新掛載根檔案系統 (6) 設定系統時鐘 (7) 啟用swap裝置 (8) 根據/etc/sysctl.conf檔案設定核心引數 (9) 啟用lvm及software raid裝置 (10)載入額外裝置的驅動程式 (11)清理操作 ``` ###### 1.3.4.3 啟動服務 執行執行級別下服務的啟動指令碼 ```bash 服務指令碼放置於/etc/rc.d/init.d (/etc/init.d) /etc/rc.d/rc.local ``` service 命令:手動管理服務 ```bash service 服務 start|stop|restart service --status-all ``` chkconfig命令配置服務開機啟動: ```bash #檢視服務在所有級別的啟動或關閉設定情形: chkconfig [--list] [name] #新增服務 SysV的服務指令碼放置於/etc/rc.d/init.d (/etc/init.d) #!/bin/bash chkconfig: LLLL nn nn #LLLL 表示初始在哪個級別下啟動,-表示都不啟動 description : 描述資訊 chkconfig --add name #刪除服務 chkconfig --del name #修改指定的執行級別 chkconfig [--level levels] name 說明:--level LLLL: 指定要設定的級別;省略時表示2345 ``` ###### 1.3.4.4 非獨立服務管理 服務分為獨立服務和非獨立服務 瞬態(Transient)服務被超級守護程序 xinetd 程序所管理,也稱為非獨立服務,這類服務在被使用時才會被喚醒。 配置檔案: ```bash /etc/xinetd.conf /etc/xinetd.d/ ``` 用chkconfig控制非獨立服務開機啟動 示例:chkconfig tftp on ## 2 /proc 目錄和核心引數管理 /proc目錄:核心把自己內部狀態資訊及統計資訊,以及可配置引數通過proc偽檔案系統加以輸出 檢視/proc幫助:man proc /proc設定的方法: ```bash #使用命令設定,下次開機後失效 sysctl -w path.to.parameter=VALUE #寫入配置檔案,持久儲存配置,下面任意一個配置檔案即可 /etc/sysctl.conf /etc/sysctl.d/*.conf /usr/local/lib/sysctl.d/*.conf /usr/lib/sysctl.d/*.conf /lib/sysctl.d/*.conf /run/sysctl.d/*.conf #echo命令通過重定向方式也可以修改大多數引數的值 echo "VALUE" > /proc/sys/path/to/parameter ``` sysctl命令用法: 臨時設定引數 ```bash sysctl -w parameter=VALUE ``` 通過讀取配置檔案設定引數 ```bash sysctl -p [/path/to/conf_file] ``` 檢視所有生效引數 ```bash sysctl -a ``` 常用的核心引數: ```bash net.ipv4.ip_forward #路由轉發功能 net.ipv4.icmp_echo_ignore_all net.ipv4.ip_nonlocal_bind #允許應用程式可以監聽本地不存在的IP vm.drop_caches fs.file-max = 1020000 #允許開啟的最大檔案數 ``` /sys 目錄 使用sysfs檔案系統,為使用者使用的偽檔案系統,輸出核心識別出的各硬體裝置的相關屬性資訊,也有內 核對硬體特性的設定資訊;有些引數是可以修改的,用於調整硬體工作特性 udev通過此路徑下輸出的資訊動態為各裝置建立所需要裝置檔案 udev為裝置建立裝置檔案時,會讀取其事先定義好的規則檔案,一般在/etc/udev/rules.d 及/usr/lib/udev/rules.d目錄下 ## 3 核心模組管理 Linux是單核心體系設計、但充分借鑑了微核心設計體系的優點,為核心引入模組化機制 核心組成部分: kernel:核心核心,一般為bzImage,通常在/boot目錄下 ​ 名稱為 vmlinuz-VERSION-RELEASE kernel object:核心物件,一般放置於 ​ /lib/modules/VERSION-RELEASE/ 使用`uname -r`可以檢視核心版本 ### 3.1 核心模組命令 ##### **lsmod** - 顯示由核心已經裝載的核心模組 - 顯示的內容來自於: /proc/modules檔案 ##### **modinfo** 檢視核心模組 格式: ``` modinfo [ -k kernel ] [ modulename|filename... ] ``` 常用選項: - -n:只顯示模組檔案路徑 - -p:顯示模組引數 - -a:作者 - -d:描述 ##### modprobe 新增或者移除核心模組 格式: ```bash modprobe [-C config-file] [modulename] [module parameters...] modprobe [-r] [-v] [-n] [-i] [modulename...] ``` 常用選項: - -r 移除指定模組 範例: ```bash [root@centos8 ~]$modprobe uas [root@centos8 ~]$lsmod | grep usb usb_storage 73728 1 uas [root@centos8 ~]$modprobe -r usb_storage modprobe: FATAL: Module usb_storage is in use. [root@centos8 ~]$modprobe -r uas [root@centos8 ~]$lsmod | grep usb [root@centos8 ~]$ ``` 其他命令: depmod命令:核心模組依賴關係檔案及系統資訊對映檔案的生成工具 insmod命令:可以安裝模組,需要指定模組檔案路徑,並且不自動解決依賴模組 範例: ```bash insmod `modinfo –n exportfs` insmod `modinfo –n xfs` ``` rmmod命令:解除安裝模組 ```bash rmmod [ modulename ] ``` ## 4 Busybox ### 4.1 Busybox介紹 Busybox 是一個集成了三百多個最常用Linux命令和工具的軟體。同時它自身只佔用很小的空間 可以用於定製小型的Linux作業系統:linux核心+busybox 官方網站:https://busybox.net/ ### 4.2 busybox編譯安裝 ```bash [root@centos7 ~]#yum -y install gcc gcc-c++ glibc glibc-devel make pcre pcredevel openssl openssl-devel systemd-devel zlib-devel glibc-static ncurses-devel [root@centos7 ~]#tar xvf busybox-1.31.1.tar.bz2 [root@centos7 ~]#cd busybox-1.31.1/ [root@centos7 busybox-1.31.1]#make menuconfig #按下面選擇,把busybox編譯也靜態二進位制、不用共享庫:Settings -->Build Options -->[*] Build static binary (no sharedlibs) [root@centos7 busybox-1.31.1]#make #如果出錯,執行make clean後,重新執行上面命令 [root@centos7 busybox-1.31.1]#make install [root@centos7 busybox-1.31.1]#ll busybox -h -rwxr-xr-x 1 root root 2.6M May 13 14:46 busybox #在install目錄中建立了各種命令的軟連結便於使用 [root@centos7 busybox-1.31.1]#ls _install/ bin linuxrc sbin usr ``` ### 4.3 Busybox使用 busybox的使用有三種方式: - busybox後直接跟命令,如 busybox ls - 直接將busybox重新命名,如 cp busybox tar - 建立符號連結,如 ln -s busybox rm ## 5 systemd ### 5.1 systemd介紹 Systemd:從 CentOS 7 版本之後開始用 systemd 實現init程序,系統啟動和伺服器守護程序管理器, 負責在系統啟動或執行時,啟用系統資源,伺服器程序和其它程序 **Systemd新特性** - 按需啟動守護程序 - 自動化的服務依賴關係管理 - 並行執行系統服務等 systemd概念之:unit unit表示不同型別的systemd物件,通過配置檔案進行標識和配置;檔案中主要包含了系統服務、監聽 socket、儲存的系統快照以及其它與init相關的資訊 Unit常用型別: - service :副檔名為.service, 用於定義系統服務 - socket :定義程序間通訊用的socket檔案,也可在系統啟動時,延遲啟動服務,實現 按需啟動 - target:副檔名為.target,用於模擬實現執行級別 使用`systemctl -t help`可以檢視unit全部型別 unit的配置檔案 ```bash /usr/lib/systemd/system:每個服務最主要的啟動指令碼設定,類似於之前的/etc/init.d/ /lib/systemd/system: ubutun的對應目錄 /run/systemd/system:系統執行過程中所產生的服務指令碼,比上面目錄優先執行 /etc/systemd/system:管理員建立的執行指令碼,類似於/etc/rcN.d/Sxx的功能,比上面目錄優先執行 ``` 更為詳細資訊可以訪問紅帽官網檢視: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/chap-managing_services_with_systemd http://freedesktop.org/wiki/Software/systemd/Preset ### 5.2 systemctl管理系統服務 格式: ```bash systemctl COMMAND name.service ``` 常用命令列舉: ```bash #啟動:相當於service name start systemctl start name.service #停止:相當於service name stop systemctl stop name.service #重啟:相當於service name restart systemctl restart name.service #檢視狀態:相當於service name status systemctl status name.service #禁止自動和手動啟動: systemctl mask name.service 這條命令本質上是將/etc/systemd/system/name.service軟連結至/dev/null #取消禁止 systemctl unmask name.service #檢視某服務當前啟用與否的狀態: systemctl is-active name.service #檢視所有已經啟用的服務: systemctl list-units --type|-t service #檢視所有服務: systemctl list-units --type service --all|-a #設定某服務開機自啟,相當於chkconfig name on systemctl enable name.service #檢視所有服務的開機自啟狀態,相當於chkconfig --list systemctl list-unit-files --type service #用來列出該服務在哪些執行級別下啟用和禁用:chkconfig –list name ls /etc/systemd/system/*.wants/name.service #檢視服務是否開機自啟: systemctl is-enabled name.service ``` 服務狀態說明: - active(running) 一次或多次持續處理的執行 - inactive 不執行 - static 開機不啟動,但可被另一個啟用的服務啟用 - enabled 開機啟動 - disabled 開機不啟動 ### 5.3 service unit檔案格式 /etc/systemd/system:系統管理員和使用者使用 (其中內容是/usr/lib/systemd/system軟連結) /usr/lib/systemd/system:發行版打包者使用 unit 格式說明: - 以 “#” 開頭的行後面的內容會被認為是註釋 - 相關布林值,1、yes、on、true 都是開啟,0、no、off、false 都是關閉 - 時間單位預設是秒,所以要用毫秒(ms)分鐘(m)等須顯式說明 service unit file檔案通常由三部分組成 ```bash [root@Centos7 ~]# cat /usr/lib/systemd/system/NetworkManager.service #有關unit的資訊相關選項 [Unit] ... #unit型別選項集合 [Service] ... #定義由“systemctl enable”以及"systemctl disable“命令在實現服務啟用或禁用時用到的一些選項 [Install] ... ``` [Unit]的常用選項: - Description:描述資訊 - After:定義unit的啟動次序,表示當前unit應該晚於哪些unit啟動,其功能與Before相反 - Requires:依賴到的其它units,強依賴,被依賴的units無法啟用時,當前unit也無法啟用 - Wants:依賴到的其它units,弱依賴 - Conflicts:定義units間的衝突關係 [Service]的常用選項: - Type:定義影響ExecStart及相關引數的功能的unit程序啟動型別 simple:預設值,這個daemon主要由ExecStart接的指令串來啟動,啟動後常駐於記憶體中 - EnvironmentFile:環境配置檔案 - ExecStart:指明啟動unit要執行命令或指令碼的絕對路徑 - ExecStartPre: ExecStart前執行 - ExecStartPost: ExecStart後執行 - ExecStop:指明停止unit要執行的命令或指令碼 - Restart:當設定Restart=1 時,則當次daemon服務意外終止後,會再次自動啟動此服務 - PrivateTmp:設定為yes時,會在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/ 目錄 [Install]的常用選項: - Alias:別名,可使用systemctl command Alias.service - RequiredBy:被哪些units所依賴,強依賴 - WantedBy:被哪些units所依賴,弱依賴 範例:開機啟動nginx ```bash #方式1: [root@Centos7 ~]# vim /usr/lib/systemd/system/tomcat.service [Unit] Description=java tomcat project After=syslog.target network.target [Service] Type=forking EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf ExecStart=/usr/local/tomcat/bin/startup.sh ExecStop=/usr/local/tomcat/bin/shutdown.sh PrivateTmp=true User=tomcat [Install] WantedBy=multi-user.target #方式2: [root@Centos7 ~]#vim /etc/rc.local [root@Centos7 ~]#cat /etc/rc.local #!/bin/bash /usr/local/tomcat/bin/startup.sh ``` ### 5.4 執行級別 target units:相當於CentOS 6之前的runlevel ,unit配置檔案:.target ```bash ls /usr/lib/systemd/system/*.target systemctl list-unit-files --type target --all ``` 級別對應關係 ```bash 0 ==> runlevel0.target, poweroff.target 1 ==> runlevel1.target, rescue.target 2 ==> runlevel2.target, multi-user.target 3 ==> runlevel3.target, multi-user.target 4 ==> runlevel4.target, multi-user.target 5 ==> runlevel5.target, graphical.target 6 ==> runlevel6.target, reboot.target ``` 常用命令: ```bash #級別切換:相當於 init N systemctl isolate name.target #獲取預設執行級別: 相當於檢視 /etc/inittab systemctl get-default #修改預設級別:相當於修改 /etc/inittab systemctl set-default name.target ``` ### 5.5 CentOS 7之後版本引導順序 大圖:http://www.bestvae.cn/centos7.svg ![centos7啟動流程](13.系統啟動和服務管理.assets/centos7啟動流程.png) ### 5.6 設定核心引數 設定核心引數,隻影響當次啟動 常用於實現密碼的破解 啟動時,到啟動選單,按e鍵,找到在linux 開頭的行後新增systemd.unit=desired.target ### 5.7 練習 ##### 5.7.1 自制一個只執行shell的linux系統 **參考的文件:** Grub配置 https://www.gnu.org/software/grub/manual/grub/grub.html#Invoking-grub_002dmkrelpath http://www.jinbuguo.com/linux/grub.cfg.html 核心相關引數設定 https://www.kernel.org/doc/html/v4.14/admin-guide/kernel-parameters.html 1、硬體環境準備 ```bash #此次實驗系統版本為CentOS Linux release 7.9.2009 (Core) #1)建立boot和/分割槽 [root@localhost ~]# fdisk /dev/sdb #建立boot分割槽 Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-41943039, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G Partition 1 of type Linux and of size 1 GiB is set #建立/分割槽 Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (2-4, default 2): 2 First sector (2099200-41943039, default 2099200): Using default value 2099200 Last sector, +sectors or +size{K,M,G} (2099200-41943039, default 41943039): Using default value 41943039 Partition 2 of type Linux and of size 19 GiB is set #儲存設定退出 Command (m for help): w #2)格式檔案系統 [root@localhost ~]# mkfs.ext4 /dev/sdb1 [root@localhost ~]# mkfs.ext4 /dev/sdb2 #3)掛載磁碟裝置 [root@localhost ~]# mount /dev/sdb1 /mnt/boot [root@localhost ~]# mount /dev/sdb2 /mnt/sysroot/ ``` 2、配置grub ```bash #1)安裝grub [root@localhost ~]# grub2-install --root-directory=/mnt/ /dev/sdb Installing for i386-pc platform. Installation finished. No error reported. [root@localhost ~]# ls /mnt/boot/ grub2 lost+found #也可以使用下面這個命令安裝grub [root@localhost ~]#grub2-install --boot-directory=/mnt/boot /dev/sdb --force #2)拷貝核心以及虛擬檔案系統 [root@localhost ~]# cp /boot/vmlinuz-3.10.0-1160.el7.x86_64 /mnt/boot/ [root@localhost ~]# cp /boot/initramfs-3.10.0-1160.el7.x86_64.img /mnt/boot/ #3)自定義名稱、在選擇選單介面等待時間6s,指定init程式為bash [root@localhost /]# cat /etc/default/grub #通常來說建議在這個檔案設定grub相關引數,再執行grub2-mkconfig生成grub.cfg檔案 GRUB_TIMEOUT=6 #選擇選單介面等待秒數 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rhgb quiet root=/dev/sda2 selinux=0 init=/bin/bash" #向核心新增引數 GRUB_DISABLE_RECOVERY="true" [root@localhost /]# grub2-mkconfig -o /mnt/boot/grub2/grub.cfg [root@localhost /]# cat /mnt/boot/grub2/grub.cfg menuentry 'CentOS Linux this is for test' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1160.el7.x86_64-advanced-b3124ba9-2b20-4b11-915d-df97a9e8a256' { load_video set gfxpayload=keep insmod gzio insmod part_msdos insmod xfs set root='hd0,msdos1' #指定根裝置,任何未指定裝置名的檔案都視為位於此裝置 if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 4d3af8d0-7296-488d-96b6-725d5c5d9152 else search --no-floppy --fs-uuid --set=root 4d3af8d0-7296-488d-96b6-725d5c5d9152 fi linux16 /vmlinuz-3.10.0-1160.el7.x86_64 root=/dev/sda2 ro rhgb quiet selinux=0 init=/bin/bash initrd16 /initramfs-3.10.0-1160.el7.x86_64.img } ``` 3、準備相關程式和庫 ```bash [root@localhost /]#mkdir /mnt/sysroot [root@localhost /]#mount /dev/sdb2 /mnt/sysroot [root@localhost /]# mkdir -pv /mnt/sysroot/{boot,dev,sys,proc,etc,lib,lib64,bin,sbin,tmp,var,usr,opt,home,root,mnt,media} #使用指令碼複製bash等命令和相關庫檔案,如:bash,ifconfig,insmod,ping,mount,ls,cat,df,lsblk,blkid,tree,fdisk [root@localhost data]# cat copycmd.sh #!/bin/bash ch_root="/mnt/sysroot" [ ! -d $ch_root ] && mkdir $ch_root bincopy() { if which $1 &>/dev/null; then local cmd_path=`which --skip-alias $1` local bin_dir=`dirname $cmd_path` [ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir} [ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir} return 0 else echo "Command not found." return 1 fi } libcopy() { local lib_list=$(ldd `which --skip-alias $1` | grep -Eo '/[^[:space:]]+') for loop in $lib_list;do local lib_dir=`dirname $loop` [ -d ${ch_root}${lib_dir} ] || mkdir -p ${ch_root}${lib_dir} [ -f ${ch_root}${loop} ] || cp $loop ${ch_root}${lib_dir} done } read -p "Please input a command: " command while [ "$command" != "quit" ];do if bincopy $command ;then libcopy $command fi read -p "Please input a command or quit: " command done [root@localhost data]#chroot /mnt/sysroot bash-4.2# ls bash-4.2# pwd / ``` 到這裡配置就完成了,現在只需新建一個虛擬機器,將前一虛擬機器sdb硬碟對應的vmdk檔案增加進去開機即可 ![自制Linux](13.系統啟動和服務管理.assets/自制Linux.jpg) ##### 5.7.2 破解centos7密碼 方法一: ```bash 啟動時任意鍵暫停啟動 按e鍵進入編輯模式 將游標移動linux 開始的行,新增核心引數rd.break 按ctrl-x啟動 mount –o remount,rw /sysroot chroot /sysroot passwd root #如果SELinux是啟用的,才需要執行下面操作,如查沒有啟動,不需要執行 touch /.autorelabel exit reboot ``` 方法二: ```bash 啟動時任意鍵暫停啟動 按e鍵進入編輯模式 將游標移動linux 開始的行,改為rw init=/sysroot/bin/sh 按ctrl-x啟動 chroot /sysroot passwd root #如果SELinux是啟用的,才需要執行下面操作,如查沒有啟動,不需要執行 touch /.autorelabel exit reb