日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

【进大厂必学】3W字180张图学习Linux基础总结

發(fā)布時(shí)間:2023/12/14 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【进大厂必学】3W字180张图学习Linux基础总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

大家好,我是藍(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)配置文件
#vi /etc/sysconfig/network-scripts/ifcfg-eth0
  • 更改相應(yīng)的配置
DEVICE=eth0 #設(shè)備名稱(chēng),可根據(jù)ifcofnig命令查看到。 BOOTPROTO=dhcp #連接方式,dhcp會(huì)自動(dòng)分配地址,此時(shí)不需要在下面設(shè)置ip和網(wǎng)關(guān) HWADDR=00:0C:29:AD:66:9F #硬件地址,可根據(jù)ifcofnig命令查看到。 ONBOOT=yes #yes表示啟動(dòng)就執(zhí)行該配置,需要改為yes
  • 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
rpm -qa | grep yum
  • 沒(méi)有則安裝
rpm -ivh yum-*.noarch.rpm
  • 自定義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
servcie iptables start//啟動(dòng)service iptables stop//關(guān)閉chkconfig --level 35 iptables on //設(shè)置iptables開(kāi)機(jī)默認(rèn)啟動(dòng)

iptables的防火墻規(guī)則如何查看以及如何清除修改?

格式:iptabls [-t tables] -L -vn -FXZ
  • 查看當(dāng)前系統(tǒng)filter表的幾條鏈規(guī)則
iptables -L -n

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。