1.Linux啟動流程
2.Linux運行級別
1.什么是運行級別,運行級別就是操作系統當前正在運行的功能級別
System V init運行級別 | systemd目標名稱 | 作用 |
---|---|---|
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 | 重啟 |
2.如何調整系統啟動的運行級別?systemd使用’targets’而不是runlevels。默認情況下,有兩個主要目標:
multi-user.target:類似於運行級別3 graphical.target: 類似於運行級別5
#1.查看系統默認運行級別
# ls /usr/lib/systemd/system/runlevel*
[root@student ~]# runlevel(6,7通用)
[root@student ~]# systemctl get-default
#2.要設置默認目標,請運行
[root@student ~]# systemctl set-default graphical.target # 切換圖形界面
[root@student ~]# systemctl set-default multi-user.target # 切換命令界面
3.Linux systemd
1.systemd的由來
Linux一直以來都是采用init進程作為祖宗進程,但是init有兩個缺點: 1、啟動時間長。Init進程是串行啟動,只有前一個進程啟動完,才會啟動下一個進程。 2、啟動腳本復雜,初始化完成后系統會加載很多腳本,腳本都會處理各自的情況,這會讓腳本多而復雜。 Centos5 是啟動速度最慢的,串行啟動過程,無論進程相互之間有無依賴關系。 Centos6 相對啟動速度有所改進。有依賴的進程之間依次啟動而其他與之沒有依賴關系的則並行同步啟動。 Centos7 所有進程無論有無依賴關系則都是並行啟動(當然很多時候進程沒有真正啟動而是只有一個信號或者說是標記而已,在真正利用的時候才會真正啟動。)
2.什么是systemd
systemd即為system daemon守護進程,systemd主要解決上文的問題而誕生,systemd的目標是,為系統的啟動和管理提供一套完整的解決方案。
3.systemd的優勢
1、最新系統都采用systemd管理(RedHat7,CentOS7,Ubuntu15等) 2、Centos7支持開機並行啟動服務,顯著提高開機啟動效率。 3、Centos7關機只關閉正在運行的服務,而Centos6全部都關閉一次。 4、Centos7服務的啟動與停止不在使用腳本進行管理,也就是/etc/init.d下不在有腳本。 5、Centos7使用systemd解決原有模式缺陷,比如原有service不會關閉程序產生的子進程。
3.systemd相關配置文件 /usr/lib/systemd/system/ #類似Centos6系統的啟動腳本,/etc/init.d/ /etc/systemd/system/ #類似Centos6系統的/etc/rc.d/rcN.d/ /etc/systemd/system/multi-user.target.wants/,開機要啟動的程序
4.systemd管理服務相關命令 systemctl管理服務的啟動、重啟、停止、重載、查看狀態等常用命令
systemctl命令 | 作用 |
---|---|
systemctl start crond.service | 啟動服務 |
systemctl stop crond.service | 停止服務 |
systemctl restart crond.service | 重啟服務 |
systemctl reload crond.service | 重新加載配置 |
systemctl status crond.servre | 查看服務運行狀態 |
systemctl is-active sshd.service | 查看服務是否在運行中 |
systemctl mask crond.servre | 禁止服務運行 |
systemctl unmask crond.servre | 取消禁止服務運行 |
systemctl cat vsftpd | 查看啟動文件 |
當我們使用systemctl啟動一個守護進程后,可以通過sysytemctl status查看此守護進程的狀態
狀態 | 描述 |
---|---|
loaded | 服務單元的配置文件已經被處理 |
active(running) | 服務持續運行 |
active(exited) | 服務成功完成一次的配置 |
active(waiting) | 服務已經運行但在等待某個事件 |
inactive | 服務沒有在運行 |
enabled | 服務設定為開機運行 |
disabled | 服務設定為開機不運行 |
static | 服務開機不啟動,但可以被其他服務調用啟動 |
systemctl 設置服務開機啟動、不啟動、查看各級別下服務啟動狀態等常用命令
systemctl命令(7系統) | 作用 |
---|---|
systemctl enable crond.service | 開機自動啟動 |
systemctl disable crond.service | 開機不自動啟動 |
systemctl list-unit-files | 查看各個級別下服務的啟動與禁用 |
systemctl is-enabled crond.service | 查看特定服務是否為開機自啟動 |
systemctl daemon-reload | 創建新服務文件需要重載變更 |
CentOS7系統, 管理員可以使用 systemctl 命令來管理服務器啟動與停止
#關機相關命令
systemctl poweroff #立即關機,常用
#重啟相關命令
systemctl reboot #重啟命令,常用
systemctl的journalctl日志
journalctl -n 20 #查看最后20行
journalctl -f #動態查看日志
journalctl -p err #查看日志的級別
journalctl -u crond #查看某個服務的單元的日志
# journalctl -xe
# systemctl status nginx -l
systemcltl 其他
### 1 centos6 中啟動服務,centos7啟動服務
/etc/init.d/network restart
service network restart #(只會干掉父進程,不會關掉子進程)
# centos7啟動服務
systemctl restart network # 所有服務都放在/usr/lib/systemd/system/
####2 制作系統服務(nginx為例)
# /usr/lib/systemd/system/vsftpd.service
[Unit]
Description=Vsftpd ftp daemon # 描述
After=network.target # 在XX后啟動
[Service]
Type=forking # 程序后台運行
ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf # 命令
# ExecStartPre 啟動之前執行
# ExecStop 停止
# ExecRestart 重啟
# ExecReload 重新加載
[Install]
WantedBy=multi-user.target # 在哪個運行級別下
####3 制作系統服務
# cd /usr/lib/systemd/system/
# vim mynginx.service
[Unit]
Description=my nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecRestart=/usr/local/nginx/sbin/nginx -s restart
ExecReload=/usr/local/nginx/sbin/nginx -s reload
[Install]
WantedBy=multi-user.target # 在哪個運行級別下
# chmod 754 mynginx.service
# systemctl start mynginx # 啟動nginx
# systemctl enable mynginx.service # 開機啟動
# systemctl status mynginx.service # 查看是否成功
# systemctl disable mynginx.service # 取消開機啟動
4.Linux單用戶模式
如何使用單用戶模式進行變更系統密碼?以Centos7系統為例:(Centos6破解方式請自行百度)
第1步:重啟Linux系統主機並出現引導界面時,按下鍵盤上的e鍵進入內核編輯界面 第2步:在linux16這行的后面添加
enforcing=0 init=/bin/bash
,然后按下Ctrl + X組合鍵來運行修改過的內核程序 第3步:大約5秒過后,進入到系統的單用戶模式,依次輸入以下命令,等待系統重啟操作完畢,然后就可以使用新密碼來登錄Linux系統了。命令行執行效果如圖所示。
Centos7單用戶破解密碼更為詳細版
5.Linux下救援模式
場景一:當系統壞了,無法登陸系統,但需要把里面的數據復制出來,怎么辦?
步驟一、先掛載光盤,然后選擇光盤引導為第一位 步驟二、進入故障排除模式–>然后選擇救援模式
步驟三、掛載真實系統后,發現數據都還存在
場景二、修復MBR,主要出現在安裝雙系統時,后安裝的系統把原來系統的MBR刪除了,需要修復。
步驟一、破壞硬盤的前446字節,模擬MBR引號損壞,會發現重啟無法啟動系統
[root@m01 ~]# dd if=/dev/zero of=/dev/sda bs=1 count=446
步驟二、重啟系統,然后按照之前的操作進入救援模式,然后分配一個shell終端,掛載真實的操作系統進行修復
步驟二、修復MBR引導,然后重啟連接服務器
#1.使用grub修復
# grub2-install /dev/sda
#2.然后退出
# exit
#3.最后重啟進入系統
# reboot
場景三、Centos7誤刪除grub文件如何進行修復。 步驟一、模擬誤刪故障
#1.刪除grub2
[root@m01 ~]# rm -rf /boot/grub2
#2.重啟計算機
[root@m01 ~]# reboot
步驟二、重啟系統,然后按照之前的操作進入救援模式,然后分配一個shell終端,掛載真實的操作系統進行修復
步驟三、使用grub2-install、grub2-mkconfig恢復配置文件
PS: 最后別忘記修改 BIOS 引導,讓硬盤回歸到第一引導