鳥哥 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 是什么與如何學(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)。
- 設(shè)計差異:
-
開機的流程: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)限)。
- r(read contents in directory)表示具有讀取目錄結(jié)構(gòu)列表的權(quán)限,即
-
文件系統(tǒng)
- / (root,根目錄):與啟動系統(tǒng)有關(guān);
- /usr (unix software resource):與軟件安裝/執(zhí)行有關(guān);UNIX操作系統(tǒng)軟件資源所放置的目錄,而不是用戶的數(shù)據(jù)。
- /var (variable):與系統(tǒng)運作過程有關(guān)。
-
一個 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
:離開moreb 或 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 /root
或tar -jcv -f /root/system.tar.gz2 --exclude /root/etc* --exclude /root/system.tar.bz2 /etc /root
,注意 要打包的文件需要寫在最后。
第九章、vim 程序編輯器
- 基本上 vi 共分為 3 種模式,分別是一般命令模式、編輯模式與命令行模式。
第十章、認(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 crontab
】ls -ld $(locate crontab)
-
history
歷史命令!number
-
通配符
-
/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í)行;
- 一次執(zhí)行多個命令
-
管道命令 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)代表反向選擇,則[]
之外則代表定位在行首的意義。 -
查找空白行
^$
-
注意: 正則表達(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
-
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 的處理流程是:
-
- 讀入第一行,并將第一行的資料填入 $0, $1, $2… 等變量當(dāng)中;
-
- 依據(jù) “條件類型” 的限制,判斷是否需要進(jìn)行后面的 “動作”;
-
- 做完所有的動作與條件類型;
-
- 若還有后續(xù)的『行』的數(shù)據(jù),則重復(fù)上面 1~3 的步驟,直到所有的數(shù)據(jù)都讀完為止。
-
-
awk 是『以行為一次處理的單位』, 而『以字段為最小的處理單位』
# 以冒號為分隔符 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}'
值得注意的是那個『 == 』的符號。
-
-
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 命令測試功能
-
利用判斷符號 [ ]
- 在 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 - username
或su -l username
才會連同 PATH、USER、MAIL 等變量都轉(zhuǎn)成新用戶的環(huán)境。 - 如果僅想要執(zhí)行一次 root 的命令,可以利用
su - -c 命令
的方式來處理。 - 使用 root 切換成為任何用戶時,并不需要輸入新用戶的密碼。
- 若要完整的切換到新用戶的環(huán)境,必須使用
-
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í)行者身份相同,那也不需要輸入密碼。
- 當(dāng)用戶執(zhí)行 sudo 時,系統(tǒng)于
-
查詢用戶
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í)行一次*/10 * * * * /root/sh/apache_check.sh
每隔 10 分鐘執(zhí)行一次
-
-
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
、bg
、kill %n
等;- 直接將命令丟到后臺中【執(zhí)行】的
&
。這樣最大的好處是:不怕被ctrl+c
中斷。 - 將【目前】的任務(wù)丟到后臺中【暫?!浚?
ctrl+z
- 查看目前的后臺任務(wù)狀態(tài):
jobs
。jobs -l
其中 + 代表最近被放到后臺的任務(wù)號碼,- 代表最近第二個被放置到后臺的任務(wù)號碼,而第三個以后的任務(wù),就不會有 +、- 符號存在了。 - 將后臺任務(wù)拿到前臺來處理:
fg
。fg %jobnumber
或fg jobnumber
將某個 job 拿到前臺。 - 讓任務(wù)在后臺的狀態(tài)變成運行中:
bg
。 - 管理后臺當(dāng)中的任務(wù):
kill
。kill -9 %jobnumber
或kill -9 PID
立刻強制刪除一個任務(wù)。
- 直接將命令丟到后臺中【執(zhí)行】的
-
在任務(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 aux
和ps -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 3、PPID 父進(jìn)程號 4、C CPU占用率 5、TTY 終端的次要裝置號碼 (minor device number of tty) 6、TIME 進(jìn)程執(zhí)行起到現(xiàn)在總的CPU暫用時間 7、COMMAND 啟動這個進(jìn)程的命令
-
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 ttyUSB
)dmesg | 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)被打開的文件。
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)行重新編譯的操作。
- 擴展名通常為
- 靜態(tài)函數(shù)庫特點:
-
ldd
程序的動態(tài)函數(shù)庫解析。文章來源:http://www.zghlxwxcb.cn/news/detail-492820.html-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)!