Linux 內核、Shell 簡述

前言

  做爲一名剛剛開始工做的小白,實習一段時間事後發現Linux 真的很重要。可以熟練使用Linux 不只能夠提升本身的工做效率,還很炫酷。因此決定系統的學習一下Linux。。。git

1、Shell:Linux 的外衣

  用過Linux 系統的朋友應該或多或少都據說過shell,但咱們不必定對shell 創建過清楚的認知。shell

1.1 Shell 的定義編程

  Shell 是一種應用程序,一種具有特殊功能的程序:它提供了用戶與內核進行交互操做的一種接口。應用程序你們應該都不陌生,它是一堆在硬盤中的二進制文件,執行應用就至關於執行二進制文件中的代碼。什麼是內核?後面再講。交互操做指的就是咱們在Linux 中輸的那些命令來讓Linux 作事,好比:bash

輸入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:maven

$ 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的名字。工具

Shell 是一種腳本語言,採用解釋執行,天然它的優點就比較"解釋"類型:性能

  • 語法和結構一般比較簡單
  • 學習和使用比較簡單
  • 不用編譯
  • 程序開發產能優於性能
  • ...

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

2、內核:Linux 的心臟

  就像人與心臟的關係同樣,Linux 內核並非操做系統,它是一個完整系統的組成部分。Linux 內核控制着Linux 操做系統的基本硬件,具備不少功能,如文件管理、內存、多線程、網絡 等等。

  下面咱們就從打開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 系統》-第三章
相關文章
相關標籤/搜索