国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》

這篇具有很好參考價值的文章主要介紹了Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

鳥哥 Linux 私房菜(基礎(chǔ)學(xué)習(xí)篇)

第零章、計算器概論

  • 所謂的計算機就是一種計算器,而計算器其實是:『接受用戶輸入指令與數(shù)據(jù),經(jīng)由中央處理器的數(shù)學(xué)與邏輯單元運算處理后, 以產(chǎn)生或儲存成有用的信息』。因此,只要有輸入設(shè)備(不管是鍵盤還是觸摸屏)及輸出設(shè)備(例如計算機屏幕或直接由打印機打印出來),讓你可以輸入數(shù)據(jù)使該機器產(chǎn)生信息的, 那就是一部計算器了。
  • 關(guān)于計算機的硬件組成部分,其實你可以觀察你的桌面計算機來分析一下,依外觀來說主要可分為三部分:
    • 輸入單元:包括鍵盤、鼠標(biāo)、讀卡器、掃描儀、手寫板、觸控屏幕等等;
    • 主機部分:這個就是系統(tǒng)單元,被主機機箱保護(hù)著,里面含有一堆板子、CPU 與內(nèi)存等;
    • 輸出單元:例如屏幕、打印機等。
  • 中央處理單元(Central Processing Unit,CPU)為一個具有特定功能的芯片,里面含有指令集。CPU 內(nèi)又可分為兩個主要的單元:算術(shù)邏輯單元與控制單元。其中算術(shù)邏輯單元主要負(fù)責(zé)程序運算與邏輯判斷,控制單元則主要在協(xié)調(diào)各周邊組件與各單元間的工作。
  • 綜上所述,電腦是由幾個單元組成的,包括輸入單元、 輸出單元、CPU 內(nèi)部的控制單元、算術(shù)邏輯單元與內(nèi)存五大部分。
  • 目前世界上最常見的兩種 CPU 架構(gòu)分別是:精簡指令集(RISC)與復(fù)雜指令集(CISC)系統(tǒng)。常見的 RISC 指令集 CPU 主要有甲骨文公司的 SPARC 系列、IBM 公司的 Power Architecture 系列與 ARM 公司的 ARM CPU 系列等。目前世界上使用范圍最廣的 CPU 可能就是 ARM 這種架構(gòu);常見的使用 CISC 指令集的 CPU 有 AMD、Intel、VIA 等 x86 架構(gòu)的 CPU。
  • 假設(shè)電腦是一個人體,CPU = 腦袋; 內(nèi)存 = 腦袋中存放正在被思考的數(shù)據(jù)的區(qū)塊;硬盤 = 腦袋中存放回憶的記憶區(qū)塊;主板 = 神經(jīng)系統(tǒng);各項接口設(shè)備 = 人體與外界溝通的手、腳、皮膚、眼睛等;顯卡 = 腦袋中的影像;主機電源 = 心臟。
  • 早期的芯片組通常分為兩個網(wǎng)橋來控制各組件的通信,分別是北橋(負(fù)責(zé)連接速度較快的 CPU、內(nèi)存與顯卡等組件)和南橋(負(fù)責(zé)連接速度較慢的設(shè)備接口,包括硬盤、USB 設(shè)備、網(wǎng)卡等)。由于北橋最重要的就是 CPU 與內(nèi)存之間的橋接,因此目前的主流架構(gòu)中,大多將北橋的內(nèi)存控制器整合到了 CPU 當(dāng)中。
  • 早期的 CPU 設(shè)計中,所謂的外頻指的是 CPU 與外部組件進(jìn)行數(shù)據(jù)傳輸時的速度,倍頻則是 CPU 內(nèi)部用來加速工作性能的一個倍數(shù),兩者相乘才是 CPU 的頻率速度。
  • CPU 每次能夠解析的數(shù)據(jù)量有限,因此由內(nèi)存?zhèn)鱽淼臄?shù)據(jù)量就有所限制,這也導(dǎo)致 32 位的 CPU 最多只能支持最大到 4GB 的內(nèi)存。 理解如下:對于 32 位的 CPU,其最多可以支持的內(nèi)存空間是由其尋址能力決定的。在 32 位系統(tǒng)中,每個地址都是由 32 位二進(jìn)制數(shù)表示的,因此總共有 2^32(約為 4.29 billion)個不同的地址。內(nèi)存空間的大小是通過將這些地址轉(zhuǎn)換為字節(jié)來計算的。由于在計算機中,內(nèi)存通常被組織為字節(jié)的序列,每個地址對應(yīng)一個字節(jié),因此,32位系統(tǒng)最多能夠?qū)ぶ返淖止?jié)數(shù)就是 2^32 字節(jié),2^32 字節(jié) = 4,294,967,296 字節(jié) ≈ 4GB。64 位系統(tǒng):2^64 字節(jié) = 18,446,744,073,709,551,616 字節(jié) ≈ 18.4 million TB。
  • 個人電腦的內(nèi)存主要組件為動態(tài)隨機存取內(nèi)存(Dynamic Random Access Memory,DRAM),隨機讀寫內(nèi)存只有在通電時才能記錄與使用,斷電之后數(shù)據(jù)就消失,因此我們也稱這種 RAM 為揮發(fā)性內(nèi)存。靜態(tài)隨機存取內(nèi)存(Static Random Access Memory,SRAM)。
  • BIOS(Basic Input Output System)是一個程序,這個程序是寫死到主板上面的一個存儲芯片中,這個存儲芯片在沒有通電時也能夠記錄數(shù)據(jù),這就是只讀存儲器(Read Only Memory,ROM),其是一個非易失性的存儲。
  • 顯卡又稱為 VGA(Video Graphics Array),直接在顯卡上嵌入一個 3D 加速芯片,這就是所謂的 GPU 的由來。顯卡主要也是通過 GPU 的控制芯片來與 CPU、內(nèi)存等通信。
  • 顯卡與電腦屏幕主要通過以下幾種連接接口通信:D-Sub(VGA接口,較早之前的連接接口,主要為 15 針接口)、DVI、HDMI(相對于 D-Sub 與 DVI 僅能傳輸影像數(shù)據(jù),HDMI 可以同時傳輸影像與聲音)和 DisplayPort(可以同時傳輸聲音和影像)。
  • 機械硬盤(Hard Disk Driver,HDD)和固態(tài)硬盤(Solid State Disk 或 Solid State Driver,SSD)。固態(tài)硬盤最大的好處是,它沒有馬達(dá)不需要轉(zhuǎn)動,而是透過內(nèi)存直接讀寫的特性。
  • CMOS 主要的功能為記錄主板上的重要參數(shù), 包括系統(tǒng)時間、CPU 電壓與頻率、各項設(shè)備的 I/O 地址與 IRQ 等,由于這些數(shù)據(jù)的記錄要用電,因此主板上面有電池。 BIOS 是寫入到主板上某一塊 flash 或 EEPROM 的程序,它可以在開機的時候執(zhí)行,以加載 CMOS 當(dāng)中的參數(shù), 并嘗試調(diào)用存儲設(shè)備中的引導(dǎo)程序,進(jìn)一步進(jìn)入操作系統(tǒng)當(dāng)中。
  • 操作系統(tǒng)(Operating System,OS)其實也是一組程序,這組程序的重點在于管理電腦的所有活動以及驅(qū)動系統(tǒng)中的所有硬件。其實就是內(nèi)核及其提供的接口工具。
  • 電腦系統(tǒng)主要由硬件構(gòu)成,然后內(nèi)核程序主要在管理硬件,提供合理的電腦系統(tǒng)資源分配(包括 CPU 資源、內(nèi)存資源等),因此只要硬件不同(如 x86 架構(gòu)與 RISC 架構(gòu)的 CPU),內(nèi)核就得進(jìn)行修改才行。

Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》

第一章、Linux 是什么與如何學(xué)習(xí)

  • 1973 年:Unix 的正式誕生,Ritchie 等人使用 C 語言寫出第一個正式 Unix 核心。
  • Linux 的內(nèi)核是由芬蘭人 Linus Torvalds 在 1991 年編寫。
  • 1994 年完成 Linux 的內(nèi)核正式版,Version 1.0。
  • Unix like == Linux 很像 Unix 的操作系統(tǒng)。
  • GNU 是 GNU‘s Not UNIX。

第二章、主機規(guī)劃與磁盤分區(qū)

  • 個人計算機常見的磁盤接口有兩種:SATA 和 SAS,目前主流的是 SATA。

  • 設(shè)備文件名 /dev/sd[a-p] 根據(jù) Linux 內(nèi)核檢測到的磁盤的順序來命名,并非與實際插槽順序有關(guān)。 虛擬機的設(shè)備名可能為 /dev/vd[a-p]。

  • 磁盤的第一個扇區(qū)里主要記錄了兩個重要信息,分別是:(1)主引導(dǎo)記錄 MBR(Master Boot Record):可以安裝啟動引導(dǎo)程序的地方,有 446 字節(jié)。(2)分區(qū)表(partition table):記錄整塊硬盤分區(qū)狀態(tài),有 64 字節(jié)。由于近年來磁盤容量的不斷擴大,造成讀寫上一些困擾,甚至 2TB 以上的磁盤分區(qū)已經(jīng)讓某些操作系統(tǒng)無法存取,因此后來又多了一個新的磁盤分區(qū)格式,稱為 GPT (GUID partition table)。

  • /dev/sda1/dev/sda2 、/dev/sda3 、/dev/sda4 是保留給主分區(qū)或擴展分區(qū)的,邏輯分區(qū)的設(shè)備名稱號碼從 5 開始。

  • MBR 主分區(qū)、擴展分區(qū)與邏輯分區(qū)的特性:

    • 主分區(qū)與擴展分區(qū)最多可以有 4 個(硬盤的限制);
    • 擴展分區(qū)最多只能有 1 個(操作系統(tǒng)的限制);
    • 邏輯分區(qū)是由擴展分區(qū)持續(xù)劃分出來的分區(qū);
    • 能夠被格式化后作為數(shù)據(jù)存取的分區(qū)是主分區(qū)與邏輯分區(qū),擴展分區(qū)無法格式化;
    • 邏輯分區(qū)的數(shù)量依操作系統(tǒng)而不同,在 Linux 系統(tǒng)中 SATA 硬盤已經(jīng)可以突破 63 個以上的分區(qū)限制。
  • GPT 分區(qū)已經(jīng)沒有所謂的主、擴展、邏輯分區(qū)的概念,既然每組記錄都可以獨立存在,當(dāng)然每個都可以視為主分區(qū),每一個分區(qū)都可以拿來格式化使用。

  • 傳統(tǒng) BIOS 與 UEFI 的差異(BIOS(Basic Input/Output System,基本輸入輸出系統(tǒng))、UEFI(Unified Extensible Firmware Interface,統(tǒng)一可擴展固件接口))

    • 設(shè)計差異:
      • BIOS:傳統(tǒng)的 BIOS 是使用面向硬件的匯編語言編寫的,代碼龐大且復(fù)雜。它采用分區(qū)表(MBR)作為磁盤分區(qū)方案,并依賴于實模式的 x86 處理器。
      • UEFI:UEFI 是使用 C/C++ 語言編寫的,具有模塊化設(shè)計。它支持在各個平臺(如 x86、ARM)上運行,并引入了全新的 GPT 磁盤分區(qū)方案。
    • 啟動速度:
      • BIOS:BIOS 啟動過程較慢,因為它需要在每次啟動時執(zhí)行完整的自檢過程,并加載操作系統(tǒng)。
      • UEFI:UEFI 啟動過程更快,因為它采用預(yù)初始化驅(qū)動程序和模塊,可以直接加載操作系統(tǒng)。
    • 容量限制:
      • BIOS:由于歷史原因,BIOS 面臨著內(nèi)存尋址和磁盤容量上的限制。它只能處理 16 位地址總線和 2TB 以下的硬盤。
      • UEFI:UEFI 支持 64 位地址總線和更大的磁盤容量。它能夠處理超過 2TB 的硬盤,并支持較大內(nèi)存配置。
    • 用戶界面:
      • BIOS:BIOS 提供了基本的文本界面,通常由鍵盤操作進(jìn)行配置。
      • UEFI:UEFI 提供了更現(xiàn)代化的圖形用戶界面(GUI),允許鼠標(biāo)操作和更多可視化選項。
    • 擴展性和功能:
      • BIOS:傳統(tǒng)的 BIOS 難以擴展和更新,功能相對有限。
      • UEFI:UEFI 具有更好的擴展性,支持插件式驅(qū)動程序和支持外部設(shè)備(如鼠標(biāo)、鍵盤等)的應(yīng)用程序。

    與傳統(tǒng)的 BIOS 不同,UEFI 簡直就像是一個低階的操作系統(tǒng),甚至于連主板上面的硬件資源的管理, 也跟操作系統(tǒng)相當(dāng)類似,只需要加載驅(qū)動程序即可控制操作。同時由于程控得宜,一般來說,使用 UEFI 接口的主機,在開機的速度上要比 BIOS 來的快許多! 因此很多人都覺得 UEFI 似乎可以發(fā)展成為一個很有用的操作系統(tǒng)。

  • 開機的流程:BIOS —> MBR —> 引導(dǎo)啟動程序 —> 內(nèi)核文件。

  • 引導(dǎo)啟動程序的功能主要有:提供選項、加載內(nèi)核、轉(zhuǎn)交控制權(quán)給其他引導(dǎo)啟動程序。

  • 引導(dǎo)程序可以安裝的地點有兩個,分別是 MBR 與引導(dǎo)扇區(qū)。

第四章、首次登入與在線求助

  • Linux 默認(rèn)情況下會提供六個終端來讓用戶登錄,切換的方式為使用 Ctrl+Alt+F1~F6的組合鍵。
  • 命令行模式登錄后所運行的程序被稱為殼(shell),這是因為這個程序負(fù)責(zé)最外面跟用戶溝通,所以才被戲稱為殼程序。
  • 請?zhí)貏e留意,在 Linux 環(huán)境中大小寫字母是不一樣的東西。
  • 顯示日期與時間的指令: date
  • 顯示日歷的指令: cal cal [year] cal [month] [year]
  • 簡單好用的計算器: bc,默認(rèn)僅輸出整數(shù),如果要輸出小數(shù)點下位數(shù),那么必須要執(zhí)行 scale=number 命令,那個 number 就是小數(shù)點位數(shù)。 quit 退出 bc。
  • 數(shù)據(jù)同步寫入磁盤: sync,直接在命令行模式下輸入 sync ,那么在內(nèi)存中尚未被更新的數(shù)據(jù),就會被寫入硬盤中。所以,這個命令在系統(tǒng)關(guān)機或重新啟動之后,最好多執(zhí)行幾次。 sync; sync; sync; reboot
  • Linux 運行級別 共有 0-6 七個級別,其中 0 是關(guān)機,6 是重新啟動等。 init 0 init 6 systemctl reboot 重啟 systemctl poweroff 關(guān)機。
  • 在終端環(huán)境中,可依據(jù)提示符 $# 判斷一般用戶或 root 用戶。
  • Ctrl+d 鍵盤輸入結(jié)束(End Of File,EOF 或 End Of Input),可以用來取代 exit 的輸入。

第五章、Linux 的文件權(quán)限與目錄配置

  • Linux 一般將文件可讀寫的身份分為三個類別:擁有者(owner)、所屬群組(group)、其他人(others),且三種身份各有讀(read)、寫(write)、執(zhí)行(execute)等權(quán)限。

  • chgrp — change group 修改文件所屬群組; chgrp users test.log chgrp -R dirname/filename ... 遞歸修改群組

  • chown — change owner 修改文件擁有者; chown [-R] 所有者:用戶組 文件或目錄 chown [-R] 所有者 文件或目錄

  • chmod 修改文件的權(quán)限,SUID、SGID、SBIT 等的特性。 修改權(quán)限的方式有兩種:數(shù)字或符號。

    • 數(shù)字類型改變文件權(quán)限

      Linux 文件的基本權(quán)限就有九個,分別是 owner/group/others 三種身份各有自己的 read/write/execute 權(quán)限。r:4 w:2 x:1 chmod 777 test

    • 符號類型改變文件權(quán)限

      chmod u=rwx,g=rx,o=r filename
      chmod a+w .bashrc
      chmod a-x .bashrc
      
  • 默認(rèn)的情況下,所有的系統(tǒng)上的賬號與一般身份使用者,還有那個 root 的相關(guān)信息,都是記錄在 /etc/passwd 這個文件內(nèi)的。至于個人的密碼則是記錄在 /etc/shadow 這個文件下。此外,Linux 所有的組名都記錄在 /etc/group 內(nèi)!這三個文件可以說是 Linux 系統(tǒng)里面賬號、密碼、群組信息的集中地。

  • 權(quán)限對文件的意義:

    • r(read):可讀取此文件的實際內(nèi)容,如讀取文本文件的文本內(nèi)容等;
    • w(write):可以編輯、新增或修改該文件的內(nèi)容(但不含刪除該文件);
    • x(execute):該文件具有可以被系統(tǒng)執(zhí)行的權(quán)限。
  • 權(quán)限對目錄的意義:

    • r(read contents in directory)表示具有讀取目錄結(jié)構(gòu)列表的權(quán)限,即 ls;
    • w(modify contents of directory)表示具有改動該目錄結(jié)構(gòu)列表的權(quán)限,即建立新的文件與目錄 touch add.txt mkdir new_dir、刪除已經(jīng)存在的文件與目錄(不論該文件的權(quán)限是什么) rm rmdir、將已存在的文件或目錄進(jìn)行更名 cp mv 、移動該目錄內(nèi)的文件、目錄位置;
    • x(access directory)表示用戶能否進(jìn)入該目錄 cd。能否讀取到某個文件內(nèi)容,跟該文件所在的目錄權(quán)限也有關(guān)系(目錄至少需要有 x 的權(quán)限)。
  • 文件系統(tǒng)
    Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》

    • / (root,根目錄):與啟動系統(tǒng)有關(guān);
    • /usr (unix software resource):與軟件安裝/執(zhí)行有關(guān);UNIX操作系統(tǒng)軟件資源所放置的目錄,而不是用戶的數(shù)據(jù)。
    • /var (variable):與系統(tǒng)運作過程有關(guān)。
      Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》
      Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》
      Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》
      Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》
      Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》
  • 一個 Linux 文件能不能被執(zhí)行,與他的第一欄的十個屬性有關(guān), 與文件名根本一點關(guān)系也沒有。 drwxrwxrwx

第六章、Linux 文件與目錄管理

  • cp

    -i :若目標(biāo)文件已經(jīng)存在時,在覆蓋時會詢問操作的進(jìn)行
    -p :連同文件的屬性(權(quán)限、用戶、時間)一起復(fù)制過去,而非使用默認(rèn)屬性(備份常用)
    
  • 文件內(nèi)容查看

    • cat 由第一行開始顯示文件內(nèi)容; cat -n test.log 顯示行號

    • tac 從最后一行開始顯示,可以看出 tac 是 cat 的倒著寫;

    • nl 顯示的時候,同時輸出行號;

    • od 以二進(jìn)制的方式讀取文件內(nèi)容;

    • more

      空格鍵 :代表向下翻一頁

      Enter :向下翻一行

      /字符串 :向下查找關(guān)鍵詞

      :f :顯示文件名以及目前顯示的行數(shù)

      q :離開more

      b 或 ctrl-b:往回翻頁,只對文件管用,對管道無用。

    • less

      空格鍵 :代表向下翻一頁

      [pagedown]:向下翻動一頁

      [pageup]:向上翻動一頁

      /字符串 :向下查找關(guān)鍵詞

      ?字符串 :向上查找關(guān)鍵詞

      n :重復(fù)前一個查找(與 / 或 ? 有關(guān))

      N :反向重復(fù)前一個查找(與 / 或 ? 有關(guān))

      g :前進(jìn)到這個數(shù)據(jù)的的第一行

      G :前進(jìn)到這個數(shù)據(jù)的最后一行

      q:離開 less

    • tail (head)

      -n :后面接數(shù)字,代表顯示幾行的意思

      -f:表示持續(xù)刷新顯示后面所接文件中的內(nèi)容

  • umask 就是指定目前用戶在建立文件或目錄時候的權(quán)限默認(rèn)值。查看的方式有兩種,一種是直接輸入umask,可以看到數(shù)字類型的權(quán)限設(shè)置值;一種則加入 -S (Symbolic)這個選項,就會以符號類型的方式來顯示出權(quán)限了。

    # umask
    0022  # 第一個數(shù)字是特殊權(quán)限用的
    # umask -S
    u=rwx, g=rx, o=rx
    ---
    # 假設(shè) umask 為 003,請問該 umask 情況下,建立的文件與目錄權(quán)限是什么?(注意:直接使用文件默認(rèn)權(quán)限減去 umask 默認(rèn)權(quán)限是不對的)
    文件:(-rw-rw-rw-)-(--------wx)= -rw-rw-r--
    目錄:(drwxrwxrwx)-(d-------wx)= drwxrwxr--
    
    • 在默認(rèn)權(quán)限的屬性上,目錄和文件是不一樣的,x 權(quán)限對于目錄是非常重要的,但一般文件通常用于數(shù)據(jù)的記錄,不需要執(zhí)行權(quán)限。因此:

      若用戶建立為文件,則默認(rèn)沒有可執(zhí)行 x 權(quán)限,即只有 rw ,也就是最大為 666 權(quán)限;

      若用戶建立為目錄,由于 x 與是否可以進(jìn)入此目錄有關(guān),因此默認(rèn)為所有權(quán)限均開放,即 777。

    • 要注意的是,umask 的數(shù)字指的是該默認(rèn)值需要減掉的權(quán)限。

  • 文件隱藏屬性

    • chattr 配置文件隱藏屬性,命令只能在 ext2、ext3、ext4的 Linux 傳統(tǒng)文件系統(tǒng)上面完整生效。

      + :增加某一個特殊參數(shù),其他原本存在參數(shù)則不動
      - :刪除某一個特殊參數(shù),其他原本存在參數(shù)則不動
      = :直接設(shè)置參數(shù),且僅有后面接的參數(shù)
      a :當(dāng)設(shè)置a之后,這個文件將只能增加數(shù)據(jù),而不能刪除也不能修改數(shù)據(jù),只有root才能設(shè)置這屬性
      i :很厲害的參數(shù),它可以讓一個文件【不能被刪除、改名、設(shè)置鏈接也無法寫入或新增數(shù)據(jù)】。對于系統(tǒng)安全性有相當(dāng)大的助益,只有root能設(shè)置此屬性
      

      對于 logfile 這樣的日志文件,就更需要 +a 這個可以增加但不能修改舊數(shù)據(jù)與刪除的參數(shù)。

    • lsattr 顯示文件隱藏屬性

  • 文件的查找,一般先使用 whereis 或 locate 來檢查,如果真的找不到了,才以 find 來查找。 locate 執(zhí)行之前 可先執(zhí)行 updatedb 更新查找的數(shù)據(jù)庫,參數(shù) -l 5 可控制輸出的行數(shù)。

第七章、Linux 磁盤與文件系統(tǒng)管理

  • 磁盤分區(qū)表主要有兩種格式,一種是限制較多的 MBR 分區(qū)表,一種是較新且限制較少的 GPT 分區(qū)表;MBR 分區(qū)表中,第一個扇區(qū)最重要,里面有:主引導(dǎo)記錄(Master boot record,MBR)及分區(qū)表(partition table),其中 MBR 占有 446B,而分區(qū)表則占有 64B。

  • 將文件系統(tǒng)與目錄樹結(jié)合的操作我們稱為掛載;

  • 掛載點一定是目錄 ,該目錄為進(jìn)入該文件系統(tǒng)的入口。

  • df:列出文件系統(tǒng)的整體磁盤使用量; df -h 以人們交易閱讀的 GBytes、MBytes、KBytes 等格式自行顯示;

    由于 df 主要讀取的數(shù)據(jù)幾乎都是針對一整個文件系統(tǒng),因此讀取的范圍主要是在超級區(qū)塊內(nèi)的信息,所以這個命令顯示結(jié)果的速度非???。

  • du:查看文件系統(tǒng)的磁盤使用量(常用在查看目錄所占磁盤空間); du -sm du -h --max-depth=1 /opt

    -a :列出所有的文件與目錄容量,因為默認(rèn)僅統(tǒng)計目錄下面的文件量;
    -h :以人們較易讀的容量格式(G/M)顯示;
    -s :僅列出總量,而不列出每個各別的目錄占用容量;
    -k :以 KBytes 列出容量顯示;
    -m :以 MBytes 列出容量顯示;
    
  • lsblk (list block device)列出系統(tǒng)上的所有磁盤列表。

  • fdisk fdisk -l

  • fsck 檢查文件系統(tǒng)并嘗試修復(fù)錯誤

  • 文件系統(tǒng)掛載:

    • 單一文件系統(tǒng)不應(yīng)該被重復(fù)掛載在不同的掛載點(目錄)中;
    • 單一目錄不應(yīng)該重復(fù)掛載多個文件系統(tǒng);
    • 要作為掛載點的目錄,理論上應(yīng)該是空目錄才行,否則原目錄下的東西就會暫時的消失。
    mount -a # 依照配置文件 /etc/fstab 的數(shù)據(jù)將所有未掛載的磁盤都掛載上來
    mount -l # 單純的輸入mount會顯示目前的掛載信息,加上 -l 可增列 Label 名稱
    mount -o # 后面可以接一些掛載時額外加上的參數(shù),比如賬號、密碼、讀取權(quán)限、重新掛載等
    mount -o remount,rw,auto / # 將 / 重新掛載,并加入?yún)?shù)為 rw 與 auto
    mount --bind /var /data/var # 將/var這個目錄暫時掛載到 /data/var 目錄下
    
    # umount [-fn] 設(shè)備文件名或掛載點
    -f :強制卸載
    -l :立刻卸載文件系統(tǒng),比 -f 還強
    -n :不更新 /etc/mtab 情況下卸載
    

第八章、文件與文件系統(tǒng)的壓縮

  • 常見的壓縮文件擴展名

    *.Z   # compress 程序壓縮的文件
    *.zip # zip 程序壓縮的文件
    *.gz  # gzip 程序壓縮的文件
    *.bz2 # bzip2
    *.xz  # xz
    *.tar # tar 程序打包的文件,并沒有壓縮過
    *.tar.gz # tar 程序打包的文件,并且經(jīng)過 gzip 壓縮
    *.tar.bz2 # tar 程序打包的文件,并且經(jīng)過 bzip2 壓縮
    *.tar.xz  # tar 程序打包的文件,并且經(jīng)過 xz 壓縮 
    
  • Linux 下常見的壓縮命令就是 gzip、bzip2 以及最新的 xz,至于 compress 已經(jīng)不流行了。bzip2 及 xz 這幾個壓縮比更好。但這些命令通常僅能針對一個文件來壓縮與解壓縮。

  • gzip 壓縮時,在默認(rèn)的狀態(tài)下原本的文件會被壓縮成為 .gz 后綴的文件,源文件就不再存在了。

  • tar 可以將很多文件打包成為一個文件,甚至是目錄也可以這么玩。單純的 tar 功能僅是打包而已,并沒有提供壓縮的功能,后來將整個 tar 與壓縮的功能結(jié)合在一起。

  • cat/more/less 可以使用不同的方式來讀取純文本文件,zcat/zmore/zless 則可以讀取純文本文件被壓縮后的壓縮文件。

  • tar zcvf ztvf zxvf jcvf jtvf jxvf

    -c :建立打包文件,可搭配 -v 來查看過程中被打包的文件名;
    -t :查看打包文件的內(nèi)容含有哪些文件名,重點在查看【文件名】;
    -x :解包或解壓縮的功能;
    -z :通過 gzip 的支持進(jìn)行壓縮/解壓縮;此時文件名最好為 *.tar.gz;
    -j :通過 bzip2 的支持進(jìn)行壓縮/解壓縮;此時文件名最好為 *.tar.bz2;
    -J :通過 xz 的支持進(jìn)行壓縮/解壓縮;此時文件名最好為 *.tar.xz,特別留意,-z、-j、-J 不可以同時出現(xiàn)在一串命令行中;
    -v :在壓縮/解壓縮的過程中,將正在處理的文件名顯示出來;
    -f 文件名 :后面要立刻接要被處理的文件名;
    -C 目錄 :解壓縮到特定目錄;
    --exclude=FILE :在壓縮的過程中,不要將 FILE 打包;
    
  • 僅解開單一文件的方法 tar -jxv -f 打包文件.tar.bz2 待解開文件名

  • 打包某目錄,但不含該目錄下的某些文件(不壓縮 /root/etc* 開頭的文件和 壓縮包自己) tar -jcv -f /root/system.tar.gz2 --exclude=/root/etc* --exclude=/root/system.tar.bz2 /etc /roottar -jcv -f /root/system.tar.gz2 --exclude /root/etc* --exclude /root/system.tar.bz2 /etc /root,注意 要打包的文件需要寫在最后。

第九章、vim 程序編輯器

  • 基本上 vi 共分為 3 種模式,分別是一般命令模式、編輯模式與命令行模式。
    Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》
    Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》
    Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》
    Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》
    Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》
    Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》

第十章、認(rèn)識與學(xué)習(xí) BASH

  • 我們必須要透過『 Shell 』將我們輸入的指令與 Kernel 溝通,好讓 Kernel 可控制硬件來正確無誤的工作!

  • 只要能夠操作應(yīng)用程序的接口都能夠稱為殼程序。狹義的殼程序指的是指令列方面的軟件,包括本章要介紹的 bash 等。 廣義的殼程序則包括圖形接口的軟件!因為圖形接口其實也能夠操作各種應(yīng)用程序來呼叫核心工作!

  • 變量的設(shè)定規(guī)則:

    • 變量與變量內(nèi)容以一個等號『=』來連接;
    • 等號兩邊不能直接接空格符;
    • 變量名稱只能是英文字母與數(shù)字,但是開頭字符不能是數(shù)字;
    • 變量內(nèi)容若有空格符可使用雙引號『"』或單引號『'』將變量內(nèi)容結(jié)合起來,但
      • 雙引號內(nèi)的特殊字符如 $ 等,可以保有原本的特性;
      • 單引號內(nèi)的特殊字符則僅為一般字符 (純文本);
    • 可用轉(zhuǎn)義符 \ 將特殊符號(如 Enter、$、\、空格、‘等)變成一般字符;
    • 在一串命令的執(zhí)行中,還需要借由其他額外的命令所提供的信息時,可以使用反單引號 【`】或 $ (命令)version=$(uname -r) ;
    • 若該變量需要在其他子程序執(zhí)行,則需要以 export 來使變量變成環(huán)境變量;
    • 通常大寫字符為系統(tǒng)默認(rèn)變量,自行設(shè)置變量可以使用小寫字符;
    • 取消變量的方法為使用 unset;
  • 在命令執(zhí)行過程中,反單引號之內(nèi)的命令將會被先執(zhí)行,而其執(zhí)行出來的結(jié)果將做為外部的輸入信號。 【ls -ld locate crontabls -ld $(locate crontab)

  • history 歷史命令 !number

  • 通配符
    Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》

  • /dev/null 垃圾桶黑洞裝置與特殊寫法。

  • 標(biāo)準(zhǔn)輸入(stdin):代碼為 0 ,使用 < 或 << ;
    標(biāo)準(zhǔn)輸出(stdout):代碼為 1 ,使用 > 或 >> ;
    標(biāo)準(zhǔn)錯誤輸出(stderr):代碼為 2 ,使用 2> 或 2>> ;

  • 命令執(zhí)行的判斷根據(jù) ;、&&、||

    • 一次執(zhí)行多個命令 cmd;cmd;cmd sync; sync; shutdown -h now
    • 兩個命令之間有依賴性,前一個命令的執(zhí)行結(jié)果關(guān)系到后一個命令的是否執(zhí)行;
      Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》
  • 管道命令 pipe |

    • 管道命令只會處理標(biāo)準(zhǔn)輸出,對于標(biāo)準(zhǔn)錯誤會予以忽略;
    • 管道命令必須要能夠接收來自前一個命令的數(shù)據(jù)成為標(biāo)準(zhǔn)輸入繼續(xù)處理才行。
  • 選取命令 cut grep

    • cut 可以將一段信息的某一段給它切出來,處理的信息是以行為單位。

      cut -d '分隔字符' -f fields
      -d:后接分隔字符,與-f一起使用
      -f:根據(jù)-d的分隔字符將一段信息劃分成為數(shù)段,用-f取出第幾段的意思
      
      ll | cut -d ' ' -f 1,3 # 1、3段
      ll | cut -d ' ' -f 1-3 # 1到3段
      
    • grep 分析一行的信息,若有匹配到需要的信息,就將該行拿出來

      -c # 打印匹配的文本行的行數(shù)
      **-v # 不包括,反向查找
      -i # 忽略字母大小寫**
      -n # 列出所有匹配的文本行,并顯示行號
      **-w # 匹配整個單詞**
      **-E # 表示過濾 多個參數(shù)
      -a # 可將二進(jìn)制視為文本文件搜尋,相當(dāng)于--binary-files=text這個參數(shù)。**
      
      **# grep -A  -B -C(大寫)    后面都跟阿拉伯?dāng)?shù)字 
      -A # 是顯示匹配后和它后面的n行。after 
      -B # 是顯示匹配行和它前面的n行。 before
      -C # 是匹配行和它前后各n行。 context**
      
      cat test.txt | grep -A1 ‘hello’ # 輸出 hello 匹配行,以及之后一行 after 1
      cat test.txt | grep -B1 ‘hello’ # 輸出 hello 匹配行,以及之前一行 before 1
      cat test.txt | grep -1 ‘hello’ # 輸出hello 匹配行,以及之前、之后各一行內(nèi)容
      
  • 排序命令 sort wc uniq

    • sort

      -f :忽略大小寫的差異,例如 A 與 a 視為編碼相同;
      -b :忽略最前面的空格符部分;
      -M :以月份的名字來排序,例如 JAN, DEC 等等的排序方法;
      -n :使用『純數(shù)字』進(jìn)行排序(默認(rèn)是以文字型態(tài)來排序的); -r :反向排序;
      -u :就是 uniq ,相同的數(shù)據(jù)中,僅出現(xiàn)一行代表;
      -t :分隔符,預(yù)設(shè)是用 [tab] 鍵來分隔;
      -k :以那個區(qū)間 (field) 來進(jìn)行排序的意思
      
      last | cut -d ' ' -f1 | sort
      cat /etc/passwd | sort -t ':' -k 3
      
    • uniq 當(dāng)我們排序完成后,想要將重復(fù)的數(shù)據(jù)僅列出一個顯示

      -i:忽略大小寫字符的不同
      -c:進(jìn)行計數(shù)
      
      last | cut -d ' ' -f1 | sort | uniq
      

      注意:uniq 統(tǒng)計的相鄰行的信息,所以統(tǒng)計前需要先 sort。

    • wc 統(tǒng)計字?jǐn)?shù)、行數(shù)等

      -l:僅列出行數(shù)
      -w:僅列出列數(shù)
      -m:字符數(shù)
      
      ll | wc -l
      
  • 雙向重定向 tee 同時將數(shù)據(jù)流分送到文件與屏幕。

  • 字符轉(zhuǎn)換命令 tr col join paste expand

    • tr 用來刪除一段信息中的文字,或是進(jìn)行文字信息的替換

      cat /etc/passwd | tr -d ':' # 刪除冒號
      
    • col 可將 tab轉(zhuǎn)成對等的空格鍵。 cat -A test.txt | col -x

    • expand 將[tab] 按鍵轉(zhuǎn)成空格鍵。 -t 4/8

  • 劃分命令 split ,將大文件依據(jù)文件大小或行數(shù)劃分成小文件。

    -b:后接欲劃分成的文件大小,可加單位,例如b, k m等
    -l:以行數(shù)劃分
    
    split -b 300k /etc/services services # 300k一個文件,文件名services開頭
    
  • 參數(shù)代換 xargs 字面上的意義來看, x 是加減乘除的乘號,args 則是 arguments (參數(shù))的意思,產(chǎn)生某個指令的參數(shù)的意思! xargs 可以讀入 stdin 的數(shù)據(jù),并
    且以空格符或斷行字符作為分辨,將 stdin 的資料分隔成為 arguments 。 因為是以空格符作為分隔,所以,如果有一些文檔名或者其他意義的名詞內(nèi)含有空格符的時候, xargs 可能就會誤判。 find /usr/sbin -perm 700 | xargs ls -l

  • - 用途。在管線命令當(dāng)中,常常會使用到前一個指令的 stdout 作為這次的 stdin , 某些指令需要用到文件名 (例如 tar) 來進(jìn)行處理時,該 stdin 與 stdout 可以利用減號 "-” 來替代。

    tar -cvf - /home | tar -xvf - -C /tmp/homeback 將 /home 里面的文件給他打包,但打包的數(shù)據(jù)不是紀(jì)錄到文件,而是傳送到 stdout; 經(jīng)過管線后,將 tar -cvf - /home 傳送給后面的 tar -xvf - 。后面的這個 - 則是取用前一個指令的 stdout, 因此,我們就不需要使用 filename 了。

第十一章、正則表達(dá)式與文件格式化處理

  • 簡單的說,正規(guī)表示法就是處理字符串的方法,他是以行為單位來進(jìn)行字符串的處理行為, 正規(guī)表示法透過一些特殊符號的輔助,可以讓使用者輕易的達(dá)到『搜尋/刪除/取代』某特定字符串的處理程序! grep 'screen' catkin_ws/src/* -r

  • 正則表達(dá)式的字符串表示方式依照不同的嚴(yán)謹(jǐn)度而分為:基礎(chǔ)正則表達(dá)式與擴展正則表達(dá)式。

    # 例題一、搜尋特定字符串
    grep -n 'the' regular_express.txt  # 搜索特定字符串
    grep -in 'the' regular_express.txt  # 忽略大小寫搜索特定字符串
    # 例題二、利用中括號 [] 來搜尋集合字符
    grep -n 't[ae]st' regular_express.txt  # 搜尋 test 或 tast 這兩個單字時
    # 例題三、行首與行尾字符 ^ $
    grep -n '^the' regular_express.txt # 查詢the在行首
    # 例題四、任意一個字符 . 與重復(fù)字符 *
    **. (小數(shù)點):代表『一定有一個任意字符』的意思;
    * (星星號):代表『重復(fù)前一個字符, 0 到無窮多次』的意思,為組合形態(tài)
    .* : 代表零個或多個任意字符**
    # 例題五、限定連續(xù) RE 字符范圍 {}
    使用到限定范圍的字符 {},找出兩個到五個 o 的連續(xù)字符串,因為 {} 的符號在 shell 是有	特殊意義的,因此, 我們必須要使用跳脫字符 \ 來讓他失去特殊意義才行。
    grep -n 'o\{2\}' regular_express.txt
    
  • ^ 符號在字符集合符號(括號 [] )之內(nèi)與之外是不同的。在 [] 內(nèi)代表反向選擇,則 [] 之外則代表定位在行首的意義。

  • 查找空白行 ^$

Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》

  • 注意: 正則表達(dá)式的特殊字符與一般在命令行輸入命令的通配符并不相同,例如,在通配符當(dāng)中的 * 代表的是【0 ~ 無窮多個字符】的意思,但是在正則表達(dá)式當(dāng)中, * 則是【重復(fù) 0 到無窮多個的前一個字符】的意思。

  • sed 工具。sed 本身也是一個管道命令,可以將數(shù)據(jù)進(jìn)行取代、刪除、新增、擷取特定行等等的功能。

    
    選項與參數(shù): 
    -n :使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN 的數(shù)據(jù)一般都會被列出到屏幕上。
    但如果加上 -n 參數(shù)后,則只有經(jīng)過 sed 特殊處理的那一行(或者動作)才會被列出來。 
    -e :直接在指令列模式上進(jìn)行 sed 的動作編輯;
    -f :直接將 sed 的動作寫在一個文件內(nèi), -f filename 則可以執(zhí)行 filename 內(nèi)的 sed 動作;
    -r :sed 的動作支持的是延伸型正規(guī)表示法的語法。(預(yù)設(shè)是基礎(chǔ)正規(guī)表示法語法) 
    -i :直接修改讀取的文件內(nèi)容,而不是由屏幕輸出。
    
    function 有底下這些咚咚:
    a :新增, a 的后面可以接字符串,而這些字符串會在新的一行出現(xiàn)(目前的下一行)
    c :取代, c 的后面可以接字符串,這些字符串可以取代 n1,n2 之間的行!
    d :刪除,因為是刪除啊,所以 d 后面通常不接任何咚咚;
    i :插入, i 的后面可以接字符串,而這些字符串會在新的一行出現(xiàn)(目前的上一行);
    p :打印,亦即將某個選擇的數(shù)據(jù)印出。**通常 p 會與參數(shù) sed -n 一起運作**
    s :取代,可以直接進(jìn)行取代的工作哩!通常這個 s 的動作可以搭配正規(guī)表示法!
    
    • 以行為單位的新增/刪除功能

      范例一:將 /etc/passwd 的內(nèi)容列出并且打印行號,同時,請將第 2~5 行刪除!
      [dmtsai@study ~]$ nl /etc/passwd | sed '2,5d'
      范例二:承上題,在第二行后(亦即是加在第三行)加上『drink tea?』字樣!
      [dmtsai@study ~]$ nl /etc/passwd | sed '2a drink tea'
      范例三:在第二行后面加入兩行字,例如『Drink tea or .....』與『drink beer?』
      [dmtsai@study ~]$ nl /etc/passwd | sed '2a Drink tea or ......\
      > drink beer ?'
      范例四:我想將第 2-5 行的內(nèi)容取代成為『No 2-5 number』呢?
      [dmtsai@study ~]$ nl /etc/passwd | sed '2,5c No 2-5 number'
      范例五:僅列出 /etc/passwd 文件內(nèi)的第 5-7 行
      [dmtsai@study ~]$ nl /etc/passwd | sed -n '5,7p'   # -n 代表的是『安靜模式』
      
      步驟三:將 IP 前面的部分予以刪除
      [dmtsai@study ~]$ /sbin/ifconfig eth0 | grep 'inet ' | sed 's/^.*inet //g'
      步驟四:將 IP 后面的部分予以刪除
      [dmtsai@study ~]$ /sbin/ifconfig eth0 | grep 'inet ' | sed 's/^.*inet //g' \
      > | sed 's/ *netmask.*$//g'
      
    • sed 直接修改文件的內(nèi)容 sed -i 直接修改原文件,不加 -i 屏幕打印, 不修改原文件

      sed -i '$a hello world' h.cpp # 文件末尾添加 hello world
      sed -i '$d' h.cpp # 刪除文件末尾一行
      sed -i 's/$/;/g' h.cpp # 每行末尾添加分號;
      sed -i 's/;$//g' h.cpp # 替換文件末尾的分號為空,即刪除分號
      
  • 擴展正則表達(dá)式 egrep
    Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》
    Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》

  • awk:好用的數(shù)據(jù)處理工具。相較于 sed 常常作用于一整個行的處理, awk 則比較傾向于一行當(dāng)中分成數(shù)個『字段』來處理。因此,awk 相當(dāng)?shù)倪m合處理小型的數(shù)據(jù)數(shù)據(jù)處理。

    • awk 主要是處理『每一行的字段內(nèi)的數(shù)據(jù)』,而默認(rèn)的『字段的分隔符為 “空格鍵” 或 “[tab]鍵” 』

      awk '條件類型 1{動作 1} 條件類型 2{動作 2} ...' filename
      
      # 在 awk 的括號內(nèi),每一行的每個字段都是有變量名稱的,那就是 $1, $2... 等變量名稱。
      last -n 5 | awk '{print $1 "\t" $7}' # 打印第一列 第七列
      
    • awk 后面接兩個單引號并加上大括號 {} 來設(shè)定想要對數(shù)據(jù)進(jìn)行的處理動作。

    • 整個 awk 的處理流程是:

        1. 讀入第一行,并將第一行的資料填入 $0, $1, $2… 等變量當(dāng)中;
        1. 依據(jù) “條件類型” 的限制,判斷是否需要進(jìn)行后面的 “動作”;
        1. 做完所有的動作與條件類型;
        1. 若還有后續(xù)的『行』的數(shù)據(jù),則重復(fù)上面 1~3 的步驟,直到所有的數(shù)據(jù)都讀完為止。
    • awk 是『以行為一次處理的單位』, 而『以字段為最小的處理單位』
      Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》

      # 以冒號為分隔符 FS,打印passwd文件中第三欄小于10 $3<10的數(shù)據(jù),
      # 必須添加 BEGIN,否則文件處理從第二行開始。
      cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'
      # 打印第一行 第一欄和第三欄
      cat t | awk 'NR==1 {print $1 "\t" $3}' 
      

      Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》

      值得注意的是那個『 == 』的符號。

  • diff 就是用在比對兩個文件之間的差異的,并且是以行為單位來比對的。cmp 主要利用字節(jié)單位去比對。

第十二章、學(xué)習(xí) Shell 腳本

  • shell script 是利用 shell 的功能所寫的一個『程序 (program)』,這個程序是使用純文本文件,將一些 shell 的語法與指令(含外部指令)寫在里面, 搭配正規(guī)表示法、管線命令與數(shù)據(jù)流重導(dǎo)向等功能,以達(dá)到我們所想要的處理目的。簡單的說, shell script 就像是早期 DOS 年代的批處理文件 (.bat) ,最簡單的功能就是將許多指令匯整寫在一起, 讓使用者很輕易的就能夠 one touch 的方法去處理復(fù)雜的動作 (執(zhí)行一個文件 “shell script” ,就能夠一次執(zhí)行多個指令)。

  • 腳本執(zhí)行方式差異(source、sh script、./script)

    • 利用直接執(zhí)行的方式來執(zhí)行腳本,該腳本會使用一個新的 bash 環(huán)境來執(zhí)行腳本內(nèi)的命令,也就是腳本是在子進(jìn)程的 bash 內(nèi)執(zhí)行的。當(dāng)子進(jìn)程完成后,在子進(jìn)程內(nèi)的各項變量或操作將會結(jié)束而不會傳回父進(jìn)程中。
    • 利用 source 來執(zhí)行腳本:在父進(jìn)程中執(zhí)行。
  • 利用 test 命令測試功能
    Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》
    Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》

  • 利用判斷符號 [ ]

    • 在 bash 的語法當(dāng)中使用中括號作為 shell 的判斷式時,必須要注意中括號的兩端需要有空格符來分隔。
    • 在中括號 [] 內(nèi)的每個組件都需要有空格鍵來分隔;
    • 在中括號內(nèi)的變量,最好都以雙引號括號起來;
    • 在中括號內(nèi)的常量,最好都以單或雙引號括號起來。 [ "${name}" == "VBird" ]
  • shell 腳本的默認(rèn)變量($0、$1…)

    ./test.sh opt1 opt2 opt3 opt4
    $0:表示執(zhí)行的腳本文件 `test.sh`
    $1:腳本接的第一個參數(shù) `opt1`
    $2:第二個參數(shù) `opt2`
    
    **$#:代表后接的參數(shù)『個數(shù)』,以上表為例這里顯示為『4』
    $@:代表『 "$1" "$2" "$3" "$4" 』之意,每個變量是獨立的(用雙引號括起來)**
    $*:代表『 "$1c$2c$3c$4" 』,其中 c 為分隔字符,默認(rèn)為空格鍵, 所以本例中代表『 "$1 $2 $3 $4" 』之意。
    
  • 條件判斷 if ... then

    if [ 條件判斷式 ]; then
        條件成立 --> 執(zhí)行內(nèi)容
    fi # 結(jié)束 if
    
    # && 代表 AND
    # || 代表 or
    
    if [ "${yn}" == "Y" ] || [ "${yn}" == "y" ]; then
        echo "Ok, continue"
        exit 0
    elif [ "${yn}" == "N" ] || [ "${yn}" == "n" ]; then
        echo "Oh, interrupt!"
    else
        echo "I don't know what your choice is"
    fi
    
  • 函數(shù) function

    function fname () {
        程序段
    }
    
  • 循環(huán)

    • while do done 不定循環(huán)

      while [ condition ]
      do
          程序段落
      done
      
    • for… do…done 固定循環(huán)

      for var in con1 con2 con3...
      do
          程序段
      done
      
      # C/C++ 風(fēng)格
      for (( 初始值; 限制值; 賦值運算 ))
      do
          程序段
      done
      
  • shell 腳本的跟蹤與 調(diào)試

    sh [-nvx] scripts.sh
    -n:不要執(zhí)行腳本,僅查詢語法問題
    -v:在執(zhí)行腳本前,先將腳本文件的內(nèi)容輸出到屏幕上
    -x:將使用到的腳本內(nèi)容顯示到屏幕上
    
  • shell 腳本用在系統(tǒng)管理上是很好的工具,但是用在處理大量數(shù)值運算上,就不友好了。因為 shell 腳本的速度較慢,且使用的 CPU 資源較多,會造成主機資源的分配不良。

第十三章、Linux 賬號管理與 ACL 權(quán)限設(shè)置

  • 每個登錄的用戶至少都會獲取兩個 ID ,一個是 用戶 ID(UID),一個是用戶組 ID (GID);

  • 用戶/用戶組信息查詢 id username

  • /etc/passwd 文件結(jié)構(gòu)。每一行都代表一個賬號,有幾行就代表有幾個賬號在你的系統(tǒng)中。不過需要特別留意的是,里面很多賬號本來就是系統(tǒng)正常運行所必須的,我們可以簡稱它為系統(tǒng)賬號。每一行使用 : 分隔開,共有七個東西分別是: robot:x:1000:1000::/home/robot:/bin/bash 賬號、密碼、UID、GID、全名、家目錄、shell

    • 賬號名稱
    • 密碼,實際密碼數(shù)據(jù)放在 /etc/shadow 中,這里只能看到一個 x
    • UID。 0 代表這個賬號是系統(tǒng)管理員; 1-999 代表是系統(tǒng)賬號; 1000-60000 給一般用戶;
    • GID
    • 用戶信息說明欄,沒什么用途。
    • 家目錄
    • shell
  • /etc/shadow 文件結(jié)構(gòu),shadow 同樣以 : 作為分隔符,共有九個字段: robot:$6$batX7luE$NTDTst4Y3M/EgpvVhIBDZFOC29epKHEdT3.NCvYhn1NRoUdu90UMqD9vD4zoSWN2usRh21vM6EXkr5VuyXU/u.:19422:0:99999:7:::

    • 賬號名稱
    • 密碼。這個字段內(nèi)的數(shù)據(jù)才是真正的密碼,而且是經(jīng)過編碼的密碼。文件默認(rèn)權(quán)限是 -rw----------------- ,即只有 root 才可以讀寫。
    • 最近修改密碼的日期。
    • 密碼不可被修改的天數(shù)
    • 密碼需要重新修改的天數(shù)。你必須要在這個天數(shù)內(nèi)重新設(shè)置你的密碼,否則這個賬號的密碼將會變?yōu)檫^期特性。如果像上面的 99999(計算為273年),那就表示密碼的修改沒有強制性之意。
    • 密碼需要修改期限前的警告天數(shù)。
    • 密碼過期后的賬號寬限時間
    • 賬號失效日期
    • 保留
  • 添加用戶 useradd lyz

    -u # 后面接的是 UID,是一組數(shù)字,直接指定一個特定的 UID 給這個賬號
    -g # 后面接的是上面提到的初始用戶組,該用戶組的 GID 會被放到 /etc/passwd 的第四格欄位內(nèi)
    -M # 強制,不要獎勵使用者家目錄。(系統(tǒng)賬號默認(rèn)值)
    -m # 強制,要建立使用者家目錄(一般賬號默認(rèn)值)
    -d # 指定某個目錄成為家目錄,而不要使用默認(rèn)值,務(wù)必使用絕對路經(jīng)
    
  • 設(shè)置密碼 passwd lyz

  • 添加用戶 vbird2 所屬于 users 組,uid 是1500 useradd -u 1500 -g users vbird2

  • 刪除用戶 userdel。一般而言,如果該賬號只是暫時不啟用的話,那么將 /etc/shadow 里面的賬號失效日期(第八字段)設(shè)置為 0 就可以讓該賬號無法使用,但是所有跟該賬號相關(guān)的數(shù)據(jù)都會留下來。使用 userdel 的時機通常是 你真的確定不要讓該用戶在主機上面使用任何數(shù)據(jù)了。

  • 連同家目錄也一同刪除 userdel [-r] username。

  • usermod 修改用戶數(shù)據(jù)

    -d # 后面接賬號的家目錄,即修改 /etc/passwd 第六欄 usermod -d /home/new_name old_name
    -g # 后面接初始用戶組,修改 /etc/passwd 第四個欄位,即 GID 欄位 usermod -g 1000 user
    -l # 接賬號名稱,即修改賬號名稱 usermod -l old_name new_name
    -u # 接 UID 數(shù)字 usermod -u 1002 user
    
    usermod -g mojiao zwj
    
  • chsh change shell 的簡寫。 -s 設(shè)置修改自己的 shell。 chsh -s /bin/zsh; cat /etc/shells 查看系統(tǒng)可用的 shell。

  • 一般用戶切換 root 的兩種方式:

    • 通過 su - 直接將身份變成 root 即可,但是這個命令卻需要 root的密碼
    • 通過 sudo 命令 執(zhí)行 root 的命令,由于 sudo 需要事先設(shè)置妥當(dāng),且 sudo 需要輸入用戶自己的密碼,因此多人共管同一臺主機時,sudo 要比 su 來的好,至少root密碼不會流出。
  • su 身份切換命令。

    • 若要完整的切換到新用戶的環(huán)境,必須使用 su - usernamesu -l username 才會連同 PATH、USER、MAIL 等變量都轉(zhuǎn)成新用戶的環(huán)境。
    • 如果僅想要執(zhí)行一次 root 的命令,可以利用 su - -c 命令的方式來處理。
    • 使用 root 切換成為任何用戶時,并不需要輸入新用戶的密碼。
  • sudo

    • 當(dāng)用戶執(zhí)行 sudo 時,系統(tǒng)于 /etc/sudoers 文件中查找該用戶是否有執(zhí)行 sudo 的權(quán)限;
    • 若用戶具有可執(zhí)行 sudo 的權(quán)限后,便讓用戶 輸入用戶自己的密碼 來確認(rèn);
    • 若密碼輸入成功,便開始進(jìn)行 sudo 后續(xù)接的命令(但 root 執(zhí)行 sudo 時,不需要輸入密碼);
    • 若欲切換的身份與執(zhí)行者身份相同,那也不需要輸入密碼。
  • 查詢用戶 w who last lastlog

第十五章、計劃任務(wù)(crontab)

  • 計劃任務(wù)的兩種方式: at cron

    • 例行性的,就是每隔一定的周期要來辦的事項。 crontab 這個命令所設(shè)置的任務(wù)將會循環(huán)地一直執(zhí)行下去,可循環(huán)的時間為分鐘、小時、每周、每月或每年等。crontab 除了可以使用命令執(zhí)行外,亦可編輯 /etc/crontab 來支持,讓 crontab 生效的服務(wù)為 crond。
    • 突發(fā)性的,就是這次做完以后就沒有的那一種。 at 是個可以處理僅執(zhí)行一次就結(jié)束的命令,不過要執(zhí)行 at 時,必須要有 atd 這個服務(wù)的支持才行。有些新版的 Linux 發(fā)行版中,atd 可能默認(rèn)沒有啟動。 systemctl start atd
  • logrotate

  • 因為安全的問題,并不是所有人都可以執(zhí)行 at 計劃任務(wù)的。我們可以利用 /etc/at.allow 與 /etc/at.deny 這兩個文件來實現(xiàn)對 at 的使用限制:

    • 先找尋 /etc/at.allow 這個文件,寫在這個文件中的用戶才能使用 at,沒有在這個文件中的用戶則不能使用 at (即使沒有寫在 at.deny 當(dāng)中);
    • 如果 /etc/at.allow 不存在,就查找 /etc/at.deny 這個文件,寫在這個 at.deny 中的用戶則不能使用 at;
    • 如果兩個文件都不存在,那么只有 root 可以使用 at 這個命令。
  • at。執(zhí)行at命令最重要的地方在于指定時間,可以使用 now + 的方式實現(xiàn)再過多長時間執(zhí)行指令。 at now + 5 minutes。事實上,當(dāng)我們使用 at 時會進(jìn)入到一個 at shell 的環(huán)境來讓用戶執(zhí)行任務(wù)命令。此時最好使用絕對路徑來執(zhí)行命令。

    -l # at -l 相當(dāng)于 atq,列出目前系統(tǒng)所有該使用者的at計劃
    -d # at -d 相當(dāng)于 atrm,可以取消一個在at計劃中的任務(wù)
    
    
  • crontab /etc/cron.hourly /etc/cron.daily /etc/cron.monthly /etc/cron.weekly /etc/crontab

    -e # 編輯crontab的任務(wù)內(nèi)容
    -l # 查看crontab的任務(wù)內(nèi)容
    -r # 刪除所有的crontab的任務(wù)內(nèi)容,若僅要刪除一項,請用 -e 編輯
    
    • 格式 * * * * * 執(zhí)行的任務(wù) 分、時、日、月、周、命令六欄, /etc/crontab 七欄,多了執(zhí)行者。

      10 * * * * /root/sh/apache_check.sh 每小時的第 10 分鐘執(zhí)行一次
      Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》
      */10 * * * * /root/sh/apache_check.sh 每隔 10 分鐘執(zhí)行一次
      Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》
      Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》

  • anacron 是一個程序,并非服務(wù)??梢詭臀覀儓?zhí)行時間到了但卻沒有執(zhí)行的計劃任務(wù),比如關(guān)機期間系統(tǒng)未執(zhí)行的 crontab 任務(wù)。 /etc/anacrontab

    • anacron 并不是用來替換 crontab 的,anacron 存在的目的就在于處理非 24 小時運行的 Linux 系統(tǒng)所執(zhí)行的 crontab,以及因為某些原因?qū)е碌某^時間而沒有被執(zhí)行的任務(wù)。其實 anacron 也是每小時被 crond 執(zhí)行一次,然后監(jiān)測相關(guān)計劃任務(wù)有無被執(zhí)行。

第十六章、進(jìn)程管理與 SELinux 初探

  • 進(jìn)程(process):程序被觸發(fā)后,執(zhí)行者的權(quán)限與屬性、程序的代碼與所需數(shù)據(jù)等都會被加載到內(nèi)存中,操作系統(tǒng)并給予這個內(nèi)存中的單元一個標(biāo)識符(PID),可以說,進(jìn)程就是一個正在運行中的程序。

  • 由于假設(shè)我們只有一個終端,因此可以出現(xiàn)提示字符讓你操作的環(huán)境就稱為前臺(foreground),至于其他任務(wù)就可以放入后臺(background)去暫?;蜻\行。

  • 與任務(wù)管理有關(guān)的按鍵和關(guān)鍵詞: & 、 ctrl+z、 jobs、 fg、 bgkill %n 等;

    • 直接將命令丟到后臺中【執(zhí)行】的 &。這樣最大的好處是:不怕被 ctrl+c 中斷。
    • 將【目前】的任務(wù)丟到后臺中【暫?!浚?ctrl+z
    • 查看目前的后臺任務(wù)狀態(tài): jobs。 jobs -l 其中 + 代表最近被放到后臺的任務(wù)號碼,- 代表最近第二個被放置到后臺的任務(wù)號碼,而第三個以后的任務(wù),就不會有 +、- 符號存在了。
    • 將后臺任務(wù)拿到前臺來處理: fg 。fg %jobnumberfg jobnumber 將某個 job 拿到前臺。
    • 讓任務(wù)在后臺的狀態(tài)變成運行中: bg。
    • 管理后臺當(dāng)中的任務(wù): kill 。 kill -9 %jobnumberkill -9 PID 立刻強制刪除一個任務(wù)。
  • 在任務(wù)管理中提到的【后臺】指的是在終端模式下可以避免 ctrl+c 終端的一個情境,可以說這個是 bash 的后臺,并不是系統(tǒng)的后臺。這種情況下,如果以遠(yuǎn)程連接方式連接到你的 Linux 主機,并且將任務(wù)以 & 的方式放到后臺中,在任務(wù)尚未結(jié)束的情況下,關(guān)閉了終端,程序不會繼續(xù)執(zhí)行。基于此問題,可以使用 nohup 命令來處理,此命令可以在脫機或者注銷系統(tǒng)后,還能夠讓任務(wù)繼續(xù)執(zhí)行。 nohup [命令與參數(shù)] 在終端前臺中任務(wù)。 nohup [命令與參數(shù)] & 在終端后臺中任務(wù)。 nohup ./sleep500.sh &

  • 查看進(jìn)程

    • ps 顯示系統(tǒng)進(jìn)程在瞬間的運行狀態(tài)。常用 ps auxps -ef。ef 方式不如 aux 顯示的多。(aux 是 BSD 操作系統(tǒng)格式,a — 前臺進(jìn)程 x — 后臺進(jìn)程 u — 用戶; ef 是 Linux 操作系統(tǒng)格式,e — 顯示所有進(jìn)程 f — 全格式顯示)

      # ps aux # 查看系統(tǒng)中所有進(jìn)程
      	1、USER 該進(jìn)程屬于的用戶
      	2、PID 該進(jìn)程的進(jìn)程號 
      	3、CPU 該進(jìn)程使用掉的CPU資源百分比 
      	4、MEM 該進(jìn)程所占用的物理內(nèi)存百分比 
      	5、VSZ 該進(jìn)程使用掉的虛擬內(nèi)存量(單位為Kbytes)
      	6、RSS 該進(jìn)程占用的固定的內(nèi)存量(單位為Kbytes)
      	7、TTY: 進(jìn)程是在哪個終端機上面運作的,若與終端機無關(guān),則顯示“?”,另外,tty1-tty6是本機上面的登入者進(jìn)程,若為pts/0等,則表示為由網(wǎng)絡(luò)連接進(jìn)主機的進(jìn)程 
      	**8、STAT 進(jìn)程當(dāng)前的狀態(tài)
      	   ("S":中斷 sleeping,進(jìn)程處在睡眠狀態(tài),表明這些進(jìn)程在等待某些事件發(fā)生--可能是用戶輸入或者系統(tǒng)資源的可用性;
      	    "D":不可中斷 uninterruptible sleep; "R":運行 runnable; "T":停止 traced or stopped; "Z":僵死 a defunct zombie process)** 
      	9、START 該進(jìn)程被觸發(fā)啟動的時間
      	10、TIME 該進(jìn)程實際使用CPU運作的時間 
      	11、COMMAND 該進(jìn)程的實際命令
      
      # ps -ef
      	1、UID 用戶號 
      	2、PID 進(jìn)程ID 
      	3PPID 父進(jìn)程號 
      	4、C CPU占用率 
      	5、TTY 終端的次要裝置號碼 (minor device number of tty) 
      	6、TIME 進(jìn)程執(zhí)行起到現(xiàn)在總的CPU暫用時間 
      	7、COMMAND 啟動這個進(jìn)程的命令
      

      Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》

    • top 動態(tài)查看進(jìn)程變化

      **-d:秒數(shù),指定top命令每隔幾秒更新**
      -b:使用批處理模式輸出。一般和"-n"選項合用 `top -b -n 2` 將top信息執(zhí)行2次
      -n次數(shù):指定top命令執(zhí)行的次數(shù),一般和"-b"選項合用
      **-i:使top不顯示任何閑置或者僵死的進(jìn)程。**
      -p:通過指定監(jiān)控進(jìn)程ID來僅僅監(jiān)控某個進(jìn)程的狀態(tài)
      

      在 top 命令執(zhí)行過程當(dāng)中可以使用的按鍵命令:

      ?或h:顯示在top當(dāng)中可以輸入的按鍵命令,即幫助
      **P:以CPU使用率進(jìn)行排序
      M:以內(nèi)存使用率進(jìn)行排序**
      N:以PID排序
      T:由該進(jìn)程使用的 CPU 時間累積(TIME+)排序
      q:退出top
      
    • pstree 查看進(jìn)程樹 ps -Aup

      -A  各進(jìn)程樹之間的連接以 ASCII 字符來連接
      -U  各進(jìn)程樹之間的連接以 Unicode 的字符來連接,在某些終端界面下又可能會有錯誤。
      -p  顯示進(jìn)程的PID
      -u  顯示進(jìn)程的所屬用戶
      
  • free 查看內(nèi)存使用情況 free -m 以 MB 為單位顯示內(nèi)存使用情況

  • uname 查看系統(tǒng)與內(nèi)核相關(guān)信息

    **-a # 顯示操作系統(tǒng)全部信息**
    -m # 顯示系統(tǒng)硬件架構(gòu) CPU類型,是32位還是64位系統(tǒng)
    -n # 顯示操作系統(tǒng)主機名
    -s # 顯示操作系統(tǒng)類型
    **-r # 顯示操作系統(tǒng)內(nèi)核版本**
    
  • uptime 查看系統(tǒng)啟動時間與任務(wù)負(fù)載

  • netstat 追蹤網(wǎng)絡(luò)或 socket 文件

    -a # 列出所有網(wǎng)絡(luò)狀態(tài),包括監(jiān)聽端口、已建立連接和等待關(guān)閉的連接。 all
    -c 秒數(shù) # 指定每隔幾秒刷新一次網(wǎng)絡(luò)狀態(tài) continuous
    -n # 使用IP地址和端口顯示,不使用域名與服務(wù)名 numeric
    -p # 顯示PID和程序名 programs
    -t # 顯示使用tcp協(xié)議端口連接的狀態(tài) tcp 
    -u # 顯示使用udp協(xié)議端口連接的狀態(tài) udp
    -l # 僅顯示監(jiān)聽狀態(tài)的連接  listening
    -r # 顯示路由表 route
    -s # 顯示網(wǎng)絡(luò)接口的統(tǒng)計信息 statistice
    
    -an # 按照一定順序排列輸出
    
    netstat -anp  |  more # 查看本機所有的網(wǎng)絡(luò)連接
    netstat -tunlp # 查看端口占用
    netstat -rn # 查看本機路由表
    
    tunl 和 an 選項的最大區(qū)別:tunl 只能查看監(jiān)聽 LISTEN,而 an 可以查看監(jiān)聽和正在連接 ESTABLISHED 的狀態(tài).
    
  • dmesg 分析內(nèi)核產(chǎn)生的信息 (查詢 usb 或者串口號 dmesg | grep ttyUSBdmesg | grep -i vda

  • 所謂的進(jìn)程都是在內(nèi)存中,而內(nèi)存中的數(shù)據(jù)又都是寫入到 /proc/* 這個目錄下的,可以直接查看 /proc 中的文件 cat /proc/uptime cat /proc/version cat /proc/meminfo cat /proc/cpuinfo 查看 cpu 的相關(guān)信息,包括頻率、類型等;

  • lsof 查看進(jìn)程打開的文件。lsof 全名為 list open files,也就是列舉系統(tǒng)中已經(jīng)被打開的文件。
    Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》

    lsof /var/log/messages # 顯示使用文件的進(jìn)程
    lsof -c rsyslog # 顯示指定進(jìn)程所打開的文件
    lsof -p 1277 # 顯示指定進(jìn)程號所打開的文件
    lsof -i # 查看所有進(jìn)程
    **lsof -i :9001 # 查看端口9001信息
    lsof -i tcp:<port> # 顯示所有使用指定 TCP 端口號的進(jìn)程列表
    lsof -i udp:<port> # 顯示所有使用指定 UDP 端口號的進(jìn)程列表**
    

第十七章、認(rèn)識系統(tǒng)服務(wù)(daemon)

  • 常駐在內(nèi)存中的進(jìn)程且可以提供一些系統(tǒng)或網(wǎng)絡(luò)功能,那就是服務(wù)(service)。daemon 與 service 的關(guān)系:簡單說,系統(tǒng)為了某些功能必須要提供一些服務(wù),這個服務(wù)稱為 service。但service 的提供總是需要程序的運行,這個程序就稱為 daemon。舉例: 完成周期性計劃任務(wù)服務(wù)(service)的程序為 crond 這個 daemon。事實上,可以將兩者視為相同的東西,因為完成某個服務(wù)需要一個 daemon 在后臺中運行。

  • 早期服務(wù)管理:所有的服務(wù)啟動腳本放置于 /etc/init.d/ 目錄,基本上都是使用 bash shell 所寫成的腳本程序,啟動、關(guān)閉、重啟、查看狀態(tài)命令 /etc/init.d/daemon start/stop/restart/status

  • 服務(wù)的運行級別分為 7 個等級,常用的級別 1、3、 5。

    0 -- 系統(tǒng)停機狀態(tài),系統(tǒng)默認(rèn)運行級別不能設(shè)為0,否則不能正常啟動
    **1 -- 但用戶工作狀態(tài),root權(quán)限,用于系統(tǒng)維護(hù),禁止遠(yuǎn)程登陸**
    2 -- 多用戶狀態(tài)(沒有 NFS),不支持網(wǎng)絡(luò)
    **3 -- 完全的多用戶狀態(tài)(有 NFS),登陸后進(jìn)入控制臺命令行模式**
    4 -- 系統(tǒng)未使用,保留
    **5 -- X11控制臺,登陸后進(jìn)入圖形GUI模式**
    6 -- 系統(tǒng)正常關(guān)閉并重啟,默認(rèn)運行級別不能設(shè)為6,否則不能正常啟動
    
  • 現(xiàn)代服務(wù)管理:systemctl 。systemd 這個啟動服務(wù)的機制,主要是通過一個名為 systemctl 的命令來完成。

    systemctl start/stop/restart/reload/status aaa.service
    
    systemctl enable/disable aaa.service # 設(shè)置服務(wù)開機自啟/不自啟
    systemctl is-enable aaa.service # 查看服務(wù)是否開機自啟
    
    systemctl list-unit-files  # 查看系統(tǒng)上所有服務(wù) --all, --type=service
    systemctl list-dependencies aaa.service # 查看各服務(wù)之間的依賴關(guān)系 --reverse 查看被依賴
    

第十八章、認(rèn)識與分析日志文件

  • 日志文件的權(quán)限通常是設(shè)置為僅有 root 能夠讀取。常用的日志文件名:

    /var/log/boot.log # 開機啟動的時候系統(tǒng)內(nèi)核會去檢測與啟動硬件
    /var/log/cron
    /var/log/dmesg
    /var/log/lastlog
    /var/log/secure
    /var/log/httpd/*
    
  • 日志文件的產(chǎn)生基本上有兩種方式:一種是由軟件開發(fā)商自行定義寫入的日志文件與相關(guān)格式;另一種是由 Linux 發(fā)行版提供的日志文件管理服務(wù)來統(tǒng)一管理。只要將信息丟給這個服務(wù),它會自動分門別類地將各種信息放置到相關(guān)的日志文件中。

  • logrotate (日志文件輪循)利用 crontab 來進(jìn)行日志文件的輪循功能,自動將舊的文件更改名稱,然后建立一個空的日志文件。 /etc/logrotate.d/

    # 實現(xiàn)日志一天一輪循 或者 超出20M進(jìn)行輪循,log保留7天
    sudo vi /etc/logrotate.d/mylog
    
    /var/log/mylog.log {
        daily
        rotate 7
        missingok
        notifempty
        size 20M
        compress
        delaycompress
        create 0644 root root
    }
    daily: 給定日志應(yīng)以多長時間間隔進(jìn)行旋轉(zhuǎn)。這里指定為每天。
    rotate: 日志文件歷史保留的數(shù)量。這里指定保留七天。
    missingok: 如果日志文件丟失不要給出錯誤消息并繼續(xù)處理下一個文件。
    notifempty: 如果日志文件為空則不進(jìn)行輪換。
    size: 指定日志文件大小,超出后會輪換。
    compress: 輪詢后壓縮日志文件。
    delaycompress: 延遲壓縮,將輪換的日志文件延遲一次再壓縮。
    create: 設(shè)置新文件的權(quán)限和所有者。
    

第十九章、啟動流程、模塊管理與 Loader

  • 系統(tǒng)啟動流程:
    • 加載 BIOS 的硬件信息與進(jìn)行自我檢測,并根據(jù)設(shè)置取得第一個可啟動的設(shè)備;
    • 讀取并執(zhí)行第一個啟動設(shè)備內(nèi) MBR 的啟動引導(dǎo)程序;
    • 根據(jù)啟動引導(dǎo)程序的設(shè)置加載 Kernel,Kernel 會開始檢測硬件與加載驅(qū)動程序;
    • 在硬件驅(qū)動成功后,Kernel 會主動調(diào)用 systemd 程序,并以 default.target 流程啟動;
      • systemd 執(zhí)行 sysinit.target 初始化系統(tǒng)及 basic.target 準(zhǔn)備操作系統(tǒng);
      • systemd 啟動 multi-user.target 下的本機與服務(wù)器服務(wù);
      • systemd 執(zhí)行 multi-user.target 下的 /etc/rc.d/rc.local 文件;
      • systemd 執(zhí)行 multi-user.target 下的 getty.target 及登錄服務(wù);
      • systemd 執(zhí)行 graphical 需要的服務(wù)。

第二十章、基礎(chǔ)系統(tǒng)設(shè)置與備份策略

nmcli general status # 顯示NetworkManager的狀態(tài)。
**nmcli device status # 顯示所有設(shè)備狀態(tài)**
nmcli connection # nmcli con show # nmcli con # 查看所有的網(wǎng)絡(luò)連接 connection
**nmcli connection show --active # 顯示所有活動連接**
nmcli connection show eth0
nmcli connection up/down eth0 # 啟用/停用指定網(wǎng)絡(luò)連接
nmcli connection delete eth0 # 刪除一個網(wǎng)卡連接
nmcli connection reload
nmcli connection add type ethernet ifname eth0 # 添加一個以太網(wǎng)連接。
nmcli connection modify eth0 ipv4.addresses 192.168.0.58 # 給eth0添加一個IP(IPADDR)

**nmcli device wifi list  # nmcli d w l # 搜索可用 wifi 網(wǎng)絡(luò)**
# 首次連接Wifi
**nmcli device wifi connect  SSID  password PASSWORD # nmcli dev wifi connect  SSID  password PASSWORD**
nmcli device disconnect # 斷開wifi
**nmcli connect del SSID** # 刪除連接
nmcli c del UUID # 刪除連接

nmcli device set wlan0 managed no

# 修改配置文件執(zhí)行生效
systemctl restart network
systemctl status NetworkManager # 查看狀態(tài)

# 創(chuàng)建網(wǎng)橋
nmcli connection add type bridge con-name br0 ifname br0 autoconnect yes
#查卡br0的狀態(tài)
nmcli device status
 
DEVICE             TYPE           STATE           CONNECTION     
br0               bridge   連接中(正在獲取 IP 配置)    br0
# 將我們本地的有線網(wǎng)卡enp8s0連接到br0
nmcli connection add type bridge-slave ifname enp8s0  master br0
# 啟動br0
nmcli connection up br0

2、nmcli device
設(shè)備,是網(wǎng)絡(luò)設(shè)備的接口,可理解為實際存在的網(wǎng)卡(包括物理網(wǎng)卡和虛擬網(wǎng)卡)??梢院唽憺閚mcli d

在NM里,有2個維度:連接(connection)和設(shè)備(device),這是多對一的關(guān)系。想給某個網(wǎng)卡配ip,首先NM要能納管這個網(wǎng)卡。設(shè)備里存在的網(wǎng)卡(即 nmcli d可以看到的),就是NM納管的。接著,可以為一個設(shè)備配置多個連接(即 nmcli c可以看到的),每個連接可以理解為一個ifcfg配置文件。同一時刻,一個設(shè)備只能有一個連接活躍。可以通過 nmcli c up切換連接。

3、connection有2種狀態(tài):
? 活躍(帶顏色字體):表示當(dāng)前該connection生效
? 非活躍(正常字體):表示當(dāng)前該connection不生效

4、device有4種常見狀態(tài):
? connected:已被NM納管,并且當(dāng)前有活躍的connection
? disconnected:已被NM納管,但是當(dāng)前沒有活躍的connection
? unmanaged:未被NM納管
? unavailable:不可用,NM無法納管,通常出現(xiàn)于網(wǎng)卡link為down的時候(比如ip link set ethX down)

第二十一章、軟件安裝:源代碼與 Tarball

  • 函數(shù)庫根據(jù)被使用的類型分為兩類:靜態(tài)(Static)和動態(tài)(Dynamic)函數(shù)庫。

    • 靜態(tài)函數(shù)庫特點:
      • 擴展名通常為 libxxx.a
      • 編譯操作。這類函數(shù)庫在編譯時會直接整合到執(zhí)行程序當(dāng)中,所以利用靜態(tài)函數(shù)庫編譯成的文件會比較大一些
      • 獨立執(zhí)行的狀態(tài)。編譯成功的可執(zhí)行文件可以獨立運行,而不需要向外部要求讀取函數(shù)庫的內(nèi)容。
      • 升級難易度。因為函數(shù)庫直接整合到執(zhí)行文件中,所以若函數(shù)庫升級時,整個執(zhí)行文件必須要重新編譯才能將新版的函數(shù)庫整合到程序當(dāng)中。也就是說,在升級方面只要函數(shù)庫升級了,所有使用此函數(shù)庫的程序都需要重新編譯。
    • 動態(tài)函數(shù)庫特點:
      • 擴展名通常為 libxxx.so
      • 編譯操作。動態(tài)函數(shù)庫與靜態(tài)函數(shù)庫的編譯操作差異挺大的。與靜態(tài)函數(shù)庫被整個整合到程序中不同的是,動態(tài)函數(shù)庫在編譯的時候,在程序里面只有一個【指針(Pointer)】的位置而已。也就是說,動態(tài)函數(shù)庫的內(nèi)容并沒有被整合到執(zhí)行文件當(dāng)中,而是當(dāng)執(zhí)行文件要使用到函數(shù)庫的功能時,程序才會去讀取函數(shù)庫來使用。由于執(zhí)行文件當(dāng)中僅具有指向動態(tài)函數(shù)庫所在的指針而已,并不包含函數(shù)庫的內(nèi)容,所以它的文件會比較小一點。
      • 獨立運行的狀態(tài)。無法獨立運行。
      • 升級難易度。具有指向功能,所以當(dāng)函數(shù)庫升級后,執(zhí)行文件根本不需要進(jìn)行重新編譯的操作。
  • ldd 程序的動態(tài)函數(shù)庫解析。

    -v: 列出所有內(nèi)容信息
    -d: 重新將數(shù)據(jù)有遺失的鏈接點顯示出來
    -r: 將ELF有關(guān)的錯誤內(nèi)容顯示出來
    
    # ldd /usr/bin/passwd
    
  • 目前有多種算法可以計算文件的校驗值,較為廣泛的 MD5、SHA-1、SHA-256 加密算法來處理。 md5sum /usr/bin/passwd文章來源地址http://www.zghlxwxcb.cn/news/detail-492820.html

第二十二章、軟件安裝 RPM、SRPM 與 YUM

  • RPM 全名 RedHat Package Manager,是以一種數(shù)據(jù)庫記錄的方式來將你所需要的軟件安裝到你的 Linux 系統(tǒng)的一套軟件管理機制。 ***.rpm。RPM最大的問題為軟件之間的依賴性問題。
  • SRPM 是 Source RPM 的意思,也就是這個 RPM 文件里面含有源代碼,SRPM 所提供的軟件內(nèi)容【并沒有經(jīng)過編譯】,提供的是源碼。擴展名 ***.src.rpm。 SRPM 最大的優(yōu)點是可以讓用戶自行修改設(shè)置參數(shù),以符合用戶自己的 Linux 環(huán)境。

第二十四章、Linux 內(nèi)核編譯與管理

  • 內(nèi)核是系統(tǒng)上的一個文件而已,包含了驅(qū)動主機各項硬件的檢測程序與驅(qū)動模塊。內(nèi)核文件通常被命名為 /boot/vmlinuz-xxx。內(nèi)核模塊的放置位置 /lib/modules/$(uname -r)/kernel/
  • 『核心(kernel)』是整個操作系統(tǒng)的最底層,他負(fù)責(zé)了整個硬件的驅(qū)動,以及提供各種系統(tǒng)所需的核心功能,包括防火墻機制、是否支持 LVM 或 Quota 等文件系統(tǒng)等等。
  • DNS Domain Name System 域名系統(tǒng)。DNS 服務(wù)的作用:將域名解析為 IP 地址。
  • 網(wǎng)關(guān)作用:通俗的認(rèn)為,具有路由功能的一種物理設(shè)備,可以是路由器或者由服務(wù)器搭建的能實現(xiàn)路由功能的設(shè)備;
    局域網(wǎng)內(nèi):通過交換機進(jìn)行數(shù)據(jù)交換。交換機是低級設(shè)備,不認(rèn)識 IP 只識別 mac,數(shù)據(jù)鏈路層設(shè)備;
    網(wǎng)間或者不同網(wǎng)段:通過路由器(網(wǎng)關(guān))進(jìn)行數(shù)據(jù)交換。外網(wǎng)轉(zhuǎn)內(nèi)網(wǎng),內(nèi)網(wǎng)轉(zhuǎn)外網(wǎng);
    網(wǎng)關(guān)實現(xiàn)網(wǎng)絡(luò)的層次,網(wǎng)關(guān)之后還有網(wǎng)關(guān);
    內(nèi)網(wǎng)不能直接訪問內(nèi)網(wǎng);
    網(wǎng)關(guān)作用:
    1)網(wǎng)關(guān)在所有內(nèi)網(wǎng)計算機訪問的不是本網(wǎng)段的數(shù)據(jù)包時使用,只要不是局域網(wǎng)內(nèi)交換數(shù)據(jù)就一定要經(jīng)過網(wǎng)關(guān),即網(wǎng)關(guān)分開內(nèi)網(wǎng)和外網(wǎng)。
    2)把內(nèi)網(wǎng) IP 轉(zhuǎn)公網(wǎng) IP,公網(wǎng) IP 轉(zhuǎn)內(nèi)網(wǎng) IP。
  • telnet IP:(明文傳遞,很不安全,現(xiàn)基本上已被 ssh 代替)做端口探測和 windows 一樣。

到了這里,關(guān)于Linux 讀書筆記之《鳥哥的 Linux 私房菜 基礎(chǔ)學(xué)習(xí)篇(第四版)》的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【讀書筆記】學(xué)習(xí)突圍

    【讀書筆記】學(xué)習(xí)突圍

    最近在讀一本書《學(xué)習(xí)突圍》,作者是常青,知乎大V。對他的一些回答非常認(rèn)同,受益匪淺,特此買來紙質(zhì)書籍細(xì)細(xì)學(xué)習(xí)一番! 1.【學(xué)習(xí)心態(tài)】(拖延癥、自控、執(zhí)行力、專注力) 2.【學(xué)習(xí)方法】(搜索力、高效閱讀、高效筆記、記憶力、如何寫作) 3.【學(xué)習(xí)習(xí)慣】(時間管

    2024年02月02日
    瀏覽(29)
  • 【白話機器學(xué)習(xí)的數(shù)學(xué)】讀書筆記(3)學(xué)習(xí)分類(感知機、邏輯回歸)

    【白話機器學(xué)習(xí)的數(shù)學(xué)】讀書筆記(3)學(xué)習(xí)分類(感知機、邏輯回歸)

    1.分類的目的 找到一條線把白點和黑點分開。這條直線是使 權(quán)重向量成為法線向量 的直線。(解釋見下圖) 直線的表達(dá)式為: ω ? x = ∑ i = 1 n ω i ? x i = 0 omega·x = sum_{i=1}^nomega_i · x_i = 0 ω ? x = i = 1 ∑ n ? ω i ? ? x i ? = 0 ω omega ω 是權(quán)重向量 權(quán)重向量就是我們想要知

    2024年01月18日
    瀏覽(28)
  • 掌握Python 機器學(xué)習(xí) 讀書筆記 9 (流水線 && 算法保存)

    在機器學(xué)習(xí)里可以看到有一些必要的步驟, 這些步驟是可以作為workflow 自動化的。 而且流水線可以對每個fold來進(jìn)行處理, 這樣很大程度避免了數(shù)據(jù)泄露。 這也是為什么使用流水線的原因。 使用機器學(xué)習(xí)的時候很容易落入一個陷阱, 就是泄露你的訓(xùn)練數(shù)據(jù)到測試數(shù)據(jù)。 為

    2024年03月09日
    瀏覽(26)
  • 西瓜書讀書筆記整理(十) —— 第十章 降維與度量學(xué)習(xí)

    西瓜書讀書筆記整理(十) —— 第十章 降維與度量學(xué)習(xí)

    10.1.1 什么是 kNN 學(xué)習(xí) kNN算法(k-Nearest Neighbors)是一種常用的分類和回歸算法。它的基本思想是根據(jù)最近鄰的樣本來預(yù)測未知樣本的標(biāo)簽或值。 10.1.2 kNN 算法步驟 kNN算法的步驟如下: 計算未知樣本與訓(xùn)練集中所有樣本的距離(通常使用歐氏距離或其他距離度量方法)。 選取

    2024年01月21日
    瀏覽(59)
  • 【學(xué)習(xí)筆記】Linux基礎(chǔ)

    【學(xué)習(xí)筆記】Linux基礎(chǔ)

    1、什么是操作系統(tǒng) 操作系統(tǒng)是應(yīng)用程序運行的基礎(chǔ)支撐環(huán)境 操作系統(tǒng)作用是管理和控制計算機系統(tǒng)的硬件和軟件資源 Intel x86架構(gòu)上常見的操作系統(tǒng):windos、linux、unix… 2、Linux操作系統(tǒng) Linux是開源的基于Intel x86架構(gòu)的類Unix多用戶操作系統(tǒng) Linux是目前最主要的服務(wù)端操作系統(tǒng)

    2023年04月21日
    瀏覽(17)
  • 【白話機器學(xué)習(xí)的數(shù)學(xué)】讀書筆記(4)評估(評估已建立的模型)

    【白話機器學(xué)習(xí)的數(shù)學(xué)】讀書筆記(4)評估(評估已建立的模型)

    1.評估什么 在進(jìn)行回歸和分類時,為了進(jìn)行預(yù)測,我們定義了函數(shù) f θ ( x ) f_θ(x) f θ ? ( x ) ,然后根據(jù)訓(xùn)練數(shù)據(jù)求出了函數(shù)的參數(shù) θ。最后求出了參數(shù)更新表達(dá)式,然后不斷重復(fù)更新參數(shù)。 但是我們不要忘了我們的目標(biāo)是通過預(yù)測函數(shù)得到預(yù)測值。所以我們要 評估的就是預(yù)

    2024年01月19日
    瀏覽(55)
  • 西瓜書讀書筆記整理(十一) —— 第十一章 特征選擇與稀疏學(xué)習(xí)

    西瓜書讀書筆記整理(十一) —— 第十一章 特征選擇與稀疏學(xué)習(xí)

    11.1.1 基本概念 特征(feature) :在機器學(xué)習(xí)中, 特征 是指從數(shù)據(jù)中提取的用于描述樣本的屬性或信息。 相關(guān)特征(relevant feature) :對當(dāng)前學(xué)習(xí)任務(wù) 有用 的屬性稱為 “ 相關(guān)特征 ”。 無關(guān)特征(inrelevant feature) :對當(dāng)前學(xué)習(xí)任務(wù) 無用 的屬性稱為 “ 無關(guān)特征 ”。 冗余特

    2024年01月19日
    瀏覽(57)
  • Linux 基礎(chǔ)入門(學(xué)習(xí)筆記通俗易懂版)

    本文章是學(xué)習(xí)了Linux的學(xué)習(xí)記錄,著重記錄了我對于Linux各命令的用法與感悟, 歡迎各位大佬批評指正 記錄者:CYH-BI 記錄日期:2023年7月7日 本篇文章將使用 虛擬機并安裝centos 進(jìn)行實操。關(guān)于虛擬機的安裝請看其他教程,篇幅過長,不一展示。 Linux簡介部分 Linux起初由Linus

    2024年02月08日
    瀏覽(24)
  • Linux命令基礎(chǔ),黑馬程序員學(xué)習(xí)筆記

    command [-options] [parameter] command:命令本身 -options:[可選,非必填]命令的一些選項,可以通過選項控制命令的行為細(xì)節(jié) parameter:[可選,非必填]命令的參數(shù),多數(shù)用于命令的指向目標(biāo)等 示例: ls -l /home/itheima ls是命令本身,-l是選項, /home/itheima是參數(shù)意思是以列表的形式,顯示/home

    2024年02月19日
    瀏覽(24)
  • 《ARM Linux內(nèi)核源碼剖析》讀書筆記——0號進(jìn)程(init_task)的創(chuàng)建時機

    《ARM Linux內(nèi)核源碼剖析》讀書筆記——0號進(jìn)程(init_task)的創(chuàng)建時機

    最近在讀《ARM Linux內(nèi)核源碼剖析》,一直沒有看到0號進(jìn)程(init_task進(jìn)程)在哪里創(chuàng)建的。直到看到下面這篇文章才發(fā)現(xiàn)書中漏掉了set_task_stack_end_magic(init_task)這行代碼。 下面這篇文章提到:start_kernel()上來就會運行 set_task_stack_end_magic(init_task)創(chuàng)建初始進(jìn)程。init_task是靜態(tài)定義的

    2024年01月17日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包