Linux 核心、Shell 簡述

言技發表於2019-04-14

前言

  作為一名剛剛開始工作的小白,實習一段時間過後發現Linux 真的很重要。能夠熟練使用Linux 不僅可以提高自己的工作效率,還很炫酷。所以決定系統的學習一下Linux。。。

一、Shell:Linux 的外衣

  用過Linux 系統的朋友應該或多或少都聽說過shell,但我們不一定對shell 建立過清楚的認知。

1.1 Shell 的定義

  Shell 是一種應用程式,一種具備特殊功能的程式:它提供了使用者與核心進行互動操作的一種介面。應用程式大家應該都不陌生,它是一堆在硬碟中的二進位制檔案,執行應用就相當於執行二進位制檔案中的程式碼。什麼是核心?後面再講。互動操作指的就是我們在Linux 中輸的那些命令來讓Linux 做事,比如:

輸入ls , 代表展示當前目錄下的檔案/目錄
# user @ user-computer in ~ [11:31:09]
$ ls
Desktop    Downloads  Movies     OpenSource Public     project
Documents  Library    Music      Pictures   maven      sh
複製程式碼

  從定義中我們可以理解到Shell 就是一種讓你可以和Linux 作業系統對話的一種應用程式。在使用者登入Linux 系統後,它就會調入系統記憶體中執行,它可以把使用者輸入的命令轉化為計算機可以理解的機械碼給核心執行

網圖:權侵刪

1.2 簡單瞭解一下Shell

  通過我前面的描述,我們應該知道Shell 是個什麼東西了。但就像聊天工具有很多一樣,Linux 中的Shell 應用也不止一種,通過命令cat /etc/shells 來檢視當前Linux 中的Shell:

$ cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash 
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
複製程式碼

 bash指令碼功能非常強大,尤其是在處理自動迴圈或大的任務方面可節省大量的時間。bash是許多Linux平臺的內定Shell。本人採用的zsh ,因為它集合了很多比較好用的外掛,類似git 的簡易命令、程式碼自動補全什麼的,比較適合我這種記不住命令的弱雞~。切換Linux 預設Shell 的命令:chsh -s /bin/Shell的名字。

Linux  核心、Shell 簡述

Shell 是一種指令碼語言,採用解釋執行,自然它的優勢就比較"解釋"型別:

  • 語法和結構通常比較簡單
  • 學習和使用比較簡單
  • 不用編譯
  • 程式開發產能優於效能
  • ...

  至於Shell 操作、原理的深入淺出這裡就不說了(其實我不會~)。前面我們只說了怎麼和Linux 溝通,但我們並不瞭解Linux 到底怎麼理解和處理這些命令的。下面我會通過QQ 的啟動到傳送訊息來講解我對Linux 核心的理解。以下內容,學習總結至極客時間-《趣談Linux 作業系統》,一個很好的專欄,推薦購買學習!

二、核心:Linux 的心臟

  就像人與心臟的關係一樣,Linux 核心並不是作業系統,它是一個完整系統的組成部分。Linux 核心控制著Linux 作業系統的基本硬體,具有很多功能,如檔案管理、記憶體、多執行緒、網路 等等。

Linux  核心、Shell 簡述

  下面我們就從開啟QQ 這個例子來講一講Linux 核心中的一些操作關係。

1⃣️裝置子系統

裝置子系統,主要是管理系統裝置的系統。像滑鼠、鍵盤是輸入裝置,顯示卡、顯示器是輸出裝置。滑鼠移動,就會根據滑鼠靈敏度在顯示器上移動對應的距離。鍵盤輸入字元'a' ,就會在焦點目標中顯示字元'a'。

  我們可以用現有的裝置,移動尋找QQ 這個應用,點選執行。

2⃣️檔案子系統

  在執行之前,我們肯定會去騰訊官網下載QQ 。下載的時候它會提醒你下載到那個目錄,安裝的時候也會提醒安裝路徑。安裝成功後,應用檔案就會存放在硬碟上。但是硬碟的儲存大小都是固定,肯定不能因為我今天裝了個QQ 儲存不夠就把我昨天剛剛寫好的程式碼覆蓋掉了吧。。。所以需要用檔案系統來管理檔案的儲存

3⃣️程式管理系統

  QQ 裝好後,我們來開啟它。前面說過:應用程式以二進位制的形式儲存在硬碟上。當作業系統拿到 QQ 的二進位制執行檔案的時候,就可以執行這個檔案了。QQ 的二進位制檔案是靜態的,稱為程式(Program),而執行起來的 QQ,是不斷進行的,稱為程式(Process)。

  程式是不能隨便操作的,需要Linux 排程。任何一個程式要想執行起來,就需要呼叫系統呼叫,建立程式。程式的執行也需要分配 CPU 進行執行,也就是按照程式裡面的二進位制程式碼執行, 所以我們需要一個程式管理系統(Process Management Subsystem)來管理程式。有時候應用開多了,感覺卡頓,可能就是因為CPU 來不及執行程式程式碼的緣故。

4⃣️記憶體管理子系統

  程式在執行的過程中會產生一些資料,就像你聊天會產生聊天記錄一樣。這些資料有可能是機密的,你不想讓別人看到或者不想被別的修改。比如你在部落格上寫了1W 字的文章,切換看了下QQ,之前的就都不見,換誰也受不了吧~,所以作業系統中,不同的程式有不同的記憶體空間,但是整個電腦記憶體就這麼點兒,所以需要統一的管理和分配,這就需要記憶體管理子系統(Memory Management Subsystem)

5⃣️網路子系統

 你在QQ 上和別人聊天的時候,傳送簡訊,需要傳送網路請求。Linux 會通過️網路子系統來管理這些請求的傳送和接收。

總結與參考

  前面大概講了一下Linux 與Shell 的關係,Linux 核心的元件系統的大致作用。初學Linux ,有錯誤或者優化的地方謝謝各位看官指正?。文章參考了:

  • 《Linux Shell 程式設計 從初學到精通》
  • 極客時間-《趣談Linux 系統》-第三章

相關文章