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