1.1. 操作系統簡介
我通過以下四點介紹什么是操作系統:
- 操作系統(Operating System,簡稱 OS)是管理計算機硬件與軟件資源的程序,是計算機的基石。
- 操作系統本質上是一個運行在計算機上的軟件程序 ,用于管理計算機硬件和軟件資源。 舉例:運行在你電腦上的所有應用程序都通過操作系統來調用系統內存以及磁盤等等硬件。
- 操作系統存在屏蔽了硬件層的復雜性。 操作系統就像是硬件使用的負責人,統籌著各種相關事項。
- 操作系統的內核(Kernel)是操作系統的核心部分,它負責系統的內存管理,硬件設備的管理,文件系統的管理以及應用程序的管理。
內核(Kernel)在后文中會提到。
1.2. 操作系統簡單分類
1.2.1. Windows
目前最流行的個人桌面操作系統 ,不做多的介紹,大家都清楚。界面簡單易操作,軟件生態非常好。
玩玩電腦游戲還是必須要有 Windows 的,所以我現在是一臺 Windows 用于玩游戲,一臺 Mac 用于平時日常開發和學習使用。
1.2.2. Unix
最早的多用戶、多任務操作系統 。后面崛起的 Linux 在很多方面都參考了 Unix。
目前這款操作系統已經逐漸逐漸退出操作系統的舞臺。
1.2.3. Linux
Linux 是一套免費使用、開源的類 Unix 操作系統。 Linux 存在著許多不同的發行版本,但它們都使用了 Linux 內核 。
嚴格來講,Linux 這個詞本身只表示 Linux 內核,在 GNU/Linux 系統中,Linux 實際就是 Linux 內核,而該系統的其余部分主要是由 GNU 工程編寫和提供的程序組成。單獨的 Linux 內核并不能成為一個可以正常工作的操作系統。
很多人更傾向使用 “GNU/Linux” 一詞來表達人們通常所說的 “Linux”。
1.2.4. Mac OS
蘋果自家的操作系統,編程體驗和 Linux 相當,但是界面、軟件生態以及用戶體驗各方面都要比 Linux 操作系統更好。
1.3. 操作系統的內核(Kernel
我們先來看看維基百科對于內核的解釋,我覺得總結的非常好!
內核(英語:Kernel,又稱核心)在計算機科學中是一個用來管理軟件發出的數據 I/O(輸入與輸出)要求的電腦程序,將這些要求轉譯為數據處理的指令并交由中央處理器(CPU)及電腦中其他電子組件進行處理,是現代操作系統中最基本的部分。它是為眾多應用程序提供對計算機硬件的安全訪問的一部分軟件,這種訪問是有限的,并由內核決定一個程序在什么時候對某部分硬件操作多長時間。 直接對硬件操作是非常復雜的。所以內核通常提供一種硬件抽象的方法,來完成這些操作。有了這個,通過進程間通信機制及系統調用,應用進程可間接控制所需的硬件資源(特別是處理器及 IO 設備)。
早期計算機系統的設計中,還沒有操作系統的內核這個概念。隨著計算機系統的發展,操作系統內核的概念才漸漸明晰起來了!
簡單概括兩點:
- 操作系統的內核(Kernel)是操作系統的核心部分,它負責系統的內存管理,硬件設備的管理,文件系統的管理以及應用程序的管理。
- 操作系統的內核是連接應用程序和硬件的橋梁,決定著操作系統的性能和穩定性。
1.4. 中央處理器(CPU,Central Processing Unit)
關于 CPU 簡單概括三點:
- CPU 是一臺計算機的運算核心(Core)+控制核心( Control Unit),可以稱得上是計算機的大腦。
- CPU 主要包括兩個部分:控制器+運算器。
- CPU 的根本任務就是執行指令,對計算機來說最終都是一串由“0”和“1”組成的序列。
1.5. CPU vs Kernel(內核)
很多人容易無法區分操作系統的內核(Kernel)和中央處理器(CPU),你可以簡單從下面兩點來區別:
- 操作系統的內核(Kernel)屬于操作系統層面,而 CPU 屬于硬件。
- CPU 主要提供運算,處理各種指令的能力。內核(Kernel)主要負責系統管理比如內存管理,它屏蔽了對硬件的操作。
下圖清晰說明了應用程序、內核、CPU 這三者的關系。
1.6. 系統調用
介紹系統調用之前,我們先來了解一下用戶態和系統態。
根據進程訪問資源的特點,我們可以把進程在系統上的運行分為兩個級別:
- 用戶態(user mode) : 用戶態運行的進程或可以直接讀取用戶程序的數據。
- 系統態(kernel mode): 可以簡單的理解系統態運行的進程或程序幾乎可以訪問計算機的任何資源,不受限制。
說了用戶態和系統態之后,那么什么是系統調用呢?
我們運行的程序基本都是運行在用戶態,如果我們調用操作系統提供的系統態級別的子功能咋辦呢?那就需要系統調用了!
也就是說在我們運行的用戶程序中,凡是與系統態級別的資源有關的操作(如文件管理、進程控制、內存管理等),都必須通過系統調用方式向操作系統提出服務請求,并由操作系統代為完成。
這些系統調用按功能大致可分為如下幾類:
- 設備管理 :完成設備的請求或釋放,以及設備啟動等功能。
- 文件管理 :完成文件的讀、寫、創建及刪除等功能。
- 進程控制 :完成進程的創建、撤銷、阻塞及喚醒等功能。
- 進程通信 :完成進程之間的消息傳遞或信號傳遞等功能。
- 內存管理 :完成內存的分配、回收以及獲取作業占用內存區大小及地址等功能。
我在網上找了一個圖,通過這個圖可以很清晰的說明用戶程序、系統調用、內核和硬件之間的關系。(太難了~木有自己畫)
2. 初探 Linux
2.1. Linux 簡介
我們上面已經簡單了 Linux,這里只強調三點。
- 類 Unix 系統 : Linux 是一種自由、開放源碼的類似 Unix 的操作系統
- Linux 本質是指 Linux 內核 : 嚴格來講,Linux 這個詞本身只表示 Linux 內核,單獨的 Linux 內核并不能成為一個可以正常工作的操作系統。所以,就有了各種 Linux 發行版。
- Linux 之父 : 一個編程領域的傳奇式人物,真大佬!我輩崇拜敬仰之楷模。他是 Linux 內核 的最早作者,隨后發起了這個開源項目,擔任 Linux 內核的首要架構師。他還發起了 Git 這個開源項目,并為主要的開發者。
2.2. Linux 誕生
1989 年,Linus Torvalds 進入芬蘭陸軍新地區旅,服 11 個月的國家義務兵役,軍銜為少尉,主要服務于計算機部門,任務是彈道計算。服役期間,購買了安德魯·斯圖爾特·塔能鮑姆所著的教科書及 minix 源代碼,開始研究操作系統。1990 年,他退伍后回到大學,開始接觸 Unix。
Minix 是一個迷你版本的類 Unix 操作系統,由塔能鮑姆教授為了教學之用而創作,采用微核心設計。它啟發了 Linux 內核的創作。
1991 年,Linus Torvalds 開源了 Linux 內核。Linux 以一只可愛的企鵝作為標志,象征著敢作敢為、熱愛生活。
2.3. 常見 Linux 發行版本有哪些?
Linus Torvalds 開源的只是 Linux 內核,我們上面也提到了操作系統內核的作用。一些組織或廠商將 Linux 內核與各種軟件和文檔包裝起來,并提供系統安裝界面和系統配置、設定與管理工具,就構成了 Linux 的發行版本。
內核主要負責系統的內存管理,硬件設備的管理,文件系統的管理以及應用程序的管理。
Linux 的發行版本可以大體分為兩類:
- 商業公司維護的發行版本,以著名的 Red Hat 為代表,比較典型的有 CentOS 。
- 社區組織維護的發行版本,以 Debian 為代表,比較典型的有 Ubuntu、Debian。
對于初學者學習 Linux ,推薦選擇 CentOS 。
##3. Linux 文件系統概覽
3.1. Linux 文件系統簡介
在 Linux 操作系統中,所有被操作系統管理的資源,例如網絡接口卡、磁盤驅動器、打印機、輸入輸出設備、普通文件或是目錄都被看作是一個文件。 也就是說在 Linux 系統中有一個重要的概念:一切都是文件。
其實這是 UNIX 哲學的一個體現,在 UNIX 系統中,把一切資源都看作是文件,Linux 的文件系統也是借鑒 UNIX 文件系統而來。
3.2. inode 介紹
inode 是 linux/unix 文件系統的基礎。那么,inode 是什么?有什么作用呢?
硬盤的最小存儲單位是扇區(Sector),塊(block)由多個扇區組成。文件數據存儲在塊中。塊的最常見的大小是 4kb,約為 8 個連續的扇區組成(每個扇區存儲 512 字節)。一個文件可能會占用多個 block,但是一個塊只能存放一個文件。
雖然,我們將文件存儲在了塊(block)中,但是我們還需要一個空間來存儲文件的 元信息 metadata :如某個文件被分成幾塊、每一塊在的地址、文件擁有者,創建時間,權限,大小等。這種 存儲文件元信息的區域就叫 inode,譯為索引節點:i(index)+node。 每個文件都有一個 inode,存儲文件的元信息。
可以使用 stat
命令可以查看文件的 inode 信息。每個 inode 都有一個號碼,Linux/Unix 操作系統不使用文件名來區分文件,而是使用 inode 號碼區分不同的文件。
簡單來說:inode 就是用來維護某個文件被分成幾塊、每一塊在的地址、文件擁有者,創建時間,權限,大小等信息。
簡單總結一下:
- inode :記錄文件的屬性信息,可以使用 stat 命令查看 inode 信息。
- block :實際文件的內容,如果一個文件大于一個塊時候,那么將占用多個 block,但是一個塊只能存放一個文件。(因為數據是由 inode 指向的,如果有兩個文件的數據存放在同一個塊中,就會亂套了)
3.3. Linux 文件類型
Linux 支持很多文件類型,其中非常重要的文件類型有: 普通文件,目錄文件,鏈接文件,設備文件,管道文件,Socket 套接字文件等。
- 普通文件(-) : 用于存儲信息和數據, Linux 用戶可以根據訪問權限對普通文件進行查看、更改和刪除。比如:圖片、聲音、PDF、text、視頻、源代碼等等。
- 目錄文件(d,directory file) :目錄也是文件的一種,用于表示和管理系統中的文件,目錄文件中包含一些文件名和子目錄名。打開目錄事實上就是打開目錄文件。
- 符號鏈接文件(l,symbolic link) :保留了指向文件的地址而不是文件本身。
- 字符設備(c,char) :用來訪問字符設備比如硬盤。
- 設備文件(b,block) : 用來訪問塊設備比如硬盤、軟盤。
- 管道文件(p,pipe) : 一種特殊類型的文件,用于進程之間的通信。
- 套接字(s,socket) :用于進程間的網絡通信,也可以用于本機之間的非網絡通信。
3.4. Linux 目錄樹
所有可操作的計算機資源都存在于目錄樹這個結構中,對計算資源的訪問,可以看做是對這棵目錄樹的訪問。
Linux 的目錄結構如下:
Linux 文件系統的結構層次鮮明,就像一棵倒立的樹,最頂層是其根目錄:
常見目錄說明:
- /bin: 存放二進制可執行文件(ls、cat、mkdir 等),常用命令一般都在這里;
- /etc: 存放系統管理和配置文件;
- /home: 存放所有用戶文件的根目錄,是用戶主目錄的基點,比如用戶 user 的主目錄就是/home/user,可以用~user 表示;
- /usr : 用于存放系統應用程序;
- /opt: 額外安裝的可選應用程序包所放置的位置。一般情況下,我們可以把 tomcat 等都安裝到這里;
- /proc: 虛擬文件系統目錄,是系統內存的映射。可直接訪問這個目錄來獲取系統信息;
- /root: 超級用戶(系統管理員)的主目錄(特權階級o);
- /sbin: 存放二進制可執行文件,只有 root 才能訪問。這里存放的是系統管理員使用的系統級別的管理命令和程序。如 ifconfig 等;
- /dev: 用于存放設備文件;
- /mnt: 系統管理員安裝臨時文件系統的安裝點,系統提供這個目錄是讓用戶臨時掛載其他的文件系統;
- /boot: 存放用于系統引導時使用的各種文件;
- /lib : 存放著和系統運行相關的庫文件 ;
- /tmp: 用于存放各種臨時文件,是公用的臨時文件存儲點;
- /var: 用于存放運行時需要改變數據的文件,也是某些大文件的溢出區,比方說各種服務的日志文件(系統啟動日志等。)等;
- /lost+found: 這個目錄平時是空的,系統非正常關機而留下“無家可歸”的文件(windows 下叫什么.chk)就在這里。
4. Linux 基本命令
下面只是給出了一些比較常用的命令。推薦一個 Linux 命令快查網站,非常不錯,大家如果遺忘某些命令或者對某些命令不理解都可以在這里得到解決。
4.1. 目錄切換命令
cd usr
: 切換到該目錄下 usr 目錄cd ..(或cd../)
: 切換到上一層目錄cd /
: 切換到系統根目錄cd ~
: 切換到用戶主目錄cd -
: 切換到上一個操作所在目錄
4.2. 目錄的操作命令(增刪改查)
mkdir 目錄名稱
: 增加目錄。ls/ll
(ll 是 ls -l 的別名,ll 命令可以看到該目錄下的所有目錄和文件的詳細信息):查看目錄信息。find 目錄 參數
: 尋找目錄(查)。示例:① 列出當前目錄及子目錄下所有文件和文件夾:find .
;② 在/home
目錄下查找以.txt 結尾的文件名:find /home -name "*.txt"
,忽略大小寫:find /home -iname "*.txt"
;③ 當前目錄及子目錄下查找所有以.txt 和.pdf 結尾的文件:find . \( -name "*.txt" -o -name "*.pdf" \)
或find . -name "*.txt" -o -name "*.pdf"
。mv 目錄名稱 新目錄名稱
: 修改目錄的名稱(改)。注意:mv 的語法不僅可以對目錄進行重命名而且也可以對各種文件,壓縮包等進行 重命名的操作。mv 命令用來對文件或目錄重新命名,或者將文件從一個目錄移到另一個目錄中。后面會介紹到 mv 命令的另一個用法。mv 目錄名稱 目錄的新位置
: 移動目錄的位置—剪切(改)。注意:mv 語法不僅可以對目錄進行剪切操作,對文件和壓縮包等都可執行剪切操作。另外 mv 與 cp 的結果不同,mv 好像文件“搬家”,文件個數并未增加。而 cp 對文件進行復制,文件個數增加了。cp -r 目錄名稱 目錄拷貝的目標位置
: 拷貝目錄(改),-r 代表遞歸拷貝 。注意:cp 命令不僅可以拷貝目錄還可以拷貝文件,壓縮包等,拷貝文件和壓縮包時不 用寫-r 遞歸。rm [-rf] 目錄
: 刪除目錄(刪)。注意:rm 不僅可以刪除目錄,也可以刪除其他文件或壓縮包,為了增強大家的記憶, 無論刪除任何目錄或文件,都直接使用rm -rf
目錄/文件/壓縮包。
4.3. 文件的操作命令(增刪改查)
touch 文件名稱
: 文件的創建(增)。cat/more/less/tail 文件名稱
:文件的查看(查) 。命令tail -f 文件
可以對某個文件進行動態監控,例如 tomcat 的日志文件, 會隨著程序的運行,日志會變化,可以使用tail -f catalina-2016-11-11.log
監控 文 件的變化 。vim 文件
: 修改文件的內容(改)。vim 編輯器是 Linux 中的強大組件,是 vi 編輯器的加強版,vim 編輯器的命令和快捷方式有很多,但此處不一一闡述,大家也無需研究的很透徹,使用 vim 編輯修改文件的方式基本會使用就可以了。在實際開發中,使用 vim 編輯器主要作用就是修改配置文件,下面是一般步驟:vim 文件------>進入文件----->命令模式------>按i進入編輯模式----->編輯文件 ------->按Esc進入底行模式----->輸入:wq/q!
(輸入 wq 代表寫入內容并退出,即保存;輸入 q!代表強制退出不保存)。rm -rf 文件
: 刪除文件(刪)。
4.4. 壓縮文件的操作命令]
1)打包并壓縮文件:
Linux 中的打包文件一般是以.tar 結尾的,壓縮的命令一般是以.gz 結尾的。而一般情況下打包和壓縮是一起進行的,打包并壓縮后的文件的后綴名一般.tar.gz。 命令:tar -zcvf 打包壓縮后的文件名 要打包壓縮的文件
,其中:
- z:調用 gzip 壓縮命令進行壓縮
- c:打包文件
- v:顯示運行過程
- f:指定文件名
比如:假如 test 目錄下有三個文件分別是:aaa.txt bbb.txt ccc.txt,如果我們要打包 test 目錄并指定壓縮后的壓縮包名稱為 test.tar.gz 可以使用命令:tar -zcvf test.tar.gz aaa.txt bbb.txt ccc.txt
或 tar -zcvf test.tar.gz /test/
Java面試核心知識點筆記
其中囊括了JVM、鎖、并發、Java反射、Spring原理、微服務、Zookeeper、數據庫、數據結構等大量知識點。
Java中高級面試高頻考點整理
更多Java進階知識筆記文檔分享,這些對于面試還是學習來說都是一份不錯的學習資料
有需要的朋友可以戳這里即可免費領取
最后還分享Java進階學習及面試必備的視頻教學
**
[外鏈圖片轉存中…(img-efrlH8rB-1625826553974)]
更多Java進階知識筆記文檔分享,這些對于面試還是學習來說都是一份不錯的學習資料
有需要的朋友可以戳這里即可免費領取
[外鏈圖片轉存中…(img-D1Pc5Or4-1625826553974)]
最后還分享Java進階學習及面試必備的視頻教學
[外鏈圖片轉存中…(img-i4fEgo15-1625826553975)]