<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Antony 筆記：技術原理與實務經驗 – Boot</title><link>https://blog.kubeantony.com/principles/linux/boot/</link><description>Recent content in Boot on Antony 筆記：技術原理與實務經驗</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><lastBuildDate>Fri, 20 May 2022 00:42:34 +0800</lastBuildDate><atom:link href="https://blog.kubeantony.com/principles/linux/boot/index.xml" rel="self" type="application/rss+xml"/><item><title>Linux startup Process 開機流程</title><link>https://blog.kubeantony.com/principles/linux/boot/linux-startup-process-%E9%96%8B%E6%A9%9F%E6%B5%81%E7%A8%8B/</link><pubDate>Fri, 20 May 2022 00:42:34 +0800</pubDate><guid>https://blog.kubeantony.com/principles/linux/boot/linux-startup-process-%E9%96%8B%E6%A9%9F%E6%B5%81%E7%A8%8B/</guid><description>
&lt;hr&gt;
&lt;h2&gt;開機流程&lt;span class="hx:absolute hx:-mt-20" id="開機流程"&gt;&lt;/span&gt;
&lt;a href="#%e9%96%8b%e6%a9%9f%e6%b5%81%e7%a8%8b" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;先按開機鍵，
電腦第一個啟動的是BIOS或UEFI，兩者最大的差別是UEFI滑鼠可以動，然後會執行自我開機檢測，BIOS會來檢測硬體周邊的裝置，包含CPU,記憶體,顯卡,網卡和硬碟&amp;hellip;等，假如記憶體插錯，開機就有可能會聽到連續逼的聲音，如果裝置都正常就可以聽到逼一聲，代表開機正常．&lt;/p&gt;
&lt;p&gt;接下來會去讀取可開機裝置的MBR，可開機裝置指的是光碟,硬碟和隨身碟&amp;hellip;等那些，只要他能開機，在BIOS有設定，他就會嘗試去找可開機裝置的第一個磁區，他的大小512byte，其中446byte是Boot loader(儲存開機管理程式)，像alpine linux用的是syslinux，ubuntu linux用的是GRUB2，tinycore用的是isolinux&lt;/p&gt;
&lt;p&gt;而Boot Loader最重要的是把kernel以及initramfs載入到記憶體裡面，把initramfs的記憶體位址告訴kernel，kernel才能找到，之後把控制權給linux kernel&lt;/p&gt;
&lt;p&gt;linux kernel拿到控制權後，一樣會做一件事情，就是檢測電腦週邊的硬體是不是都正常，之後會將initramfs的system解壓縮，並且掛載起來，目的是為了要取得真正的檔案系統的驅動程式，因為假如我們是用sda硬碟，就會要有sda硬碟的驅動程式，因為kernel一開始不知道這些驅動程式，所以要先掛載臨時的檔案系統，在取得真正的檔案系統後，再把真正的檔案系統掛載上來，&lt;/p&gt;
&lt;p&gt;確定都ok後，他就會啟動第一支程式，叫做init的process，在ubuntu用的是systemd，而alpine用的是openrc&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Bash Startup&lt;span class="hx:absolute hx:-mt-20" id="bash-startup"&gt;&lt;/span&gt;
&lt;a href="#bash-startup" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://i.imgur.com/7KBCCfG.png" alt="" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;使用者登入成功後，以bash shell為例&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;系統會先判斷是交互式的貝殼程式還是非交互式，交互式的貝殼程式（interactive ）就是可以讓我們打命令去執行的貝殼程式，而非交互式(non-interactive )就是像我們寫的bash script ，當系統判定我們是交互式的shell 之後，&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;就會繼續判斷是login shell 還是 non-login shell ，意思就是說要不要登入帳號密碼，這邊我們是一定會登入，&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;以上就會有4種shell，&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;interactive shell&lt;/li&gt;
&lt;li&gt;non-interactive shell&lt;/li&gt;
&lt;li&gt;login shell&lt;/li&gt;
&lt;li&gt;non-login shel&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;系統會去看bash這個指令後面有沒有加參數 &lt;code&gt;-- noprofile&lt;/code&gt; ，如果有加這個參數，系統就不會讀取/etc/profile 這個檔案，也不會讀取~/.bash_profile, ~/.bash_login, ~/.profile 這些檔案&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;--noprofile&lt;/code&gt;
不會讀取系統範圍的啟動文件 /etc/profile 或任何個人初始化文件 &lt;code&gt;~/.bash_profile&lt;/code&gt;、&lt;code&gt;~/.bash_login&lt;/code&gt; 或 &lt;code&gt;~/.profile&lt;/code&gt;。
默認情況下，bash 在作為登錄 shell 調用時會讀取這些文件（請參閱下面的 INVOCATION）。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;正常情況下，一定會讀取/etc/profile&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;來到使用者的家目錄，按照順序讀取&lt;code&gt;~/.bash_profile&lt;/code&gt;，&lt;code&gt;~/.bash_login&lt;/code&gt;和&lt;code&gt;~/.profile&lt;/code&gt;，通常是最後一個&lt;code&gt;~/.profile&lt;/code&gt; 這個檔案會有&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果最後還有存在~/.bashrc 一樣會去讀取。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h6&gt;tags: &lt;code&gt;Linux&lt;/code&gt;&lt;span class="hx:absolute hx:-mt-20" id="tags-linux"&gt;&lt;/span&gt;
&lt;a href="#tags-linux" class="subheading-anchor" aria-label="此章節的永久連結"&gt;&lt;/a&gt;&lt;/h6&gt;</description></item></channel></rss>