1. 程式人生 > >Linux學習(四)服務與程序

Linux學習(四)服務與程序

一、Linux 系統啟動與快捷鍵設定

1.Linux 系統啟動過程

系統的 引導初始化 是作業系統實現控制的第一步。

Linux系統的初始化主要包括 核心init程式 兩部分:

  • 核心主要完成對系統硬體的檢測和初始化工作。
  • init程式主要完成對系統的各項配置。

Linux啟動流程圖(畫的有點醜將就下):

在這裡插入圖片描述

下面介紹下各部分:

(1) BIOS(Basic Input/Output System):基本輸入輸出系統,儲存於主機板的ROM晶片上

BIOS主要功能是儲存了磁碟的啟動順序,BIOS會按照順序查詢第一個磁碟頭的MBR資訊。

(2)MBR(Master Boot Record):主引導記錄,存於磁碟頭部,分別儲存了BootLoader程式,分割槽表資訊 以及用於有效性檢查的工具。

(3)GRUB(Grand Unified BootLoader):多系統啟動程式,用於查詢並載入Kernel,其執行過程分為三步:
== stage1==:查詢並載入stage2(BootLoader程式)。
stage1.5:但若系統未啟動,MBR找不到檔案系統(stage2所存放位置),就得先引導位於檔案系統中的stage2 。
stage2:GRUB程式會根據/boot/grub/grub.conf檔案查詢Kernel的資訊,然後開始載入Kernel程式,當Kernel程式被檢測並在載入到記憶體中,GRUB就將控制權交接給了Kernel程式。

Note:此時/boot 還未被掛載,GRUB直接識別grub所在磁碟的檔案系統,應該是/grub/grub.conf

(4)Kernel :核心,作業系統核心,軟硬體的互動通道。
initrd(Initial RAM Disk):stage2時拷貝到記憶體上 ,是一個臨時的根檔案系統(rootfs),該檔案裝載了必要的驅動模組,直到真正的rootfs被掛載後,initrd將從記憶體中移除。

(5)init:OS初始化操作,實際上是根據/etc/inittab(定義了系統預設執行級別)設定的動作進行指令碼的執行,第一個被執行的指令碼為/etc/rc.d/rc.sysinit,這個是真正的OS初始化指令碼,簡單講下這個指令碼的任務(可以去看看實際指令碼,看看都做了什麼):

  • 啟用udev和selinux;
  • 根據/etc/sysctl.conf檔案,來設定核心引數;
  • 設定系統時鐘;
  • 裝載硬碟對映;
  • 啟用交換分割槽;
  • 設定主機名;
  • 根檔案系統檢測,並以讀寫方式重新掛載根檔案系統;
  • 啟用RAID和LVM裝置;
  • 啟用磁碟配額;
  • 根據/etc/fstab,檢查並掛載其他檔案系統;
  • 清理過期的鎖和PID檔案

執行完後,根據配置的啟動級別,執行對應目錄底下的指令碼,最後執行/etc/rc.d/rc.local這個指令碼,至此,系統啟動完成。

2.關於系統執行級別

CentOS Linux7中,每個執行級別都有屬於自己的target檔案,都是連結檔案,執行級別的設定由/etc/system/system/default.target檔案控制。

在執行級別對應的目錄中,所有檔案的命名都是Knn… 和 Snn…
S開頭的檔案是系統啟動時呼叫的服務程序,K相對的就是終止時balabla.

系統圖形介面的執行級別是5,文字介面是3

使用Systemctl set-default name.target來修改預設的執行級別。

//將系統的預設執行級別修改為圖形介面
system set-default graphical.target
reboot

如何關閉Ctrl + Alt + Del 重啟系統的組合件呢?

vim編輯這個檔案,全部註釋/usr/lib/systemd/system/ctrl-alt-del.target 檔案的內容,儲存退出,執行init q重新載入配置檔案。

二、使用systemctl管理NFS服務

1.什麼是服務?

簡單來說就是執行某系統功能的程式來支援其他更加底層的程式。例如:列印服務,HTTP服務,FTP服務。一般的服務管理有啟動、查詢、停止等操作。

Linux系統的服務分為獨立執行的服務受xinetd管理的服務兩大類。

獨立執行的服務一般與執行級別有關,在系統啟動後就直接執行和管理;
xinetd本身就是一個獨立執行的服務,負責管理一些不常用的服務,其啟動和停止都由xinetd控制。

在管理服務時,Linux中的每個服務都由相應的啟動指令碼,用於設定啟動、停止、重啟和查詢服務等功能。所有服務的指令碼都放在 /etc/rc.d/init.d 目錄中,可用less命令檢視。

2.那麼什麼是NFS服務?

NFS (Network FileSystem ) ,主要功能就是可以透過網路,讓不同的機器、不同的作業系統、可以彼此分享個別的檔案 (share files)。可以簡單看做是一個檔案伺服器 (file server) 。

NFS 伺服器可以讓你的 PC 來將網路遠端的 NFS 伺服器分享的目錄,掛載到本地端的機器當中, 在本地端的機器看起來,那個遠端主機的目錄就好像是自己的一個磁碟分割槽槽一樣 (partition)

3.systemctl命令

Linux中對服務的管理可以通過systemctl命令來實現。

(1)服務的啟動與停止

systemctl    start(啟動)/stop(停止)/status(檢視執行)/restart(重啟)/reload(過載)   XXX.service

例如:管理network服務
在這裡插入圖片描述
注:服務一般以 “ .service ” 結尾。

(2)設定服務自啟動

ntsysv --back --level

在這裡插入圖片描述
或者systemctl命令也可以設定

例如:檢視network服務的開機自啟動狀態,並設定為開機不啟動。
在這裡插入圖片描述

(3)檢視所有的服務

systemctl             //列出所有的系統服務
systemctl list-units           //列出所有啟動unit
systemctl list-unit-files         //列出所有啟動檔案
systemctl list-units  -type=service -all          //列出所有service型別的unit
systemctl list-units  -type=service -all grep cpu        //列出CPU電源管理機制的服務
systemctl list-units  -type=target -all          //列出所有目標單元target

三、程序的延遲與週期排程

1. 程序是什麼?

首先來看一下程式是怎麼定義的:程式是為了完成某種任務二設計的軟體,包含可執行的程式碼和資料,而程序是指開始執行但是還沒有結束的程式的例項。

一個執行的程式可能有多個程序。
程序一般分為互動程序、批處理程序和守護程序3類。

互動程序:shell下通過執行程式產生的程序,可在前臺和後臺執行。
批處理程序:程序的序列,執行時不需要人機互動。
守護程序:一直執行,一般在後臺執行。

2.程序排程

Linux下的程序排程一般用 at 和 crontab .

(1)延遲性排程:at

at 命令在指定時刻執行指定的命令,實際是一組命令的集合。使用前需要確保atd服務是開啟的,使用 #systemctl start atd.service 開啟,並用 #systemctl enable atd.service 確認一下。atq命令可用於查詢已設定的命令序列,atrm命令用於刪除已設定的命令序列。

//基本格式就是:

at time

at> 動作

at>ctrl +d

其他at的命令

at -l #檢視任務的編號(任務已完成則沒有顯示)

at -c 任務編號 #檢視這個任務的內容

at -r 任務編號 #刪掉這個任務

下面就來舉個栗子啦~

//兩天後的17:30執行檔案data中指定的作業
# at -f data 17:30+2 days
//一分鐘後再tty1中提示"hello!"
# at now+1 minutes
at>echo"hello!">/dev/tty1
at>ctrl+D
//明天凌晨2點將正在登陸的使用者寫入/tmp/users.log
# at 2:00 tomorrow
at> w>/tmp/users.log
//一分鐘後在主目錄中建立目錄at
# at now+1 minutes
at>mkdir at
at>ctrl+D

(2)週期性排程:crontab

crontab命令可以在指定的日期和時間週期執行。

//基本格式
#crontab
minute hour day month dayofweek command
ctrl+D

舉例:

//每週四早上8:30,提醒使用者10:00開會
# crontab
30 8 * * 4 echo "meeting at 10:00 am">/dev/tty1
ctrl+D

可以#crontab -e進入vim修改排程任務。

3.程序檢視

ps是最基本的程序檢視命令。可以確定哪些程序在執行、掛起、運行了多久、在使用的資源、程序相對優先順序及程序的標識號(PID)。

ps  aux        //檢視終端上所有使用者程序的所有資訊
ps  aux|less       //分頁檢視
ps  aux|grep glenda    //檢視使用者glenda所有程序資訊

pstree還可以以樹狀結構顯示系統程序的繼承關係。

4.程序終止

終止前臺執行的程序一般用:Ctrl + C;
終止後臺程序,必須用 kill、killall 之類的程序終止命令。

(1)kill
一般和ps、grep結合使用

ps -A|grep sshd     //查詢sshd服務程序的pid是1097
kill 1097

對於殭屍程序,用訊號程式碼-9強行終止。

(2)killall:通過程序的名字,直接終止。

killall sshd     //終止所有sshd程序

5.作業控制

正在執行的一個或多個相關程序稱為一個作業,作業控制是指控制當前正在執行的程序的行為,使用者可以同時執行多個作業。