【进大厂必学】3W字180张图学习Linux基础总结
大家好,我是藍(lán)藍(lán)。
就不多說(shuō)這段時(shí)間干啥去了吧,期間和很多的同學(xué)聊了天,有的童鞋已經(jīng)開(kāi)始工作,聊了聊工作上的事兒。有的是今年即將畢業(yè)的童鞋,有著自己的小目標(biāo),有的想嘗試互聯(lián)網(wǎng),所以現(xiàn)在基本上都快進(jìn)行二輪的復(fù)習(xí)了,有的同學(xué)備戰(zhàn)公務(wù)員,憑著年輕這股勁兒向往自己理想的生活狀態(tài),無(wú)論怎么樣,長(zhǎng)路漫漫,走一步,算一步,每一步都算數(shù)。
今天分享的這篇文章是 Linux 相關(guān)的基礎(chǔ)知識(shí),深一點(diǎn)的內(nèi)容基本上沒(méi)有,不過(guò)對(duì)于剛需小伙伴來(lái)說(shuō),也就夠了,有時(shí)間的話,最好按照這些命令去試一試,敲一敲,這樣記憶更加深刻。
老規(guī)矩,先看目錄,目錄原圖比較大,微信公眾號(hào)后臺(tái)沒(méi)法放,本文文章比較長(zhǎng),代碼部分全部采用貼圖的方式,這樣看著更加整潔,相關(guān)函數(shù)或命令的使用方法,如果涉及到多個(gè)參數(shù),我則采用的思維導(dǎo)圖的方式,更加直觀,所以導(dǎo)致本文圖片100張,建議大家收藏后慢慢看。
為什么使用 Linux 或者 為什么要去學(xué)習(xí) Linux
在看這篇之前,大家需要知道為什么去學(xué)習(xí)它,對(duì)于我而言,是一次偶然的比賽中接觸到 Linux,從而開(kāi)啟 Linux 的學(xué)習(xí)。
知道了很多線上的服務(wù),很多的服務(wù)器都是 Linux 系統(tǒng),那么對(duì)于遲早都要入職的我們,提早的學(xué)習(xí) Linux 的基本使用將尤為的必要。
總結(jié)一下,學(xué)習(xí) Linux 最重要的幾點(diǎn):
- 對(duì)于使用 C/C++ 開(kāi)發(fā)者,可以方便直接在 Linux 中編譯運(yùn)行程序
- Linux 作為開(kāi)源項(xiàng)目,其精妙的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)值得深入學(xué)習(xí)
- 我們將要面對(duì)的各種筆試,面試需要它
在我的面試過(guò)程中,大廠互聯(lián)網(wǎng)的面試會(huì)考察 Linux 操作系統(tǒng)中概念的基本底層原理,而對(duì)于國(guó)企,事業(yè)單位,銀行等企業(yè)就會(huì)直接問(wèn) Linux 的基本使用了。
好了,正式開(kāi)始學(xué)習(xí)。
一 Linux簡(jiǎn)介及安裝
不同學(xué)校開(kāi)設(shè)的課程不一樣,我們學(xué)校計(jì)算機(jī)專(zhuān)業(yè)在大三的時(shí)候開(kāi)設(shè) Linux 這門(mén)課程,不過(guò)學(xué)習(xí)的內(nèi)容偏向理論,至于相關(guān)命令和功能的實(shí)現(xiàn)具體原理并不清楚。
直到幾年后,發(fā)現(xiàn)大部分的系統(tǒng),諸如團(tuán)購(gòu),打車(chē)等系統(tǒng)都部署在 Linux 中,另外相關(guān)云計(jì)算,大數(shù)據(jù),容器相關(guān)技術(shù)也都是基于Linux。
為什么說(shuō)了解Linux 的生態(tài),會(huì)讓你學(xué)到更多的新技術(shù)?
我們要知道很多的大牛通過(guò)Linux來(lái)開(kāi)發(fā)各種如那件,數(shù)據(jù)庫(kù) Mysql,kafka,Spark 等技術(shù)都會(huì)默認(rèn)提供 Linux 的安裝運(yùn)維手冊(cè),所以盡快的進(jìn)入 Linux 的世界對(duì)于個(gè)人的進(jìn)步和職業(yè)發(fā)展都是非常有好處的
每當(dāng)我們買(mǎi)了手機(jī),買(mǎi)了電腦,上手就可以用,這是因?yàn)轭A(yù)裝了操作系統(tǒng)。所以呀,哪有什么歲月靜好,其實(shí)有人幫我們負(fù)重前行了,操作系統(tǒng)就是這樣一個(gè)角色。
那么操作系統(tǒng)幫助我們做了哪些事兒呢?
- 我們只需要點(diǎn)擊桌面上的圖標(biāo),應(yīng)用程序就開(kāi)啟
- 電腦咋個(gè)知道我們鼠標(biāo)點(diǎn)擊的那個(gè)位置
- 為什么我一回車(chē),這些字符就飛出去了
這幾個(gè)任何一個(gè)操作,基本上都覆蓋了操作系統(tǒng)的所有功能,現(xiàn)在就進(jìn)入熟悉而陌生的操作系統(tǒng)世界。
1 vmvare
虛擬機(jī)是什么?
虛擬機(jī)通過(guò)軟件的方式來(lái)模擬完整的硬件系統(tǒng),運(yùn)行在完全隔離的計(jì)算機(jī)系統(tǒng)。每個(gè)虛擬計(jì)算機(jī)可以獨(dú)立運(yùn)行并安裝各種軟件和應(yīng)用。
學(xué)習(xí) Linux 最簡(jiǎn)單、最實(shí)用的環(huán)境即虛擬機(jī)環(huán)境,通常即本文中的 VMvare。
使用虛擬機(jī)模擬出來(lái)的 Linux 學(xué)習(xí)環(huán)境簡(jiǎn)單且容易上手,能夠較為真實(shí)的模擬出真正的Linux。
當(dāng)然你也可以將自己的筆記本裝成 Linux 的環(huán)境,但是這樣加大了學(xué)習(xí)的難度,如果需要 進(jìn)行 Linux 集群的學(xué)習(xí),那就更不方便了。
使用虛擬機(jī)系統(tǒng)環(huán)境,我們可以對(duì)虛擬系統(tǒng)隨意進(jìn)行任何的設(shè)置和更改,甚至可以格式化虛擬機(jī)系統(tǒng)硬盤(pán),進(jìn)行重新分區(qū)等操作,而且完全不用擔(dān)心會(huì)丟掉有用的數(shù)據(jù),因?yàn)樘摂M機(jī)是系統(tǒng)上運(yùn)行的一個(gè)虛擬軟件,對(duì)虛擬機(jī)系統(tǒng)的任何操作都相當(dāng)于是在操作虛擬機(jī)的虛擬機(jī)設(shè)備和系統(tǒng),不會(huì)影響電腦上的真實(shí)數(shù)據(jù)。
說(shuō)了這么多,現(xiàn)在開(kāi)始安裝 VMvare。
- 首先從官方下載并解壓虛擬機(jī)安裝包,然后雙擊運(yùn)行
- 點(diǎn)擊下一步
- 選擇安裝位置,最好不要出現(xiàn)中文哈,不然后續(xù)可能出現(xiàn)莫名奇妙的問(wèn)題。
- 設(shè)置用戶(hù)體驗(yàn)選項(xiàng),都可以選擇
- 在桌面和開(kāi)始菜單程序文件夾創(chuàng)建快捷方式。
- 百度一個(gè)許可證ZG1WH-ATY96-H80QP-X7PEX-Y30V4,注意選擇的版本號(hào)。
- 打開(kāi) Vmvare。
- 點(diǎn)擊新建虛擬機(jī)向?qū)?選擇文件-新建虛擬機(jī)-打開(kāi)。
- 選擇自定義,然后下一步。
- 下一步。
- 安裝客戶(hù)機(jī)操作系統(tǒng),選擇稍后安裝操作系統(tǒng)。
- 命名虛擬機(jī)-更改虛擬機(jī)名稱(chēng)并選擇安裝的位置。
- 更改主機(jī)配置進(jìn)行處理的分配。
-
虛擬內(nèi)存分配:注意內(nèi)存分配不能大于主機(jī)內(nèi)存。
-
設(shè)置虛擬機(jī)網(wǎng)絡(luò)得類(lèi)型,這里選擇 NAT(下文會(huì)介紹三種網(wǎng)絡(luò)配置方式的區(qū)別)
- IO控制器選擇,選擇LSILogic。
- 磁盤(pán)類(lèi)型選擇SCSI即可。
- 創(chuàng)建磁盤(pán)選擇創(chuàng)建新虛擬磁盤(pán)
- 指定磁盤(pán)文件
-
修改路徑
-
選擇自定義硬件
- 選擇centos得ISO鏡像文件,先選擇CDDVN—ISO鏡像文件—瀏覽找到鏡像、
- 點(diǎn)擊完成
- 開(kāi)啟虛擬機(jī) 選擇配置好的虛擬機(jī)。
- 鼠標(biāo)移動(dòng)到虛擬機(jī)內(nèi)部,上下鍵選擇install centos7然后回車(chē)。
-
選擇軟件選擇最小安裝,選擇語(yǔ)言。
-
軟件安裝。
- 選擇計(jì)算節(jié)點(diǎn)。
- 開(kāi)始安裝。
-
設(shè)置root密碼,點(diǎn)擊完成配置。
2 進(jìn)行網(wǎng)絡(luò)配置
現(xiàn)在我們的 Centos 還是個(gè)空殼子,如果我們需要訪問(wèn)外網(wǎng),則需要進(jìn)一步配置。“秀才不出門(mén),便知天下事”,你是秀才你試試。
沒(méi)有網(wǎng)絡(luò),我們可能停留在看電視,跳皮筋的年代,我還真是會(huì)跳皮筋
為了讓我們下載軟件更加的順暢,速度更快,最快速度白嫖資源,不得不個(gè)配置網(wǎng)絡(luò)
- 打開(kāi)配置文件
- 更改相應(yīng)的配置
- service restart network 完事 ping www.baidu.com
既然要配置網(wǎng)絡(luò),我們先看看網(wǎng)絡(luò)的配置文件在哪里,以及相關(guān)的配置有哪些,分別代表是什么意思
- 打開(kāi)網(wǎng)絡(luò)配置文件
BOOTPROTO = static,表示啟用了靜態(tài) IP 地址,默認(rèn)為 none
NAME = eth0,與網(wǎng)卡配置文件對(duì)應(yīng)的一個(gè)標(biāo)簽,如果為 eth0 則配置文件是ifcfg-eth0
UUID = xxxx,網(wǎng)卡唯一設(shè)備標(biāo)識(shí),系統(tǒng)自動(dòng)得生成
DEVICE = XXX,網(wǎng)卡設(shè)備名稱(chēng),是物理設(shè)備標(biāo)識(shí)
IPADDR0 = XXX,表示設(shè)置IP地址。這里注意后面的數(shù)字,在 Centos7 以后可以一個(gè)網(wǎng)卡配置多個(gè) IP 地址
PREFIX0 = 24,設(shè)置子網(wǎng)掩碼,這里設(shè)置子網(wǎng)掩碼的方法和之前的版本也不一樣,24代表是255.255.255.0
Getway = XXX,網(wǎng)關(guān)地址,什么是網(wǎng)關(guān)線面會(huì)詳細(xì)闡述
知道配置文件每一行代表的含義以后,就可以根據(jù)自己的需求進(jìn)行配置了,記得配置完成以后重啟網(wǎng)絡(luò),如果是Centos7,那么命令
service network restart- 本地回環(huán)配置文件 /etc/sysconfig/network-scriptis/ifcfg-lo
第一行 Device:網(wǎng)絡(luò)的設(shè)備名
第二到四行:lo 接口的 IP 地址,子網(wǎng)掩碼,網(wǎng)絡(luò)號(hào)
第七行:lo 接口的廣播地址
第八行:開(kāi)機(jī)啟動(dòng) lo接口
第九行:將lo接口設(shè)置為本地回環(huán)地址
- DNS 配置文件/etc/resolv.conf
這里的「namespace」 表示域名服務(wù)器,后面的 IP地址就是DNS 服務(wù)器,當(dāng)用戶(hù)在Linux中訪問(wèn)某個(gè)域名的時(shí)候,就需要靠這些 DNS 服務(wù)器來(lái)解析
- 設(shè)置主機(jī)和 IP 綁定配置文件 /etc/hosts
為什么會(huì)說(shuō)說(shuō)這個(gè)配置文件呢,因?yàn)楫?dāng)在部署集群的時(shí)候,我們需要在此配置,方便我們不用每次都是輸入其他機(jī)器得IP進(jìn)行訪問(wèn),而是直接使用用戶(hù)名即可。
類(lèi)似于 Windows 下得 hosts 文件,我們看看 Linux 中的 /etc/hosts 的內(nèi)容
從上面我們發(fā)現(xiàn),hosts 文件中的每一行內(nèi)容為一個(gè)主機(jī),每一行由三個(gè)部分組成,其中每個(gè)部分按空格隔開(kāi)。
多說(shuō)一句,以后大家如果需要分析一些日志文件的時(shí)候,一定要清楚是按照什么分割的,免得浪費(fèi)了時(shí)間卻還沒(méi)有處理好問(wèn)題
-
第一部分:網(wǎng)絡(luò) IP 地址
-
第二部分:主機(jī)名域名
-
第三部分:主機(jī)名
路由
我和你的通信需要網(wǎng)絡(luò)的傳輸,這個(gè)傳輸過(guò)程中可以說(shuō)經(jīng)歷了九九八十一難,就是這樣穿過(guò)無(wú)數(shù)的節(jié)點(diǎn),無(wú)數(shù)的路由器才將信息傳遞到你的屏幕。
那么為了保證將信息傳遞給你,在數(shù)據(jù)傳輸?shù)竭_(dá)某一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)后,這個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)需要根據(jù)**「約定」將數(shù)據(jù)傳送到另一個(gè)網(wǎng)絡(luò)節(jié)點(diǎn),然后再傳輸?shù)较乱粋€(gè)節(jié)點(diǎn),以此類(lèi)推到達(dá)目標(biāo)主機(jī)。這里的每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)就是「路由」,所謂的約定即路由規(guī)則**
不使用路由就不行么
舉個(gè)例子,我給你寄幾箱獼猴桃,我的地點(diǎn)在北京,到了快遞點(diǎn),我需要寫(xiě)你的地址,比如是"成都市高新區(qū)馬保國(guó)鎮(zhèn)222單元",通常郵寄點(diǎn)不會(huì)直接幫你送到指定的地址,而是可能先到成都,然后成都這邊攬收再送到馬保國(guó)鎮(zhèn),這種就是采用分發(fā)得策略來(lái)提升效率。
這里的寄送系統(tǒng)就是一個(gè)大型的網(wǎng)絡(luò)系統(tǒng),每個(gè)寄存點(diǎn)主要負(fù)責(zé)快遞的傳送任務(wù),只要快遞到達(dá)寄存點(diǎn),就得準(zhǔn)確,迅速將信件投遞到下一個(gè)寄存點(diǎn)處,這里的快遞就是通過(guò)「路由機(jī)制」準(zhǔn)確,快速的寄送到目的地的。
有哪幾種路由呢
- 靜態(tài)路由
靜態(tài)路由是系統(tǒng)管理員通過(guò) route 手工加入的靜態(tài)路由規(guī)則
- 動(dòng)態(tài)路由
動(dòng)態(tài)路由是不同機(jī)器彼此經(jīng)由程序相互交換路由規(guī)則而來(lái)的。如果網(wǎng)絡(luò)發(fā)生了變化,路由軟件會(huì)重新計(jì)算路由并發(fā)出新的路由更新信息
路由如何配置
在 Linux 中,通過(guò) route 命令配置靜態(tài)路由信息,
route [-n|ee]常用的選項(xiàng)
- 查看當(dāng)前路由表信息
從上面我們可以知道通過(guò)route -n 輸出的為純IP 地址,而route輸出的信息就會(huì)包含主機(jī)名信息,下面說(shuō)說(shuō)選項(xiàng)的含義
- Destination :網(wǎng)絡(luò)號(hào),即 network 的意思
- Gateway:連出去的網(wǎng)關(guān)地址
- Flag
- U:代表路由啟動(dòng)勒
- H:代表目標(biāo)路由是一部主機(jī)而非網(wǎng)絡(luò)
- R:代表使用動(dòng)態(tài)路由的時(shí)候,回復(fù)路由信息標(biāo)識(shí)
- G:表示需要通過(guò)外部的主機(jī)來(lái)轉(zhuǎn)遞數(shù)據(jù)
- M:表示路由已經(jīng)修改了
網(wǎng)關(guān)是什么
不知道大家經(jīng)歷過(guò)在宿舍買(mǎi)臺(tái)交換機(jī),然后幾臺(tái)機(jī)器組成局域網(wǎng)打游戲的日子沒(méi)有。那個(gè)時(shí)候苦逼呀,只能打局域網(wǎng)的游戲,不能上網(wǎng)
時(shí)代在進(jìn)步,科技在騰飛吶,學(xué)校就給每個(gè)宿舍分配一一個(gè)IP 地址,這個(gè)IP 地址是學(xué)校的網(wǎng)管部門(mén)負(fù)責(zé),宿舍網(wǎng)的IP 通常是 192.168.1.x,校園網(wǎng)的 IP 地址假設(shè)是 10.10.x.x
如果此時(shí)你想在宿舍上網(wǎng),通常有兩個(gè)方案
- 第一種方案:舍友們眾籌買(mǎi)一張網(wǎng)卡,然后插入到A同學(xué)的電腦上,一張網(wǎng)卡的線插在宿舍的交換機(jī),另一張網(wǎng)卡插在校園網(wǎng)的網(wǎng)口,此時(shí)就可以上網(wǎng),但是A同學(xué)電腦就貢獻(xiàn)出去了,只能看你們打游戲,他自嗨,多可憐
- 第二種方案:買(mǎi)個(gè)路由器,這個(gè)路由器有內(nèi)網(wǎng)網(wǎng)口和外網(wǎng)網(wǎng)口,外網(wǎng)網(wǎng)口插在校園網(wǎng)的網(wǎng)口上面(當(dāng)然配置的時(shí)候根據(jù)網(wǎng)管部門(mén)所要求的),內(nèi)網(wǎng)網(wǎng)口連接上宿舍的所有電腦,這樣的話,路由器就得一直都開(kāi)著
宿舍長(zhǎng)可以上網(wǎng)了,其他人的電腦要上網(wǎng)還需要配置下各自的網(wǎng)卡,通常是DHCP 默認(rèn)配置,在配置的時(shí)候你就會(huì)發(fā)現(xiàn)有個(gè)叫做Gateway的東西,這就是網(wǎng)關(guān),要了解網(wǎng)關(guān)不得不去了解MAC 頭和 IP 的頭部
MAC和IP頭部有啥?
網(wǎng)卡自出生那天起,就帶上了這個(gè)地址,那么問(wèn)題來(lái)了,為啥不使用 MAC 地址進(jìn)行通信呢?因?yàn)榭?MAC 地址沒(méi)法定位準(zhǔn)確,它更像身份證,作為唯一標(biāo)識(shí)。舉個(gè)例子,我住在“成都市高新區(qū) B 座 5 樓”,有個(gè)女娃兒可以問(wèn)路人:“成都市高清區(qū) B座在哪里”,路人可以給他比較明確的地點(diǎn),但是如果她問(wèn):“你知道小藍(lán)(身份證)在哪兒?jiǎn)帷?#xff0c;很明顯無(wú)從得知,說(shuō)不定以為"你是個(gè)傻子吧"。
你可以找到IP地址(成都市高新區(qū) B 座 5 樓),但是可能還是找不到我,這個(gè)時(shí)候假設(shè)你可能去服務(wù)臺(tái)問(wèn)(其實(shí)是靠吼,身份證為XXX的是哪位),這個(gè)時(shí)候我聽(tīng)到自然就會(huì)答應(yīng),不過(guò)你如果在北京喊,就聽(tīng)不見(jiàn)了,所以 MAC 地址實(shí)際上通信范圍是比較小的,局限在一個(gè)子網(wǎng)里。它的頭部結(jié)構(gòu)如下
圖中的類(lèi)型大部分都是IP 數(shù)據(jù)包,IP 里面可能包含了 TCP,HTTP 等,這都是封裝的事兒了。擁有了這個(gè) MAC 地址,就會(huì)在鏈路上廣播,MAC 的網(wǎng)卡才發(fā)現(xiàn)這個(gè)包原來(lái)是給它的,網(wǎng)卡將包收進(jìn)來(lái),打開(kāi) IP 包,發(fā)現(xiàn) IP地址是自己的,再打開(kāi) TCP 包發(fā)現(xiàn)端口是自己,還是 80,正好就是目前監(jiān)聽(tīng)的端口
上述IP 頭部的詳細(xì)信息就先不說(shuō)了,這里主要述說(shuō)源 IP 和目標(biāo) IP 地址,當(dāng)我們要訪問(wèn)一個(gè)IP 地址的時(shí)候,需要判斷這個(gè)目標(biāo) IP 是否和當(dāng)前的IP 地址在同一個(gè)網(wǎng)段
怎么判斷是否在同一個(gè)網(wǎng)段
此時(shí)涉及到網(wǎng)絡(luò)的 CIDR 和子網(wǎng)掩碼了。我們通常將 IP地址比喻為門(mén)牌號(hào)碼,既然是門(mén)牌號(hào)碼,如果一樣了就會(huì)沖突。假設(shè)大家都將地址設(shè)置為三單元 110,那快遞小哥就壓根找不到地方,所以,我們使用電腦的時(shí)候,有時(shí)出現(xiàn)上不了網(wǎng)了,很可能是IP沖突了喲。
10.120.55.73,這就是一個(gè)IP地址。按照"."分割,其中每個(gè)部分占8個(gè) bit ,所以 IP 地址為32位,這樣的話IP地址一共就有約 42.9 億個(gè),很明顯在現(xiàn)在看來(lái)不夠用,但是當(dāng)初設(shè)計(jì)者哪知道現(xiàn)在這么多計(jì)算機(jī)呀,于是出現(xiàn)了IPV6,128 位,至于夠不夠用還得看看國(guó)家的生育政策了
不夠用就算了,還將這些 IP 地址分為了5類(lèi)
對(duì)于 A,B,C 這三類(lèi),分為了兩部分,前面一部分為網(wǎng)絡(luò)號(hào),后面一部分為主機(jī)號(hào),還是比較好理解。假設(shè)大家都是3單元 110,小藍(lán)是東華小區(qū)的110,而小李是萬(wàn)科小區(qū)的 110
那么這幾類(lèi),分別代表了多少的主機(jī)數(shù)量呢
從上圖我們發(fā)現(xiàn)C類(lèi)的地址 254個(gè),B類(lèi)地址 65534,這放在一個(gè)網(wǎng)絡(luò)下面豈不是太浪費(fèi),有沒(méi)有折中的方法呢
CIDR
CIDR 叫做無(wú)類(lèi)型域間選路。將上面32位的地址分為兩部分,分別為網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)。比如地址 10.120.55.73/24,斜杠后面的24表示在 32位中,前面的24為網(wǎng)絡(luò)號(hào),后面的 8 位為主機(jī)號(hào)
如何得到網(wǎng)絡(luò)號(hào)
將子網(wǎng)掩碼和IP 地址進(jìn)行 AND 運(yùn)算就可得到網(wǎng)絡(luò)號(hào)。此時(shí)子網(wǎng)掩碼為 255.255.255.0,255 轉(zhuǎn)換為二進(jìn)制為 1,1和任何的數(shù)進(jìn)行 AND 運(yùn)算都是原來(lái)的數(shù)值,所以前面三個(gè)數(shù)不變,為 10.120.55。后面一個(gè)數(shù)為 0,0和任何數(shù)進(jìn)行AND運(yùn)算為 0,所以最后一個(gè)數(shù)為 0,合計(jì)后就是 10.120.55.0,這就是網(wǎng)絡(luò)號(hào)
什么是私有地址和共有地址呢
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Cv7Ydab6-1622033442378)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201203194644514.png)]
我們平時(shí)自己的電腦或者辦公室里,一般都是私有 IP 地址,因?yàn)檫@些IP地址由相關(guān)組織的內(nèi)部管理,自己分配使用,所以我的私有IP 地址可能和你的是一樣的
這就好比我所在的小區(qū)是 3 棟,你的小區(qū)也是3棟。但是除了小區(qū),就需要使用共有IP地址了。就像建設(shè)路 1000 號(hào),這是相關(guān)部門(mén)劃分的,不能兩個(gè)小區(qū)都叫做建設(shè)路1000號(hào)
怎么獲取公有 IP 地址呢
這就需要花錢(qián)了,畢竟是共有的,比較香且有限制。假設(shè)你要做一個(gè)網(wǎng)站,全國(guó)人民都可以訪問(wèn),就需要買(mǎi)個(gè)IP 地址了
在這五類(lèi)地址中,還差一個(gè) D 類(lèi)組播地址。從名字可以看出,這類(lèi)地址屬于一個(gè)組的機(jī)器都能收到。就仿佛QQ群,發(fā)個(gè)消息大家都能看到,至于回復(fù)不回復(fù)另說(shuō)
好了,回到網(wǎng)關(guān)
如果你想和你的室友通信,就和網(wǎng)關(guān)沒(méi)有關(guān)系,因?yàn)槟銈冊(cè)谕粋€(gè)網(wǎng)關(guān),只需要通過(guò) ARP獲得MAC 地址,然后將源 MAC 和目的 MAC 放入到MAC頭中發(fā)出去即可
如果不是在同一個(gè)網(wǎng)段,你想和你的異地女友聊天,這個(gè)時(shí)候會(huì)先訪問(wèn)默認(rèn)網(wǎng)關(guān)Gateway,這個(gè)過(guò)程和發(fā)往同一個(gè)網(wǎng)段的其他機(jī)器又是一樣的,將源地址和目的地址放入IP頭,通過(guò) ARP獲取網(wǎng)關(guān)MAC地址,將源 MAC 和網(wǎng)關(guān) MAC 放入 MAC 頭部發(fā)送出去,網(wǎng)關(guān)所在端口接受以后下一步操作就看網(wǎng)關(guān)了
網(wǎng)管呢可以當(dāng)作是路由器,路由器是一個(gè)物理設(shè)備,假設(shè)有 5 個(gè)網(wǎng)口,五個(gè)網(wǎng)口相當(dāng)于五條路,分別連接五個(gè)局域網(wǎng),每條路的IP 地址都和局域網(wǎng)的IP地址是同一個(gè)網(wǎng)段,每條路都是它握住的那個(gè)局域網(wǎng)的網(wǎng)關(guān)
簡(jiǎn)單來(lái)說(shuō):如果一個(gè)包想發(fā)到其他的局域網(wǎng),都會(huì)選擇一條路 ,然后根據(jù)路由算法,選擇另一條路加上IP頭和MAC投扔出去
到底選擇哪一條路?
- 靜態(tài)路由
靜態(tài)路由比較簡(jiǎn)單,直接在路由器上配置規(guī)則,規(guī)則為:假設(shè)訪問(wèn)A網(wǎng)站,就從 2 號(hào)口出去,下一跳為 IP2;如果想訪問(wèn)B網(wǎng)站,則從 3號(hào)口出去,下一跳為IP3,隨后緩存在路由器中
那么IP 頭和 MAC 頭,需要修改哪些內(nèi)容呢
橋接的基本原理
橋接默認(rèn)使用 VMnet0,Bridge 橋當(dāng)作為一個(gè)機(jī)器,這個(gè)機(jī)器有兩塊網(wǎng)卡分別處于兩個(gè)局域網(wǎng)中,使用"橋"連接,這樣局域網(wǎng)A和B就無(wú)縫的連接起來(lái),橋接的時(shí)候 VMWare 網(wǎng)卡和物理網(wǎng)卡處于同一個(gè) IP 網(wǎng)段
Vmvare 橋是同樣的原理,Vmvare 軟件會(huì)虛擬一塊網(wǎng)卡,當(dāng)使用橋接的時(shí)候,Vmvare 會(huì)虛擬一塊網(wǎng)卡和真正的物理網(wǎng)卡進(jìn)行橋接,這樣的話,發(fā)送到物理網(wǎng)卡的所有數(shù)據(jù)包就到了 Vmvare 虛擬機(jī)
而由 Vmvare 發(fā)出的數(shù)據(jù)包也會(huì)通過(guò)橋從物理網(wǎng)卡那端發(fā)出,所以,如果物理網(wǎng)卡可以上網(wǎng),那么橋接的虛擬網(wǎng)卡也基本上沒(méi)問(wèn)題
聯(lián)網(wǎng)的方式
橋接的方式是最簡(jiǎn)單的,主機(jī)怎么聯(lián)網(wǎng),那么虛擬機(jī)就怎么聯(lián)網(wǎng),將虛擬及當(dāng)作局域網(wǎng)中的一臺(tái)電腦就好了
注意:主機(jī)網(wǎng)卡可以訪問(wèn) internet 的局域網(wǎng)的時(shí)候,虛擬機(jī)才會(huì)通過(guò)Bridge 訪問(wèn) internet
Nat
Nat的基本原理
NAT的全稱(chēng)是 Network address translate ,NAT 應(yīng)用在 Internet 網(wǎng)關(guān)和路由器上。比如192.168.0.123這個(gè)地址需要訪問(wèn) Internet,數(shù)據(jù)包會(huì)先到路由器或網(wǎng)關(guān),然后網(wǎng)關(guān)和路由器會(huì)有一個(gè)能訪問(wèn) Internet 的IP 地址,這樣的網(wǎng)關(guān)和路由器在收到數(shù)據(jù)包后,對(duì)數(shù)據(jù)包的 IP 進(jìn)行更改 (NAT),這樣就可以讓私有網(wǎng)段的主機(jī)能夠順利訪問(wèn) Internet,這個(gè)技術(shù)解決了 IP稀缺的問(wèn)題,同樣的私有IP 可以網(wǎng)關(guān) NAT上網(wǎng)
那么對(duì)于 Vmvare 是同樣的道理,它會(huì)在虛擬機(jī)和主機(jī)之間偽造一塊網(wǎng)卡,這個(gè)網(wǎng)卡和虛擬機(jī)的 IP 出于同一個(gè)地址段,網(wǎng)卡和主機(jī)的網(wǎng)絡(luò)接口進(jìn)行 NAT,意味著虛擬發(fā)出的每一塊數(shù)據(jù)包都會(huì)經(jīng)過(guò)虛擬網(wǎng)卡,然后 NAT,從主機(jī)的接口發(fā)送出去
注意:虛擬網(wǎng)卡和虛擬機(jī)處于同一個(gè)地址段,虛擬機(jī)和主機(jī)處于不同的地址段,主機(jī)相當(dāng)于虛擬機(jī)的網(wǎng)關(guān),所以虛擬機(jī)能夠ping通主機(jī)的 IP,但是主機(jī) Ping不同虛擬機(jī) IP
聯(lián)網(wǎng)方式
- 動(dòng)態(tài) IP 地址
這個(gè)方式簡(jiǎn)單,直接將虛擬機(jī)設(shè)置成使用 DHCP 方式上網(wǎng),Linux 開(kāi)啟DHCP 服務(wù)即可。注意:在 Vmvare 中,需要在編輯-----虛擬網(wǎng)絡(luò)設(shè)置中,將 DHCP 開(kāi)啟,默認(rèn)為關(guān)閉
- 靜態(tài) IP 設(shè)置
如果不想使用DHCP,也可以手動(dòng)設(shè)置:
IP 設(shè)置與 Vmnet1 同網(wǎng)段,網(wǎng)關(guān)設(shè)置成Vmnet8 的網(wǎng)關(guān)(在“虛擬網(wǎng)絡(luò)設(shè)置”里的Net選項(xiàng)卡里能找到Gateway)通常是 xxx.xxx.xxx.2。 子網(wǎng)掩碼設(shè)置與VMnet8 相同(設(shè)置好IP地址后,子網(wǎng)掩碼自動(dòng)生成)
DNS 設(shè)置與主機(jī)相同。
例如:主機(jī)IP 是 10.70.54.31,設(shè)置虛擬機(jī)IP為 10.70.54.22。Netmask,Gateway,DNS 都與主機(jī)相同即可實(shí)現(xiàn) 虛擬機(jī) —主機(jī) 虛擬機(jī)<---->互聯(lián)網(wǎng) 通信。
提示:使用 NAT 技術(shù),主機(jī)能上網(wǎng),虛擬機(jī)就可以訪問(wèn) Internet,但是主機(jī)不能訪問(wèn)虛擬機(jī)
host–only的方式
這種方式:只需要主機(jī)和虛擬機(jī)通信,不讓虛擬機(jī)訪問(wèn) Internet。同樣是兩種方式
- 動(dòng)態(tài)IP地址
此處和上面一樣,開(kāi)啟 DHCP 以后,虛擬機(jī)就可以自動(dòng)的獲取 IP 地址和 DNS 了
- 靜態(tài)地址
將IP地址設(shè)置為和VM一個(gè)網(wǎng)段,網(wǎng)關(guān)設(shè)置為VMnet1的網(wǎng)關(guān),
也可以手動(dòng)設(shè)置,將虛擬機(jī)IP 設(shè)置與 VMnet1同網(wǎng)段,網(wǎng)關(guān)設(shè)置成VMnet1 的網(wǎng)關(guān)相同,其余設(shè)置與 VMnet1 相同,DNS 設(shè)置與主機(jī)相同。
例如:VMnet1 IP:172.16.249.1 Gateway :172.16.249.2
那么虛擬機(jī) IP:172.16.249.100 Gateway: 172.16.249.2
這樣、 虛擬機(jī)<—>主機(jī) 可以通信,但是、 虛擬機(jī)<—>互聯(lián)網(wǎng) 無(wú)法通信
提示:Host-only技術(shù)只用于主機(jī)和虛擬機(jī)互訪,于訪問(wèn)internet無(wú)關(guān)。
3 安裝xshell
我們已經(jīng)完成了安裝Vmvare 并導(dǎo)入了Centos,那么我們?nèi)绾稳ネ鎯哼@個(gè)看似很牛皮的玩意?直接上手?不習(xí)慣吧,那我們用個(gè)遠(yuǎn)程工具連連
Xshell是一個(gè)強(qiáng)大的安全終端模擬軟件,Xshell可以在 Windows 界面下用來(lái)訪問(wèn)遠(yuǎn)端不同系統(tǒng)下的服務(wù)器,從而比較好的達(dá)到遠(yuǎn)程控制終端的目的。除此之外,其還有豐富的外觀配色方案以及樣式選擇。
- 下載 Xshell(別去下了,賊慢麻煩)
- 鏈接測(cè)試(因?yàn)槭褂玫?SSH,那么確保 Centos中22 端口已經(jīng)打開(kāi)了)
- 文件-----屬性進(jìn)行Xshell相關(guān)的配置,比如配色,字體大小等
這里介紹的即Xshell了,是一個(gè)強(qiáng)大的安全終端模擬如那件。支持 SSH1,SSH2 等協(xié)議。方便遠(yuǎn)程連接到遠(yuǎn)程主機(jī),除此之外,還有豐富的配色方案和樣式選擇。安裝就很簡(jiǎn)單了,下面將安裝的過(guò)程還是放在這作為記錄供參考
- 安裝 Xshell,去官網(wǎng) download。進(jìn)入安裝頁(yè)面
- 選擇免費(fèi)為家庭/學(xué)校
- 接受許可
- 安裝完成
- 外觀設(shè)置,字體設(shè)置,文件----屬性中
- 設(shè)置配色主題
Xshell 使用過(guò)程中的技巧有哪些?
- 復(fù)制粘貼Ctrl+Insert進(jìn)行復(fù)制,Shift+Insert進(jìn)行粘貼
- 右擊將當(dāng)前頁(yè)面的內(nèi)容復(fù)制到記事本中
- 快速點(diǎn)擊三次就可以選中當(dāng)前行
- 快速在多個(gè)session中切換。Alt+數(shù)字標(biāo)識(shí)且數(shù)字====切換到指定session
- 將命令同時(shí)發(fā)送給多個(gè)session 中(對(duì)了,大家可以安裝哈rz,sz 方便安裝下載文件)
4 基本命令的使用
命令太多,必須要全部記憶,但是要學(xué)會(huì)如何查每個(gè)命令的參數(shù)。我畫(huà)了個(gè)思維導(dǎo)圖可以當(dāng)作小字典查看,下面列出可能我們使用頻率會(huì)更高的命令
如果你要切換到登錄用戶(hù)的主目錄,可以使用 cd ~,如果需要切換到指定的目錄則使用 cd /home/lj,回到上次所在的目錄則 cd -。好了,非常基礎(chǔ)的命令看個(gè)小思維導(dǎo)圖即可,進(jìn)階一些且常用的命令繼續(xù)往下看。
5 常用命令整理
今天總結(jié)幾個(gè)非常常用的 Linux 命令,其中有幾個(gè)在面試中很可能問(wèn)相關(guān)命令的原理,比如后臺(tái)運(yùn)行命令。希望對(duì)大家有所幫助,最好自己去嘗試在Linux操作系統(tǒng)中實(shí)踐一下。
查看目錄以及權(quán)限
在Windows 中,使用 dir 查看當(dāng)前目錄中文件。在 Linux 中使用ls(list)查看當(dāng)前目錄文件。Windows 中的 dir,如下圖所示:
在Linux 中,通常使用ls -l列出,其中可以查看文件屬性,所屬用戶(hù)組等較為詳細(xì)的信息。下面詳細(xì)解釋從左到右每一列是什么意思
其中第一列的第一個(gè)字段代表文件類(lèi)型,后面的 9 個(gè)字符代表模式,整個(gè)一串分為三小組,每一小組三個(gè)字段。
第一組為所屬用戶(hù)權(quán)限。第二組為所屬組的權(quán)限。第三組為其他用戶(hù)所屬權(quán)限。其中 r(read) 代表可讀,w(write) 代表可寫(xiě),e(execute) 代表可執(zhí)行。在后面的 9 個(gè)字符中,如果是字母說(shuō)明有相應(yīng)的權(quán)限,如果為"-"代表沒(méi)有權(quán)限。舉一個(gè)例子:
-rw-r-r--: 此為普通文件,對(duì)于所屬用戶(hù)為可讀可寫(xiě)不能執(zhí)行,對(duì)于所屬組僅僅可讀,對(duì)于其他用戶(hù)僅為讀。
第二列為硬鏈接數(shù),硬鏈接作用之一是允許一個(gè)文件擁有多個(gè)有效路徑名,從而防止誤刪。但是只能在同一文件系統(tǒng)中的文件之間進(jìn)行連接,不能對(duì)目錄進(jìn)行創(chuàng)建。
第三列是所屬用戶(hù),第四列為所屬組,第五列為文件大小,第六列為文件被修改的時(shí)間,最后為文件名。其中刻印使用chown改變所屬用戶(hù),chgrp 改變所屬組。
nohup(no hang up不要掛起的意思)
這是常用后臺(tái)啟動(dòng)程序的常用方法,如果在交互命令行中運(yùn)行程序,我們只需要 ctrl+c 就可以終止程序。在交互環(huán)境下,我們的輸出一般都會(huì)直接輸出到當(dāng)前界面,在后臺(tái)啟動(dòng)的時(shí)候通常會(huì)定向到文件,那通常情況是下面這個(gè)命令。
其中 1 表示標(biāo)準(zhǔn)輸出。2 表示文件標(biāo)準(zhǔn)錯(cuò)誤輸出。2>1& 即將兩者合并,但是合并到哪里,就是 X.file。
查看進(jìn)程
有的時(shí)候我們需要查看進(jìn)程是否已經(jīng)啟動(dòng)或者查看進(jìn)程的狀態(tài)并終止進(jìn)程。經(jīng)常使用的命令為 ps -ef—列出當(dāng)前正在運(yùn)行的程序,那如何定位我們想要查看的進(jìn)程呢,這個(gè)時(shí)候就可以結(jié)合 grep ,即
如何解壓縮文件
常用參數(shù)
- -c:創(chuàng)建的 tar 文件
- -x:解開(kāi) tar 文件
- -t:列出 tar 文件中辦函的文件信息
- -r:附加新的文件到 tar 中
如何在多臺(tái)服務(wù)器之間傳輸文件?
通過(guò) scp 命令在多臺(tái)服務(wù)器中的相互復(fù)制 傳輸文件。為了省下輸入密碼,可以設(shè)置免密登錄。
如何動(dòng)態(tài)查看應(yīng)用的執(zhí)行結(jié)果,如我想知道每隔一秒高亮顯示網(wǎng)絡(luò)連接數(shù)的變化情況
我想查看磁盤(pán)的大小
我想抓取數(shù)據(jù)包并分析網(wǎng)絡(luò)情況
在Linux 中通常就會(huì)使用tcpdump 來(lái)抓取網(wǎng)絡(luò)中的報(bào)文,并進(jìn)行分析。
知道了相關(guān)參數(shù),下面看幾個(gè)案例
我想知道當(dāng)前網(wǎng)絡(luò)中的文件連接情況
如果讓你使用一個(gè)命令進(jìn)行網(wǎng)絡(luò)連接并上傳相關(guān)文件,你會(huì)使用什么命令
nc–>“瑞士軍刀”。不知大家在滲透過(guò)程中,拿了shell有沒(méi)有使用nc 搞點(diǎn)事兒。它用來(lái)快速構(gòu)建網(wǎng)絡(luò)鏈接。常用來(lái)調(diào)試客戶(hù)端程序。
我想要方便的查看網(wǎng)卡的相關(guān)信息及TCP網(wǎng)絡(luò)連接狀態(tài)
netstat 是一個(gè)網(wǎng)絡(luò)信息統(tǒng)計(jì)工具。它可以得到網(wǎng)卡接口上全部了解,路由表信息,網(wǎng)卡接口信息等。通常在網(wǎng)絡(luò)編程中我們用它來(lái)顯示 TCP 連接以及狀態(tài)信息。
我想實(shí)時(shí)查看當(dāng)前系統(tǒng)的進(jìn)程信息,CPU使用情況等信息
這時(shí)候vmstat 就派上用場(chǎng)了。
vmstat能夠?qū)崟r(shí)輸出系統(tǒng)的進(jìn)程信息,內(nèi)存使用,CPU 使用等資源的使用情況
看一下vmstat 都有哪些輸出字段。
這里注意哈,如果查看磁盤(pán)的更加詳細(xì)信息,有另外iostat 所得到的信心就更加詳細(xì)喲
我想實(shí)時(shí)的查看多處理器中各個(gè) CPU 的使用情況
可以使用 mpstat 命令進(jìn)行查看,不過(guò)需要先安裝 sysstat 包,在 Centos 中直接使用 yum install systat 就可完成安裝
然后我們看看各個(gè)字段什么意思。
我想將文件拆分為幾個(gè)小文件
我想統(tǒng)計(jì)文件中單詞的個(gè)數(shù)。
我想一頁(yè)一頁(yè)的查看文件內(nèi)容
查看日志的前幾條數(shù)據(jù)或后幾條數(shù)據(jù)
查看幾個(gè)文件的內(nèi)容差異
5 用戶(hù)管理及權(quán)限
Linux 是一個(gè)多用戶(hù)的操作系統(tǒng),意思是允許多個(gè)用戶(hù)同時(shí)登錄到系統(tǒng)中,并響應(yīng)每個(gè)用戶(hù)的請(qǐng)i去。但是任何需要使用系統(tǒng)的用戶(hù),都需要一個(gè)賬號(hào),賬號(hào)分為管理員賬號(hào)和普通用戶(hù)的賬號(hào)。
在Linux 中,操作系統(tǒng)會(huì)根據(jù)UID 來(lái)判斷用戶(hù),如果id 為0則為管理員賬戶(hù),可能存在多個(gè)管理員賬戶(hù)。
在 Linux中,每個(gè)用戶(hù)都會(huì)屬于一個(gè)組,意味著當(dāng)創(chuàng)建用戶(hù)的時(shí)候,系統(tǒng)會(huì)自動(dòng)創(chuàng)建一個(gè)同名組作為次賬戶(hù)的主組。
用戶(hù)和組的關(guān)系以配置文件的方式關(guān)聯(lián),相關(guān)配置文件如下
系統(tǒng)在創(chuàng)建新的賬號(hào)時(shí),會(huì)根據(jù)賬號(hào)類(lèi)型,自動(dòng)的分配賬號(hào)的 UID 和GID,通常情況 UID 和GID 唯一且不重復(fù)
剛才說(shuō)了可以創(chuàng)建自己的用戶(hù),那么怎么創(chuàng)建自己的用戶(hù)呢?
添加用戶(hù)
更改密碼
系統(tǒng)有很多的用戶(hù),怎么進(jìn)行用戶(hù)的切換?
如果需要
用戶(hù)之間的切換使用 su 命令實(shí)現(xiàn)。root用戶(hù)可以無(wú)需輸入密碼切換到lj用戶(hù),如果普通用戶(hù)lj切換到 root 用戶(hù)則需要輸入密碼,我們看看
如何切換路徑,絕對(duì)路徑和相對(duì)路徑
6 軟件的安裝方法
在Linux安裝相關(guān)的工具分為三種方式,分別為源碼安裝,RPM 包安裝以及 YUM 安裝方式
源碼安裝方式
開(kāi)源軟件都會(huì)提供源碼下載的方式,對(duì)于源代碼安裝方式的好處即可以定制軟件功能,安裝需要的模塊,不需要的模塊可以屏蔽,方便管理,卸載等。
對(duì)于源碼安裝的步驟如下
- 下載解壓源碼
一般下載下來(lái)源碼以后都會(huì)存在一個(gè) Readme 文件,首先應(yīng)該仔細(xì)閱讀這個(gè)文件,可能有很多需要修復(fù)的以前人家遇見(jiàn)的問(wèn)題都會(huì)在上面做記錄,以免入坑不回頭
- 分析平臺(tái)環(huán)境
- 編譯安裝軟件
這里會(huì)使用 make 工具,make 工具就會(huì)通過(guò) makefile 文件來(lái)實(shí)現(xiàn)。makefile文件 是一種按照某種語(yǔ)法來(lái)編寫(xiě)且定義了各個(gè)文件的依賴(lài)關(guān)系。
在 Linux 中,習(xí)慣使用 Makefile 替代 makefile,當(dāng)用戶(hù)執(zhí)行 configure 后,就會(huì)在當(dāng)前目錄生成這個(gè) makefile 文件,然后用戶(hù)輸入 make 就開(kāi)始運(yùn)行。我們看看 Makefile 是怎么個(gè)有樣子
make和 make install 的關(guān)系
當(dāng)我們輸入 make 命令過(guò)后即進(jìn)入了編譯階段,編譯時(shí)間根據(jù)軟件的程序規(guī)模大小以及硬件配置有關(guān),當(dāng)輸入make install就會(huì)開(kāi)始安裝軟件,我們可以指定安裝目錄也可以不指定,系統(tǒng)將給你默認(rèn)指定目錄為 /user/local,這樣安裝完畢。
RPM安裝方式
RPM 是Red Hat 公司開(kāi)發(fā)出來(lái)的 Linux 下的軟件包管理工具。這些以 .rpm結(jié)尾的包包含了已經(jīng)編譯好的二進(jìn)制可執(zhí)行文件,一句話即將源代碼進(jìn)行編譯,安裝,然后封裝為RPM包
優(yōu)點(diǎn)即安裝簡(jiǎn)單,方便,因?yàn)橐呀?jīng)編譯完成,安裝只是用來(lái)驗(yàn)證和解壓過(guò)程,缺點(diǎn)也比較明顯,過(guò)于依賴(lài)于操作系統(tǒng),要求RPM包的安裝環(huán)境必須和RPM封裝時(shí)的環(huán)境保持一致,
RPM包是怎么個(gè)樣子?
server-2.1.0-22.I386.rpm其中:server 為如那件的名稱(chēng)
2.1.0:軟件的版本號(hào)
22:軟件更新發(fā)行的次數(shù)
i386:適合硬件發(fā)行的次數(shù)
.rpm:rpm軟件包的標(biāo)識(shí)
YUM安裝方式
- 查看是否存在yum
- 沒(méi)有則安裝
- 自定義yum的配置。我們可以通過(guò)打開(kāi) /etc/yum.repos.d/Centos-Base.repo 進(jìn)行源的配置
YUM有哪些特點(diǎn)呢
- 安裝方便
- 可以同時(shí)配置多個(gè)源
- 配置文件簡(jiǎn)單明了
推薦個(gè)不錯(cuò)的yum源
- EPEL
是一個(gè)針對(duì)紅帽企業(yè)版Linux及衍生發(fā)行版的一個(gè)高質(zhì)量附加軟件包項(xiàng)目。
- RPMForge
這是一個(gè)第三方軟件倉(cāng)庫(kù),被centos社區(qū)認(rèn)為是一個(gè)最安全最穩(wěn)定的一個(gè)軟件倉(cāng)庫(kù)
7 shell腳本練習(xí)
大部分情況都是Linux操作系統(tǒng),那么熟悉命令的用法以外,熟悉使用shell腳本能節(jié)省不少時(shí)間
shell是什么
平時(shí)經(jīng)常在 Linux 操作系統(tǒng)中使用各種命令,比如查看當(dāng)前的目錄文件,我們會(huì)使用 "ls" 或者 "ls -l",這些字符串參數(shù)實(shí)際上會(huì)被"某段程序"執(zhí)行并啟動(dòng)。這個(gè)負(fù)責(zé)將用戶(hù)輸入的字符串轉(zhuǎn)換為需要執(zhí)行程序的東西叫做shell。即幫用戶(hù)更方便使用操作系統(tǒng)接口的“殼”。同樣的殼還有當(dāng)我輸入Maven+相關(guān)參數(shù)的時(shí)候是不是就會(huì)去執(zhí)行相應(yīng)的功能,我們駛?cè)?SQL 語(yǔ)句的時(shí)候,數(shù)據(jù)庫(kù)引擎是不是也會(huì)各種調(diào)用,一樣的道理
嘗試編寫(xiě)第一個(gè)shell
vim 創(chuàng)建打開(kāi)一個(gè)文件,擴(kuò)展名為.sh。如下所示
變量的使用
變量名和等號(hào)之間不能有空格
定義變量注意事項(xiàng):
- 命名首個(gè)字符不能是數(shù)字,只能使用英文字母、數(shù)字和下劃線
- 不能使用標(biāo)點(diǎn)符號(hào)
- 不能使用bash中關(guān)鍵字
使用變量(使用變量的過(guò)程中,最好加上花括號(hào)),只需要在變量前面加上美元符號(hào)即可
只讀變量
使用 readonly 將變量定義為只讀,只讀意味著不能改變
刪除變量
使用unset刪除變量 變量刪除以后不能再次使用,且不能刪除只讀變量
變量類(lèi)型
- 局部變量
僅當(dāng)前shell可用
- 環(huán)境變量
所有程序都能訪問(wèn)環(huán)境變量
- shell變量
通過(guò)一部分環(huán)境變量和shell 變量保證shell 的正常運(yùn)行
字符串
使用字符串的過(guò)程中,既可以用雙引號(hào)也可以用單引號(hào),也可以不用
- 單引號(hào)
單引號(hào)內(nèi)容原樣輸出,不能包含變量,且不能出現(xiàn)單獨(dú)單引號(hào)
- 雙引號(hào)
可以出現(xiàn)轉(zhuǎn)義字符
獲取字符串長(zhǎng)度
使用 # 獲取字符串長(zhǎng)度
數(shù)組
支持一維數(shù)組,數(shù)組元素之間通過(guò)空格隔開(kāi),讀取數(shù)組,使用 @輸出數(shù)組所有元素
獲取數(shù)組中所有元素以及數(shù)組長(zhǎng)度
看看結(jié)果
注釋
單行注釋
使用#開(kāi)頭的行為注釋,會(huì)被解釋器忽略
多行注釋
shell傳遞參數(shù)
在執(zhí)行shell的時(shí)候,命令行指定參數(shù),如下所示
結(jié)果
下面看看這個(gè)例子
結(jié)果
相同點(diǎn):都是會(huì)引用所有參數(shù)
不同點(diǎn):在使用雙引號(hào)的時(shí)候。如果腳本運(yùn)行時(shí)兩個(gè)參數(shù)為a,b,則"*“等價(jià)于"ab”,而"@“等價(jià)于"a”,“b”
8 printf
使用 printf 格式化字符串,同時(shí)可以指定字符串寬度和對(duì)齊方式,格式如下
結(jié)果
9 test
shell 中的test用于檢查某個(gè)條件是否成立
案例
結(jié)果
if語(yǔ)句語(yǔ)法格式
如果簡(jiǎn)化為一行
if else-if else
案例 判斷兩數(shù)值是否相等
for循環(huán)
while語(yǔ)句
“ 通常用于從輸入文件不斷讀取數(shù)據(jù)
無(wú)限循環(huán)
case語(yǔ)句
“ 多選擇語(yǔ)句。取值后面為單詞in,每一個(gè)模式以")"結(jié)束。匹配發(fā)現(xiàn)取值符合某一模式后,其間所有命令開(kāi)始執(zhí)行直至 “;;”。
輸入不同的內(nèi)容,會(huì)有不同的結(jié)果,例如:
輸入 1 到 4 之間的數(shù)字: 你輸入的數(shù)字為: 3 你選擇了 3跳出循環(huán)
break
break命令允許跳出所有循環(huán)
continue
“ 跳出當(dāng)次循環(huán)
10 shell函數(shù)
“ 用戶(hù)定義函數(shù),然后在shell腳本中隨便調(diào)用,格式如下
例子
帶return語(yǔ)句
函數(shù)參數(shù)
shell重定向
輸出重定向
“ command1 > file # 如果file中存在內(nèi)容將被清空覆蓋。如果追加使用command1 >>file
cat dir.txt
/dev/null文件
“ 寫(xiě)入到它的內(nèi)容都會(huì)被丟棄,會(huì)起到"禁止輸出"的效果,如果希望屏蔽stdout和stderr “ command > /dev/null 2>&1
注意:Linux命令行都會(huì)打開(kāi)三個(gè)文件
- 標(biāo)準(zhǔn)輸入文件:stdin文件描述符為0
- 標(biāo)準(zhǔn)輸出文件:stdout文件描述符為1
- 標(biāo)準(zhǔn)錯(cuò)誤文件:stderr文件描述符2
12 shell實(shí)戰(zhàn)
- 請(qǐng)將當(dāng)前目錄中demo.txt第二行第三列數(shù)據(jù)輸出到demo2.txt中
- 日志如下統(tǒng)計(jì)訪問(wèn)ip最多的前10個(gè)
uniq - 刪除排序文件中的重復(fù)行 sort對(duì)于文本進(jìn)行排序 -l 按照當(dāng)前環(huán)境排序. -m 合并已經(jīng)排序好的文件,不排序. -n 按照字符串的數(shù)值順序比較,暗含-b -r 顛倒比較的結(jié)果.
- 如何檢查文件系統(tǒng)中是否存在某個(gè)文件
- 每個(gè)腳本開(kāi)始的 #!/bin/sh 或 #!/bin/bash 表示什么意思 ?
“ #!/bin/bash 表示腳本使用 /bin/bash。對(duì)于 python 腳本,就是 #!/usr/bin/python
- &和&&區(qū)別
“ “&” 腳本在后臺(tái)運(yùn)行時(shí)使用它。“&&”當(dāng)前一個(gè)腳本成功完成才執(zhí)行后面的命令
- 腳本文件中,如何將其重定向標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤流到 log.txt 文件 ?
- 如何計(jì)算本地用戶(hù)的數(shù)目
- shell中進(jìn)行字符串比較和數(shù)字比較
- 統(tǒng)計(jì)內(nèi)存使用
結(jié)果
- 批量更改文件名
“ 批量修改123目錄下txt為txt.temp。將temp打包為test.tar.gz
8 awk文本處理工具
awk是一個(gè)處理文本文件的應(yīng)用程序,幾乎所有的Linux系統(tǒng)都自帶了這個(gè)程序
依次處理每一行,并讀取里面的每一個(gè)字段。對(duì)于處理生產(chǎn)環(huán)境的日志有著非常高校的作用
基本用法
上面 lan.txt 是 awk 需要處理的文本文件。前面單引號(hào)里面有一個(gè)大括號(hào),單引號(hào)里面就是每一行的處理動(dòng)作。其中 print 為打印命令,$0位當(dāng)前行,所以執(zhí)行結(jié)果就是把每一行原樣打印出來(lái)
print $0 即將標(biāo)準(zhǔn)輸入my name is lanlan ,c 重新打印一遍
為了方便,我們直接使用/etc/passwd文件進(jìn)行操作,
變量
上面我們說(shuō)了,可以使用符號(hào)“$+”數(shù)字的方式表示第幾個(gè)字段,其實(shí)還有一些變量可以直接表示相應(yīng)的字段。比如“$NFb” 表示最后一個(gè)字段
這里出現(xiàn)了雙引號(hào),表示原樣輸出
其他常用的內(nèi)置變量
- FILENAME:當(dāng)前文件名
- FS:字段分隔符,默認(rèn)是空格和制表符。
- RS:行分隔符,用于分割每一行,默認(rèn)是換行符。
- OFS:輸出字段的分隔符,用于打印時(shí)分隔字段,默認(rèn)為空格。
- ORS:輸出記錄的分隔符,用于打印時(shí)分隔記錄,默認(rèn)為換行符。
- OFMT:數(shù)字輸出的格式,默認(rèn)為%.6g。
函數(shù)
既然算是一門(mén)語(yǔ)言,函數(shù)當(dāng)然少不了,下面看一波常用的函數(shù)
函數(shù)toupper()用于將字符轉(zhuǎn)為大寫(xiě)
可以發(fā)現(xiàn)第一個(gè)字段輸出的時(shí)候變成了大寫(xiě)
- tolower():字符轉(zhuǎn)為小寫(xiě)。
- length():返回字符串長(zhǎng)度。
- substr():返回子字符串。
- sin():正弦。
- cos():余弦。
- sqrt():平方根。
- rand():隨機(jī)數(shù)。
5 條件
通過(guò)使用相應(yīng)的條件,過(guò)濾出自己想要的內(nèi)容
上菜
這里/usr/表示只輸出包含usr的行
這個(gè)例子輸出奇數(shù)行
下面的例子輸出第一個(gè)字段等于指定值的行。
5 if語(yǔ)句
通過(guò)if語(yǔ)句編寫(xiě)比較復(fù)雜的內(nèi)容
上面代碼輸出第一個(gè)字段的第一個(gè)字符大于m的行。
if 結(jié)構(gòu)還可以指定 else 部分。
9 進(jìn)程管理與定時(shí)任務(wù)和后臺(tái)執(zhí)行
crond是什么?
crond是一個(gè)可以在指定時(shí)間執(zhí)行一個(gè)shell腳本或者一系列的Linux命令。和Windows下的計(jì)劃任務(wù)類(lèi)似。當(dāng)安裝完操作系統(tǒng)后,默認(rèn)會(huì)安裝這個(gè)服務(wù)工具,并且會(huì)自動(dòng)啟動(dòng)crond進(jìn)程。
在Linux中任務(wù)的調(diào)度分為兩類(lèi)
- 系統(tǒng)任務(wù)的調(diào)度
系統(tǒng)會(huì)周期性的執(zhí)行一些工作,比如說(shuō)寫(xiě)緩存的數(shù)據(jù)到硬盤(pán),清理日志等
- 用戶(hù)任務(wù)的調(diào)度
用戶(hù)定期也會(huì)執(zhí)行一些任務(wù),比如用戶(hù)數(shù)據(jù)的備份,定時(shí)的郵件提醒等,這些都是通過(guò)crondtab來(lái)設(shè)置
那么crontab到底怎么用么
首先看看crontab的使用格式:
常見(jiàn)的選項(xiàng)
- -u user:很明顯是需要表明是那個(gè)用戶(hù)的crontab服務(wù),別瞎搞
- file:file是命名文件的名字,表示將file作為crontab的任務(wù)列表文件并載入到crontab中
- -e:e為edit,表示標(biāo)記某個(gè)用戶(hù)的crontab文件內(nèi)容
- -l:顯示用戶(hù)的crontab文件、
crontab的含義
創(chuàng)建的crontab文件,每一行代表一項(xiàng)任務(wù),每個(gè)字段都有對(duì)應(yīng)的設(shè)置規(guī)則,一共分為6個(gè)字段,分別為:
- minute:區(qū)間 0-59
- hour:區(qū)間0-23
- day:區(qū)間0-31
- month:區(qū)間1-12
- week:區(qū)間0-7 周日可以是0/7
- command
這里的command代表的是需要執(zhí)行的而命令,通常為腳本文件,
除了上面幾個(gè)字段,還需要注意幾個(gè)特殊字段
- *:代表所有可能的值
- ,:通過(guò),來(lái)表示區(qū)間范圍的值
- _:整數(shù)之間的中杠表示一個(gè)證書(shū)范圍
- 正斜線:表示時(shí)間的間隔頻率,比如0-23/2表示每?jī)蓚€(gè)小時(shí)執(zhí)行一次
開(kāi)始放幾個(gè)例子
這代表的是每天早上5點(diǎn)運(yùn)行backup.sh
每個(gè)工作日11:59pm進(jìn)行備份作業(yè)
每五分鐘運(yùn)行一個(gè)命令
crontab有哪些選項(xiàng)
crontab -e:修 改crontab文件,如果文件不存在會(huì)自動(dòng)創(chuàng)建
crontab -l:顯示crontab文件
crontab -r:刪除crontab 文件
crontab -ir:刪除crontab文件前提醒用戶(hù)
10后臺(tái)運(yùn)行
用途:不掛斷的運(yùn)行命令
語(yǔ)法:nohup Command [ Arg … ] [&]
-
無(wú)論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當(dāng)前目錄的 nohup.out 文件中。
-
如果當(dāng)前目錄的 “nohup.out” 文件不可寫(xiě),輸出重定向到“$HOME/nohup.out ”文件中。
-
如果沒(méi)有文件能創(chuàng)建或打開(kāi)以用于追加,那么 Command 參數(shù)指定的命令不可調(diào)用。
退出狀態(tài):該命令返回下列出口值:
-
126 可以查找但不能調(diào)用 Command 參數(shù)指定的命令。
-
127 nohup 命令發(fā)生錯(cuò)誤或不能查找由 Command 參數(shù)指定的命令。
-
否則,nohup 命令的退出狀態(tài)是 Command 參數(shù)指定命令的退出狀態(tài)。
使用 &
用途:在后臺(tái)運(yùn)行
一般兩個(gè)一起用
才疏學(xué)淺,難免有紕漏,如果你發(fā)現(xiàn)錯(cuò)誤的地方,麻煩告訴我,我對(duì)其修正。
和文件的權(quán)限,當(dāng)我們知道怎么用了以后,是不是就需要去了解他是怎么個(gè)設(shè)計(jì)理念呢,我們下期再見(jiàn)!
二、Linux基本結(jié)構(gòu)
才開(kāi)始接觸虛擬機(jī)的時(shí)候,確實(shí)很奇怪的,不過(guò)又覺(jué)得蠻新奇的,相信通過(guò)前面兩篇文章,你應(yīng)該裝好了自己的虛擬機(jī),也可以嘗試做做實(shí)驗(yàn),敲命令了。如果還沒(méi)有裝或者還沒(méi)有熟悉命令,趕快去試試,聽(tīng)話
在Linux中,系統(tǒng)默認(rèn)的用戶(hù)是root,其實(shí)和 windows 的 administrator 類(lèi)似,root 用戶(hù)可以操作操作系統(tǒng)的任何文件和設(shè)備,OMG,記住了,是大哥大,干啥都行,所以在生產(chǎn)環(huán)境就不要亂用root了,權(quán)利越大,責(zé)任越大吶。
1 系統(tǒng)與硬件相關(guān)
虛擬裝好了,我們就比較好奇這些配置都是什么。如果你還記得第一篇中的安裝過(guò)程,那么在這里的操作你就知道了 “原來(lái)是這樣”。
查看系統(tǒng)的 pci 設(shè)備
lspci 命令可以查看所有的 PCI 設(shè)備,比如主板,聲卡等
- 查看CPU信息
其中 processor 是邏輯處理器的唯標(biāo)識(shí)符,vendor-id 是處理器類(lèi)型,如果是英特爾的處理器,那么字符串就是genuinelntel。physical id 是每個(gè)封裝的唯一標(biāo)識(shí)符,也是一個(gè)物理的CPU,siblings 表示位于相同物理封裝中的邏輯處理器數(shù)量,core id 為每個(gè)內(nèi)核的唯一標(biāo)識(shí)符
在 siblings 和 CPU cores 有個(gè)對(duì)應(yīng)關(guān)系,如果 siblings 是 CPU cores 的兩倍,則系統(tǒng)支持超線程。
如果要查看 CPU 的個(gè)數(shù),那么可以通過(guò)下面的命令
如果要查看系統(tǒng)所有的邏輯CPU個(gè)數(shù)
如果要查看內(nèi)存的信息
從結(jié)果可以看出,目前總內(nèi)存為1.8G,可用1.5G,緩沖區(qū)占用1260KB。
查看磁盤(pán)分區(qū)的信息
從上圖我們可以看見(jiàn)虛擬了 42G 的磁盤(pán)以及每個(gè)分區(qū)的大小,是不是關(guān)于硬件相關(guān)的信息看的清清楚楚了,就這樣不再神秘
2 文件系統(tǒng)的了解
- 經(jīng)典樹(shù)形目錄
Linux 牛逼之一在于將所有的內(nèi)容以文件的形式展現(xiàn)出來(lái),通過(guò)一個(gè)樹(shù)形的結(jié)構(gòu)統(tǒng)一管理和組織這些文件。Linux 典型的樹(shù)形結(jié)構(gòu)如下圖所示
這個(gè)樹(shù)有個(gè)根,根下面很多**「杈」,「杈」**上可以長(zhǎng)出很多葉子
整個(gè)系統(tǒng)都是按照文件的形式放在根目錄中,同時(shí)會(huì)將文件分類(lèi),這樣形成一個(gè)樹(shù)形目錄結(jié)構(gòu),這樣的布局給管理文件帶來(lái)了很大的方便,我們確實(shí)需要去了解這些目錄結(jié)構(gòu),對(duì)于后續(xù)的系統(tǒng)排錯(cuò)還是蠻重要的噠。雖然有些啰嗦,不過(guò)這些圖確實(shí)是實(shí)打?qū)嵉漠?huà)出來(lái)的,沒(méi)事看看就知道了,不用記住。
- etc目錄
這個(gè)目錄主要存放的是管理文件用的相關(guān)配置文件,比較重要的 /etc/rc,用戶(hù)信息文件 /etc/passwd,具體的如下圖
- /usr目錄
這個(gè)目錄主要存放的是應(yīng)用程序和文件,如果在安裝軟件的時(shí)候,選擇默認(rèn)安裝的位置,通常就會(huì)默認(rèn)在這個(gè)位置,下次就別問(wèn)我裝的東西去哪里,what??具體信息如下圖
- /var目錄
通常用來(lái)存放系統(tǒng)運(yùn)行的日志文件,如下圖
- /dev 目錄
包含所有的設(shè)備文件
- /proc 目錄
這個(gè)目錄是虛擬目錄,主要存放的是內(nèi)存的映射,通過(guò)這個(gè)目錄和內(nèi)核的數(shù)據(jù)結(jié)構(gòu)打交道比如修改內(nèi)核參數(shù),獲取進(jìn)程的相關(guān)信息,具體信息如下
其他目錄
- /boot目錄
這么說(shuō)吧,你要是把這個(gè)目錄給干掉了,你就是大哥。它存放了啟動(dòng) Linux 的核心文件,包含鏡像文件和鏈接文件,破壞后系統(tǒng)基本上就不能啟動(dòng)
- /bin/sbin
當(dāng)你裝相關(guān)的軟件或者安裝包后,很多時(shí)候都會(huì)鏈接在這個(gè)目錄下面,另外這里也存放了平時(shí)我們使用的各種 shell 命令。比如cp,ls,dd等
對(duì)于sbin,這里的 s 是 super 的意思,意味著需要超級(jí)用戶(hù)才能執(zhí)行的命令。常見(jiàn)磁盤(pán)分區(qū) fdisk,創(chuàng)建文件系統(tǒng)的 mkfs就在這里
- /home
這個(gè)目錄是系統(tǒng)中每個(gè)用戶(hù)的工作目錄,每個(gè)用戶(hù)都會(huì)有自己主目錄,通常名稱(chēng)為用戶(hù)名,如果有個(gè)用戶(hù)是小藍(lán),那么主目錄就是xiaolan
- /lib
在開(kāi)發(fā)的過(guò)程中,很多共享庫(kù)文件等很多放在這里,這個(gè)目錄會(huì)包含引導(dǎo)進(jìn)程所需要的靜態(tài)庫(kù)文件。后續(xù)在分享程序開(kāi)發(fā)的時(shí)候會(huì)深入掰扯
- /root
一般用戶(hù)沒(méi)有進(jìn)入這個(gè)目錄的權(quán)限,它是root的主目錄
- /lost+found
保存丟失的文件。什么意思,如果我們不恰當(dāng)?shù)年P(guān)機(jī)操作,可能導(dǎo)致一些文件丟失,這些丟失的臨時(shí)文件可能就會(huì)存放在這里。當(dāng)重新啟動(dòng)的時(shí)候,引導(dǎo)程序就會(huì)運(yùn)行 fsck 程序并發(fā)現(xiàn)這個(gè)文件
- /tmp
用于存放臨時(shí)文件,隨時(shí)可能被刪除
3 CPU核心部件
這部分內(nèi)容是先過(guò)一邊,后續(xù)會(huì)對(duì)每一個(gè)部分進(jìn)行詳細(xì)的闡述
Linux 的內(nèi)核相當(dāng)于 CPU 的大腦,經(jīng)過(guò)了十幾年的共同努力,現(xiàn)在已經(jīng)到xxx核。
作為一個(gè)開(kāi)源操作系統(tǒng),也給予我們難得的機(jī)會(huì)去學(xué)習(xí)這個(gè)成熟的操作系統(tǒng),一個(gè)完整的計(jì)算機(jī)內(nèi)核包含五個(gè)部分,分別是內(nèi)存管理,進(jìn)程管理,進(jìn)程間通信,虛擬文件系統(tǒng)和網(wǎng)絡(luò)接口,這一部分在后面的文章會(huì)單獨(dú)介紹,先了解個(gè)大概,如果看過(guò)之前的面試連載文章,很多時(shí)候都會(huì)涉及到這些問(wèn)題,這么說(shuō)吧,在面試中的百分之八十的問(wèn)題,你都可以聯(lián)系到操作系統(tǒng)層面,或者和操作系統(tǒng)相關(guān)知識(shí)點(diǎn),相關(guān)設(shè)計(jì)理念巧合,當(dāng)然不是巧合,就是學(xué)習(xí)過(guò)往成熟的經(jīng)驗(yàn)罷了
- 內(nèi)存管理
我們知道,在區(qū)區(qū)的小內(nèi)存環(huán)境下,可以運(yùn)行很多的軟件。Linux 內(nèi)存管理中支持虛擬內(nèi)存,即在系統(tǒng)上可以運(yùn)行所有程序占用的內(nèi)存總量大于實(shí)際物理內(nèi)存,多余的這部分內(nèi)存是從磁盤(pán)申請(qǐng)所得,在內(nèi)存緊缺的情況下,內(nèi)存管理就會(huì)負(fù)責(zé)在磁盤(pán)和內(nèi)存之間進(jìn)行交換。
- 進(jìn)程管理
Linux 可多任務(wù)運(yùn)行,那么在單CPU的情況下怎么支持多任務(wù)呢。這個(gè)任務(wù)就得交給進(jìn)程調(diào)度來(lái)完成了。每當(dāng)系統(tǒng)運(yùn)行的時(shí)候,調(diào)度器會(huì)分配一個(gè)時(shí)間片,然后調(diào)度器根據(jù)不同的時(shí)間片選擇進(jìn)程運(yùn)行。比如A進(jìn)程的時(shí)間片用完了,那么調(diào)度器會(huì)選擇一個(gè)新的進(jìn)程繼續(xù)運(yùn)行,由于這個(gè)切換的速度和頻率都很快,以致于讓我感覺(jué)是多個(gè)程序在同時(shí)的運(yùn)行,實(shí)際上CPU 在同一個(gè)時(shí)間只有一個(gè)進(jìn)程在運(yùn)行。
- 進(jìn)程間通信
各個(gè)進(jìn)程的友好相處才能共建繁華生態(tài)嘛。不同的進(jìn)程有自己的進(jìn)程空間,要通信就得找只隔壁耳朵內(nèi)核中專(zhuān)。在一般情況下,一個(gè)進(jìn)程等待硬件操作完成就會(huì)被掛起,硬件操作完畢進(jìn)程回復(fù)執(zhí)行,這個(gè)協(xié)調(diào)過(guò)程就是進(jìn)程間的通信機(jī)制了
- 虛擬文件系統(tǒng)
為了讓眾多的文件系統(tǒng)有一個(gè)統(tǒng)一的接口,采用了通用的文件模型—虛擬文件系統(tǒng)。虛擬文件系統(tǒng)分為邏輯文件系統(tǒng)和設(shè)備驅(qū)動(dòng)程序。其中邏輯文件系統(tǒng)如 ex2,ex3 等。設(shè)備驅(qū)動(dòng)程序包含了硬件控制器所編寫(xiě)的設(shè)備驅(qū)動(dòng)程序模塊。
- 網(wǎng)絡(luò)接口
首先需要知道每一種網(wǎng)絡(luò)硬件設(shè)備都會(huì)對(duì)應(yīng)相應(yīng)的設(shè)備驅(qū)動(dòng)程序,網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序主要負(fù)責(zé)與硬件設(shè)備來(lái)進(jìn)行通信
4 CPU運(yùn)行機(jī)制
知道了CPU的目錄結(jié)構(gòu),現(xiàn)在說(shuō)說(shuō)其運(yùn)行機(jī)制,主要包括了 init 系統(tǒng),系統(tǒng)的運(yùn)行級(jí)別,系統(tǒng)的關(guān)閉方法
- Linux 初始化init系統(tǒng)
啟動(dòng)首先從 Bios 開(kāi)始,接下來(lái) Linux 引導(dǎo)程序?qū)?nèi)核載入內(nèi)存進(jìn)行內(nèi)核初始化,隨后啟動(dòng) init 進(jìn)程,這個(gè)進(jìn)程是系統(tǒng)的第一個(gè)進(jìn)程,負(fù)責(zé)產(chǎn)出其他的進(jìn)程
僅僅讓內(nèi)核運(yùn)行起來(lái)還沒(méi)啥用處,還需要管理,控制這些進(jìn)程,從而系統(tǒng)進(jìn)入一個(gè)用戶(hù)設(shè)定的用戶(hù)模式,即 init 系統(tǒng)
起初采用 sysinit,它主要依賴(lài)于腳本,串行啟動(dòng)進(jìn)程,最大的缺點(diǎn)就是慢,在服務(wù)器上看還沒(méi)有什么影響,如果是在手機(jī)移動(dòng)端,這得急死人,隨后出現(xiàn)了systemd取代了慢的upstart
在 Wndows 中,系統(tǒng)有安全運(yùn)行模式和正常運(yùn)行的模式,在 Linux 中的運(yùn)行級(jí)別更加的靈活
一共有七種運(yùn)行級(jí)別,定義在 /etc/inittab 中,sysinit 會(huì)檢查 /etc/inittab 文件查看是否含有 initdefault 來(lái)啟動(dòng)一個(gè)默認(rèn)的運(yùn)行級(jí)別
-
0:表示關(guān)機(jī)模式
-
1:單用戶(hù)模式
-
6:重啟模式,關(guān)閉所有的運(yùn)行進(jìn)程
-
2:表示多用戶(hù)模式
-
3:表示多用戶(hù)模式,支持nfs服務(wù)
-
4:表示基本不用的用戶(hù)模式,可以實(shí)現(xiàn)特定的等了請(qǐng)求
-
5:表示完成多用戶(hù)模式,默認(rèn)等了到x-windows系統(tǒng)
這些數(shù)字和 init 結(jié)合就產(chǎn)生了相應(yīng)的含義,比如init 1表示系統(tǒng)進(jìn)入單用戶(hù)模式,、init 6表示系統(tǒng)將重新啟動(dòng)
有了新的systemd管理體系以后,默認(rèn)的運(yùn)行級(jí)別通過(guò)軟連接的方式實(shí)現(xiàn)。
查看系統(tǒng)的默認(rèn)target,如下所示
如果需要修改運(yùn)行級(jí)別和targe的對(duì)應(yīng)關(guān)系,可以通過(guò)下面命令實(shí)現(xiàn)
5 系統(tǒng)關(guān)機(jī)過(guò)程
關(guān)機(jī)方式很多,比如init shutdown halt reboot,下面我們分別看看這些方式以及
- shutdown
才開(kāi)始學(xué)習(xí) Linux 操作系統(tǒng),不要?jiǎng)硬粍?dòng)的就拔電源,我們知道此時(shí)很多的進(jìn)程正在如火如荼的進(jìn)行,你的這一操作,很可能就導(dǎo)致場(chǎng)面混亂,很多進(jìn)程數(shù)據(jù)丟失,嚴(yán)重一點(diǎn)可能進(jìn)程間開(kāi)始打架,導(dǎo)致硬件設(shè)備損壞
shutdown 是 shell 編寫(xiě)的程序,必須要超級(jí)用戶(hù)才能執(zhí)行。首先通過(guò)廣播的方式告訴系統(tǒng)所有的用戶(hù),系統(tǒng)將在xx時(shí)間關(guān)閉,同時(shí) login 指令凍結(jié),意味著其他用戶(hù)此時(shí)不能等了,時(shí)間一到,i就會(huì)發(fā)信號(hào)給shuinit程序吧,init程序就會(huì)改變運(yùn)行級(jí)別
shutdown命令之shutdown常見(jiàn)參數(shù)
-
-f:重新啟動(dòng)的時(shí)候不執(zhí)行fsck
-
-k:只是發(fā)送西悉尼給所有用戶(hù)但不會(huì)真正關(guān)機(jī)
-
-r:shutdown之后重啟系統(tǒng)
-
時(shí)間:設(shè)置多長(zhǎng)時(shí)間可以九天跑一次
-
halt命令
-
reboot
reboot和halt類(lèi)似,只是reboot是關(guān)機(jī)后重啟
halt參數(shù)
- -i:關(guān)機(jī)之前關(guān)閉所有的網(wǎng)絡(luò)接口
- -n:halt執(zhí)行的時(shí)候不會(huì)調(diào)用系統(tǒng)指令sync
init主要用戶(hù)系統(tǒng)在不同運(yùn)行級(jí)別的切換,切換工作是立即完成的
6 系統(tǒng)服務(wù)管理工具
在 Centos7 以后,一個(gè)非常大的改變即使用了 systemd 管理工具,它不僅可以完成系統(tǒng)初始化的工作,還可以對(duì)系統(tǒng)和服務(wù)進(jìn)行管理。同時(shí)它也兼容了之前的 sysinit,之前的版本中,這些初始化腳本服務(wù)存在于 /etc/rc.d/init 中,現(xiàn)在被.service文件擴(kuò)展結(jié)尾的代替
配置文件位于 /etc/systemd 目錄下,配置工具的命令使用 /bin/sbin 目錄下,備用的配置文件位于 /lib/systemd 目錄,可以通過(guò)rpm -ql systemd查看所有的路徑
另外,為了方便操作,systemd提供了強(qiáng)大的命令行工具systemctl,下面我們看看這些常見(jiàn)的啟動(dòng)停止服務(wù)的命令
啟動(dòng) 停止 重啟服務(wù)
通過(guò)systemctl啟動(dòng)一個(gè)服務(wù)
停掉此服務(wù)
重啟服務(wù)
關(guān)閉服務(wù)
如果要查看這個(gè)服務(wù)狀態(tài)
三、Linux安全
相信通過(guò)上一篇的分享,已經(jīng)架設(shè)了屬于自己的Linux,就這樣得空客就安全了嗎?當(dāng)然不是,今天我們一起看看Linux本省得一些安全策略。對(duì)了,關(guān)于Linux的內(nèi)容是系列內(nèi)容,希望大家可以從0開(kāi)始搭建,然后按步驟操作,后續(xù)涉及的集群,大數(shù)據(jù),可視化等一些的學(xué)習(xí)都會(huì)基于這個(gè)環(huán)境,所以mark住沒(méi)問(wèn)題。
下午回到家就想睡覺(jué),醒來(lái)以為快早上了,一看時(shí)間原來(lái)才晚上十一點(diǎn)了,感冒了兩周,頹廢了半個(gè)月,心態(tài)不咋好,現(xiàn)在又來(lái)和你們見(jiàn)面了,加油!
1 Linux安全策略
在生產(chǎn)環(huán)境幾乎都是 Linux,為了保護(hù)我們程序,防止我們功能被破壞,會(huì)采取一些列的措施,所以提前學(xué)習(xí)和了解這些策略勢(shì)必也會(huì)為后面的學(xué)習(xí)打下不錯(cuò)的基礎(chǔ)
常見(jiàn)的攻擊類(lèi)型有哪些呢
- 密碼暴力破解
目的比較明確,通過(guò)爆破工具破解用戶(hù)的密碼,進(jìn)入服務(wù)器獲取資源進(jìn)行系統(tǒng)的破壞。我們可以想象一個(gè)字典,字典足夠強(qiáng)大,逐一匹配就可以找到服務(wù)器的密碼
- 拒絕服務(wù)攻擊
通過(guò)大量的請(qǐng)求來(lái)占用足夠多的服務(wù)資源,使得網(wǎng)絡(luò)阻塞或者服務(wù)器死機(jī),導(dǎo)致 Linux 服務(wù)器無(wú)法給用戶(hù)提供服務(wù)。常見(jiàn)的拒絕服務(wù)攻擊有 Dos 與分布式拒絕服務(wù)攻擊。黑客通常是利用偽裝的源地址或者控制其他的目標(biāo)機(jī)器發(fā)出大量的連接請(qǐng)求,由于服務(wù)器無(wú)法在短時(shí)間接受這么多請(qǐng)求,從而導(dǎo)致系統(tǒng)資源耗盡,服務(wù)掛起。
- 應(yīng)用程序漏洞攻擊
這種情況一般是黑客通過(guò)類(lèi)似掃描工具掃描服務(wù)器可能存在的漏洞,然后根據(jù)漏洞滲入到服務(wù)器進(jìn)行相應(yīng)的破壞,常見(jiàn)比如sql注入,漏洞攻擊,網(wǎng)頁(yè)權(quán)限漏洞等
如何進(jìn)行防范呢
徹底的防范是不可能,但是可以盡全力的防范,通常需要一系列的安全設(shè)備和規(guī)則進(jìn)行約束
- 網(wǎng)絡(luò)傳輸?shù)陌踩?/strong>
常見(jiàn)的網(wǎng)絡(luò)安全設(shè)備有硬件防火墻,網(wǎng)絡(luò)入侵檢測(cè),路由器,交換機(jī)等。防火墻對(duì)進(jìn)出網(wǎng)絡(luò)的主機(jī)進(jìn)行規(guī)則匹配,盡量保證合法的主機(jī)進(jìn)入網(wǎng)絡(luò),可是有些攻擊行為是在防火墻允許的范圍內(nèi),這個(gè)時(shí)候防火墻就無(wú)所能及了,就需要諸如IDS設(shè)備來(lái)輔助。IDS會(huì)對(duì)系統(tǒng)的整體運(yùn)行情況進(jìn)行監(jiān)控,盡全力發(fā)現(xiàn)攻擊企圖,從而保證網(wǎng)絡(luò)系統(tǒng)資源的機(jī)密性,完整性和可用性
- 操作系統(tǒng)的安全
操作系統(tǒng)安全即服務(wù)器本身的一些安全設(shè)置和優(yōu)化。比如系統(tǒng)內(nèi)核的定期升級(jí),自帶軟件的更新,配置 iptable 規(guī)則,關(guān)閉無(wú)關(guān)服務(wù)等
很多常見(jiàn)的病毒程序,防火墻很難阻止,此時(shí)如果系統(tǒng)存在殺毒工具也是可以直接破掉第一道防線
- 應(yīng)用軟件安全
應(yīng)用軟件安全顧名思義即部署在服務(wù)器中應(yīng)用的安全策略配置,比如我們會(huì)對(duì)數(shù)據(jù)庫(kù)進(jìn)行配置防止非規(guī)則內(nèi)的連接數(shù)據(jù)庫(kù)等
再比如 SQL注入,跨站腳本都屬于應(yīng)用軟件安全漏洞造成的攻擊
那么常用的安全策略有哪些呢
- 軟件及時(shí)更新
這一塊我估計(jì)很多人都不會(huì)在意,畢竟需要重新安裝比較麻煩,但是很多時(shí)候需要更新,是因?yàn)橛新┒戳?#xff0c;意味著Hack利用這些漏洞就很容易進(jìn)你的系統(tǒng),所以需要尤其注意
- 端口服務(wù)
一般一個(gè)有效的連接,即客戶(hù)端和服務(wù)端端口的建立過(guò)程。而端口在系統(tǒng)中也是有一些規(guī)則的
在Linux操作系統(tǒng)中,系統(tǒng)定義了 65535 個(gè)端口,這些端口又分為兩個(gè)部分,按照 1024 分割,分為只有 root 用戶(hù)才能啟用的端口和客戶(hù)端的端口,對(duì)于只有root用戶(hù)才能啟動(dòng)的端口:
也就是 0-1023 的端口,需要 root 才能啟用,因?yàn)檫@些端口預(yù)留給一些預(yù)設(shè)的服務(wù)使用,不經(jīng)常使用的端口最好關(guān)閉,比如 Ftp 的21端口,25的 Mail 服務(wù)端口
客戶(hù)端的端口
1024端口以上的通常給客戶(hù)端軟件使用,由軟件隨機(jī)分配,對(duì)于大于1024的端口不受root的限制,比如默認(rèn)的3306就是數(shù)據(jù)庫(kù)的默認(rèn)端口
如何查看端口的狀態(tài)呢?
通過(guò) netstat -tunl 查看
從上圖可以發(fā)現(xiàn)啟用了22端口,這是默認(rèn)就打開(kāi)了,我的遠(yuǎn)程工具XSHELL即就是連接的這個(gè)端口
如何查看鏈接的狀態(tài)呢
如果查看端口對(duì)應(yīng)的什么服務(wù),執(zhí)行什么命令呢
服務(wù)與端口是什么關(guān)系
我們可能經(jīng)常聽(tīng)到什么服務(wù)對(duì)應(yīng)什么端口,他們兩是一一對(duì)應(yīng)的關(guān)心,沒(méi)有服務(wù)運(yùn)行即沒(méi)有端口對(duì)應(yīng),那是不是這些服務(wù)都必須使用默認(rèn)的端口呢
當(dāng)然不是,大部分的軟件都會(huì)有配置文件,根據(jù)相應(yīng)的配置就好了
一定要記得關(guān)閉不必要的服務(wù)
在Linux中,服務(wù)的啟動(dòng)和關(guān)閉管理有兩種方式,第一種方式是直接啟動(dòng)腳本,在 Centos7 之前是在 /etc/init.d 目錄下的服務(wù)啟動(dòng)和關(guān)閉。在 Centos7 以后,使用 systemctl 工具來(lái)完成,這個(gè)在后續(xù)的系統(tǒng)管理會(huì)詳細(xì)給大家說(shuō)說(shuō)。
如果要啟動(dòng) sshd 服務(wù),可以使用下面的命令
另外一種情況是通過(guò)超級(jí)服務(wù)管理一些常用的網(wǎng)絡(luò)服務(wù),比如 Centos 的超級(jí)服務(wù) Xinetd,這個(gè)服務(wù)可以管理的服務(wù)如 Vsftpd 等,我們可以通過(guò) /etc/init.d/xinted restart 來(lái)完成服務(wù)的重啟
在Linux中,通過(guò) chkconfig 命令或者 systemctl 判斷服務(wù)是否開(kāi)啟
我們?cè)趺粗狸P(guān)閉哪些不必要的服務(wù)呢
這里列出一個(gè)表格
還有一些其他的安全設(shè)置
- 禁止系統(tǒng)響應(yīng)任何從外部來(lái)的ping請(qǐng)求
ping通過(guò)用來(lái)檢查網(wǎng)絡(luò)的連通性,如果能夠ping通,攻擊者就知道這是一個(gè)活躍的機(jī)器,那么怎么禁止ping請(qǐng)求呢
- 刪除不必要的用戶(hù)組
刪除系統(tǒng)不必要的用戶(hù) userdel username
刪除系統(tǒng)不必要的組 groupdel groupname
- 關(guān)閉selinux
首先它是內(nèi)核強(qiáng)制訪問(wèn)控制安全系統(tǒng),,由于它和現(xiàn)在的linux應(yīng)用程序和內(nèi)核模塊有一些兼容問(wèn)題,如果要查看是否已啟用
通過(guò)使用 getenforce,如果要關(guān)閉selinux,修改下面的文件
2 說(shuō)說(shuō)防火墻
防火墻有硬件防火墻和軟件防火墻,在這里主要介紹軟件防火墻。根據(jù)工作方式的不同又分為封包式防火墻和應(yīng)用層網(wǎng)關(guān)防火墻
硬件防火墻使用專(zhuān)有的操作系統(tǒng),如果按照工作方式來(lái)劃分,那么防火墻也分為過(guò)濾式防火墻、應(yīng)用層網(wǎng)關(guān)防火墻兩種,后面給大家介紹的 iptable 即屬于過(guò)濾式防火墻
Iptable 是 Linux 中內(nèi)嵌好的防火墻軟件,集成在內(nèi)核中,因此效率非常高的。它可以通過(guò)你設(shè)置一些封包過(guò)濾規(guī)則來(lái)定義什么數(shù)據(jù)包可以接受,什么數(shù)據(jù)包剔除
iptable的使用環(huán)境?
- 保護(hù)自身本機(jī)
windows中有防火墻軟件,iptables類(lèi)似,在Linux中的位置如下
從上圖可以發(fā)現(xiàn),在交互的過(guò)程中,首先要經(jīng)過(guò) Linux 自身的 iptables 防火墻,作為第一層的安全過(guò)濾,隨后經(jīng)過(guò)防火墻的第二層的過(guò)濾最終到達(dá)互聯(lián)網(wǎng),所以可以說(shuō)Linux自帶的iptables是系統(tǒng)安全的最后一道防線。
- 獨(dú)立的Linux主機(jī)對(duì)整個(gè)網(wǎng)絡(luò)進(jìn)行防護(hù)
如下圖所示,部署在Linux路由器上對(duì)整個(gè)局域網(wǎng)進(jìn)行安全防護(hù)
從位置來(lái)看,位于外網(wǎng)與局域網(wǎng)之間,防火墻在路由器的上面,所以先對(duì)進(jìn)入局域網(wǎng)的數(shù)據(jù)包進(jìn)行過(guò)濾,這樣不就對(duì)局域網(wǎng)主機(jī)進(jìn)行了訪問(wèn)控制,以此來(lái)保護(hù)局域網(wǎng)的安全
- 多臺(tái)Linux主機(jī)對(duì)Lan進(jìn)行多層安全防護(hù)
通常局域網(wǎng)劃分了子網(wǎng),在子網(wǎng)錢(qián)部署一道Linux防火墻,然后將一些保密的資源放在這個(gè)子網(wǎng)里,子網(wǎng)通過(guò)設(shè)置第二道Linux防火墻設(shè)置相對(duì)更高的安全等級(jí)
- 對(duì)DMZ進(jìn)行安全防護(hù)
DMZ區(qū)域通常將互聯(lián)網(wǎng)與局域網(wǎng)隔離開(kāi)的一個(gè)特殊網(wǎng)絡(luò)區(qū)域,通常部署一些不包含機(jī)密信息的服務(wù)器,比如ftp,這樣來(lái)自外網(wǎng)的訪問(wèn)者可以通過(guò)Linux防火墻來(lái)訪問(wèn)DMZ的服務(wù),即使DMZ服務(wù)器遭到破壞,也不會(huì)影響另一部分網(wǎng)絡(luò)
iptables的基本使用是如何的?
- iptables 的前生后世
Linux最早出現(xiàn)的防火墻叫做 ipfw,是基于Linux2.0內(nèi)核的。隨后在 Linux2.2 中推出了ipchains,語(yǔ)法更容易理解且功能更強(qiáng)大,隨后 iptables 在 Linux2.4 出現(xiàn),同時(shí)也包含了 ipchains,但是兩者無(wú)法兼容,iptables防火墻越來(lái)越強(qiáng)大,Linux2.4以后就基本上使用iptables防火墻了
- iptables的組成
iptables=ip tables,意味著是IP表的意思,對(duì)的,它是由多個(gè)表組成,且每個(gè)表的用途不一樣,在每個(gè)表中定義了很多鏈,通過(guò)這些鏈設(shè)置規(guī)則和策略
iptables呢有三種表的選項(xiàng),管理本機(jī)數(shù)據(jù)進(jìn)出的 filter 表,管理防火前內(nèi)部主機(jī)的 NAT 表和改變包頭內(nèi)容的mangle表
先來(lái)看看filter進(jìn)行信息表的過(guò)濾,分別包含了INPUT、OUTPUT和FORWARD鏈
NAT表主要用于網(wǎng)絡(luò)地址轉(zhuǎn)換,再上一個(gè)篇也有說(shuō)過(guò),它包含了PREROUTING、POSTROUTING和OUTPUT鏈
mangle表包含了一些用于標(biāo)記高級(jí)路由的信息報(bào),可以改變包以及包頭內(nèi)容,如TTL、TOS,MARK。它知識(shí)在內(nèi)核空間為包設(shè)置一個(gè)標(biāo)記而已,這個(gè)表內(nèi)置了五個(gè)鏈:PREROUTING、POSTROUTING、OUTPUT、INPUT和FORWARD
通過(guò)多個(gè)路由規(guī)則和預(yù)設(shè)規(guī)則組成了功能鏈,然后多個(gè)功能鏈組成功能表,多個(gè)功能表組成iptables防火墻
iptables的執(zhí)行過(guò)程是怎么樣的呢?
當(dāng)數(shù)據(jù)包到達(dá)Linux主機(jī),首先進(jìn)行 iptables 過(guò)濾,如果數(shù)據(jù)包滿(mǎn)足規(guī)則1指定的條件則直接執(zhí)行相應(yīng)的操作,后面的2,3規(guī)則就不再理會(huì)
舉個(gè)例子
假設(shè)目前這個(gè) LInux 可以對(duì)外提供 www 的服務(wù),對(duì)于網(wǎng)絡(luò) 192.168.50.0/24 中的網(wǎng)絡(luò)主機(jī)開(kāi)放訪問(wèn)www服務(wù),但是禁止192.168.50.133訪問(wèn)www服務(wù),規(guī)則如下
- 規(guī)則1:禁止192.168.50.133主機(jī)訪問(wèn)www服務(wù)
- 規(guī)則2:允許本地網(wǎng)絡(luò)訪問(wèn)www服務(wù)
這樣子設(shè)置完規(guī)則后,本地的網(wǎng)絡(luò)除了133不能訪問(wèn)以外,其他的都能訪問(wèn)。如果反過(guò)來(lái)
- 規(guī)則1:允許本地網(wǎng)絡(luò)192.168.50.0/24訪問(wèn)www服務(wù)
- 規(guī)則2:禁止192.168.50.133主機(jī)訪問(wèn)www服務(wù)、
此時(shí)的規(guī)則1允許所有主機(jī)訪問(wèn)Linux服務(wù)器的www服務(wù),自然也包含了133主機(jī),規(guī)則2將顯得毫無(wú)意義
iptables的使用語(yǔ)法是怎么樣的呢
- 啟動(dòng)和關(guān)閉iptables
iptables的防火墻規(guī)則如何查看以及如何清除修改?
格式:iptabls [-t tables] -L -vn -FXZ- 查看當(dāng)前系統(tǒng)filter表的幾條鏈規(guī)則
3 用戶(hù)以及用戶(hù)組的管理
用戶(hù)組
Linux是一個(gè)真實(shí)且多用戶(hù)多任務(wù)的操作系統(tǒng),意味著張三王五李四都可以同時(shí)使用同一個(gè)Linux操作系統(tǒng),但是他們?nèi)齼翰荒芑ハ嘣L問(wèn)各自的內(nèi)容,不同的用戶(hù)有不同的權(quán)限,每個(gè)用戶(hù)在權(quán)限范圍內(nèi)完成不同的任務(wù),Linux正是通過(guò)這樣的權(quán)限劃分和管理實(shí)現(xiàn)多用戶(hù)的運(yùn)行機(jī)制
Linux用戶(hù)的分類(lèi)是怎么樣的呢
- 超級(jí)用戶(hù)
超級(jí)用戶(hù),默認(rèn)為root,具有最高的權(quán)限
- 普通用戶(hù)
只能對(duì)自己目錄下的文件進(jìn)行訪問(wèn)
- 虛擬用戶(hù)
最大的特點(diǎn)是不能訪問(wèn)登錄系統(tǒng),他們的存在主要是為了方便系統(tǒng)管理,滿(mǎn)足相關(guān)系統(tǒng)進(jìn)程對(duì)文件屬性的要求
用戶(hù)和組
用戶(hù)通過(guò)向Linux申請(qǐng)用戶(hù)訪問(wèn)系統(tǒng),這樣可以合理的利用和控制系統(tǒng),同時(shí)也可以幫助用戶(hù)組織文件,達(dá)到提供對(duì)用戶(hù)文件的安全性保護(hù)的目的
什么是用戶(hù)組呢
有時(shí)候需要協(xié)同辦公,假設(shè)一共10個(gè)人,讓這10個(gè)人對(duì)文件的操作具有相同的權(quán)限,需要給每個(gè)用戶(hù)授權(quán),這樣豈不是太麻煩了,Linux就使用組的概念,讓屬于組的用戶(hù)都具有相同的權(quán)限
用戶(hù)和組的關(guān)系
用戶(hù)和組的關(guān)系可以是一對(duì)一,也可以是一對(duì)多設(shè)置多對(duì)多
- 一對(duì)一:這個(gè)組就只有一個(gè)用戶(hù)
- 一對(duì)多:這個(gè)用戶(hù)存在于多個(gè)組中,具有多個(gè)組的共同權(quán)限
- 多對(duì)1:多個(gè)用戶(hù)存在一個(gè)組,具有相同權(quán)限
- 多對(duì)多:多個(gè)用戶(hù)存在于多個(gè)組
用戶(hù)的配置文件在哪兒?
用戶(hù)和組相關(guān)配置文件,我們分別查看如下幾個(gè)文件
- /etc/passwd
這個(gè)文件是系統(tǒng)用戶(hù)配置文件,起格式如下
用戶(hù)名:密碼:用戶(hù)標(biāo)識(shí)號(hào):組標(biāo)識(shí)號(hào):注釋描述:主目錄:默認(rèn)shell
看看/etc/passwd是什么樣子
詳細(xì)說(shuō)說(shuō)這些都是什么意思
- 用戶(hù)名:用戶(hù)賬戶(hù)
- 密碼:為了保護(hù)用戶(hù)隱私,這里面存放的都是一個(gè)特殊字符,加密的用戶(hù)密碼存放在/etc/shadow中
- 用戶(hù)標(biāo)識(shí)號(hào):用戶(hù)的UID,每個(gè)用戶(hù)都會(huì)有一個(gè)UID且唯一,0是超級(jí)用戶(hù)的標(biāo)識(shí),1-99由系統(tǒng)保留,
作為普通用戶(hù),UID從500開(kāi)始,用戶(hù)的權(quán)限和角色也是根據(jù) UID 而定,如果把普通用戶(hù)的 UID 設(shè)置為0,將擁有root權(quán)限,這個(gè)非常的危險(xiǎn)
- 組標(biāo)識(shí)號(hào):組的GID,記錄用戶(hù)所在組,對(duì)應(yīng)于/etc/group文件的一條記錄
- 主目錄:用戶(hù)登錄默認(rèn)所處的目錄
- 默認(rèn)shell:默認(rèn)使用的用戶(hù)解析器,用戶(hù)的所有操作都是通過(guò)shell傳遞給內(nèi)核的
為了保證用戶(hù)的密碼安全,使用了/etc/shadow
- 用戶(hù)名:與/etc/passwd的用戶(hù)名相同的含義
- 加密密碼:存放的是加密以后的用戶(hù)密碼字符串,如果字段是* !等,對(duì)應(yīng)的用戶(hù)不能登錄系統(tǒng)
- 最后一次的修改時(shí)間:表示從某個(gè)時(shí)間起,到用戶(hù)最近一次修改密碼的間隔天數(shù)
- 最小間隔時(shí)間:兩次修改密碼之間的最小時(shí)間間隔
- 最大時(shí)間間隔:兩次修改密碼之間的最大時(shí)間間隔
- 警告時(shí)間:系統(tǒng)開(kāi)始警告到密碼正式失效的時(shí)間
- 不活動(dòng)時(shí)間:表示用戶(hù)密碼作廢以后多少天,系統(tǒng)禁止這個(gè)用戶(hù)
- 失效時(shí)間:用戶(hù)的賬號(hào)生存期
/etc/group是干啥的
- 組名:用戶(hù)組的名稱(chēng),組名不能重復(fù)
- 密碼:存放用戶(hù)組加密后密碼字串,默認(rèn)設(shè)置在/etc/shadow文件中,而這里的x代替
- 組標(biāo)識(shí)號(hào):Gid與/etc/passwd中組標(biāo)識(shí)號(hào)對(duì)應(yīng)
- 組內(nèi)用戶(hù)列表:多個(gè)用戶(hù)使用逗號(hào)分隔
/etc/default/useradd文件
為什么我們通過(guò) useradd 命令創(chuàng)建一個(gè)用戶(hù)后,默認(rèn)在 /home 下且使用的shell是 /bin/bash ,看看 /etc/default/useradd 就明白了
/etc/default/useradd 定義了新建用戶(hù)的一些默認(rèn)屬性,比如用戶(hù)的主目錄,使用 shell 等,通過(guò)更改增額文件就可以改變新建用戶(hù)的默認(rèn)屬性值
用戶(hù)的管理工具有哪些?
- groupadd命令
groupadd用來(lái)新建用戶(hù)組,其語(yǔ)法格式如下所示
groupadd -g gid group這里的選項(xiàng) -g 表示指定新建用戶(hù)組的GID,這個(gè)GID必須唯一
選項(xiàng)-o:一般和-g同時(shí)使用,表示新用有的一直y戶(hù)組gid和系統(tǒng)已y
此時(shí)創(chuàng)建一個(gè)lan_group1用戶(hù)組和lan——group2用戶(hù)組
group -g 1110 lan_group1 Group -g 1120 lan_group2 More /etc/group| grep lan_group1- groupdel命令
groupdel用于刪除用戶(hù)組
groupdel 名稱(chēng)
如果刪除lan_group1
groupdel lan_group1詳細(xì)說(shuō)說(shuō)useradd/usermod等命令
- useradd
如果在使用useradd的時(shí)候,不使用任何的參數(shù),那么系統(tǒng)首先會(huì)讀取配置文件/etc/login.defs和/etc/default/useradd,然后根據(jù)這兩個(gè)配置文件來(lái)添加用戶(hù)。隨后想/etc/passwd和/etc/group添加用戶(hù)和用戶(hù)組記錄,同時(shí)會(huì)在/etc/passwd中添加隊(duì)以ing的加密文件。接著系統(tǒng)就會(huì)在/etc/default/useradd中增加用戶(hù)主目錄,這樣一個(gè)主目錄就算建立了。
useradd的基本使用和常用選項(xiàng)
- -u uid:唯一用戶(hù)標(biāo)識(shí)號(hào)
- -g group:指定用戶(hù)登錄的默認(rèn)組
- -d home:指定新建用戶(hù)的默認(rèn)主目錄,如果不指定在,則會(huì)在etc/default/useradd中創(chuàng)建用戶(hù)主目錄
- -e expire:指定用戶(hù)的賬號(hào)過(guò)期時(shí)間
如何更改用戶(hù)的賬戶(hù)屬性信息
通過(guò)usermod修改用戶(hù)的賬戶(hù)信息。
usermod -u -g -G -d .....常用的選項(xiàng)
- -u uid:指定用戶(hù)新uid,唯一
- -d 主目錄:修改用戶(hù)登陸的主目錄
- -c 注釋:修改用戶(hù)的注釋信息
- -f:失效日
如果要?jiǎng)h除用戶(hù)呢
通過(guò)userdel刪除用戶(hù),指定"-r"參數(shù)不僅刪除用戶(hù),還會(huì)刪除用戶(hù)的主目錄
好了舉一個(gè)完整一點(diǎn)的例子
- 添加一個(gè)用戶(hù)lan_linux,所屬用戶(hù)組為base_linux,附加用戶(hù)組為forme_linux,同時(shí)指定用戶(hù)的默認(rèn)主目錄為/opt/base_linux
- 添加用戶(hù)test,指定UID為666,默認(rèn)shell為/bin/sh,指定用戶(hù)組為上面的
- 修改用戶(hù)test的主用戶(hù)組為test_modify,同時(shí)修改test的附加組
4 文件權(quán)限
通過(guò) ls 命令就可以查看文件以及目錄的權(quán)限信息,如果使用 ls -al則還可以查看隱藏文件
為了更加詳細(xì)的了解每一行各個(gè)段什么意思,我們?nèi)〕鲆恍?/p>
第一列由10個(gè)字符組成,其中分為4個(gè)部分,拆解如下
- 文檔類(lèi)型,其中d表示目錄,l 表示軟連接。當(dāng)為 - 表示是文件,為 c 表示字符設(shè)備文件
接下來(lái)的三個(gè)部分,3個(gè)字符為一組,r-讀,w-寫(xiě),x-執(zhí)行
- 第二個(gè)部分 user 部分,是對(duì)文檔所有者權(quán)限的設(shè)定,rwx 表示用戶(hù)對(duì) xxx 有讀寫(xiě)執(zhí)行的所有權(quán)
- group部分,是文檔所屬用戶(hù)組權(quán)限的設(shè)定
- other部分是對(duì)文檔所有者之外的其他用戶(hù)的權(quán)限設(shè)定
第二列表示文檔的連接數(shù),表示有多少文件執(zhí)行一個(gè)inode
- 第三列表示文檔所屬的用戶(hù)和用戶(hù)組
- 第四列是文檔的大小
- 第五列表示最后一次修改的日期
- 第六列是文檔名稱(chēng)
這些權(quán)限如何去修改呢
通過(guò)chown改變文件和目錄的權(quán)限,所有者包含了用戶(hù)和用戶(hù)組。
使用方法:chown -R y 用戶(hù)名稱(chēng) 文件 目錄
-R: 進(jìn)行遞歸式的權(quán)限更改,意味著將目錄下所喲肚餓文件,子目錄都更新為指定的用戶(hù)組權(quán)限,這個(gè)操作需要多多謹(jǐn)慎
如果需要修改訪問(wèn)的權(quán)限呢?
使用 chmod 來(lái)改變文件或目錄的訪問(wèn)權(quán)限。使用方法有兩種,一種是字母和操作符表達(dá)式的字符設(shè)定法,另一種是包含數(shù)字的數(shù)字設(shè)定法
先來(lái)看第一種—字符設(shè)定法
語(yǔ)法:chmod [who] [+ | - | =] [mode] 文件名
下面詳細(xì)說(shuō)一下各個(gè)選項(xiàng)的含義
-
who表示操作的對(duì)象,可以是下面字母中的任何一個(gè)
- 如果是u,則代表用戶(hù),即文件或者目錄的所有者
- 如果為g,則代表用戶(hù)組,即文件或目錄所屬組
- 如果為o,表示其他用戶(hù),
- 如果為a,表示所有用戶(hù)
-
操作符有哪些
- “+”表示添加某個(gè)權(quán)限
- “-”表示取消某個(gè)權(quán)限
- “=”表示賦予給定可執(zhí)行的權(quán)限,其中可以是可讀,可寫(xiě),可執(zhí)行
-
mode表示可以執(zhí)行的權(quán)限,其中可以是r,w,x以及他們的組合
-
文件名可以是以空格分開(kāi)的文件列表,支持通配符
案例
修改文件test.log文件,使其所有者具有所有權(quán)限,用戶(hù)組和其他用戶(hù)具有只讀權(quán)限
數(shù)字設(shè)定法
即上面的r用數(shù)字4代替,w用2代替,x用1代替,所以如果想讓文件的屬主擁有讀寫(xiě)權(quán)限,可以通過(guò)4+2的方式來(lái)實(shí)現(xiàn),
- 755:第一個(gè) 7代表文件所有者的權(quán)限,通過(guò)4+2+1得到。第二個(gè)5標(biāo)識(shí)文件所屬組的權(quán)限,通過(guò)4+0+1實(shí)現(xiàn)
舉個(gè)例子
修改文件test.log的權(quán)限為644
四、Linux書(shū)籍推薦
哈哈哈,能看到這的估計(jì)很少吧,如果都看到這里了,是不是可以點(diǎn)贊一下了,謝謝。這些知識(shí)是非常基礎(chǔ)的內(nèi)容,如果是國(guó)企,銀行等單位的面試基本上是夠了。如果是 Linux 相關(guān)的開(kāi)發(fā)崗位,這肯定遠(yuǎn)遠(yuǎn)不夠,相關(guān)的書(shū)籍在之前的那篇文章給大家已經(jīng)說(shuō)了,有需要的也可以去看看。
五、Linux開(kāi)源項(xiàng)目
這里涉及的項(xiàng)目屬于Linux服務(wù)端開(kāi)發(fā)必備的知識(shí)了,對(duì)于網(wǎng)絡(luò)編程而言,建議大家先去看游雙寫(xiě)的高性能服務(wù)編程,然后熟悉使用wireshark,或者他的開(kāi)發(fā)包winpcap/libpcap,通過(guò)這兩個(gè)包來(lái)練習(xí)下網(wǎng)絡(luò)拆包,組包,分流等等操作,這樣也許會(huì)讓你對(duì)網(wǎng)絡(luò)有更加直觀的認(rèn)識(shí)。下面的源碼大部分都是有帶注釋的,所以看著就更清晰明了。
webbench
這是一個(gè)在 Linux 中進(jìn)行網(wǎng)站壓測(cè)的工具。通過(guò) fork 來(lái)模擬多個(gè)客戶(hù)段同時(shí)訪問(wèn) URL,測(cè)試網(wǎng)站在這種壓力下的性能。采用純 C 語(yǔ)言實(shí)現(xiàn),源碼加起來(lái)不過(guò)600行。
Tinyhttpd
一共502行,當(dāng)然很多人在此基礎(chǔ)上加上了其他的請(qǐng)求方法,你也可以去試試。另外作者還在這個(gè)基礎(chǔ)上附帶一個(gè)client,做做實(shí)驗(yàn),加深對(duì)HTTP報(bào)文,請(qǐng)求的理解
libcurl
這個(gè)庫(kù)是當(dāng)初實(shí)習(xí)的時(shí)候使用的庫(kù),多協(xié)議文件傳輸庫(kù),實(shí)現(xiàn)文件的下載,續(xù)傳等功能,通過(guò)這個(gè)庫(kù)能夠非常方便的實(shí)現(xiàn)斷續(xù)下載等功能。
libevent
c語(yǔ)言編寫(xiě)的輕量級(jí)開(kāi)源高性能事件通知庫(kù),這里面你會(huì)了解如下幾個(gè)地方,另外 B 站也有個(gè)完整的 Libevent的源碼分析與實(shí)戰(zhàn)。
-
跨平臺(tái)代碼怎么實(shí)現(xiàn)
-
多種IO多路復(fù)用的使用方法
-
定時(shí)器怎么實(shí)現(xiàn)
-
如何注冊(cè)事件的優(yōu)先級(jí)
Muduo
對(duì)于應(yīng)屆生而言,如果是面Linux相關(guān)的開(kāi)發(fā)崗位,應(yīng)該都會(huì)去了解下這個(gè)庫(kù)吧,他是一個(gè)基于Reactor模式的C++網(wǎng)絡(luò)庫(kù),采用的是非阻塞IO模型,是基于事件驅(qū)動(dòng)和回調(diào),也有和上面相關(guān)庫(kù)的性能對(duì)比。
LevelDb
LevelDb是兩位谷歌大佬開(kāi)發(fā),且說(shuō)能夠處理十億規(guī)模kv數(shù)據(jù)持久性存儲(chǔ)的C++程序庫(kù)。和Redis不同的是,他不會(huì)狂吃?xún)?nèi)存,而是將大部分的數(shù)據(jù)存儲(chǔ)再磁盤(pán)上
cJSon
cJson是c語(yǔ)言中的一個(gè)json編解碼器,一共500行代碼,速度卻比較理想。結(jié)構(gòu)清晰,值得學(xué)習(xí)
redis
5 總結(jié)
從 Linux 的安裝到命令基本使用,軟件的安裝,常見(jiàn)的維護(hù)方式及網(wǎng)絡(luò)配置。通過(guò)這篇文章基本上應(yīng)付面試中的基本 Linux 相關(guān)問(wèn)題,如果是諸如騰訊的 C/C++ 崗位,那么這些知識(shí)將遠(yuǎn)遠(yuǎn)不夠,需要大家更加深入的去學(xué)習(xí)相關(guān)書(shū)籍和上方的開(kāi)源項(xiàng)目。
好了,至此,Linux 復(fù)習(xí)的 V1 版就到這了,如果需要 PDF和思維導(dǎo)圖 的小伙伴,可以幫忙在下方點(diǎn)個(gè)贊,點(diǎn)贊數(shù)超過(guò)500則出暗黑和Github兩個(gè)版本的 PDF。
總結(jié)
以上是生活随笔為你收集整理的【进大厂必学】3W字180张图学习Linux基础总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 大苏打实打实的
- 下一篇: linux环境(centos7.3)下安