日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2023/12/14 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【进大厂必学】3W字180张图学习Linux基础总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好,我是藍藍。

就不多說這段時間干啥去了吧,期間和很多的同學聊了天,有的童鞋已經開始工作,聊了聊工作上的事兒。有的是今年即將畢業的童鞋,有著自己的小目標,有的想嘗試互聯網,所以現在基本上都快進行二輪的復習了,有的同學備戰公務員,憑著年輕這股勁兒向往自己理想的生活狀態,無論怎么樣,長路漫漫,走一步,算一步,每一步都算數。

今天分享的這篇文章是 Linux 相關的基礎知識,深一點的內容基本上沒有,不過對于剛需小伙伴來說,也就夠了,有時間的話,最好按照這些命令去試一試,敲一敲,這樣記憶更加深刻。

老規矩,先看目錄,目錄原圖比較大,微信公眾號后臺沒法放,本文文章比較長,代碼部分全部采用貼圖的方式,這樣看著更加整潔,相關函數或命令的使用方法,如果涉及到多個參數,我則采用的思維導圖的方式,更加直觀,所以導致本文圖片100張,建議大家收藏后慢慢看。

為什么使用 Linux 或者 為什么要去學習 Linux

在看這篇之前,大家需要知道為什么去學習它,對于我而言,是一次偶然的比賽中接觸到 Linux,從而開啟 Linux 的學習。

知道了很多線上的服務,很多的服務器都是 Linux 系統,那么對于遲早都要入職的我們,提早的學習 Linux 的基本使用將尤為的必要。

總結一下,學習 Linux 最重要的幾點:

  • 對于使用 C/C++ 開發者,可以方便直接在 Linux 中編譯運行程序
  • Linux 作為開源項目,其精妙的數據結構設計值得深入學習
  • 我們將要面對的各種筆試,面試需要它

在我的面試過程中,大廠互聯網的面試會考察 Linux 操作系統中概念的基本底層原理,而對于國企,事業單位,銀行等企業就會直接問 Linux 的基本使用了。

好了,正式開始學習。

一 Linux簡介及安裝

不同學校開設的課程不一樣,我們學校計算機專業在大三的時候開設 Linux 這門課程,不過學習的內容偏向理論,至于相關命令和功能的實現具體原理并不清楚。

直到幾年后,發現大部分的系統,諸如團購,打車等系統都部署在 Linux 中,另外相關云計算,大數據,容器相關技術也都是基于Linux。

為什么說了解Linux 的生態,會讓你學到更多的新技術?

我們要知道很多的大牛通過Linux來開發各種如那件,數據庫 Mysql,kafka,Spark 等技術都會默認提供 Linux 的安裝運維手冊,所以盡快的進入 Linux 的世界對于個人的進步和職業發展都是非常有好處的

每當我們買了手機,買了電腦,上手就可以用,這是因為預裝了操作系統。所以呀,哪有什么歲月靜好,其實有人幫我們負重前行了,操作系統就是這樣一個角色。

那么操作系統幫助我們做了哪些事兒呢?

  • 我們只需要點擊桌面上的圖標,應用程序就開啟
  • 電腦咋個知道我們鼠標點擊的那個位置
  • 為什么我一回車,這些字符就飛出去了

這幾個任何一個操作,基本上都覆蓋了操作系統的所有功能,現在就進入熟悉而陌生的操作系統世界。

1 vmvare

虛擬機是什么?

虛擬機通過軟件的方式來模擬完整的硬件系統,運行在完全隔離的計算機系統。每個虛擬計算機可以獨立運行并安裝各種軟件和應用。

學習 Linux 最簡單、最實用的環境即虛擬機環境,通常即本文中的 VMvare。

使用虛擬機模擬出來的 Linux 學習環境簡單且容易上手,能夠較為真實的模擬出真正的Linux。

當然你也可以將自己的筆記本裝成 Linux 的環境,但是這樣加大了學習的難度,如果需要 進行 Linux 集群的學習,那就更不方便了。

使用虛擬機系統環境,我們可以對虛擬系統隨意進行任何的設置和更改,甚至可以格式化虛擬機系統硬盤,進行重新分區等操作,而且完全不用擔心會丟掉有用的數據,因為虛擬機是系統上運行的一個虛擬軟件,對虛擬機系統的任何操作都相當于是在操作虛擬機的虛擬機設備和系統,不會影響電腦上的真實數據。

說了這么多,現在開始安裝 VMvare。

  • 首先從官方下載并解壓虛擬機安裝包,然后雙擊運行

  • 點擊下一步

  • 選擇安裝位置,最好不要出現中文哈,不然后續可能出現莫名奇妙的問題。

  • 設置用戶體驗選項,都可以選擇

  • 在桌面和開始菜單程序文件夾創建快捷方式。

  • 百度一個許可證ZG1WH-ATY96-H80QP-X7PEX-Y30V4,注意選擇的版本號。

  • 打開 Vmvare。

  • 點擊新建虛擬機向導-選擇文件-新建虛擬機-打開。

  • 選擇自定義,然后下一步。

  • 下一步。

  • 安裝客戶機操作系統,選擇稍后安裝操作系統。

  • 命名虛擬機-更改虛擬機名稱并選擇安裝的位置。

  • 更改主機配置進行處理的分配。

  • 虛擬內存分配:注意內存分配不能大于主機內存。

  • 設置虛擬機網絡得類型,這里選擇 NAT(下文會介紹三種網絡配置方式的區別)

  • IO控制器選擇,選擇LSILogic。
  • 磁盤類型選擇SCSI即可。

  • 創建磁盤選擇創建新虛擬磁盤

  • 指定磁盤文件

  • 修改路徑

  • 選擇自定義硬件

  • 選擇centos得ISO鏡像文件,先選擇CDDVN—ISO鏡像文件—瀏覽找到鏡像、

  • 點擊完成

  • 開啟虛擬機 選擇配置好的虛擬機。

  • 鼠標移動到虛擬機內部,上下鍵選擇install centos7然后回車。

  • 選擇軟件選擇最小安裝,選擇語言。

  • 軟件安裝。

  • 選擇計算節點。

  • 開始安裝。

  • 設置root密碼,點擊完成配置。

2 進行網絡配置

現在我們的 Centos 還是個空殼子,如果我們需要訪問外網,則需要進一步配置。“秀才不出門,便知天下事”,你是秀才你試試。

沒有網絡,我們可能停留在看電視,跳皮筋的年代,我還真是會跳皮筋

為了讓我們下載軟件更加的順暢,速度更快,最快速度白嫖資源,不得不個配置網絡

  • 打開配置文件
#vi /etc/sysconfig/network-scripts/ifcfg-eth0
  • 更改相應的配置
DEVICE=eth0 #設備名稱,可根據ifcofnig命令查看到。 BOOTPROTO=dhcp #連接方式,dhcp會自動分配地址,此時不需要在下面設置ip和網關 HWADDR=00:0C:29:AD:66:9F #硬件地址,可根據ifcofnig命令查看到。 ONBOOT=yes #yes表示啟動就執行該配置,需要改為yes
  • service restart network 完事 ping www.baidu.com

既然要配置網絡,我們先看看網絡的配置文件在哪里,以及相關的配置有哪些,分別代表是什么意思

  • 打開網絡配置文件

BOOTPROTO = static,表示啟用了靜態 IP 地址,默認為 none

NAME = eth0,與網卡配置文件對應的一個標簽,如果為 eth0 則配置文件是ifcfg-eth0

UUID = xxxx,網卡唯一設備標識,系統自動得生成

DEVICE = XXX,網卡設備名稱,是物理設備標識

IPADDR0 = XXX,表示設置IP地址。這里注意后面的數字,在 Centos7 以后可以一個網卡配置多個 IP 地址

PREFIX0 = 24,設置子網掩碼,這里設置子網掩碼的方法和之前的版本也不一樣,24代表是255.255.255.0

Getway = XXX,網關地址,什么是網關線面會詳細闡述

知道配置文件每一行代表的含義以后,就可以根據自己的需求進行配置了,記得配置完成以后重啟網絡,如果是Centos7,那么命令

service network restart
  • 本地回環配置文件 /etc/sysconfig/network-scriptis/ifcfg-lo

第一行 Device:網絡的設備名

第二到四行:lo 接口的 IP 地址,子網掩碼,網絡號

第七行:lo 接口的廣播地址

第八行:開機啟動 lo接口

第九行:將lo接口設置為本地回環地址

  • DNS 配置文件/etc/resolv.conf

這里的「namespace」 表示域名服務器,后面的 IP地址就是DNS 服務器,當用戶在Linux中訪問某個域名的時候,就需要靠這些 DNS 服務器來解析

  • 設置主機和 IP 綁定配置文件 /etc/hosts

為什么會說說這個配置文件呢,因為當在部署集群的時候,我們需要在此配置,方便我們不用每次都是輸入其他機器得IP進行訪問,而是直接使用用戶名即可。

類似于 Windows 下得 hosts 文件,我們看看 Linux 中的 /etc/hosts 的內容

從上面我們發現,hosts 文件中的每一行內容為一個主機,每一行由三個部分組成,其中每個部分按空格隔開。

多說一句,以后大家如果需要分析一些日志文件的時候,一定要清楚是按照什么分割的,免得浪費了時間卻還沒有處理好問題

  • 第一部分:網絡 IP 地址

  • 第二部分:主機名域名

  • 第三部分:主機名

路由

我和你的通信需要網絡的傳輸,這個傳輸過程中可以說經歷了九九八十一難,就是這樣穿過無數的節點,無數的路由器才將信息傳遞到你的屏幕。

那么為了保證將信息傳遞給你,在數據傳輸到達某一個網絡節點后,這個網絡節點需要根據**「約定」將數據傳送到另一個網絡節點,然后再傳輸到下一個節點,以此類推到達目標主機。這里的每個網絡節點就是「路由」,所謂的約定即路由規則**

不使用路由就不行么

舉個例子,我給你寄幾箱獼猴桃,我的地點在北京,到了快遞點,我需要寫你的地址,比如是"成都市高新區馬保國鎮222單元",通常郵寄點不會直接幫你送到指定的地址,而是可能先到成都,然后成都這邊攬收再送到馬保國鎮,這種就是采用分發得策略來提升效率。

這里的寄送系統就是一個大型的網絡系統,每個寄存點主要負責快遞的傳送任務,只要快遞到達寄存點,就得準確,迅速將信件投遞到下一個寄存點處,這里的快遞就是通過「路由機制」準確,快速的寄送到目的地的。

有哪幾種路由呢

  • 靜態路由

靜態路由是系統管理員通過 route 手工加入的靜態路由規則

  • 動態路由

動態路由是不同機器彼此經由程序相互交換路由規則而來的。如果網絡發生了變化,路由軟件會重新計算路由并發出新的路由更新信息

路由如何配置

在 Linux 中,通過 route 命令配置靜態路由信息,

route [-n|ee]

常用的選項

  • 查看當前路由表信息

從上面我們可以知道通過route -n 輸出的為純IP 地址,而route輸出的信息就會包含主機名信息,下面說說選項的含義

  • Destination :網絡號,即 network 的意思
  • Gateway:連出去的網關地址
  • Flag
    • U:代表路由啟動勒
    • H:代表目標路由是一部主機而非網絡
    • R:代表使用動態路由的時候,回復路由信息標識
    • G:表示需要通過外部的主機來轉遞數據
    • M:表示路由已經修改了

網關是什么

不知道大家經歷過在宿舍買臺交換機,然后幾臺機器組成局域網打游戲的日子沒有。那個時候苦逼呀,只能打局域網的游戲,不能上網

時代在進步,科技在騰飛吶,學校就給每個宿舍分配一一個IP 地址,這個IP 地址是學校的網管部門負責,宿舍網的IP 通常是 192.168.1.x,校園網的 IP 地址假設是 10.10.x.x

如果此時你想在宿舍上網,通常有兩個方案

  • 第一種方案:舍友們眾籌買一張網卡,然后插入到A同學的電腦上,一張網卡的線插在宿舍的交換機,另一張網卡插在校園網的網口,此時就可以上網,但是A同學電腦就貢獻出去了,只能看你們打游戲,他自嗨,多可憐
  • 第二種方案:買個路由器,這個路由器有內網網口和外網網口,外網網口插在校園網的網口上面(當然配置的時候根據網管部門所要求的),內網網口連接上宿舍的所有電腦,這樣的話,路由器就得一直都開著

宿舍長可以上網了,其他人的電腦要上網還需要配置下各自的網卡,通常是DHCP 默認配置,在配置的時候你就會發現有個叫做Gateway的東西,這就是網關,要了解網關不得不去了解MAC 頭和 IP 的頭部

MAC和IP頭部有啥?

網卡自出生那天起,就帶上了這個地址,那么問題來了,為啥不使用 MAC 地址進行通信呢?因為靠 MAC 地址沒法定位準確,它更像身份證,作為唯一標識。舉個例子,我住在“成都市高新區 B 座 5 樓”,有個女娃兒可以問路人:“成都市高清區 B座在哪里”,路人可以給他比較明確的地點,但是如果她問:“你知道小藍(身份證)在哪兒嗎”,很明顯無從得知,說不定以為"你是個傻子吧"。

你可以找到IP地址(成都市高新區 B 座 5 樓),但是可能還是找不到我,這個時候假設你可能去服務臺問(其實是靠吼,身份證為XXX的是哪位),這個時候我聽到自然就會答應,不過你如果在北京喊,就聽不見了,所以 MAC 地址實際上通信范圍是比較小的,局限在一個子網里。它的頭部結構如下

圖中的類型大部分都是IP 數據包,IP 里面可能包含了 TCP,HTTP 等,這都是封裝的事兒了。擁有了這個 MAC 地址,就會在鏈路上廣播,MAC 的網卡才發現這個包原來是給它的,網卡將包收進來,打開 IP 包,發現 IP地址是自己的,再打開 TCP 包發現端口是自己,還是 80,正好就是目前監聽的端口

上述IP 頭部的詳細信息就先不說了,這里主要述說源 IP 和目標 IP 地址,當我們要訪問一個IP 地址的時候,需要判斷這個目標 IP 是否和當前的IP 地址在同一個網段

怎么判斷是否在同一個網段

此時涉及到網絡的 CIDR 和子網掩碼了。我們通常將 IP地址比喻為門牌號碼,既然是門牌號碼,如果一樣了就會沖突。假設大家都將地址設置為三單元 110,那快遞小哥就壓根找不到地方,所以,我們使用電腦的時候,有時出現上不了網了,很可能是IP沖突了喲。

10.120.55.73,這就是一個IP地址。按照"."分割,其中每個部分占8個 bit ,所以 IP 地址為32位,這樣的話IP地址一共就有約 42.9 億個,很明顯在現在看來不夠用,但是當初設計者哪知道現在這么多計算機呀,于是出現了IPV6,128 位,至于夠不夠用還得看看國家的生育政策了

不夠用就算了,還將這些 IP 地址分為了5類

對于 A,B,C 這三類,分為了兩部分,前面一部分為網絡號,后面一部分為主機號,還是比較好理解。假設大家都是3單元 110,小藍是東華小區的110,而小李是萬科小區的 110

那么這幾類,分別代表了多少的主機數量呢

從上圖我們發現C類的地址 254個,B類地址 65534,這放在一個網絡下面豈不是太浪費,有沒有折中的方法呢

CIDR

CIDR 叫做無類型域間選路。將上面32位的地址分為兩部分,分別為網絡號和主機號。比如地址 10.120.55.73/24,斜杠后面的24表示在 32位中,前面的24為網絡號,后面的 8 位為主機號

如何得到網絡號

將子網掩碼和IP 地址進行 AND 運算就可得到網絡號。此時子網掩碼為 255.255.255.0,255 轉換為二進制為 1,1和任何的數進行 AND 運算都是原來的數值,所以前面三個數不變,為 10.120.55。后面一個數為 0,0和任何數進行AND運算為 0,所以最后一個數為 0,合計后就是 10.120.55.0,這就是網絡號

什么是私有地址和共有地址呢

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Cv7Ydab6-1622033442378)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201203194644514.png)]

我們平時自己的電腦或者辦公室里,一般都是私有 IP 地址,因為這些IP地址由相關組織的內部管理,自己分配使用,所以我的私有IP 地址可能和你的是一樣的

這就好比我所在的小區是 3 棟,你的小區也是3棟。但是除了小區,就需要使用共有IP地址了。就像建設路 1000 號,這是相關部門劃分的,不能兩個小區都叫做建設路1000號

怎么獲取公有 IP 地址呢

這就需要花錢了,畢竟是共有的,比較香且有限制。假設你要做一個網站,全國人民都可以訪問,就需要買個IP 地址了

在這五類地址中,還差一個 D 類組播地址。從名字可以看出,這類地址屬于一個組的機器都能收到。就仿佛QQ群,發個消息大家都能看到,至于回復不回復另說

好了,回到網關

如果你想和你的室友通信,就和網關沒有關系,因為你們在同一個網關,只需要通過 ARP獲得MAC 地址,然后將源 MAC 和目的 MAC 放入到MAC頭中發出去即可

如果不是在同一個網段,你想和你的異地女友聊天,這個時候會先訪問默認網關Gateway,這個過程和發往同一個網段的其他機器又是一樣的,將源地址和目的地址放入IP頭,通過 ARP獲取網關MAC地址,將源 MAC 和網關 MAC 放入 MAC 頭部發送出去,網關所在端口接受以后下一步操作就看網關了

網管呢可以當作是路由器,路由器是一個物理設備,假設有 5 個網口,五個網口相當于五條路,分別連接五個局域網,每條路的IP 地址都和局域網的IP地址是同一個網段,每條路都是它握住的那個局域網的網關

簡單來說:如果一個包想發到其他的局域網,都會選擇一條路 ,然后根據路由算法,選擇另一條路加上IP頭和MAC投扔出去

到底選擇哪一條路?

  • 靜態路由

靜態路由比較簡單,直接在路由器上配置規則,規則為:假設訪問A網站,就從 2 號口出去,下一跳為 IP2;如果想訪問B網站,則從 3號口出去,下一跳為IP3,隨后緩存在路由器中

那么IP 頭和 MAC 頭,需要修改哪些內容呢

橋接的基本原理

橋接默認使用 VMnet0,Bridge 橋當作為一個機器,這個機器有兩塊網卡分別處于兩個局域網中,使用""連接,這樣局域網A和B就無縫的連接起來,橋接的時候 VMWare 網卡和物理網卡處于同一個 IP 網段

Vmvare 橋是同樣的原理,Vmvare 軟件會虛擬一塊網卡,當使用橋接的時候,Vmvare 會虛擬一塊網卡和真正的物理網卡進行橋接,這樣的話,發送到物理網卡的所有數據包就到了 Vmvare 虛擬機

而由 Vmvare 發出的數據包也會通過橋從物理網卡那端發出,所以,如果物理網卡可以上網,那么橋接的虛擬網卡也基本上沒問題

聯網的方式

橋接的方式是最簡單的,主機怎么聯網,那么虛擬機就怎么聯網,將虛擬及當作局域網中的一臺電腦就好了

注意:主機網卡可以訪問 internet 的局域網的時候,虛擬機才會通過Bridge 訪問 internet

Nat

Nat的基本原理

NAT的全稱是 Network address translate ,NAT 應用在 Internet 網關和路由器上。比如192.168.0.123這個地址需要訪問 Internet,數據包會先到路由器或網關,然后網關和路由器會有一個能訪問 Internet 的IP 地址,這樣的網關和路由器在收到數據包后,對數據包的 IP 進行更改 (NAT),這樣就可以讓私有網段的主機能夠順利訪問 Internet,這個技術解決了 IP稀缺的問題,同樣的私有IP 可以網關 NAT上網

那么對于 Vmvare 是同樣的道理,它會在虛擬機和主機之間偽造一塊網卡,這個網卡和虛擬機的 IP 出于同一個地址段,網卡和主機的網絡接口進行 NAT,意味著虛擬發出的每一塊數據包都會經過虛擬網卡,然后 NAT,從主機的接口發送出去

注意:虛擬網卡和虛擬機處于同一個地址段,虛擬機和主機處于不同的地址段,主機相當于虛擬機的網關,所以虛擬機能夠ping通主機的 IP,但是主機 Ping不同虛擬機 IP

聯網方式

  • 動態 IP 地址

這個方式簡單,直接將虛擬機設置成使用 DHCP 方式上網,Linux 開啟DHCP 服務即可。注意:在 Vmvare 中,需要在編輯-----虛擬網絡設置中,將 DHCP 開啟,默認為關閉

  • 靜態 IP 設置

如果不想使用DHCP,也可以手動設置: 
  IP 設置與 Vmnet1 同網段,網關設置成Vmnet8 的網關(在“虛擬網絡設置”里的Net選項卡里能找到Gateway)通常是 xxx.xxx.xxx.2。 子網掩碼設置與VMnet8 相同(設置好IP地址后,子網掩碼自動生成)
DNS 設置與主機相同。
 例如:主機IP 是 10.70.54.31,設置虛擬機IP為 10.70.54.22。Netmask,Gateway,DNS 都與主機相同即可實現 虛擬機 —主機 虛擬機<---->互聯網 通信。

提示:使用 NAT 技術,主機能上網,虛擬機就可以訪問 Internet,但是主機不能訪問虛擬機

host–only的方式

這種方式:只需要主機和虛擬機通信,不讓虛擬機訪問 Internet。同樣是兩種方式

  • 動態IP地址

此處和上面一樣,開啟 DHCP 以后,虛擬機就可以自動的獲取 IP 地址和 DNS 了

  • 靜態地址

將IP地址設置為和VM一個網段,網關設置為VMnet1的網關,

也可以手動設置,將虛擬機IP 設置與 VMnet1同網段,網關設置成VMnet1 的網關相同,其余設置與 VMnet1 相同,DNS 設置與主機相同。
例如:VMnet1 IP:172.16.249.1 Gateway :172.16.249.2  
那么虛擬機 IP:172.16.249.100 Gateway: 172.16.249.2
這樣、 虛擬機<—>主機 可以通信,但是、 虛擬機<—>互聯網 無法通信
提示:Host-only技術只用于主機和虛擬機互訪,于訪問internet無關。

3 安裝xshell

我們已經完成了安裝Vmvare 并導入了Centos,那么我們如何去玩兒這個看似很牛皮的玩意?直接上手?不習慣吧,那我們用個遠程工具連連

Xshell是一個強大的安全終端模擬軟件,Xshell可以在 Windows 界面下用來訪問遠端不同系統下的服務器,從而比較好的達到遠程控制終端的目的。除此之外,其還有豐富的外觀配色方案以及樣式選擇。

  • 下載 Xshell(別去下了,賊慢麻煩)
  • 鏈接測試(因為使用的 SSH,那么確保 Centos中22 端口已經打開了)
  • 文件-----屬性進行Xshell相關的配置,比如配色,字體大小等

這里介紹的即Xshell了,是一個強大的安全終端模擬如那件。支持 SSH1,SSH2 等協議。方便遠程連接到遠程主機,除此之外,還有豐富的配色方案和樣式選擇。安裝就很簡單了,下面將安裝的過程還是放在這作為記錄供參考

  • 安裝 Xshell,去官網 download。進入安裝頁面

  • 選擇免費為家庭/學校

  • 接受許可

  • 安裝完成

  • 外觀設置,字體設置,文件----屬性中

  • 設置配色主題

Xshell 使用過程中的技巧有哪些?

  • 復制粘貼Ctrl+Insert進行復制,Shift+Insert進行粘貼
  • 右擊將當前頁面的內容復制到記事本中
  • 快速點擊三次就可以選中當前行
  • 快速在多個session中切換。Alt+數字標識且數字====切換到指定session
  • 將命令同時發送給多個session 中(對了,大家可以安裝哈rz,sz 方便安裝下載文件)

4 基本命令的使用

命令太多,必須要全部記憶,但是要學會如何查每個命令的參數。我畫了個思維導圖可以當作小字典查看,下面列出可能我們使用頻率會更高的命令

如果你要切換到登錄用戶的主目錄,可以使用 cd ~,如果需要切換到指定的目錄則使用 cd /home/lj,回到上次所在的目錄則 cd -。好了,非常基礎的命令看個小思維導圖即可,進階一些且常用的命令繼續往下看。

5 常用命令整理

今天總結幾個非常常用的 Linux 命令,其中有幾個在面試中很可能問相關命令的原理,比如后臺運行命令。希望對大家有所幫助,最好自己去嘗試在Linux操作系統中實踐一下。

查看目錄以及權限

在Windows 中,使用 dir 查看當前目錄中文件。在 Linux 中使用ls(list)查看當前目錄文件。Windows 中的 dir,如下圖所示:

在Linux 中,通常使用ls -l列出,其中可以查看文件屬性,所屬用戶組等較為詳細的信息。下面詳細解釋從左到右每一列是什么意思

其中第一列的第一個字段代表文件類型,后面的 9 個字符代表模式,整個一串分為三小組,每一小組三個字段。

第一組為所屬用戶權限。第二組為所屬組的權限。第三組為其他用戶所屬權限。其中 r(read) 代表可讀,w(write) 代表可寫,e(execute) 代表可執行。在后面的 9 個字符中,如果是字母說明有相應的權限,如果為"-"代表沒有權限。舉一個例子:

-rw-r-r--: 此為普通文件,對于所屬用戶為可讀可寫不能執行,對于所屬組僅僅可讀,對于其他用戶僅為讀。

第二列為硬鏈接數,硬鏈接作用之一是允許一個文件擁有多個有效路徑名,從而防止誤刪。但是只能在同一文件系統中的文件之間進行連接,不能對目錄進行創建。

第三列是所屬用戶,第四列為所屬組,第五列為文件大小,第六列為文件被修改的時間,最后為文件名。其中刻印使用chown改變所屬用戶,chgrp 改變所屬組。

nohup(no hang up不要掛起的意思)

這是常用后臺啟動程序的常用方法,如果在交互命令行中運行程序,我們只需要 ctrl+c 就可以終止程序。在交互環境下,我們的輸出一般都會直接輸出到當前界面,在后臺啟動的時候通常會定向到文件,那通常情況是下面這個命令。

其中 1 表示標準輸出。2 表示文件標準錯誤輸出。2>1& 即將兩者合并,但是合并到哪里,就是 X.file。

查看進程

有的時候我們需要查看進程是否已經啟動或者查看進程的狀態并終止進程。經常使用的命令為 ps -ef—列出當前正在運行的程序,那如何定位我們想要查看的進程呢,這個時候就可以結合 grep ,即

如何解壓縮文件

常用參數

  • -c:創建的 tar 文件
  • -x:解開 tar 文件
  • -t:列出 tar 文件中辦函的文件信息
  • -r:附加新的文件到 tar 中

如何在多臺服務器之間傳輸文件?

通過 scp 命令在多臺服務器中的相互復制 傳輸文件。為了省下輸入密碼,可以設置免密登錄。

如何動態查看應用的執行結果,如我想知道每隔一秒高亮顯示網絡連接數的變化情況

我想查看磁盤的大小

我想抓取數據包并分析網絡情況

在Linux 中通常就會使用tcpdump 來抓取網絡中的報文,并進行分析。

知道了相關參數,下面看幾個案例

我想知道當前網絡中的文件連接情況

如果讓你使用一個命令進行網絡連接并上傳相關文件,你會使用什么命令

nc–>“瑞士軍刀”。不知大家在滲透過程中,拿了shell有沒有使用nc 搞點事兒。它用來快速構建網絡鏈接。常用來調試客戶端程序。

我想要方便的查看網卡的相關信息及TCP網絡連接狀態

netstat 是一個網絡信息統計工具。它可以得到網卡接口上全部了解,路由表信息,網卡接口信息等。通常在網絡編程中我們用它來顯示 TCP 連接以及狀態信息。

我想實時查看當前系統的進程信息,CPU使用情況等信息

這時候vmstat 就派上用場了。

vmstat能夠實時輸出系統的進程信息,內存使用,CPU 使用等資源的使用情況

看一下vmstat 都有哪些輸出字段。

這里注意哈,如果查看磁盤的更加詳細信息,有另外iostat 所得到的信心就更加詳細喲

我想實時的查看多處理器中各個 CPU 的使用情況

可以使用 mpstat 命令進行查看,不過需要先安裝 sysstat 包,在 Centos 中直接使用 yum install systat 就可完成安裝

然后我們看看各個字段什么意思。

我想將文件拆分為幾個小文件

我想統計文件中單詞的個數。

我想一頁一頁的查看文件內容

查看日志的前幾條數據或后幾條數據

查看幾個文件的內容差異

5 用戶管理及權限

Linux 是一個多用戶的操作系統,意思是允許多個用戶同時登錄到系統中,并響應每個用戶的請i去。但是任何需要使用系統的用戶,都需要一個賬號,賬號分為管理員賬號和普通用戶的賬號。

在Linux 中,操作系統會根據UID 來判斷用戶,如果id 為0則為管理員賬戶,可能存在多個管理員賬戶。

在 Linux中,每個用戶都會屬于一個組,意味著當創建用戶的時候,系統會自動創建一個同名組作為次賬戶的主組。

用戶和組的關系以配置文件的方式關聯,相關配置文件如下

系統在創建新的賬號時,會根據賬號類型,自動的分配賬號的 UID 和GID,通常情況 UID 和GID 唯一且不重復

剛才說了可以創建自己的用戶,那么怎么創建自己的用戶呢?

添加用戶

更改密碼

系統有很多的用戶,怎么進行用戶的切換?

如果需要

用戶之間的切換使用 su 命令實現。root用戶可以無需輸入密碼切換到lj用戶,如果普通用戶lj切換到 root 用戶則需要輸入密碼,我們看看

如何切換路徑,絕對路徑和相對路徑

6 軟件的安裝方法

在Linux安裝相關的工具分為三種方式,分別為源碼安裝,RPM 包安裝以及 YUM 安裝方式

源碼安裝方式

開源軟件都會提供源碼下載的方式,對于源代碼安裝方式的好處即可以定制軟件功能,安裝需要的模塊,不需要的模塊可以屏蔽,方便管理,卸載等。

對于源碼安裝的步驟如下

  • 下載解壓源碼

一般下載下來源碼以后都會存在一個 Readme 文件,首先應該仔細閱讀這個文件,可能有很多需要修復的以前人家遇見的問題都會在上面做記錄,以免入坑不回頭

  • 分析平臺環境
  • 編譯安裝軟件

這里會使用 make 工具,make 工具就會通過 makefile 文件來實現。makefile文件 是一種按照某種語法來編寫且定義了各個文件的依賴關系。

Linux 中,習慣使用 Makefile 替代 makefile,當用戶執行 configure 后,就會在當前目錄生成這個 makefile 文件,然后用戶輸入 make 就開始運行。我們看看 Makefile 是怎么個有樣子

make和 make install 的關系

當我們輸入 make 命令過后即進入了編譯階段,編譯時間根據軟件的程序規模大小以及硬件配置有關,當輸入make install就會開始安裝軟件,我們可以指定安裝目錄也可以不指定,系統將給你默認指定目錄為 /user/local,這樣安裝完畢。

RPM安裝方式

RPM 是Red Hat 公司開發出來的 Linux 下的軟件包管理工具。這些以 .rpm結尾的包包含了已經編譯好的二進制可執行文件,一句話即將源代碼進行編譯,安裝,然后封裝為RPM包

優點即安裝簡單,方便,因為已經編譯完成,安裝只是用來驗證和解壓過程,缺點也比較明顯,過于依賴于操作系統,要求RPM包的安裝環境必須和RPM封裝時的環境保持一致,

RPM包是怎么個樣子?

server-2.1.0-22.I386.rpm

其中:server 為如那件的名稱

2.1.0:軟件的版本號

22:軟件更新發行的次數

i386:適合硬件發行的次數

.rpm:rpm軟件包的標識

YUM安裝方式

  • 查看是否存在yum
rpm -qa | grep yum
  • 沒有則安裝
rpm -ivh yum-*.noarch.rpm
  • 自定義yum的配置。我們可以通過打開 /etc/yum.repos.d/Centos-Base.repo 進行源的配置

YUM有哪些特點呢

  • 安裝方便
  • 可以同時配置多個源
  • 配置文件簡單明了

推薦個不錯的yum源

  • EPEL

是一個針對紅帽企業版Linux及衍生發行版的一個高質量附加軟件包項目。

  • RPMForge

這是一個第三方軟件倉庫,被centos社區認為是一個最安全最穩定的一個軟件倉庫

7 shell腳本練習

大部分情況都是Linux操作系統,那么熟悉命令的用法以外,熟悉使用shell腳本能節省不少時間

shell是什么

平時經常在 Linux 操作系統中使用各種命令,比如查看當前的目錄文件,我們會使用 "ls" 或者 "ls -l",這些字符串參數實際上會被"某段程序"執行并啟動。這個負責將用戶輸入的字符串轉換為需要執行程序的東西叫做shell。即幫用戶更方便使用操作系統接口的“殼”。同樣的殼還有當我輸入Maven+相關參數的時候是不是就會去執行相應的功能,我們駛入 SQL 語句的時候,數據庫引擎是不是也會各種調用,一樣的道理

嘗試編寫第一個shell

vim 創建打開一個文件,擴展名為.sh。如下所示

變量的使用

變量名和等號之間不能有空格

定義變量注意事項:

  • 命名首個字符不能是數字,只能使用英文字母、數字和下劃線
  • 不能使用標點符號
  • 不能使用bash中關鍵字

使用變量(使用變量的過程中,最好加上花括號),只需要在變量前面加上美元符號即可

只讀變量

使用 readonly 將變量定義為只讀,只讀意味著不能改變

刪除變量

使用unset刪除變量 變量刪除以后不能再次使用,且不能刪除只讀變量

變量類型

  • 局部變量

僅當前shell可用

  • 環境變量

所有程序都能訪問環境變量

  • shell變量

通過一部分環境變量和shell 變量保證shell 的正常運行

字符串

使用字符串的過程中,既可以用雙引號也可以用單引號,也可以不用

  • 單引號

單引號內容原樣輸出,不能包含變量,且不能出現單獨單引號

  • 雙引號

可以出現轉義字符

獲取字符串長度

使用 # 獲取字符串長度

數組

支持一維數組,數組元素之間通過空格隔開,讀取數組,使用 @輸出數組所有元素

獲取數組中所有元素以及數組長度

看看結果

注釋

單行注釋

使用#開頭的行為注釋,會被解釋器忽略

多行注釋

shell傳遞參數

在執行shell的時候,命令行指定參數,如下所示

結果

下面看看這個例子

結果

相同點:都是會引用所有參數

不同點:在使用雙引號的時候。如果腳本運行時兩個參數為a,b,則"*“等價于"ab”,而"@“等價于"a”,“b”

8 printf

使用 printf 格式化字符串,同時可以指定字符串寬度和對齊方式,格式如下

結果

9 test

shell 中的test用于檢查某個條件是否成立

案例

結果

if語句語法格式

如果簡化為一行

if else-if else

案例 判斷兩數值是否相等

for循環

while語句

“ 通常用于從輸入文件不斷讀取數據

無限循環

case語句

“ 多選擇語句。取值后面為單詞in,每一個模式以")"結束。匹配發現取值符合某一模式后,其間所有命令開始執行直至 “;;”。

輸入不同的內容,會有不同的結果,例如:

輸入 1 到 4 之間的數字: 你輸入的數字為: 3 你選擇了 3

跳出循環

break

break命令允許跳出所有循環

continue

“ 跳出當次循環

10 shell函數

“ 用戶定義函數,然后在shell腳本中隨便調用,格式如下

例子

帶return語句

函數參數

shell重定向

輸出重定向

“ command1 > file # 如果file中存在內容將被清空覆蓋。如果追加使用command1 >>file

cat dir.txt

/dev/null文件

“ 寫入到它的內容都會被丟棄,會起到"禁止輸出"的效果,如果希望屏蔽stdout和stderr “ command > /dev/null 2>&1

注意:Linux命令行都會打開三個文件

  • 標準輸入文件:stdin文件描述符為0
  • 標準輸出文件:stdout文件描述符為1
  • 標準錯誤文件:stderr文件描述符2

12 shell實戰

  • 請將當前目錄中demo.txt第二行第三列數據輸出到demo2.txt中

  • 日志如下統計訪問ip最多的前10個

uniq - 刪除排序文件中的重復行 sort對于文本進行排序 -l 按照當前環境排序. -m 合并已經排序好的文件,不排序. -n 按照字符串的數值順序比較,暗含-b -r 顛倒比較的結果.

  • 如何檢查文件系統中是否存在某個文件

  • 每個腳本開始的 #!/bin/sh 或 #!/bin/bash 表示什么意思 ?

“ #!/bin/bash 表示腳本使用 /bin/bash。對于 python 腳本,就是 #!/usr/bin/python

  • &和&&區別

“ “&” 腳本在后臺運行時使用它。“&&”當前一個腳本成功完成才執行后面的命令

  • 腳本文件中,如何將其重定向標準輸出和標準錯誤流到 log.txt 文件 ?

  • 如何計算本地用戶的數目

  • shell中進行字符串比較和數字比較

  • 統計內存使用

結果

  • 批量更改文件名

“ 批量修改123目錄下txt為txt.temp。將temp打包為test.tar.gz

8 awk文本處理工具

awk是一個處理文本文件的應用程序,幾乎所有的Linux系統都自帶了這個程序

依次處理每一行,并讀取里面的每一個字段。對于處理生產環境的日志有著非常高校的作用

基本用法

上面 lan.txt 是 awk 需要處理的文本文件。前面單引號里面有一個大括號,單引號里面就是每一行的處理動作。其中 print 為打印命令,$0位當前行,所以執行結果就是把每一行原樣打印出來

print $0 即將標準輸入my name is lanlan ,c 重新打印一遍

為了方便,我們直接使用/etc/passwd文件進行操作,

變量

上面我們說了,可以使用符號“$+”數字的方式表示第幾個字段,其實還有一些變量可以直接表示相應的字段。比如“$NFb” 表示最后一個字段

這里出現了雙引號,表示原樣輸出

其他常用的內置變量

  • FILENAME:當前文件名
  • FS:字段分隔符,默認是空格和制表符。
  • RS:行分隔符,用于分割每一行,默認是換行符。
  • OFS:輸出字段的分隔符,用于打印時分隔字段,默認為空格。
  • ORS:輸出記錄的分隔符,用于打印時分隔記錄,默認為換行符。
  • OFMT:數字輸出的格式,默認為%.6g。

函數

既然算是一門語言,函數當然少不了,下面看一波常用的函數

函數toupper()用于將字符轉為大寫

可以發現第一個字段輸出的時候變成了大寫

  • tolower():字符轉為小寫。
  • length():返回字符串長度。
  • substr():返回子字符串。
  • sin():正弦。
  • cos():余弦。
  • sqrt():平方根。
  • rand():隨機數。

5 條件

通過使用相應的條件,過濾出自己想要的內容

上菜

這里/usr/表示只輸出包含usr的行

這個例子輸出奇數行

下面的例子輸出第一個字段等于指定值的行。

5 if語句

通過if語句編寫比較復雜的內容

上面代碼輸出第一個字段的第一個字符大于m的行。

if 結構還可以指定 else 部分。

9 進程管理與定時任務和后臺執行

crond是什么?

crond是一個可以在指定時間執行一個shell腳本或者一系列的Linux命令。和Windows下的計劃任務類似。當安裝完操作系統后,默認會安裝這個服務工具,并且會自動啟動crond進程。

在Linux中任務的調度分為兩類

  • 系統任務的調度

系統會周期性的執行一些工作,比如說寫緩存的數據到硬盤,清理日志等

  • 用戶任務的調度

用戶定期也會執行一些任務,比如用戶數據的備份,定時的郵件提醒等,這些都是通過crondtab來設置

那么crontab到底怎么用么

首先看看crontab的使用格式:

常見的選項

  • -u user:很明顯是需要表明是那個用戶的crontab服務,別瞎搞
  • file:file是命名文件的名字,表示將file作為crontab的任務列表文件并載入到crontab中
  • -e:e為edit,表示標記某個用戶的crontab文件內容
  • -l:顯示用戶的crontab文件、

crontab的含義

創建的crontab文件,每一行代表一項任務,每個字段都有對應的設置規則,一共分為6個字段,分別為:

  • minute:區間 0-59
  • hour:區間0-23
  • day:區間0-31
  • month:區間1-12
  • week:區間0-7 周日可以是0/7
  • command

這里的command代表的是需要執行的而命令,通常為腳本文件,

除了上面幾個字段,還需要注意幾個特殊字段

  • *:代表所有可能的值
  • ,:通過,來表示區間范圍的值
  • _:整數之間的中杠表示一個證書范圍
  • 正斜線:表示時間的間隔頻率,比如0-23/2表示每兩個小時執行一次

開始放幾個例子

這代表的是每天早上5點運行backup.sh

每個工作日11:59pm進行備份作業

每五分鐘運行一個命令

crontab有哪些選項

crontab -e:修 改crontab文件,如果文件不存在會自動創建

crontab -l:顯示crontab文件

crontab -r:刪除crontab 文件

crontab -ir:刪除crontab文件前提醒用戶

10后臺運行

用途:不掛斷的運行命令

語法:nohup Command [ Arg … ] [&]

  • 無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 文件中。

  • 如果當前目錄的 “nohup.out” 文件不可寫,輸出重定向到“$HOME/nohup.out ”文件中。

  • 如果沒有文件能創建或打開以用于追加,那么 Command 參數指定的命令不可調用。

退出狀態:該命令返回下列出口值:

  • 126 可以查找但不能調用 Command 參數指定的命令。

  • 127 nohup 命令發生錯誤或不能查找由 Command 參數指定的命令。

  • 否則,nohup 命令的退出狀態是 Command 參數指定命令的退出狀態。

使用 &

用途:在后臺運行

一般兩個一起用

才疏學淺,難免有紕漏,如果你發現錯誤的地方,麻煩告訴我,我對其修正。

和文件的權限,當我們知道怎么用了以后,是不是就需要去了解他是怎么個設計理念呢,我們下期再見!

二、Linux基本結構

才開始接觸虛擬機的時候,確實很奇怪的,不過又覺得蠻新奇的,相信通過前面兩篇文章,你應該裝好了自己的虛擬機,也可以嘗試做做實驗,敲命令了。如果還沒有裝或者還沒有熟悉命令,趕快去試試,聽話

在Linux中,系統默認的用戶是root,其實和 windows 的 administrator 類似,root 用戶可以操作操作系統的任何文件和設備,OMG,記住了,是大哥大,干啥都行,所以在生產環境就不要亂用root了,權利越大,責任越大吶。

1 系統與硬件相關

虛擬裝好了,我們就比較好奇這些配置都是什么。如果你還記得第一篇中的安裝過程,那么在這里的操作你就知道了 “原來是這樣”。

查看系統的 pci 設備

lspci 命令可以查看所有的 PCI 設備,比如主板,聲卡等

  • 查看CPU信息

其中 processor 是邏輯處理器的唯標識符,vendor-id 是處理器類型,如果是英特爾的處理器,那么字符串就是genuinelntel。physical id 是每個封裝的唯一標識符,也是一個物理的CPU,siblings 表示位于相同物理封裝中的邏輯處理器數量,core id 為每個內核的唯一標識符

在 siblings 和 CPU cores 有個對應關系,如果 siblings 是 CPU cores 的兩倍,則系統支持超線程。

如果要查看 CPU 的個數,那么可以通過下面的命令

如果要查看系統所有的邏輯CPU個數

如果要查看內存的信息

從結果可以看出,目前總內存為1.8G,可用1.5G,緩沖區占用1260KB。

查看磁盤分區的信息

從上圖我們可以看見虛擬了 42G 的磁盤以及每個分區的大小,是不是關于硬件相關的信息看的清清楚楚了,就這樣不再神秘

2 文件系統的了解

  • 經典樹形目錄

Linux 牛逼之一在于將所有的內容以文件的形式展現出來,通過一個樹形的結構統一管理和組織這些文件。Linux 典型的樹形結構如下圖所示

這個樹有個根,根下面很多**「杈」「杈」**上可以長出很多葉子

整個系統都是按照文件的形式放在根目錄中,同時會將文件分類,這樣形成一個樹形目錄結構,這樣的布局給管理文件帶來了很大的方便,我們確實需要去了解這些目錄結構,對于后續的系統排錯還是蠻重要的噠。雖然有些啰嗦,不過這些圖確實是實打實的畫出來的,沒事看看就知道了,不用記住。

  • etc目錄

這個目錄主要存放的是管理文件用的相關配置文件,比較重要的 /etc/rc,用戶信息文件 /etc/passwd,具體的如下圖

  • /usr目錄

這個目錄主要存放的是應用程序和文件,如果在安裝軟件的時候,選擇默認安裝的位置,通常就會默認在這個位置,下次就別問我裝的東西去哪里,what??具體信息如下圖

  • /var目錄

通常用來存放系統運行的日志文件,如下圖

  • /dev 目錄

包含所有的設備文件

  • /proc 目錄

這個目錄是虛擬目錄,主要存放的是內存的映射,通過這個目錄和內核的數據結構打交道比如修改內核參數,獲取進程的相關信息,具體信息如下

其他目錄

  • /boot目錄

這么說吧,你要是把這個目錄給干掉了,你就是大哥。它存放了啟動 Linux 的核心文件,包含鏡像文件和鏈接文件,破壞后系統基本上就不能啟動

  • /bin/sbin

當你裝相關的軟件或者安裝包后,很多時候都會鏈接在這個目錄下面,另外這里也存放了平時我們使用的各種 shell 命令。比如cp,ls,dd等

對于sbin,這里的 s 是 super 的意思,意味著需要超級用戶才能執行的命令。常見磁盤分區 fdisk,創建文件系統的 mkfs就在這里

  • /home

這個目錄是系統中每個用戶的工作目錄,每個用戶都會有自己主目錄,通常名稱為用戶名,如果有個用戶是小藍,那么主目錄就是xiaolan

  • /lib

在開發的過程中,很多共享庫文件等很多放在這里,這個目錄會包含引導進程所需要的靜態庫文件。后續在分享程序開發的時候會深入掰扯

  • /root

一般用戶沒有進入這個目錄的權限,它是root的主目錄

  • /lost+found

保存丟失的文件。什么意思,如果我們不恰當的關機操作,可能導致一些文件丟失,這些丟失的臨時文件可能就會存放在這里。當重新啟動的時候,引導程序就會運行 fsck 程序并發現這個文件

  • /tmp

用于存放臨時文件,隨時可能被刪除

3 CPU核心部件

這部分內容是先過一邊,后續會對每一個部分進行詳細的闡述

Linux 的內核相當于 CPU 的大腦,經過了十幾年的共同努力,現在已經到xxx核。

作為一個開源操作系統,也給予我們難得的機會去學習這個成熟的操作系統,一個完整的計算機內核包含五個部分,分別是內存管理進程管理進程間通信虛擬文件系統和網絡接口,這一部分在后面的文章會單獨介紹,先了解個大概,如果看過之前的面試連載文章,很多時候都會涉及到這些問題,這么說吧,在面試中的百分之八十的問題,你都可以聯系到操作系統層面,或者和操作系統相關知識點,相關設計理念巧合,當然不是巧合,就是學習過往成熟的經驗罷了

  • 內存管理

我們知道,在區區的小內存環境下,可以運行很多的軟件。Linux 內存管理中支持虛擬內存,即在系統上可以運行所有程序占用的內存總量大于實際物理內存,多余的這部分內存是從磁盤申請所得,在內存緊缺的情況下,內存管理就會負責在磁盤和內存之間進行交換。

  • 進程管理

Linux 可多任務運行,那么在單CPU的情況下怎么支持多任務呢。這個任務就得交給進程調度來完成了。每當系統運行的時候,調度器會分配一個時間片,然后調度器根據不同的時間片選擇進程運行。比如A進程的時間片用完了,那么調度器會選擇一個新的進程繼續運行,由于這個切換的速度和頻率都很快,以致于讓我感覺是多個程序在同時的運行,實際上CPU 在同一個時間只有一個進程在運行。

  • 進程間通信

各個進程的友好相處才能共建繁華生態嘛。不同的進程有自己的進程空間,要通信就得找只隔壁耳朵內核中專。在一般情況下,一個進程等待硬件操作完成就會被掛起,硬件操作完畢進程回復執行,這個協調過程就是進程間的通信機制了

  • 虛擬文件系統

為了讓眾多的文件系統有一個統一的接口,采用了通用的文件模型—虛擬文件系統。虛擬文件系統分為邏輯文件系統設備驅動程序。其中邏輯文件系統如 ex2,ex3 等。設備驅動程序包含了硬件控制器所編寫的設備驅動程序模塊。

  • 網絡接口

首先需要知道每一種網絡硬件設備都會對應相應的設備驅動程序,網絡設備驅動程序主要負責與硬件設備來進行通信

4 CPU運行機制

知道了CPU的目錄結構,現在說說其運行機制,主要包括了 init 系統,系統的運行級別,系統的關閉方法

  • Linux 初始化init系統

啟動首先從 Bios 開始,接下來 Linux 引導程序將內核載入內存進行內核初始化,隨后啟動 init 進程,這個進程是系統的第一個進程,負責產出其他的進程

僅僅讓內核運行起來還沒啥用處,還需要管理,控制這些進程,從而系統進入一個用戶設定的用戶模式,即 init 系統

起初采用 sysinit,它主要依賴于腳本,串行啟動進程,最大的缺點就是慢,在服務器上看還沒有什么影響,如果是在手機移動端,這得急死人,隨后出現了systemd取代了慢的upstart

在 Wndows 中,系統有安全運行模式和正常運行的模式,在 Linux 中的運行級別更加的靈活

一共有七種運行級別,定義在 /etc/inittab 中,sysinit 會檢查 /etc/inittab 文件查看是否含有 initdefault 來啟動一個默認的運行級別

  • 0:表示關機模式

  • 1:單用戶模式

  • 6:重啟模式,關閉所有的運行進程

  • 2:表示多用戶模式

  • 3:表示多用戶模式,支持nfs服務

  • 4:表示基本不用的用戶模式,可以實現特定的等了請求

  • 5:表示完成多用戶模式,默認等了到x-windows系統

這些數字和 init 結合就產生了相應的含義,比如init 1表示系統進入單用戶模式,、init 6表示系統將重新啟動

有了新的systemd管理體系以后,默認的運行級別通過軟連接的方式實現。

查看系統的默認target,如下所示

如果需要修改運行級別和targe的對應關系,可以通過下面命令實現

5 系統關機過程

關機方式很多,比如init shutdown halt reboot,下面我們分別看看這些方式以及

  • shutdown

才開始學習 Linux 操作系統,不要動不動的就拔電源,我們知道此時很多的進程正在如火如荼的進行,你的這一操作,很可能就導致場面混亂,很多進程數據丟失,嚴重一點可能進程間開始打架,導致硬件設備損壞

shutdown 是 shell 編寫的程序,必須要超級用戶才能執行。首先通過廣播的方式告訴系統所有的用戶,系統將在xx時間關閉,同時 login 指令凍結,意味著其他用戶此時不能等了,時間一到,i就會發信號給shuinit程序吧,init程序就會改變運行級別

shutdown命令之shutdown常見參數

  • -f:重新啟動的時候不執行fsck

  • -k:只是發送西悉尼給所有用戶但不會真正關機

  • -r:shutdown之后重啟系統

  • 時間:設置多長時間可以九天跑一次

  • halt命令

  • reboot

reboot和halt類似,只是reboot是關機后重啟

halt參數

  • -i:關機之前關閉所有的網絡接口
  • -n:halt執行的時候不會調用系統指令sync

init主要用戶系統在不同運行級別的切換,切換工作是立即完成的

6 系統服務管理工具

在 Centos7 以后,一個非常大的改變即使用了 systemd 管理工具,它不僅可以完成系統初始化的工作,還可以對系統和服務進行管理。同時它也兼容了之前的 sysinit,之前的版本中,這些初始化腳本服務存在于 /etc/rc.d/init 中,現在被.service文件擴展結尾的代替

配置文件位于 /etc/systemd 目錄下,配置工具的命令使用 /bin/sbin 目錄下,備用的配置文件位于 /lib/systemd 目錄,可以通過rpm -ql systemd查看所有的路徑

另外,為了方便操作,systemd提供了強大的命令行工具systemctl,下面我們看看這些常見的啟動停止服務的命令

啟動 停止 重啟服務

通過systemctl啟動一個服務

停掉此服務

重啟服務

關閉服務

如果要查看這個服務狀態

三、Linux安全

相信通過上一篇的分享,已經架設了屬于自己的Linux,就這樣得空客就安全了嗎?當然不是,今天我們一起看看Linux本省得一些安全策略。對了,關于Linux的內容是系列內容,希望大家可以從0開始搭建,然后按步驟操作,后續涉及的集群,大數據,可視化等一些的學習都會基于這個環境,所以mark住沒問題。

下午回到家就想睡覺,醒來以為快早上了,一看時間原來才晚上十一點了,感冒了兩周,頹廢了半個月,心態不咋好,現在又來和你們見面了,加油!


1 Linux安全策略

在生產環境幾乎都是 Linux,為了保護我們程序,防止我們功能被破壞,會采取一些列的措施,所以提前學習和了解這些策略勢必也會為后面的學習打下不錯的基礎

常見的攻擊類型有哪些呢

  • 密碼暴力破解

目的比較明確,通過爆破工具破解用戶的密碼,進入服務器獲取資源進行系統的破壞。我們可以想象一個字典,字典足夠強大,逐一匹配就可以找到服務器的密碼

  • 拒絕服務攻擊

通過大量的請求來占用足夠多的服務資源,使得網絡阻塞或者服務器死機,導致 Linux 服務器無法給用戶提供服務。常見的拒絕服務攻擊有 Dos 與分布式拒絕服務攻擊。黑客通常是利用偽裝的源地址或者控制其他的目標機器發出大量的連接請求,由于服務器無法在短時間接受這么多請求,從而導致系統資源耗盡,服務掛起。

  • 應用程序漏洞攻擊

這種情況一般是黑客通過類似掃描工具掃描服務器可能存在的漏洞,然后根據漏洞滲入到服務器進行相應的破壞,常見比如sql注入,漏洞攻擊,網頁權限漏洞等

如何進行防范呢

徹底的防范是不可能,但是可以盡全力的防范,通常需要一系列的安全設備和規則進行約束

  • 網絡傳輸的安全

常見的網絡安全設備有硬件防火墻網絡入侵檢測路由器交換機等。防火墻對進出網絡的主機進行規則匹配,盡量保證合法的主機進入網絡,可是有些攻擊行為是在防火墻允許的范圍內,這個時候防火墻就無所能及了,就需要諸如IDS設備來輔助。IDS會對系統的整體運行情況進行監控,盡全力發現攻擊企圖,從而保證網絡系統資源的機密性,完整性和可用性

  • 操作系統的安全

操作系統安全即服務器本身的一些安全設置和優化。比如系統內核的定期升級,自帶軟件的更新,配置 iptable 規則,關閉無關服務等

很多常見的病毒程序,防火墻很難阻止,此時如果系統存在殺毒工具也是可以直接破掉第一道防線

  • 應用軟件安全

應用軟件安全顧名思義即部署在服務器中應用的安全策略配置,比如我們會對數據庫進行配置防止非規則內的連接數據庫等

再比如 SQL注入,跨站腳本都屬于應用軟件安全漏洞造成的攻擊

那么常用的安全策略有哪些呢

  • 軟件及時更新

這一塊我估計很多人都不會在意,畢竟需要重新安裝比較麻煩,但是很多時候需要更新,是因為有漏洞了,意味著Hack利用這些漏洞就很容易進你的系統,所以需要尤其注意

  • 端口服務

一般一個有效的連接,即客戶端和服務端端口的建立過程。而端口在系統中也是有一些規則的

在Linux操作系統中,系統定義了 65535 個端口,這些端口又分為兩個部分,按照 1024 分割,分為只有 root 用戶才能啟用的端口和客戶端的端口,對于只有root用戶才能啟動的端口:

也就是 0-1023 的端口,需要 root 才能啟用,因為這些端口預留給一些預設的服務使用,不經常使用的端口最好關閉,比如 Ftp 的21端口,25的 Mail 服務端口

客戶端的端口

1024端口以上的通常給客戶端軟件使用,由軟件隨機分配,對于大于1024的端口不受root的限制,比如默認的3306就是數據庫的默認端口

如何查看端口的狀態呢?

通過 netstat -tunl 查看

從上圖可以發現啟用了22端口,這是默認就打開了,我的遠程工具XSHELL即就是連接的這個端口

如何查看鏈接的狀態呢

如果查看端口對應的什么服務,執行什么命令呢

服務與端口是什么關系

我們可能經常聽到什么服務對應什么端口,他們兩是一一對應的關心,沒有服務運行即沒有端口對應,那是不是這些服務都必須使用默認的端口呢

當然不是,大部分的軟件都會有配置文件,根據相應的配置就好了

一定要記得關閉不必要的服務

在Linux中,服務的啟動和關閉管理有兩種方式,第一種方式是直接啟動腳本,在 Centos7 之前是在 /etc/init.d 目錄下的服務啟動和關閉。在 Centos7 以后,使用 systemctl 工具來完成,這個在后續的系統管理會詳細給大家說說。

如果要啟動 sshd 服務,可以使用下面的命令

另外一種情況是通過超級服務管理一些常用的網絡服務,比如 Centos 的超級服務 Xinetd,這個服務可以管理的服務如 Vsftpd 等,我們可以通過 /etc/init.d/xinted restart 來完成服務的重啟

在Linux中,通過 chkconfig 命令或者 systemctl 判斷服務是否開啟

我們怎么知道關閉哪些不必要的服務呢

這里列出一個表格

還有一些其他的安全設置

  • 禁止系統響應任何從外部來的ping請求

ping通過用來檢查網絡的連通性,如果能夠ping通,攻擊者就知道這是一個活躍的機器,那么怎么禁止ping請求呢

  • 刪除不必要的用戶組

刪除系統不必要的用戶 userdel username

刪除系統不必要的組 groupdel groupname

  • 關閉selinux

首先它是內核強制訪問控制安全系統,,由于它和現在的linux應用程序和內核模塊有一些兼容問題,如果要查看是否已啟用

通過使用 getenforce,如果要關閉selinux,修改下面的文件

2 說說防火墻

防火墻有硬件防火墻和軟件防火墻,在這里主要介紹軟件防火墻。根據工作方式的不同又分為封包式防火墻應用層網關防火墻

硬件防火墻使用專有的操作系統,如果按照工作方式來劃分,那么防火墻也分為過濾式防火墻、應用層網關防火墻兩種,后面給大家介紹的 iptable 即屬于過濾式防火墻

Iptable 是 Linux 中內嵌好的防火墻軟件,集成在內核中,因此效率非常高的。它可以通過你設置一些封包過濾規則來定義什么數據包可以接受,什么數據包剔除

iptable的使用環境?

  • 保護自身本機

windows中有防火墻軟件,iptables類似,在Linux中的位置如下

從上圖可以發現,在交互的過程中,首先要經過 Linux 自身的 iptables 防火墻,作為第一層的安全過濾,隨后經過防火墻的第二層的過濾最終到達互聯網,所以可以說Linux自帶的iptables是系統安全的最后一道防線。

  • 獨立的Linux主機對整個網絡進行防護

如下圖所示,部署在Linux路由器上對整個局域網進行安全防護

從位置來看,位于外網與局域網之間,防火墻在路由器的上面,所以先對進入局域網的數據包進行過濾,這樣不就對局域網主機進行了訪問控制,以此來保護局域網的安全

  • 多臺Linux主機對Lan進行多層安全防護

通常局域網劃分了子網,在子網錢部署一道Linux防火墻,然后將一些保密的資源放在這個子網里,子網通過設置第二道Linux防火墻設置相對更高的安全等級

  • 對DMZ進行安全防護

DMZ區域通常將互聯網與局域網隔離開的一個特殊網絡區域,通常部署一些不包含機密信息的服務器,比如ftp,這樣來自外網的訪問者可以通過Linux防火墻來訪問DMZ的服務,即使DMZ服務器遭到破壞,也不會影響另一部分網絡

iptables的基本使用是如何的?

  • iptables 的前生后世

Linux最早出現的防火墻叫做 ipfw,是基于Linux2.0內核的。隨后在 Linux2.2 中推出了ipchains,語法更容易理解且功能更強大,隨后 iptables 在 Linux2.4 出現,同時也包含了 ipchains,但是兩者無法兼容,iptables防火墻越來越強大,Linux2.4以后就基本上使用iptables防火墻了

  • iptables的組成

iptables=ip tables,意味著是IP表的意思,對的,它是由多個表組成,且每個表的用途不一樣,在每個表中定義了很多鏈,通過這些鏈設置規則和策略

iptables呢有三種表的選項,管理本機數據進出的 filter 表,管理防火前內部主機的 NAT 表和改變包頭內容的mangle

先來看看filter進行信息表的過濾,分別包含了INPUT、OUTPUT和FORWARD鏈

NAT表主要用于網絡地址轉換,再上一個篇也有說過,它包含了PREROUTING、POSTROUTING和OUTPUT鏈

mangle表包含了一些用于標記高級路由的信息報,可以改變包以及包頭內容,如TTL、TOS,MARK。它知識在內核空間為包設置一個標記而已,這個表內置了五個鏈:PREROUTING、POSTROUTING、OUTPUT、INPUT和FORWARD

通過多個路由規則和預設規則組成了功能鏈,然后多個功能鏈組成功能表,多個功能表組成iptables防火墻

iptables的執行過程是怎么樣的呢?

當數據包到達Linux主機,首先進行 iptables 過濾,如果數據包滿足規則1指定的條件則直接執行相應的操作,后面的2,3規則就不再理會

舉個例子

假設目前這個 LInux 可以對外提供 www 的服務,對于網絡 192.168.50.0/24 中的網絡主機開放訪問www服務,但是禁止192.168.50.133訪問www服務,規則如下

  • 規則1:禁止192.168.50.133主機訪問www服務
  • 規則2:允許本地網絡訪問www服務

這樣子設置完規則后,本地的網絡除了133不能訪問以外,其他的都能訪問。如果反過來

  • 規則1:允許本地網絡192.168.50.0/24訪問www服務
  • 規則2:禁止192.168.50.133主機訪問www服務、

此時的規則1允許所有主機訪問Linux服務器的www服務,自然也包含了133主機,規則2將顯得毫無意義

iptables的使用語法是怎么樣的呢

  • 啟動和關閉iptables
servcie iptables start//啟動service iptables stop//關閉chkconfig --level 35 iptables on //設置iptables開機默認啟動

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

格式:iptabls [-t tables] -L -vn -FXZ
  • 查看當前系統filter表的幾條鏈規則
iptables -L -n

3 用戶以及用戶組的管理

用戶組

Linux是一個真實且多用戶多任務的操作系統,意味著張三王五李四都可以同時使用同一個Linux操作系統,但是他們三兒不能互相訪問各自的內容,不同的用戶有不同的權限,每個用戶在權限范圍內完成不同的任務,Linux正是通過這樣的權限劃分和管理實現多用戶的運行機制

Linux用戶的分類是怎么樣的呢

  • 超級用戶

超級用戶,默認為root,具有最高的權限

  • 普通用戶

只能對自己目錄下的文件進行訪問

  • 虛擬用戶

最大的特點是不能訪問登錄系統,他們的存在主要是為了方便系統管理,滿足相關系統進程對文件屬性的要求

用戶和組

用戶通過向Linux申請用戶訪問系統,這樣可以合理的利用和控制系統,同時也可以幫助用戶組織文件,達到提供對用戶文件的安全性保護的目的

什么是用戶組呢

有時候需要協同辦公,假設一共10個人,讓這10個人對文件的操作具有相同的權限,需要給每個用戶授權,這樣豈不是太麻煩了,Linux就使用的概念,讓屬于組的用戶都具有相同的權限

用戶和組的關系

用戶和組的關系可以是一對一,也可以是一對多設置多對多

  • 一對一:這個組就只有一個用戶
  • 一對多:這個用戶存在于多個組中,具有多個組的共同權限
  • 多對1:多個用戶存在一個組,具有相同權限
  • 多對多:多個用戶存在于多個組

用戶的配置文件在哪兒?

用戶和組相關配置文件,我們分別查看如下幾個文件

  • /etc/passwd

這個文件是系統用戶配置文件,起格式如下

用戶名:密碼:用戶標識號:組標識號:注釋描述:主目錄:默認shell

看看/etc/passwd是什么樣子

詳細說說這些都是什么意思

  • 用戶名:用戶賬戶
  • 密碼:為了保護用戶隱私,這里面存放的都是一個特殊字符,加密的用戶密碼存放在/etc/shadow中
  • 用戶標識號:用戶的UID,每個用戶都會有一個UID且唯一,0是超級用戶的標識,1-99由系統保留,

作為普通用戶,UID從500開始,用戶的權限和角色也是根據 UID 而定,如果把普通用戶的 UID 設置為0,將擁有root權限,這個非常的危險

  • 組標識號:組的GID,記錄用戶所在組,對應于/etc/group文件的一條記錄
  • 主目錄:用戶登錄默認所處的目錄
  • 默認shell:默認使用的用戶解析器,用戶的所有操作都是通過shell傳遞給內核的

為了保證用戶的密碼安全,使用了/etc/shadow

  • 用戶名:與/etc/passwd的用戶名相同的含義
  • 加密密碼:存放的是加密以后的用戶密碼字符串,如果字段是* !等,對應的用戶不能登錄系統
  • 最后一次的修改時間:表示從某個時間起,到用戶最近一次修改密碼的間隔天數
  • 最小間隔時間:兩次修改密碼之間的最小時間間隔
  • 最大時間間隔:兩次修改密碼之間的最大時間間隔
  • 警告時間:系統開始警告到密碼正式失效的時間
  • 不活動時間:表示用戶密碼作廢以后多少天,系統禁止這個用戶
  • 失效時間:用戶的賬號生存期

/etc/group是干啥的

  • 組名:用戶組的名稱,組名不能重復
  • 密碼:存放用戶組加密后密碼字串,默認設置在/etc/shadow文件中,而這里的x代替
  • 組標識號:Gid與/etc/passwd中組標識號對應
  • 組內用戶列表:多個用戶使用逗號分隔

/etc/default/useradd文件

為什么我們通過 useradd 命令創建一個用戶后,默認在 /home 下且使用的shell是 /bin/bash ,看看 /etc/default/useradd 就明白了

/etc/default/useradd 定義了新建用戶的一些默認屬性,比如用戶的主目錄,使用 shell 等,通過更改增額文件就可以改變新建用戶的默認屬性值

用戶的管理工具有哪些?

  • groupadd命令

groupadd用來新建用戶組,其語法格式如下所示

groupadd -g gid group

這里的選項 -g 表示指定新建用戶組的GID,這個GID必須唯一

選項-o:一般和-g同時使用,表示新用有的一直y戶組gid和系統已y

此時創建一個lan_group1用戶組和lan——group2用戶組

group -g 1110 lan_group1 Group -g 1120 lan_group2 More /etc/group| grep lan_group1

  • groupdel命令

groupdel用于刪除用戶組

groupdel 名稱

如果刪除lan_group1

groupdel lan_group1

詳細說說useradd/usermod等命令

  • useradd

如果在使用useradd的時候,不使用任何的參數,那么系統首先會讀取配置文件/etc/login.defs和/etc/default/useradd,然后根據這兩個配置文件來添加用戶。隨后想/etc/passwd和/etc/group添加用戶和用戶組記錄,同時會在/etc/passwd中添加隊以ing的加密文件。接著系統就會在/etc/default/useradd中增加用戶主目錄,這樣一個主目錄就算建立了。

useradd的基本使用和常用選項

  • -u uid:唯一用戶標識號
  • -g group:指定用戶登錄的默認組
  • -d home:指定新建用戶的默認主目錄,如果不指定在,則會在etc/default/useradd中創建用戶主目錄
  • -e expire:指定用戶的賬號過期時間

如何更改用戶的賬戶屬性信息

通過usermod修改用戶的賬戶信息。

usermod -u -g -G -d .....

常用的選項

  • -u uid:指定用戶新uid,唯一
  • -d 主目錄:修改用戶登陸的主目錄
  • -c 注釋:修改用戶的注釋信息
  • -f:失效日

如果要刪除用戶呢

通過userdel刪除用戶,指定"-r"參數不僅刪除用戶,還會刪除用戶的主目錄

好了舉一個完整一點的例子

  • 添加一個用戶lan_linux,所屬用戶組為base_linux,附加用戶組為forme_linux,同時指定用戶的默認主目錄為/opt/base_linux
  • 添加用戶test,指定UID為666,默認shell為/bin/sh,指定用戶組為上面的
  • 修改用戶test的主用戶組為test_modify,同時修改test的附加組

4 文件權限

通過 ls 命令就可以查看文件以及目錄的權限信息,如果使用 ls -al則還可以查看隱藏文件

為了更加詳細的了解每一行各個段什么意思,我們取出一行

第一列由10個字符組成,其中分為4個部分,拆解如下

  • 文檔類型,其中d表示目錄,l 表示軟連接。當為 - 表示是文件,為 c 表示字符設備文件

接下來的三個部分,3個字符為一組,r-讀,w-寫,x-執行

  • 第二個部分 user 部分,是對文檔所有者權限的設定,rwx 表示用戶對 xxx 有讀寫執行的所有權
  • group部分,是文檔所屬用戶組權限的設定
  • other部分是對文檔所有者之外的其他用戶的權限設定

第二列表示文檔的連接數,表示有多少文件執行一個inode

  • 第三列表示文檔所屬的用戶和用戶組
  • 第四列是文檔的大小
  • 第五列表示最后一次修改的日期
  • 第六列是文檔名稱

這些權限如何去修改呢

通過chown改變文件和目錄的權限,所有者包含了用戶和用戶組。

使用方法:chown -R y 用戶名稱 文件 目錄

-R: 進行遞歸式的權限更改,意味著將目錄下所喲肚餓文件,子目錄都更新為指定的用戶組權限,這個操作需要多多謹慎

如果需要修改訪問的權限呢?

使用 chmod 來改變文件或目錄的訪問權限。使用方法有兩種,一種是字母和操作符表達式的字符設定法,另一種是包含數字的數字設定法

先來看第一種—字符設定法

語法:chmod [who] [+ | - | =] [mode] 文件名

下面詳細說一下各個選項的含義

  • who表示操作的對象,可以是下面字母中的任何一個

    • 如果是u,則代表用戶,即文件或者目錄的所有者
    • 如果為g,則代表用戶組,即文件或目錄所屬組
    • 如果為o,表示其他用戶,
    • 如果為a,表示所有用戶
  • 操作符有哪些

    • “+”表示添加某個權限
    • “-”表示取消某個權限
    • “=”表示賦予給定可執行的權限,其中可以是可讀,可寫,可執行
  • mode表示可以執行的權限,其中可以是r,w,x以及他們的組合

  • 文件名可以是以空格分開的文件列表,支持通配符

案例

修改文件test.log文件,使其所有者具有所有權限,用戶組和其他用戶具有只讀權限

數字設定法

即上面的r用數字4代替,w用2代替,x用1代替,所以如果想讓文件的屬主擁有讀寫權限,可以通過4+2的方式來實現,

  • 755:第一個 7代表文件所有者的權限,通過4+2+1得到。第二個5標識文件所屬組的權限,通過4+0+1實現

舉個例子

修改文件test.log的權限為644

四、Linux書籍推薦

哈哈哈,能看到這的估計很少吧,如果都看到這里了,是不是可以點贊一下了,謝謝。這些知識是非常基礎的內容,如果是國企,銀行等單位的面試基本上是夠了。如果是 Linux 相關的開發崗位,這肯定遠遠不夠,相關的書籍在之前的那篇文章給大家已經說了,有需要的也可以去看看。

五、Linux開源項目

這里涉及的項目屬于Linux服務端開發必備的知識了,對于網絡編程而言,建議大家先去看游雙寫的高性能服務編程,然后熟悉使用wireshark,或者他的開發包winpcap/libpcap,通過這兩個包來練習下網絡拆包,組包,分流等等操作,這樣也許會讓你對網絡有更加直觀的認識。下面的源碼大部分都是有帶注釋的,所以看著就更清晰明了。

webbench

這是一個在 Linux 中進行網站壓測的工具。通過 fork 來模擬多個客戶段同時訪問 URL,測試網站在這種壓力下的性能。采用純 C 語言實現,源碼加起來不過600行。

Tinyhttpd

一共502行,當然很多人在此基礎上加上了其他的請求方法,你也可以去試試。另外作者還在這個基礎上附帶一個client,做做實驗,加深對HTTP報文,請求的理解

libcurl

這個庫是當初實習的時候使用的庫,多協議文件傳輸庫,實現文件的下載,續傳等功能,通過這個庫能夠非常方便的實現斷續下載等功能。

libevent

c語言編寫的輕量級開源高性能事件通知庫,這里面你會了解如下幾個地方,另外 B 站也有個完整的 Libevent的源碼分析與實戰。

  • 跨平臺代碼怎么實現

  • 多種IO多路復用的使用方法

  • 定時器怎么實現

  • 如何注冊事件的優先級

Muduo

對于應屆生而言,如果是面Linux相關的開發崗位,應該都會去了解下這個庫吧,他是一個基于Reactor模式的C++網絡庫,采用的是非阻塞IO模型,是基于事件驅動和回調,也有和上面相關庫的性能對比。

LevelDb

LevelDb是兩位谷歌大佬開發,且說能夠處理十億規模kv數據持久性存儲的C++程序庫。和Redis不同的是,他不會狂吃內存,而是將大部分的數據存儲再磁盤上

cJSon

cJson是c語言中的一個json編解碼器,一共500行代碼,速度卻比較理想。結構清晰,值得學習

redis

5 總結

從 Linux 的安裝到命令基本使用,軟件的安裝,常見的維護方式及網絡配置。通過這篇文章基本上應付面試中的基本 Linux 相關問題,如果是諸如騰訊的 C/C++ 崗位,那么這些知識將遠遠不夠,需要大家更加深入的去學習相關書籍和上方的開源項目。

好了,至此,Linux 復習的 V1 版就到這了,如果需要 PDF思維導圖 的小伙伴,可以幫忙在下方點個點贊數超過500則出暗黑和Github兩個版本的 PDF。

總結

以上是生活随笔為你收集整理的【进大厂必学】3W字180张图学习Linux基础总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。