linux的開/關機腳本執行順序和自啓動腳本實踐

linux

Linux是一種開源電腦操做系統內核。它是一個用C語言寫成,符合 POSIX標準的 類Unix操做系統。

90年代初期Linux開始出現的時候,僅僅是以源代碼形式出現,用戶須要在其餘操做系統下進行編譯才能使用。後來出現了一些正式版本。目前最流行的幾個正式版本有:SUSE、RedHat、Fedora、Debian、Ubuntu、CentOS、Gentoo,等等。用戶可根據本身的經驗和喜愛選用合適的Linux發行版。
原先Linus TorvaldsLinux置於一個禁止任何商業行爲的條例之下,但以後改用GNU通用公共許可證第二版。該協議容許任何人對軟件進行修改或發行,包括商業行爲,只要其遵照該協議,全部基於Linux的軟件也必須以該協議的形式發表,並提供源代碼。html

對於開發人員而言,不少時候都會接觸到LINUX系統,甚至要去維護和開發,因此對開機/關機過程須要必定的認識,特別是服務器大部分都是linux系統的時候,咱們重啓服務、切換服務等都須要保障服務的功能不能中斷,這就更須要對linux的運行過程有深刻的認識,本文只是記錄一小部分過程。linux

Linux操做系統運行級別

Linux 使用的是基於運行級(run-levels) 概念的稱爲 SysVinit 的專用啓動工具。 它在不一樣的系統上多是徹底不同的, 因此不能認爲一個腳本在某個 Linux 發行版上工做正常。shell

SysVinit以運行級的模式來工做,通常有 7 (從 0 到 6)個運行級 (實際上能夠有更多的運行級,但都是用於特殊狀況並且通常使用不到。 參見 init(8)以得到更多信息),每一個運行級對應於一套設定好的任務, 當啓動一個運行級的時候, 計算機就須要執行相應的任務。 默認的運行級是 3,下面是對不一樣運行級的描述:安全

0: 關閉計算機
1: 單用戶模式
2: 無網絡多用戶模式
3: 有網絡多用戶模式
4: 保留做自定義,不然同運行級 3 
5: 同運行級 4,通常用於圖形界面(GUI)登陸(如 X的 xdm 或 KDE的 kdm) 
6: 重啓動計算機

可使用runlevel查看,也能夠在/etc/inittab文件中看到如下:bash

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:3:initdefault:

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

也就是說咱們系統的運行級別目前是3,那麼須要看的就是/etc/rc3.d下的內容,其實裏面都是軟鏈接,全部的軟鏈指向/etc/init.d/中的腳本文件,命名規範以下:服務器

[K|S][number][service name] --> ../init.d/servicename
      S 表示 Start,開啓服務
      [number]表示的是該腳本的運行優先級,number越小,腳本的運行優先級就越高
      [service name]表示的是服務的名稱。
      所以咱們若是須要定義一個服務啓動的優先級(順序),則需指定腳本的number便可。

開機過程

  1. 加載內核網絡

    打開電腦電源,開始讀取 BIOS 並進行主機的自我測試;透過 BIOS 取得第一個可開機裝置,讀取主要開機區 (MBR) 取得開機管理程式;
    LILO啓動以後,若是你選擇了Linux做爲準備引導的操做系統,第一個被加載的東西就是內核。請記住此時的計算機內存中還不存在任何操做系統,PC(由於它們自然的設計缺陷)也尚未辦法存取機器上所有的內存。所以,內核就必須完整地加載到可用RAM的第一個兆字節以內。爲了實現這個目的,內核是被壓縮了的。這個文件的頭部包含着必要的代碼,先設置CPU進入安全模式(以此解除內存限制),再對內核的剩餘部分進行解壓縮。
  2. 執行內核工具

    內核在內存中解壓縮以後,就能夠開始運行了。此時的內核只知道它自己內建的各類功能,也就是說被編譯爲模塊的內核部分還不能使用。最基本的是,內核必須有足夠的代碼設置本身的虛擬內存子系統和根文件系統(一般就是ext2文件系統)。一旦內核啓動運行,對硬件的檢測就會決定須要對哪些設備驅動程序進行初始化。從這裏開始,內核就可以掛裝根文件系統(這個過程相似於Windows識別並存取C盤的過程)。內核掛裝了根文件系統以後,將啓動並運行一個叫作init的程序。
  3. init進程測試

    init 程式開始執行系統初始化,最早讀取 /etc/inittab文件中的配置,配置中通常是先執行下 /etc/rc.d/rc.sysinit,而後執行 /etc/init.d/functions ,設置環境變量等,同時讀取 runlevel的配置級別, 對於嵌入式開發而言,在執行rcN.d以前會有/etc/init.d/rcS 單用戶模式啓動腳本的執行
    依據 init 的設定的 initdefault進行 daemon start ( /etc/rc.d/rc[0-6].d/*),依次執行腳本,啓動服務。關機時依次關閉服務。
    rc0.d~rc.6.d文件夾下分別對應的是操做系統 0-6級運行的狀態下須要執行的腳本。在這些文件夾下的文件,都是軟鏈文件,指向指定位置的腳本,這些軟鏈都是指向同一個文件夾 /etc/init.d/的腳本文件,
  4. 載入本機設定 (/etc/rc.d/rc.local)this

    rc.local文件,

/etc/profile文件。這個文件是系統啓動時,任何用戶登陸時執行的文件。任何用戶登陸前,root用戶也會執行一遍。

~/.bash_profile文件。這個文件每一個用戶都有。它在用戶登陸時自動執行,擁有用戶的權限。它export的環境變量對該用戶隨後啓動的進程都有效。

自啓動腳本實踐

  • 若是用戶須要開機自動以root權限執行一些腳本,那麼最好的方法是編輯/etc/rc.d/rc.local文件。
  • 若是每個用戶登陸時都應該執行的腳本,如設置一些環境變量。那麼應該修改/etc/profile文件。
  • 若是某一個特定用戶登陸時應該執行特定的腳本,如設置該用戶特定的環境變量,應該修改~/.bash_profile文件。
============
/etc/profile
============
此文件爲系統的每一個用戶設置環境信息,當用戶第一次登陸時,該文件被執行.
並從/etc/profile.d目錄的配置文件中搜集shell的設置.

===========
/etc/bashrc
===========
爲每個運行bash shell的用戶執行此文件.當bash shell被打開時,該文件被讀取.

===============
~/.bash_profile
===============
每一個用戶均可使用該文件輸入專用於本身使用的shell信息,當用戶登陸時,該
文件僅僅執行一次!默認狀況下,他設置一些環境變量,執行用戶的.bashrc文件.

=========
~/.bashrc
=========
該文件包含專用於你的bash shell的bash信息,當登陸時以及每次打開新的shell時,該文件被讀取.

==========
~/.profile
==========
在Debian中使用.profile文件代 替.bash_profile文件
.profile(由Bourne Shell和Korn Shell使用)和.login(由C Shell使用)兩個文件是.bash_profile的同義詞,目的是爲了兼容其它Shell。在Debian中使用.profile文件代 替.bash_profile文件。

==============
~/.bash_logout
==============當每次退出系統(退出bash shell)時,執行該文件.

Linux如何實現開機啓動程序詳解

相關文章
相關標籤/搜索