導航:首頁 > 文件類型 > ads的linux啟動文件

ads的linux啟動文件

發布時間:2023-08-08 13:41:20

『壹』 請教linux的啟動過程

第一步、載入內核
操作系統接管硬體以後,首先讀入 /boot 目錄下的內核文件
以我的電腦為例,/boot 目錄下面大概是這樣一些文件:
$ ls /boot

config-3.2.0-3-amd64
config-3.2.0-4-amd64
grub
initrd.img-3.2.0-3-amd64
initrd.img-3.2.0-4-amd64
System.map-3.2.0-3-amd64
System.map-3.2.0-4-amd64
vmlinuz-3.2.0-3-amd64
vmlinuz-3.2.0-4-amd64

第二步、啟動初始化進程
內核文件載入以後,就開始運行第一個程序 /sbin/init,它的作用是初始化系統環境。
由於init是第一個運行的程序,它的進程編號(pid)就是1。其他所有進程都從它衍生,都是它的子進程。
第三步、確定運行級別
許多程序需要開機啟動。它們在Windows叫做"服務"(service),在Linux就叫做"守護進程"(daemon)。
init進程的一大任務,就是去運行這些開機啟動的程序。但是,不同的場合需要啟動不同的程序,比如用作伺服器時,需要啟動Apache,用作桌面就不需要。Linux允許為不同的場合,分配不同的開機啟動程序,這就叫做"運行級別"(runlevel)。也就是說,啟動時根據"運行級別",確定要運行哪些程序。
Linux預置七種運行級別(0-6)。一般來說,0是關機,1是單用戶模式(也就是維護模式),6是重啟。運行級別2-5,各個發行版不太一樣,對於Debian來說,都是同樣的多用戶模式(也就是正常模式)。
init進程首先讀取文件 /etc/inittab,它是運行級別的設置文件。如果你打開它,可以看到第一行是這樣的:
id:2:initdefault:

initdefault的值是2,表明系統啟動時的運行級別為2。如果需要指定其他級別,可以手動修改這個值。
那麼,運行級別2有些什麼程序呢,系統怎麼知道每個級別應該載入哪些程序呢?......回答是每個運行級別在/etc目錄下面,都有一個對應的子目錄,指定要載入的程序。
/etc/rc0.d
/etc/rc1.d
/etc/rc2.d
/etc/rc3.d
/etc/rc4.d
/etc/rc5.d
/etc/rc6.d

上面目錄名中的"rc",表示run command(運行程序),最後的d表示directory(目錄)。下面讓我們看看 /etc/rc2.d 目錄中到底指定了哪些程序。
$ ls /etc/rc2.d

README
S01motd
S13rpcbind
S14nfs-common
S16binfmt-support
S16rsyslog
S16sudo
S17apache2
S18acpid
...

可以看到,除了第一個文件README以外,其他文件名都是"字母S+兩位數字+程序名"的形式。字母S表示Start,也就是啟動的意思(啟動腳本的運行參數為start),如果這個位置是字母K,就代表Kill(關閉),即如果從其他運行級別切換過來,需要關閉的程序(啟動腳本的運行參數為stop)。後面的兩位數字表示處理順序,數字越小越早處理,所以第一個啟動的程序是motd,然後是rpcbing、nfs......數字相同時,則按照程序名的字母順序啟動,所以rsyslog會先於sudo啟動。
這個目錄里的所有文件(除了README),就是啟動時要載入的程序。如果想增加或刪除某些程序,不建議手動修改 /etc/rcN.d 目錄,最好是用一些專門命令進行管理(參考這里和這里)。
第四步、載入開機啟動程序
前面提到,七種預設的"運行級別"各自有一個目錄,存放需要開機啟動的程序。不難想到,如果多個"運行級別"需要啟動同一個程序,那麼這個程序的啟動腳本,就會在每一個目錄里都有一個拷貝。這樣會造成管理上的困擾:如果要修改啟動腳本,豈不是每個目錄都要改一遍?
Linux的解決辦法,就是七個 /etc/rcN.d 目錄里列出的程序,都設為鏈接文件,指向另外一個目錄 /etc/init.d ,真正的啟動腳本都統一放在這個目錄中。init進程逐一載入開機啟動程序,其實就是運行這個目錄里的啟動腳本。
下面就是鏈接文件真正的指向。
$ ls -l /etc/rc2.d

README
S01motd -> ../init.d/motd
S13rpcbind -> ../init.d/rpcbind
S14nfs-common -> ../init.d/nfs-common
S16binfmt-support -> ../init.d/binfmt-support
S16rsyslog -> ../init.d/rsyslog
S16sudo -> ../init.d/sudo
S17apache2 -> ../init.d/apache2
S18acpid -> ../init.d/acpid
...

這樣做的另一個好處,就是如果你要手動關閉或重啟某個進程,直接到目錄 /etc/init.d 中尋找啟動腳本即可。比如,我要重啟Apache伺服器,就運行下面的命令:
$ sudo /etc/init.d/apache2 restart

/etc/init.d 這個目錄名最後一個字母d,是directory的意思,表示這是一個目錄,用來與程序 /etc/init 區分。
第五步、用戶登錄
開機啟動程序載入完畢以後,就要讓用戶登錄了。
一般來說,用戶的登錄方式有三種:
(1)命令行登錄
(2)ssh登錄
(3)圖形界面登錄
這三種情況,都有自己的方式對用戶進行認證。
(1)命令行登錄:init進程調用getty程序(意為get teletype),讓用戶輸入用戶名和密碼。輸入完成後,再調用login程序,核對密碼(Debian還會再多運行一個身份核對程序/etc/pam.d/login)。如果密碼正確,就從文件 /etc/passwd 讀取該用戶指定的shell,然後啟動這個shell。
(2)ssh登錄:這時系統調用sshd程序(Debian還會再運行/etc/pam.d/ssh ),取代getty和login,然後啟動shell。
(3)圖形界面登錄:init進程調用顯示管理器,Gnome圖形界面對應的顯示管理器為gdm(GNOME Display Manager),然後用戶輸入用戶名和密碼。如果密碼正確,就讀取/etc/gdm3/Xsession,啟動用戶的會話。
第六步、進入 login shell
所謂shell,簡單說就是命令行界面,讓用戶可以直接與操作系統對話。用戶登錄時打開的shell,就叫做login shell。
Debian默認的shell是Bash,它會讀入一系列的配置文件。上一步的三種情況,在這一步的處理,也存在差異。
(1)命令行登錄:首先讀入 /etc/profile,這是對所有用戶都有效的配置;然後依次尋找下面三個文件,這是針對當前用戶的配置。
~/.bash_profile
~/.bash_login
~/.profile

需要注意的是,這三個文件只要有一個存在,就不再讀入後面的文件了。比如,要是 ~/.bash_profile 存在,就不會再讀入後面兩個文件了。
(2)ssh登錄:與第一種情況完全相同。
(3)圖形界面登錄:只載入 /etc/profile 和 ~/.profile。也就是說,~/.bash_profile 不管有沒有,都不會運行。
第七步,打開 non-login shell
老實說,上一步完成以後,Linux的啟動過程就算結束了,用戶已經可以看到命令行提示符或者圖形界面了。但是,為了內容的完整,必須再介紹一下這一步。
用戶進入操作系統以後,常常會再手動開啟一個shell。這個shell就叫做 non-login shell,意思是它不同於登錄時出現的那個shell,不讀取/etc/profile和.profile等配置文件。
non-login shell的重要性,不僅在於它是用戶最常接觸的那個shell,還在於它會讀入用戶自己的bash配置文件 ~/.bashrc。大多數時候,我們對於bash的定製,都是寫在這個文件裡面的。
你也許會問,要是不進入 non-login shell,豈不是.bashrc就不會運行了,因此bash 也就不能完成定製了?事實上,Debian已經考慮到這個問題了,請打開文件 ~/.profile,可以看到下面的代碼
if [ -n "$BASH_VERSION" ]; then
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi

上面代碼先判斷變數 $BASH_VERSION 是否有值,然後判斷主目錄下是否存在 .bashrc 文件,如果存在就運行該文件。第三行開頭的那個點,是source命令的簡寫形式,表示運行某個文件,寫成"source ~/.bashrc"也是可以的。
因此,只要運行~/.profile文件,~/.bashrc文件就會連帶運行。但是上一節的第一種情況提到過,如果存在~/.bash_profile文件,那麼有可能不會運行~/.profile文件。解決這個問題很簡單,把下面代碼寫入.bash_profile就行了。
if [ -f ~/.profile ]; then
. ~/.profile
fi

這樣一來,不管是哪種情況,.bashrc都會執行,用戶的設置可以放心地都寫入這個文件了。
Bash的設置之所以如此繁瑣,是由於歷史原因造成的。早期的時候,計算機運行速度很慢,載入配置文件需要很長時間,Bash的作者只好把配置文件分成了幾個部分,階段性載入。系統的通用設置放在 /etc/profile,用戶個人的、需要被所有子進程繼承的設置放在.profile,不需要被繼承的設置放在.bashrc。
順便提一下,除了Linux以外, Mac OS X 使用的shell也是Bash。但是,它只載入.bash_profile,然後在.bash_profile裡面調用.bashrc。而且,不管是ssh登錄,還是在圖形界面里啟動shell窗口,都是如此。

『貳』 Linux的啟動文件放在哪個區

一般都在 /boot目錄下
通常人們習慣性的設置自啟動程序(編譯安裝尤其重要)的話一般編輯
/etc/rc.d/rc.local
文件,假如相關啟動參數

『叄』 Linux開機啟動文件rc.local無法執行怎麼辦

第一種情況:當centOS隨機啟動文件 /etc/rc.local失效時請按如下修改:

1、echo /etc/rc.local >>/etc/profile && source /etc/profile註:當執行生效會看到效果(/etc/profile文件在每個用戶登錄時會首先檢查並執行)

2、reboot註:重新啟動檢測是否生效

第二種情況:echo /etc/rc.local >>~/.bash_profile && source /etc/profile。

第三種情況:在 /etc/init.d 目錄下增加對應程序啟動腳本,然後重啟測試,內容如下:chkconfig --add 腳本名(將該腳本注冊到系統服務,此時直接輸入腳本可以直接運行)。

chkconfig 腳本名 on(將該服務加入隨系統開機啟動),添加自啟動,必須在腳本裡面加入chkconfig 啟動順序,才能加入進去。

/etc/rc.local 中部分命令無法執行。

在linux系統中添加隨系統啟動而自動運行的服務,只需在/etc/rc.local 腳本文件中添加即可,當運行的命令或程序不帶路徑時,例如:

#!/bin/bash

distccd --user nobody --allow 10.10.98.0/24 --log-file=/var/log/distcc.log --verbose --daemonloadavg -s 10.10.98.20 >/dev/null 2>&1

注意,distccd、loadavg命令存放在/usr/local/bin/目錄下

在系統執行這些命令時將報錯,無法正常執行!

由於在執行rc.local腳本時,PATH環境變數未全部初始化,目錄/usr/local/bin/ 需在執行/etc/profile 後才被添加到環境變數PATH中。

解決方法:在 /etc/rc.local 執行 /usr/local/bin/ 目錄中的命令需要使用絕對路徑。

『肆』 linux哪一個目錄存放啟動引導文件

/etc/rc.d/init.d/ 這個是啟動腳本,ubuntu和redhat這兩種linux系統都是執行這個腳本。

『伍』 在linux中存放啟動的配置文件和腳本的目錄在哪裡

公共的啟動配置文件(系統級的)
/etc/bashrc 存有整個系統的別名和功能(發現Ubuntu是/etc/bash.bashrc)
/etc/profile 存有整個系統的環境參數和啟動程序
個人的啟動配置文件(用戶級的)
決定用戶自己所獨有的一些配置
$HOME/.bashrc 存有用戶別名和功能
$HOME/.bash_profile 存有用戶環境參數和啟動程序(Ubuntu是~/.profile)
$HOME/.bash_logout 存有退出系統時的結束方式
$HOME /.inputrc 存有主要綁定數值和其他位元數值(Ubuntu默認只有/etc/inputrc)

『陸』 linux系統服務啟動腳本在哪個目錄下

「/etc/init.d/koalra:
line
7:
service.sh:
command
not
found
---試一試給出service.sh的完整路徑,在這個啟動腳本中,path變數應該沒有包括service.sh的所在路內徑,所以容shell會因為找不到service.sh而報錯
/etc/init.d/koalra:
line
10:
[:
missing
`]'
---右方括弧]與前面的內容之間應該有至少一個空格,你的腳本中]與之前的內容是連貫的,所以shell沒有識別出這個右方括弧
error:/usr/local/szt0901-koalra/
not
found
..」
-----
這個應該還是路徑的問題,你確定路徑寫對了?

『柒』 Linux系統啟動及定製過程

CentOS的啟動流程總體順序如下:

POST --> Boot Sequence --> bootloader(MBR) --> Kernel --> 載入rootfs --> switchroot --> /sbin /init --> (配置文件:/etc/inittab, /etc/init/*.conf) --> 根據init配置文件設置默認運行級別 --> 運行系統初始化腳本/etc/rc.d/rc.sysinit,完成系統初始化 --> 開啟或關閉用戶選定的對應運行級別下所對應的服務 --> 啟動終端,列印登錄提示符。

註:前面加粗部分代表內核空間的系統啟動流程,後面未加粗部分代表用戶空間的系統啟動流程。

第一步:硬體啟動過程

POST加電自檢

主要實現的功能是檢測各個外圍硬體設備是否存在而且能夠正常運行起來,實現這一自檢功能的是固化在主板上的ROM(主要代表為CMOS)晶元上的BIOS(Basic Input/Output System)程序;例如BIOS會檢測CPU、Memory以及I/O設備是否能夠正常運行,如果是個人計算機的話可能還會檢測一下顯示器。只要一通電,CPU就會自動去載入ROM晶元上的BIOS程序,是這樣來實現的。而檢測完成之後就進行硬體設備的初始化。

選擇啟動設備以載入MBR

主要實現的功能是選擇要啟動的硬體設備,選擇了之後就可以讀取這個設備上位於MBR里頭的bootloader了。這一步的實現是這樣的:根據BIOS中對啟動順序的設定,BIOS自己會依次掃描各個引導設備,然後第一個被掃描到具有引導程序(bootloader)的設備就被作為要啟動的引導設備。

MBR(Main Boot Record),是硬碟的0柱面,0磁軌、1扇區(第一個扇區),稱為主引導扇區,也稱為主引導記錄。它由三部分組 成:主引導程序(BootLoader)、硬碟分區表DPT(Disk Partition table)和硬碟有效標志(55AA)。
註:硬碟默認一個扇區大小為512位元組。
第一部分,主引導程序(BootLoader)佔446個位元組,負責從活動分區中裝載,並運行系統引導程序。
第二部分,硬碟分區表DPT佔64個位元組,有4個分區表項,每個分區表項佔16個位元組,硬碟中分區有多少以及每一個分區的大小都記 錄在其中。
第三部分,硬碟有效標志,佔2個位元組,固定為55AA。如果這個標志位0xAA55,就認為這個是MB

第二步:GRUB引導階段

不同的系統有不同的主引導程序(BootLoader)。Windows使用的是NTLDR(NT Loader,Windows NT系列操作系統)、Bootmgr(Boot Manager,Windows Vista,7,8,10),Linux一般使用的是grub(也叫grub legacy)和grub2。GRUB程序載入執行並引導kernel(內核)程序,其中有三個階段,Grub引導階段的文件都在/boot/grub/目錄下。

stage1: 這一階段執行的就是系統安裝時預先寫入到MBR的Bootloader程序,即是存放在MBR的前446位元組里的程序。它的任務僅是讀取(載入)硬碟的0柱面,0磁軌,2扇區的內容(/boot/grub/stage1)並執行。

stage1.5: 這一階段是Stage1階段和Stage2階段的橋梁,功能是載入stage2所在分區的文件系統驅動,讓stage1中的bootloader能識別stage2所在分區的文件系統,此後grub程序便有能力去訪問/boot/grub/stage2。

stage2: 這一階段讀取並解析grub的配置文件/boot/grub/grub.cnf,根據配置文件載入內核鏡像到內存中,通過initrd程序建立虛擬根文件系統,最後調用(轉交)內核。

第三步:內部引導階段

載入內核,核心開始解壓,啟動一些最核心的程序。為了讓內核足夠的輕小,硬體驅動並沒放在內核文件裡面。系統僅探測可識別到的所有硬體設備,載入硬體驅動程序,即載入真正的根文件系統所在設備的驅動程序(有可能會藉助於ramdisk載入驅動),以只讀方式掛載根文件系統,運行用戶空間的第一個應用程序:/sbin/init。

第四步:init初始化階段(系統初始化階段)

雖然CentOS 5、CentOS 6以及CentOS 7的/etc/init配置文件內容各不相同,但總體的啟動流程相同:/sbin/init --> 根據/etc/inittab配置文件設置默認運行級別 --> 運行系統初始化腳本/etc/rc.d/rc.sysinit,完成系統初始化 --> 關閉或啟動用戶選定的默認運行級別所對應的服務 。

對於CentOS 5來說,初始化程序init是SysV init,其配置文件為:/etc/inittab; 對於CentOS 6來說,初始化程序init是upstart,其配置文件為:/etc/inittab, /etc/init/ .conf,也就是upstart將配置文件拆分成多個,在/etc/init/目錄下以conf結尾的都是upstart風格的配置文件,而/etc/inittab僅用於設置默認運行級別; 對於CentOS 7來說,初始化程序init是systemd,其配置文件:/usr/lib/system/systemd/, /etc/systemd/system/

具體執行過程:/sbin/init程序會讀取/etc/inittab文件確認運行級別,然後執行/etc/rc.d/rc腳本,根據確認的運行級別啟動對應/etc/rc.d/rc#.d/目錄下的服務(#為0~6),與此同時執行系統初始化腳本/etc/rc.sysinit(軟鏈接,指向/etc/rc.d/rc.sysinit),還會載入/etc/rc.local(軟鏈接,指向/etc/rc.d/rc.local文件)用戶自定義服務(腳本)。

CentOS7中初始化進程變為了systemd,systemd即為system daemon,是Linux下的一種init軟體,開發目標是提供更優秀的框架以表示系統服務間的依賴關系,並依此實現系統初始化時服務的並行啟動,同時達到降低Shell系統開銷的效果,最終代替現在常用的System V與BSD風格的init程序。與多數發行版使用的System V風格的init相比,systemd採用了以下的新技術:A.採用Socket激活式與匯流排激活式服務,以提高相互依賴的各服務的並行運行性能;B.用Cgroup代替PID來追蹤進程,即使是兩次fork之後生成的守護進程也不會脫離systemd的控制。

第五步:啟動終端

根據前面獲取的運行級別來啟動終端,mingetty程序是用於啟動終端的,它會調用登錄程序login,這樣就能顯示出登錄提示符了,類似mingetty這種用於打開終端的程序還有getty等。而如果默認運行級別為5,則會打開圖形界面。

第一步:硬體啟動過程

這一步和CentOS6差不多,詳細請看1.1內容。

第二步:GRUB引導階段

從這一步開始,CentOS6和CentOS7的啟動流程區別開始展現出來了。CentOS7的主引導程序使用的是grub2,執行過程是先載入boot.img、core.img兩個鏡像,再載入MOD模塊文件,把grub2程序載入執行,接著解析配置文件/boot/grub/grub.cfg,根據配置文件載入內核鏡像到內存,之後構建虛擬根文件系統,最後轉到內核。

CentOS7中使用命令進行配置,而不直接去修改配置文件了。grub.cfg配置文件開頭注釋部分說明了由/etc/grub.d/目錄下文件和/etc/default/grub文件組成。改好配置後都需要使用命令grub2-mkconfig -o /boot/grub2/grub.cfg,將配置文件重新生成。

第三步:內部引導階段

這一步與CentOS6也差不多,載入驅動,切換到真正的根文件系統,唯一不同的是執行的初始化程序變成了/usr/lib/systemd/systemd。

第四步:init初始化階段(系統初始化階段)

CentOS7中我們的初始化進程變為了systemd。執行默認target配置文件/etc/systemd/system/default.target(這是一個軟鏈接,與默認運行級別有關)。然後執行sysinit.target來初始化系統和basic.target來准備操作系統。接著啟動multi-user.target下的本機與伺服器服務,並檢查/etc/rc.d/rc.local文件是否有用戶自定義腳本需要啟動。最後執行multi-user下的getty.target及登錄服務,檢查default.target是否有其他的服務需要啟動。

注意:/etc/systemd/system/default.target指向了/lib/systemd/system/目錄下的graphical.target或multiuser.target。而graphical.target依賴multiuser.target,multiuser.target依賴basic.target,basic.target依賴sysinit.target,所以倒過來執行。

unit對象:unit表示不同類型的systemd對象,通過配置文件進行標識和配置;文件中主要包含了系統服務、監聽socket、保存的系統快照以及其他與init相關的信息。(也就是CentOS6中的伺服器啟動腳本)

第五步:啟動終端

systemd執行sysinit.target
systemd啟動multi-user.target下的本機與伺服器服務
systemd執行multi-user.target下面的/etc/rc.d/rc.local
Systemd執行multi-user.target下的getty.target及登錄服務
getty.target是啟動終端的systemd對象。如果到此步驟,系統沒有指定啟動圖形桌面,到此就可以結束了,如果需要啟動圖形界面,要在此基礎上啟動桌面程序。

從 CentOS 7 版本之後,系統開始用 systemd 實現init進程,系統啟動和伺服器守護進程管理器功能,負責在系統啟動或運行時,激活系統資源,伺服器進程和其它進程。

unit表示不同類型的systemd對象,通過配置文件進行標識和配置;文件中主要包含了系統服務、監聽socket、保存的系統快照以及其它與init相關的信息。

3.2 system unit文件格式

/usr/lib/systemd/system:發行版打包者使用,每個服務最主要的啟動腳本設置,類似於之前的/etc/init.d/

/etc/systemd/system:系統管理員和用戶使用,管理員建立的執行腳本,類似於/etc/rcN.d/Sxx的功能,比上面目錄優先運行

/lib/systemd/system::ubutun的對應目錄

/run/systemd/system:系統執行過程中所產生的服務腳本,比上面目錄優先運行

unit 格式說明:

service unit file文件通常由三部分組成:

Unit段的常用選項:

Service段的常用選項:

Install段的常用選項:

注意:對於新創建的unit文件,或者修改了的unit文件,要通知systemd重載此配置文件,而後可以選擇重啟。

首先在啟動界面按e編輯啟動參數,

將ro參數更改為rw init=/sysroot/bin/sh,按ctr + x啟動系統

按下圖執行命令更改root密碼

閱讀全文

與ads的linux啟動文件相關的資料

熱點內容
區域網內共享文件夾 瀏覽:389
java介面能實現介面嗎 瀏覽:460
怎麼把文件拖拽到ps里 瀏覽:245
繪畫編程是學的什麼 瀏覽:919
小蟻微單m1升級版 瀏覽:646
有什麼app會被人收購 瀏覽:709
經濟開發區數據標定員考試考什麼 瀏覽:145
類似於vb編程的有哪些語言 瀏覽:684
數據驗證對話框中選項有哪些 瀏覽:218
word文件半隱半現 瀏覽:971
xml文件如何解析 瀏覽:391
pcapng格式的文件用什麼打開 瀏覽:530
百度網盤的文件怎麼傳入u盤 瀏覽:781
梨子linux 瀏覽:30
office2013找不到文件 瀏覽:877
msp430獨立按鍵程序 瀏覽:592
如何固定表格數據的位數 瀏覽:544
編程貓項目分析的思路有哪些 瀏覽:927
編程能玩什麼游戲 瀏覽:13
怎麼用win10鏡像 瀏覽:552

友情鏈接