Linux 私房菜 笔记(完结)
目錄
第0章 計算機概論
基本知識
操作系統(tǒng):
內(nèi)核功能:
? 應(yīng)用程序:
第一章 什么是LINUX
第0章 計算機概論
基本知識
電腦主要由五大單元組成: 輸入單元,輸出單元,cpu內(nèi)部的控制單元,算數(shù)邏輯單元與內(nèi)存
cpu 為一個具有特定功能的芯片·主要由兩個單元組成: 算數(shù)邏輯單元與控制單元
兩種最常見的CPU架構(gòu): 精簡指令集(RISC) 和 復(fù)雜指令集(CISC)
CPU所使用的數(shù)據(jù)都來自內(nèi)存
頻率:CPU每秒可以進行工作的次數(shù)
位寬:每個時鐘周期能夠傳輸?shù)臄?shù)據(jù)量
字長:CPU每次能夠處理的數(shù)據(jù)量,字長根據(jù)cpu的設(shè)計有 32位和64位 ,也是電腦64位的由來?
硬盤:硬盤基本術(shù)語(磁道、扇區(qū)、柱面、磁頭數(shù)、簇)_大漠雁-CSDN博客_磁道的編號
CMOS與BIOS
?常用的英文編碼表為ASCII , 后有Unicode編碼系統(tǒng),俗稱 UTF-8或萬國碼
操作系統(tǒng):
(operating system,簡稱OS)是管理計算機硬件與軟件資源的計算機程序。操作系統(tǒng)需要處理如管理與配置內(nèi)存、決定系統(tǒng)資源供需的優(yōu)先次序、控制輸入設(shè)備與輸出設(shè)備、操作網(wǎng)絡(luò)與管理文件系統(tǒng)等基本事務(wù)。
?0. 操作系統(tǒng)提供一套API供開發(fā)使用
?1. 操作系統(tǒng)的內(nèi)核層直接參考硬件規(guī)則寫成,所以同一個操作系統(tǒng)程序不能購在不一樣的硬件架構(gòu)下運行
2.操作系統(tǒng)只管理整個硬件資源,包括CPU,內(nèi)存,輸入輸出設(shè)備以及文件系統(tǒng)等,如果沒有其他應(yīng)用程序輔助,只能讓主機準備妥當而已
3.應(yīng)用程序的開發(fā)都是參考操作系統(tǒng)提供的API,所以該應(yīng)用程序只能在該操作系統(tǒng)上面運行而已,不能在其他操作系統(tǒng)上運行
內(nèi)核功能:
?系統(tǒng)調(diào)用接口
?進程管理
?內(nèi)存管理
?文件系統(tǒng)管理
?設(shè)備驅(qū)動:
? 應(yīng)用程序:
? ? ?參考操作系統(tǒng)提供的API所開發(fā)出來的軟件
第一章 什么是Linux
每種操作系統(tǒng)都是在它專門的硬件架構(gòu)上面運行的
GNU計劃:
開源協(xié)議專題(二):開源之父和 GUN 計劃 - 知乎 (zhihu.com)
建議學(xué)習知識:
1 計算機概論與硬件相關(guān)知識
2 Linux 安裝與命令
3 linux操作系統(tǒng)的基礎(chǔ)技能
4 vi文本編輯器
5 shell與shell腳本的學(xué)習
6軟件管理
7 網(wǎng)絡(luò)基礎(chǔ)的建立
第二章 主機規(guī)劃與磁盤分區(qū)
各設(shè)備在Linux中的文件名:
?每個設(shè)備都被當做一個文件來對待:
虛擬機選擇: VMware
VMware16的安裝及VMware配置Linux虛擬機(詳解版)_何故M的博客-CSDN博客_vmware16安裝linux
一臺主機安裝兩個以上操作系統(tǒng):需要懂 啟動流程與多重引導(dǎo)
磁盤劃分
? MBR( MS-DOS) :
master boot record 的方式來處理啟動引導(dǎo)程序與分區(qū)表。放在磁盤的第一個扇區(qū),共512個字節(jié):
? ? 主導(dǎo)引導(dǎo)記錄(MBR):可以安裝啟動引導(dǎo)程序的地方,446字節(jié)
? ? 分區(qū)表(partition table):記錄整塊硬盤的分區(qū)狀態(tài),64字節(jié)
? 因為每組分區(qū)表的地址記錄要占用16個字節(jié),所以一共能有4組記錄區(qū),每組記錄區(qū)記錄了該段的? 起始與結(jié)束的柱面號碼
? ?扇區(qū)->磁道(圓圈)->柱面(立體)
可以得到幾個重要信息:
? 1 所謂的分區(qū)只是針對那64字節(jié)的分區(qū)表進行設(shè)置而已
? 2 硬盤默認的分區(qū)表僅能寫人四組分區(qū)信息
? 3 分為主要 或 擴展分區(qū)
? 4 分區(qū)的最小單位為柱面
? 5 當系統(tǒng)寫人磁盤時,一定會參考磁盤分區(qū)表,才能針對某個分區(qū)進行數(shù)據(jù)處理
?可以用擴展分區(qū)來劃分額外的扇區(qū),其內(nèi)部稱為邏輯分區(qū)
? 定義:?
? ? 1 主要分區(qū)和擴展分區(qū)一共最多有4個(硬盤64kb限制)
? ? 2 擴展分區(qū)至多有一個,可以沒有(操作系統(tǒng)限制)
? ? 3 邏輯分區(qū)是由擴展分區(qū)持續(xù)劃分出來分區(qū)
? ? 4 能被格式化后儲存數(shù)據(jù)的分區(qū)是主分區(qū)和邏輯分區(qū),擴展分區(qū)無法格式化
? ? 5 邏輯分區(qū)的數(shù)量依據(jù)操作系統(tǒng)而定
? ? 6 邏輯分區(qū)一定從p5 開始
?GPT(GUID partition table)磁盤分區(qū)表?
? 將所有區(qū)塊以LBA(logical block address)來劃分 :從 0開始
? 無主分區(qū),擴展,邏輯分區(qū)的概念,都是獨立存在可以當做主分區(qū)
? 除了前面34個LBA之外,整個磁盤的最后34個拿來做另一個備份
? ?LBA0: MBR兼容區(qū)塊?
? ?LBA1: GPT表頭記錄 - 記錄了分區(qū)表本身位置與大小 + 備用分區(qū)位置+ 分區(qū)表校驗碼
? ?LBA 2 -33: 實際存放數(shù)據(jù)處?
? ? ? ? ?每個LBA都可以記錄4組分區(qū)記錄 ,總共 4*32 1=128 組分組記錄
BIOS與 UEFI 啟動檢測程序
BIOS:
?啟動時執(zhí)行的第一個程序 ->讀取引導(dǎo)程序(如MBR的引導(dǎo)程序)->引導(dǎo)程序->加載內(nèi)核->啟動操作系統(tǒng)
?boot loader:
? ?
?
要點:
1? 啟動引導(dǎo)程序只會認識自己的系統(tǒng)分區(qū)內(nèi)的可啟動的內(nèi)核程序, 以及其他啟動引導(dǎo)程序
2? 啟動引導(dǎo)程序可以直接指向或間接將管理權(quán)交給另一個管理程序
UEFI :統(tǒng)一可擴展固件接口
?因為BIOS是16位程序,無法很好解讀GPT ,因此有了uefi
?與BIOS主要區(qū)別?
Linux的磁盤分區(qū)選擇?
? / 代表根目錄,由此衍生出目錄樹
? 掛載:利用一個目錄當成進入點,將磁盤分區(qū)的數(shù)據(jù)放在該目錄下;即 進入該目錄就可以讀取該分區(qū)
第三章? 安裝Cent OS 7.x
VMware16的安裝及VMware配置Linux虛擬機(詳解版)_何故M的博客-CSDN博客_vmware16安裝linux
要點: 1? ?不要安裝在機械硬盤上,會報錯?
? ? ? ? ? ? 2? ?要進入BIOS 將 AMD-V 打開 重啟:此主機支持 AMD-V,但 AMD-V 處于禁用狀態(tài)的解決辦法_多看書少睡覺的博客-CSDN博客_此主機支持amd-v但處于禁用狀態(tài)
? ? ? ? ? ? 3 選擇安裝源url?
Centos7安裝源_老糊涂Lion的博客-CSDN博客_centos7安裝源
? ? ? ? ? ? 4 選擇手動 如圖:要留空間給以后練習用
??
第四章:幫助指令 與 終端
X window:
X Window即X Window圖形用戶接口,是一種計算機軟件系統(tǒng)和網(wǎng)絡(luò)協(xié)議,提供了一個基礎(chǔ)的圖形用戶界面(GUI)和豐富的輸入設(shè)備能力聯(lián)網(wǎng)計算機。其中軟件編寫使用廣義的命令集,它創(chuàng)建了一個硬件抽象層,允許設(shè)備獨立性和重用方案的任何計算機上實現(xiàn)。
GUI 與 命令行終端 切換:?
? ? ? ? ?Ctrl+Alt+F2-F6 :登錄終端
? ? ? ? ?Ctrl+Alt+F1:? ? ? 圖形用戶界面模式
注銷登錄: exit 命令(注意不是關(guān)機)
終端執(zhí)行命令方式:
? $ 命令 -選項 參數(shù)1 參數(shù)2 ...
注意點:?
? 1 命令包括 絕對命令 與 可執(zhí)行文件
? 2 linux區(qū)分大小寫
? 3 選項代表可選,可以省略。有很多選項,分別不同字母表示,多個選項時中間不用空開
? ? Linux 命令大全 | 菜鳥教程 (runoob.com)
? 4 多個空格shell都視為一個空格
? 基礎(chǔ)命令:
? ? ? 顯示時間:date
? ? ? 顯示日歷的命令:cal
? ? ? 計算器:bc
? ? 詳細用法自行查詢·
執(zhí)行命令時會出現(xiàn)的情況:
? 1 一種是該命令直接顯示出結(jié)果,然后回到命令提示符等待下一個命令輸入
? 2 進入該命令的環(huán)境,指導(dǎo)該命令結(jié)束才回到命令提示符環(huán)境(例如bc環(huán)境中輸入quit)
重要熱鍵 :
? Tab:
? ? ? ? ?接在一串命令的第一個字段后面,則為命令補全
? ? ? ? ?接在一串命令的第二個字段后面,則為文件補全
? ----可以避免出錯
? Ctrl+c:
? ? ? ? 強制中斷目前程序
? ?
??Ctrl+d:
? ? ? ?鍵盤輸入結(jié)束,可以取代exit的輸入
? shift+ pgup/pgdn:
? ? ? ?上下翻頁
在線求助命令:
? ?$? 命令? --help?
? ?$? man 命令? ? ? ? ? ? ? ?
? ? ? ? ? (按q離開man環(huán)境)
? ? ? ? ? ? 第一行的數(shù)字代號:
? ? ??
? ? ? ? ? ? ?/+字符串 :搜索指定字符
? $ info 命令
? ? ? 與man 一口氣輸出一堆信息不同,info - 則是將文件數(shù)據(jù)拆成一個一個段落,每個段落用自己的頁面來編寫,并且在各個頁面中還有類似網(wǎng)頁的超鏈接來跳轉(zhuǎn)到各個不同的頁面中,每個獨立的頁面也被稱為一個節(jié)點(node)
? ? ? ? ? ? ? ?
文本編輯器:nano
? ? ? $ nano 文件名
? ? ? ? ? 如果有就打開,沒有就新建文件
? ? ? 組合鍵:
? ? ? ? ? ?M代表ALT
? ? ? ? ? ?^代表ctrl
? ? ? ? ?
關(guān)機命令
? ?sync:將數(shù)據(jù)寫入硬盤,防止緩沖區(qū)的數(shù)據(jù)丟失?
? ??
? ?shutdown:需root權(quán)限
??Linux shutdown 命令 | 菜鳥教程 (runoob.com)
??
? reboot,halt,poweroff:都是重新啟動
注意:以上其實都是調(diào)用 systemctl 命令
? ? ? ? ? ?$ su - :切換到root權(quán)限,可退回到原本用戶(exit離開su的命令環(huán)境)
第五章? 文件權(quán)限與目錄配置
? ?權(quán)限劃分:
? ? ? ? ?擁有者:
? ? ? ? ?用戶組:小組,可以有多名用戶
? ? ? ? ?其他人:除了以上其他人?
? ? ? ? ?root:天神組,無視任何,擁有絕對權(quán)限
? ? 文件屬性:
? ? ? ? ?通過 :ls -al查看
? ? ? ?Linux ls命令 | 菜鳥教程 (runoob.com)
? ? ?
? ? ?第一項:分為10個字符位?
? ? ? ? ? ? 1+3*3?
? ? ? ? ? ? ? ? ?1:文件類型
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? 3*3:不同權(quán)限劃分可對應(yīng)的操作(可讀,可寫,可執(zhí)行) * 擁有者/用戶組/其他人
? ? ? ? ? ? ? ??
修改文件屬性:
? ? ?chgrp:change group 修改文件 用戶組
? ? ?chown:change owner 修改文件 擁有者
? ? ?chmod:修改文件的權(quán)限 - 3*3對應(yīng)的權(quán)限?
? ? ?cp:復(fù)制文件 會復(fù)制文件的內(nèi)容包括屬性
?chmod? ??? :
? 第一種方式:
? ? ? 可讀可寫可執(zhí)行代表不同位權(quán):
? ? ? ? ?r:4
? ? ? ? w:2
? ? ? ? ?x:1
? ? ?---> 3*3當中:數(shù)字范圍0-7
? ? $chmod -R 值*3 +文件名或目錄名
? ? ? ? ? -R:遞歸,子目錄所有都會修改
? ? ? ? ? ?值:rwx加起來的總值 ,如可讀可寫可執(zhí)行 則為
? ? ? ? ? ?*3:代表三種權(quán)限劃分(擁有者,用戶組擁有者,其他人)
? ? ? 如所有權(quán)限都開放:chmod 777 文件名
? ? 第二種方式:
? ?用 u,g,o 來代表 三種身份的權(quán)限
? ?:這種方法可以單獨增加或減去某一權(quán)限
目錄與文件權(quán)限的意義
?1:我們的文件能否被執(zhí)行,是有 X 來決定的,跟后綴無關(guān)?
? ? ? 注意:具有可執(zhí)行權(quán)限與具有可執(zhí)行代碼是兩回事
?2:w不包含刪除改文件?
?3:
? ? ? ?針對目錄而言:
? ? ? ? ? ?r:可以查詢該目錄下的文件名數(shù)據(jù)?
? ? ? ? ? w:建立新的文件與目錄?
? ? ? ? ? ? ? 刪除已經(jīng)存在的文件與目錄(不管該文件與目錄的權(quán)限是什么)
? ? ? ? ? ? ? 更名,移動等?
? ? ? ? ? x:能不能進入某一目錄,只與該目錄的x(可執(zhí)行)權(quán)限有關(guān)
? ? ? ? ? ? ? ? 要操作(也就是要進入)一個文件時,要具有此文件的上一級目錄x權(quán)限
Linux文件種類與擴展名:
? ?任何設(shè)備在linux下都是文件
Linux文件類型詳解 - Surpassme - 博客園 (cnblogs.com)
? ?常用擴展名:
? ? ? ? ? *.sh:腳本或批處理文件,因為用shell寫成
? ? ? ? ? *Z,*tar:壓縮文件
? ? ? ? ? *.html,*.php:網(wǎng)頁相關(guān)文件
? ?
? ?單一文件名或目錄名最大為255字節(jié),應(yīng)避免用特殊符號
Linux目錄配置
? ? ?FHS標準 :
? ? ? 1定義的四種交互作用狀態(tài)?
? ? ? ?2 定義的三個目錄:
?
? ?3
? ? ? ?/ 根目錄是最重要的一個目錄?,不但所有的目錄都是根目錄的子目錄同時根目錄也與啟動,還原,系統(tǒng)修復(fù)等操作有關(guān)
? 目錄樹與絕對路徑,相對路徑
? 1? ? 目錄樹的起始點為根目錄(/)
? ?
2?
? ? ?絕對路徑:從根目錄開始由 / 左斜杠來訪問?
? ? ?相對路徑:對于目前文件來說的路徑
? ? ?要點:
? ? ? ? ? ? ? 不是/開頭的都是相對路徑?
? ? ? ? ? ? ? .代表當前路徑(一點)
? ? ? ? ? ? ? ..代表上一層目錄 (兩點)
第六章? Linux 文件與目錄管理?
目錄的相關(guān)操作:
. 代表當前目錄
.. 代表上一層目錄
- 上一個工作目錄 (返回跳轉(zhuǎn)前的目錄)
~ 當前用戶的家目錄
~用戶名 : 該用戶的家目錄
cd:切換目錄 change directory + 具體 或 上述的代表符號
pwd:顯示當前目錄?
mkdir:創(chuàng)建一個新目錄?
? ? ? ? ? ? 可以-p 遞歸創(chuàng)建 。 否則得現(xiàn)有上一層目錄存在
rmdir:刪除一個空目錄
? ? ? ? ? ? 可以-p遞歸刪除。
? ? ? 注意:只能刪除當前目錄下的目錄 不包括當前目錄本身 且只能刪除空目錄
執(zhí)行文件路徑的變量: $PATH
? 比如執(zhí)行命令ls時,無論在哪個目錄都能執(zhí)行呢? (其實要找到該可執(zhí)行文件)
當我們在執(zhí)行一個命令時,系統(tǒng)會依照PATH定義的目錄中去尋找該名字的可執(zhí)行文件
Linux PATH環(huán)境變量及作用(初學(xué)者必讀) (biancheng.net)
1???echo $PATH ?顯示定義的目錄 ,每個中間用:冒號來隔開
2? ?PATH="${path}:+目錄? ?來添加
3? ?當重名時,先找到的先執(zhí)行
4? ?最好不要加入.當前目錄,會有危險
文件與目錄管理(命令)
ls:查看
?Linux ls命令 | 菜鳥教程 (runoob.com)
cp:復(fù)制
Linux cp 命令 | 菜鳥教程 (runoob.com)
? 要點: 1 是否需要完整的保留原文件的信息? -a
? ? ? ? ? ? ? 2 源文件是否為鏈接文件 -d
? ? ? ? ? ? ? 3 是否為特殊文件
? ? ? ? ? ? ? 4 源文件是否為目錄? 若為 則得加上 -a 或 -r(遞歸復(fù)制)
? ? ? ? ? ? ? 5 復(fù)制多個文件到一個文件夾時 ,最后一個必須是目錄
rm:刪除?
Linux rm 命令 | 菜鳥教程 (runoob.com)
?要點:
? ? ? ? ? 1.? rm -r 非常危險
? ? ? ? ? 2 可以通過加上反斜杠來規(guī)避詢問 \rm -r
? ??
mv:移動
Linux mv 命令 | 菜鳥教程 (runoob.com)
? ?1 可以通過原地移動來修改名稱
辨別文件名或者目錄
? basename :獲取最后的文件名
? dirname? ? ?:獲取目錄名(取最大)
文件內(nèi)容查看
? cat :由第一行開始顯示文件內(nèi)容?
Linux cat 命令 | 菜鳥教程 (runoob.com)
? tac:最后一行開始
? nl:顯示的時候,同時輸出行號
? more:一頁一頁的顯示內(nèi)容? (enter 向前翻頁 b 向后翻頁 可查找)
? less:與more類似 ,但能向前翻頁?
?head:只看前幾頁 (-n +數(shù)字 表示顯示開頭幾行 若是負數(shù) 則不顯示倒數(shù)幾行)
?tail:只看后幾頁? ? ?(-n +數(shù)字 表示顯示末尾幾行 若是+號 則不顯示開頭幾行)
?od:以二進制的方式顯示
? 管道: | 來隔開? 前面的命令所輸出的信息,通過 管道交由后面的命令進行使用,不會直接打印出結(jié)果
?echo:輸出字符串?Linux中如何使用echo命令?(用法詳解)-linux運維-PHP中文網(wǎng)
?;分號用來一次執(zhí)行多條命令
修改文件時間或創(chuàng)建新文件touch
?status time ,cttime:狀態(tài)數(shù)據(jù)修改時間(權(quán)限與屬性)
modification time,mtime:內(nèi)容數(shù)據(jù)修改時間? : 默認時顯示 mtime
access time ,atime:改文件內(nèi)容被讀取時,就會更新
?使用touch 來改變時間:?
? ?Linux touch命令 | 菜鳥教程 (runoob.com)
注意:?
? ?1 復(fù)制文件時 無法復(fù)制ctime
? ?2? 若不存在則創(chuàng)建新的文件?
默認權(quán)限(umask)與隱藏權(quán)限(-attr)
umask: 顯示 默認減去的權(quán)限?
? 注意:默認的權(quán)限 與 默認減去的權(quán)限 不同?
? ? ?如 默認沒有 x權(quán)限 則最大值為666? ,umask 為022? ,也就是rw-r--r--?
Linux umask命令 | 菜鳥教程 (runoob.com)
chattr:change attribu?
Linux chattr命令 | 菜鳥教程 (runoob.com)
? xfs文件系統(tǒng)僅支持部分?
lsattr:顯示隱藏屬性
文件特殊權(quán)限(S ugb ID)
? ?若出現(xiàn)在擁有者x上的為S ,則為擁有SUID特權(quán):
? ? ? ? ? ? ?1 僅對二進制程序有效(文件)?
? ? ? ? ? ? ?2 執(zhí)行者需要對此文件有x權(quán)限?
? ? ? ? ? ? ?3 本權(quán)限僅在執(zhí)行程序中有效
? ? ? ? ? ? ?4 執(zhí)行者將擁有該程序擁有者的權(quán)限,相當于暫時獲取對應(yīng)權(quán)限?
? ?若出現(xiàn)在用戶組x上的為S ,則為擁有SGID特權(quán):
? ? ? ? ? ? ?1? 可以對文件或目錄來設(shè)置??
? ? ? ? ? ? ?2? 需要擁有x權(quán)限
? ? ? ? ? ? ?3 若對文件: 獲得改文件的用戶組支持?
? ? ? ? ? ? ? ? ? ? ? ?目錄:有r與x權(quán)限,才能進入 --- 所做操作相當于該用戶組權(quán)限所做操作?
??
Sticky Bit :SBIT
? ? ? ? ? ?1 僅針對目錄有效?
? ? ? ? ? ?2 當用戶在該目錄下建立文件或目錄時,僅有自己與root才有權(quán)利刪除?
? ? ? ? ? --相當與只有目錄的的建立者或root才能刪除,別人不行
特殊權(quán)限S的添加 :
? chmod時:在前面再加一位 變?yōu)?位 ,最高為7777??
? ? ? ? ? ? ? ? ? ? 1 sbit 2 sgid 4 suid?
? ? ? ? ? ?注意: 若沒有x權(quán)限而空有特殊權(quán)限 則標志為大寫S或T?,換句話說 特殊權(quán)限建立在有x的權(quán)限之上;不互相沖突
? 觀察文件類型 :file?
命令與文件查找
??命令
? ? which:根據(jù)path環(huán)境變量來查找 命令
? ? ?Linux which命令 | 菜鳥教程 (runoob.com)
? 文件:
? ? ?whereis:從一些特定的目錄中查找
? ? ?Linux whereis命令 | 菜鳥教程 (runoob.com)
? ? ?locate:從已建立的數(shù)據(jù)庫查找
? ? ? updatedb:更新數(shù)據(jù)庫
? ?Linux locate命令 | 菜鳥教程 (runoob.com)
? ?find:
Linux find 命令 | 菜鳥教程 (runoob.com)
? ? ?
find path -option [ -print ] [ -exec -ok command ] {} \;? 1 可以增加時間選項 :
? ? ? ? ? ? ? ? ?如:? ? ? -mtime n/+n/-n?
? ? ? ? ? ? ? ? ? ? ? ? ? ?n:查找n天至n+1天前的文件?
? ? ? ? ? ? ? ? ? ? ? ? ?+n:查找n+1天前的文件?
? ? ? ? ? ? ? ? ? ? ? ? ?-n:查找n-1天前的文件
??
? 2? -uid -gid 等,可以限定用戶來查找
? 3 可以限定大小 -size???,名字(用正則),類型-type,權(quán)限 -perm等?
? 4 可以能進行額外操作? -exec +其它命令? 到 \;轉(zhuǎn)義結(jié)束?
? 5 多個條件 就要多個前綴?
? ? ? 如 查找/etc下 容量大于1500k 以及容量等于 0的文件 ,并顯示出來?
? ? ?
find /etc -size 0 -size +1500c -exec ls -l \;?6 +表示大于 -表示小于 沒加表示等于
附:mv 修改目錄名?linux怎么修改目錄名-linux運維-PHP中文網(wǎng)
第七章? linux磁盤與文件管理系統(tǒng)?
為什么磁盤使用前需要格式化: 每個操作系統(tǒng)所設(shè)置的文件屬性/權(quán)限并不一樣,要讓其成為能夠? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 利用的文件系統(tǒng)格式
通常稱 一個可被掛載的數(shù)據(jù)為一個文件系統(tǒng)而不是一個分區(qū)?
?怎么理解`通常我們可以稱呼一個可被掛載的數(shù)據(jù)為一個文件系統(tǒng)而不是一個分區(qū)槽喔!`? - SegmentFault 思否
?技術(shù)|LFCS 系列第五講:如何在 Linux 中掛載/卸載本地文件系統(tǒng)和網(wǎng)絡(luò)文件系統(tǒng)(Samba 和 NF
索引式文件系統(tǒng): 通過一個索引(區(qū)塊),來指出全部數(shù)據(jù)塊?
fat文件系統(tǒng):? ? ? ? 沒有索引區(qū)塊,一個數(shù)據(jù)塊后指向后一個數(shù)據(jù)塊(不能隨機訪問)
ext2??
? ? ? ?linux second extended dile system?
?區(qū)塊群組:分為多個組 每組都有獨立的數(shù)據(jù)塊,inode,超級區(qū)塊?
? 數(shù)據(jù)區(qū)塊 :
? ? ? ?每個block都有固定最小容量(可選擇),當一個文件大于時 用多個區(qū)塊 ,小于時 則浪費
?inode table:
? ? ? ? 1 每個文件只會占用一個inode ,因此文件系統(tǒng)能建立的文件數(shù)量與inode有關(guān)?
? ? ? ? 2 至少記錄著: 文件的真正指向(數(shù)據(jù)塊),權(quán)限屬性,大小,各種時間
? ? ? ? 3 每個inode大小固定為128B(新的xfs與ext4已經(jīng)到256B)
? ? ? ? ? ? ?具體為:? a 文件信息記錄區(qū)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?b? 記錄區(qū)塊號碼的區(qū)域:12個直接 ,間接 雙間接 三間接 各一個?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?c? ?通過索引的索引(間接,以block延伸作為記錄)--能記錄更多區(qū)塊(大文? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 件)? ,每個區(qū)塊號碼記錄會用上4B
? ? ? ? ? ? ? ? ? ? ? ? ? ?? d? ? ? ? 如雙間接 :假設(shè)一個block延伸記錄區(qū)塊有1KB,能記錄256條記錄
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?雙間接就能記錄 256*256個區(qū)塊
? ? ? ? ? ? ? ? ?
superblock :
? ?1 主要記錄 數(shù)據(jù)塊與inode的總量 ,已使用和未使用的數(shù)目,大小
? ?2 文件系統(tǒng)的掛載信息,最近一次寫入,檢驗的時間?
? ?3 一個有效位數(shù)值
文件系統(tǒng)描述說明:
? ?每個區(qū)塊群組的開始與結(jié)束區(qū)塊,以及說明每個區(qū)段(上文)的開始與結(jié)束?
區(qū)塊對照表 與 inode 對照表 :
? 使用或未使用的區(qū)塊號碼/inode,方便使用與釋放
可以使用 dumpe2fs + 磁盤文件名 命令來查看超級區(qū)塊信息。
? ?
與目錄樹的關(guān)系:
? 建立時:
? ? 對照表(查詢空的inode與block)->分配??inode -> 區(qū)塊 :
? ? ? ? ?若是目錄:inode記錄著目錄的相關(guān)權(quán)限與屬性 ,指向的區(qū)塊內(nèi)記錄著 目錄下的文件名及其? ? ? ? ? ? ? ? ? ? ? ? ? ? ?inode號(須有x和w權(quán)限)
? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ?若是文件:分配一個inode和 多個區(qū)塊?
?日志功能:
? ? 若步驟發(fā)生錯誤,導(dǎo)致inode記錄的區(qū)塊不必配等,會進行一致性檢查,耗費很多時間,因此引入日志記錄區(qū)塊;
? ??
異步處理:
? ?當一個文件加載到內(nèi)存后,分為兩種狀態(tài)?
? ? ? ? ? 修改過: dirty , 會不定時的自動寫會磁盤中 ,以保證磁盤與內(nèi)存數(shù)據(jù)的一致性
? ? ? ? ? 沒修改:clean
?掛載點的意義?
? ? ?每個文件系統(tǒng)(如ext2)都有獨立的 inode,區(qū)塊,超級區(qū)塊等信息,每個文件系統(tǒng)要能連接到
?目錄樹底下才能使用,掛載點一定是目錄,該目錄為進入該文件系統(tǒng)的入口
? ?什么是掛載,Linux掛載詳解 (biancheng.net)
? ? ? ?將設(shè)備文件連接到某一目錄,Linux 系統(tǒng)使用任何硬件設(shè)備,都必須將設(shè)備文件與已有目錄文 件進行掛載。
? linux其他支持的文件系統(tǒng):
? ? ?vfs:virtual filesystem switch? 通過此內(nèi)核功能自動識別文件系統(tǒng),不需要知道每個硬盤分區(qū)上的文件系統(tǒng)是什么
? ? ? ? ??
? xfs:
? ? ? centos 7.x 的默認文件系統(tǒng) ,日志式文件系統(tǒng)
分為
? ? 數(shù)據(jù)區(qū): 也分為多個存儲區(qū)群組,與ext的主要區(qū)別是 inode與區(qū)塊是動態(tài)產(chǎn)生的,并非一開始與格式化就完成了配置的。
? ? 文件系統(tǒng)活動登錄區(qū): 記錄文件系統(tǒng)的變化,類似于日志區(qū)?
? ? 實時運行區(qū):當要建立新的時,會在這個區(qū)段內(nèi)找到數(shù)個extent區(qū)塊,寫入到 數(shù)據(jù)區(qū)中(inode +區(qū)塊)
? ----------------------------------------
可以用 xfs_info 掛載點|設(shè)備名稱? 命令 來查看
磁盤與目錄容量
? ?df:列出文件系統(tǒng)整體磁盤容量(從超級區(qū)塊內(nèi)讀取)
??Linux df 命令 | 菜鳥教程 (runoob.com)?
? du:命令用于顯示目錄或文件的大小(具體一個個去查看)
?Linux du 命令 | 菜鳥教程 (runoob.com)
?區(qū)別:linux中du, df兩個命令的區(qū)別 - 簡書 (jianshu.com)
?通過 df 命令找到根目錄硬盤的文件名,然后使用 dump2fs 命令觀察文件系統(tǒng)的詳細信息,執(zhí)行命令如下:
?Linux dumpe2fs命令:查看文件系統(tǒng)信息 (biancheng.net)
??
鏈接:
? 創(chuàng)建鏈接指令:ln
Linux ln 命令 | 菜鳥教程 (runoob.com)
ln 【-sf】 源文件 目標文件? ?注意 :默認進行硬鏈接?
?ls? -l 第二個字段: 有多少個文件名鏈接到這個inode號碼
?硬鏈接:
? ? 在某個目錄下新增一條文件名 鏈接到某個inode號碼的關(guān)聯(lián)記錄,第二個字段會+1
? ? 不會增加inode個數(shù)
? ? 不能跨文件系統(tǒng)?
? ? 不能鏈接目錄
軟連接:
? ? 新創(chuàng)了一個獨立的文件,文件的block區(qū)指向源文件的文件名,源文件inode第二個字段不會+1
? ? 相當于增加了一個獨特的文件,會增加inode數(shù)
? ? 可以跨文件 可以連接目錄
當新建目錄時:新的目錄的鏈接數(shù)為2(本身和 .) 上層目錄的鏈接數(shù)+1(..)
磁盤劃分
? 流程: lsblk 查看所屬磁盤(類型disk,注意不是分區(qū)) -> gdisk/fdisk/parted來劃分-> mkfs來格? ? ? ? ? ? ? ?式化分區(qū)系統(tǒng)->掛載(mount)/自動掛載(/etc/fstab)
?分區(qū)
? 1? 先用lsblk命令查看系統(tǒng)上可用的磁盤
? 2 用 gdisk 來處理 GPT? |? ? fdisk來處理 MBR(虛擬機一般這種格式)
? ? ?用 gdisk/fdisk + 第一步查到的磁盤? 來查看磁盤類型(磁盤分區(qū)表)并處理(注意不是分區(qū),是磁盤
? ? ?n新增 d刪除 q直接不保存退出 w保存退出
?Linux fdisk 命令 | 菜鳥教程 (runoob.com)
?gdisk分區(qū)命令 - pipci - 博客園 (cnblogs.com)
? 3 也可以用 parted +磁盤名+ print 來輸出相關(guān)信息
? 4 利用partprobe來刷新狀態(tài)
?格式化
? ? ?也即就是創(chuàng)建文件系統(tǒng)
? ? ?mkfs(make filesystem) 命令 ,也可以用 mkfs.xxx 來直接指定格式
mkfs.xfs 設(shè)備名稱 如果已經(jīng)有文件系統(tǒng),要用-f 來強制格式化? ? ?Linux mkfs 命令 | 菜鳥教程 (runoob.com)
文件系統(tǒng)校驗
? xfs_repair 處理xfs系統(tǒng)
? fsck.ext4? 處理fsck?
? 注意:很危險的命令,通常只有root有權(quán)限,且檢查的分區(qū)必須在卸載的狀態(tài)
掛載?
? ?要點:
? ? ? ? ?1 單一文件系統(tǒng)不應(yīng)該被重復(fù)掛載在不同的目錄中?
? ? ? ? ?2 單一目錄不應(yīng)該重復(fù)掛載多個文件系統(tǒng)(必須)
? ? ? ? ?3 要作為掛載點的目錄,理論上都應(yīng)該是空目錄才行 (如果不是空的,原內(nèi)容會暫時隱藏)
? ? mount:
? ? ? ? ? ? 共三種方式,還有很多參數(shù)
mount? LABEL=' ' 掛載點 mount UUID= ' ' 掛載點 (推薦使用這種) mount 設(shè)備文件名 掛載點Linux mount命令 | 菜鳥教程 (runoob.com)
? ? ? 一般流程為:?
? ? ? ? ? ? ? ? ? ? ? ? ??
blkid 設(shè)備 (查詢uuid) mkdir -p 目錄 (創(chuàng)建空掛載目錄) mount 三種方式選一 要掛載的目錄? ? 重新掛載
? ? ? ? ?-o remount,xx?
? ?
? ?目錄掛載目錄:? 達到鏈接功能
? ??
mount --bind 目錄 目錄? 特殊設(shè)備 loop 掛載?
? ??Linux中的loop設(shè)備 - 簡書 (jianshu.com)
mount -o loop 解釋_acmilanvanbasten的博客-CSDN博客
? ? ?通過 mount -o loop ~ 命令進行特殊掛載?
? ? ? ? ? ? 如 鏡像文件? 或
? ? ? ? ? ? ? ? 大文件當做一個分區(qū) :dd命令創(chuàng)建一個大文件
? ? ? ? ? ? ? ? ? ??Linux dd 命令 | 菜鳥教程 (runoob.com)
? ? ? ? ? ? ? ? ? ??
? ?卸載
? ? ?
umount [-fn] 設(shè)備名或掛載點-f:強制卸載 -l:立即卸載 -n:不更新 /etc/mtab 的情況下卸載? ? ? ?注意:不能卸載正在使用的掛載點,退出就行了
自動掛載(啟動掛載)
? /etc/fstab這個文件內(nèi):有自動掛載的信息?
? ?分為6欄:
[設(shè)備/UUID/LABEL] [掛載點] [文件系統(tǒng)] [文件系統(tǒng)參數(shù)] [dump] [fsck]? ? ? 第四欄:p249? 默認為defaults 同時具有很多參數(shù)?
? ? ? 第五欄:dump 是一個用來作為備份的命令,通常設(shè)置為0
? ? ? 第六欄:是否以fsck檢驗扇區(qū),通常為0
-----------------------------------------------
? ? ?通過nano 命令 將6欄信息寫入 就可以實現(xiàn)自動掛載了
? ? ?fstab是啟動時的配置文件,不過實際文件系統(tǒng)的掛載是記錄到/etc/mtab? /proc/mounts
? 磁盤/文件 參數(shù)自定義
? ? ? 所有設(shè)備都是以文件來表示,怎么用文件來識別設(shè)備呢? 通過文件的 major 與 minor 數(shù)值來代替?
? ? ? 245就是major? ,逗號后面的就是 minor
---------------------------------------
? ? mknod :修改major 和 minor
mknod 設(shè)備文件名 [bcp] major值 minor值? ?xfs_admin : 修改xfs文件系統(tǒng)的uuid 和 Label
? tune2fs :修改ext4的~
swap分區(qū)創(chuàng)建
? ?1 設(shè)置一個內(nèi)存交換分區(qū) (設(shè)置一個新分區(qū)),用mkswap格式化系統(tǒng)
? ?2 建立一個虛擬內(nèi)存文件? dd創(chuàng)建大文件 用上文的loop設(shè)備
---------------------------
? ? swapon 來 啟動交換分區(qū)?
Linux swapon命令 | 菜鳥教程 (runoob.com)
? ? swapoff 來關(guān)閉
Linux swapoff命令 | 菜鳥教程 (runoob.com)
? ? 自動掛載也寫在/etc/fstab中
附:??
? ? ?ll -sh 來查看 數(shù)據(jù)總量
? ? ? 第一個數(shù)據(jù)就是block大小4Kb? 實際只用了2K? 可以看到浪費了很多?
----------------------------------------------------------------
? ?parted?
parted 磁盤 print //可以查看此磁盤下的所有分區(qū) 和劃分信息(格式等) 注意是磁盤名? ?還 可以用來創(chuàng)建刪除分區(qū)(無視分區(qū)格式)
parted命令詳解_Linux運維的博客-CSDN博客_parted
? ?
----------------------------------
ulimit?
與文件系統(tǒng)及程序的限制關(guān)系 ,限制用戶使用某些系統(tǒng)資源
-可以用來限制用戶創(chuàng)建的文件大小(雖說默認系統(tǒng)限制與block有關(guān))
Linux ulimit命令 | 菜鳥教程 (runoob.com)
----------------------------------
? ?注意點: 磁盤分區(qū) (gdisk/fdisk/parted)的命令 ,后面的參數(shù)都是磁盤設(shè)備名,而不是分區(qū)設(shè)備名
? ?各命令查看的類型
? ? ? ? ? ? ? ? ? ? ?:parted+磁盤名:查看各分區(qū)的格式化類型(如xfs)
? ? ? ? ? ? ? ? ? ? ? ? lsblk:查看是整個磁盤還是其磁盤下的分區(qū) 和 分區(qū)掛載點
? ? ? ? ? ? ? ? ? ? ? ? fdisk+磁盤名:查看磁盤引導(dǎo)的格式(是dos 還是 GPT)
? ? ? ? ? ? ? ? ? ? ? ??
第八章 文件與文件系統(tǒng)的壓縮
壓縮(gzip...)
?
?gzip與zcat/zmore/zless/zgrep:
??Linux gzip命令 | 菜鳥教程 (runoob.com)
gzip [-cdtv#] 文件名 //注意會 替換掉源文件 // 可以-c 重定向到新文件? zcat等是將查看文件內(nèi)容命令與zip格式結(jié)合 -->不解壓也能對壓縮文件操作?
? 如:zcat能不解壓查看壓縮文件內(nèi)容
? bzip2與 bzcat...?Linux bzip2命令 | 菜鳥教程 (runoob.com)
? xz與 xzcat...
? 格式都差不多,只是壓縮算法不一樣 :壓縮效率越好,時間就越高,xz壓縮效率最好但慢
打包:tar 可一并壓縮
tape archive
tar -zjJ ctx v f+目標文件名 待打包文件名? zjJ: 表示打包的同時一并壓縮或 解壓?
? ? ? ? ?z:gzip
? ? ? ? ?j:bzip2
? ? ? ? J:xz格式
? ? 注意: 不能同時存在?
ctx
?c:建立新的打包文件
?t:查看打包的文件內(nèi)含有的文件名(單純查看)
?x:解壓縮功能? ?-C:解壓時 在特定的目錄解壓(不加則解壓在工作目錄)
?不會同時存在
--------------------------------
其他
?v:在壓縮,解壓過程中,將正在處理的文件顯示出來
?f:后面跟著 要建立的文件名或既有的tar文件名
-p:保留備份數(shù)據(jù)的原本屬性和權(quán)限
-P:保留絕對路徑,含有根目錄(不過不安全 ,解壓后可能覆蓋絕對路徑的內(nèi)容,不加則 解壓目的 目錄+文件名)
小技巧:
1? 可以通過管道+命令 來指定文件
tar -jtv -f /root/etc.tar.bz2 | grep 'shadow' //通過 -t 加 管道 加 grep 來查看 壓縮文件內(nèi)的指定文件 //然后 可以解壓 特定文件2? --exclude==' ....'? ?表示不包括此文件 (\+空格 :字符串連接到下一行)
3 時間參數(shù)
? -newer:后續(xù)時間包括 mtime與 ctime
? ?--newer-mtime:僅是 mtime時間
4 稱呼?
? ?tarfile:只是tar打包之后的文件
? ?tarball:打包并且壓縮
5 特殊應(yīng)用
? ?a?打包到特殊設(shè)備之中(如磁帶)
? ?b? 利用管道命令與數(shù)據(jù)流--》cp效果
? ? ?
tar -c vf - /etc | tar -x vf - //一邊打包 一邊在工作目錄解開 -相當于緩存區(qū) standard output/input6 SElinux 權(quán)限問題可能會導(dǎo)致系統(tǒng)無法讀寫某些配置內(nèi)容,導(dǎo)致影響正常使用?
Linux tar 命令 | 菜鳥教程 (runoob.com)
xfs 文件系統(tǒng)備份與還原:
? lsblk+fdisk查看磁盤各分區(qū)的格式(xfs)
備份 xfsdump:
? ?增量備份 -l +數(shù)字 :第一次備份一定是完整備份 level為0,level n 會跟level n-1 進行對比更新
? -L -M:都是記錄自定義的信息
?-f :是目的地文件名 .dump
?-I(大寫的i):查看已備份的信息 記錄在 /var/lib/xfsdump/inventory/里
還原:xfsrestore
? 結(jié)合查看的信息來 選擇恢復(fù)目錄或特點文件或增量備份等級(注意:也只能從0往上恢復(fù))
光盤寫入工具?
? iso:一般為iso9660,這種格式一般僅支持舊版的DOS文件名。
mkisofs:
? ? 制作光盤鏡像文件:.img
mkisofs [-o 目的文件] [-Jrv] [-V vol] [-m file] +待備份文件 -graft-point 鏡像目錄=實際目錄??
要點:?
? ?一般所有文件都無次序的放置到鏡像文件的根目錄,不好分類,可以用-graft-point來有層次的備份
? ?可以利用kickstart技術(shù)和rsync+此命令可制作 啟動光盤鏡像文件
cdrecord(wodim):光盤刻錄工具
? 常用:
?
檢測刻錄機所在位置:
? 配合著SCSI(小型計算機系統(tǒng)接口)的標識來處理:用上面第一個命令來查詢
其他常見的壓縮與備份工具
dd:
dd if='input fileName' of='out ' bs='block size' count='numer'? if: input file 輸入文件
?of:輸出文件
?bl:默認512B
count:多少個block?
?注意: 默認一個扇區(qū)一個扇區(qū)去讀,不會理會文件系統(tǒng) 單純記錄,會變得跟原本磁盤一樣大
cpio:
Linux cpio命令 | 菜鳥教程 (runoob.com)
要點:
> <是重定向的意思
通常配合? find命令 和管道命令? 來重定向備份數(shù)據(jù)?
?可以備份任何文件?
?盡量不要絕對路徑,不然解開會直接覆蓋
第九章 shell/vim
為什么要選擇vim(vi):
模式:?
? 一般命令模式:command mode? 移動光標
?編輯模式:insert mode? 分為六種 【iIoOAarR】
?命令行模式:command -line mode :/ ? +命令執(zhí)行操作
注意: 編輯模式與命令行模式不能切換?
按鍵說明p293
Linux vi/vim | 菜鳥教程 (runoob.com)
hjkl:分別代表左下上又 移動一個光標
$:一般表示最后末尾的意思
0:表示最前面的意思
!:表示強制的意思
常用功能:
??
恢復(fù)功能:
? ?在編輯時,會產(chǎn)生一個filename.swp 的文件,當意外退出沒保存時 / 或有其他人或程序在使用此文件,由于vim的工作不被正常點中斷,導(dǎo)致緩存無法借由正常流程來結(jié)束,所以此緩存文件不會消失
? ?打開意外退出的文件時,根據(jù)此緩存文件會有幾個選項:
O:只讀文件
E:正常打開文件,不加載緩存的內(nèi)容
R:加載緩存的內(nèi)容,但swp文件不會刪除,每次打開還是會有警告
D:加載并刪除
Q/A:直接返回命令行
? ? ?
vim的額外功能:
?能有高亮和自動語法識別(c/shell等) 并且最后一行會有當前光標位置顯示
可視區(qū)塊(visual block)
? vi中基本都以行為單位進行操作,但vim能以區(qū)塊(比如列)來進行操作
? ?反白就是選中的意思
多文件編輯+多窗口化:
? 可以同時打開多個文件,同時進行操作(比如復(fù)制到另一個文件中)
vim fileName1 fileName2多窗口化:
? 可以同時顯示多個文件或者一個文件的不同位置-- 光標互不影響(同時只能有一個光標存在)
:sp // --新增一個當前文件窗口 :sp filename // -- 新增一個指定文件的窗口? ctrl+w+j/k :移動到下一個或上一個窗口
? ctrl+w+q: 關(guān)閉當前窗口
要點:?
? ?可以有多個窗口,不止一個
vim 關(guān)鍵字自動補全
? ctrl+n?
Vim自帶自動補齊功能-Vim入門教程(11) | vim教程網(wǎng) (vimjc.com)
vim環(huán)境設(shè)置:
~/.vimrc :寫著 set 的配置命令 如set su ,不用每次開啟vim都手動設(shè)置了
~/.viminfo :記錄著你的操作記錄,下次更好的作業(yè)
注意事項:
1) DOS與Linux的換行符:
? ? ? ?DOS使用^M$? -------linux 使用 $ 符號 所以很可能造成錯誤
? ? ? ?可以用 unix2dos或 dos2unix程序來轉(zhuǎn)換
2) 語系編碼轉(zhuǎn)換?
? iconv 程序來轉(zhuǎn)換 ,要注意文本的原來編碼格式和終端的語系
? file +文件名 :來查看是什么文本
第十章 認識與學(xué)習 BASH
什么是shell?
? shell是用戶與linux內(nèi)核之間的接口,使我們的命令傳輸給內(nèi)核更好的控制硬件來工作
?廣義的:能夠操作應(yīng)用程序的軟件都能夠稱為殼程序
?狹義的:命令行模式(bash) 或 DOS下的 cmd.exe
什么是shell? bash和shell有什么關(guān)系? - 代碼ok - 博客園 (cnblogs.com)
shell的不同版本
為紀念 Steven bourne 取名為 bourne again shell---->BASH
類似c語言的版本: C shell -- > csh
支持的shell都寫在? /etc/shells 這個文件里
登錄的時候使用的哪個shell 記錄在 /etc/passwd 這個文件里
Bash shell
?由于 bash 是默認的shell ,所以我們學(xué)習她;
?bash主要有以下優(yōu)點{
? 1? 按 上下鍵 可以找到以前輸入過的命令 ,最多可達1000多個
? 2 命令行補全 TAB
? 3 別名功能 (很常用)
alias //查看已有的別名 alias 自定義別名='原命令' //就可以自定義別名 如: alias la='ls -al'//以后輸入 la就行了? 4? 任務(wù)管理,前后臺控制
? 5 程序化腳本:shell scripts ----類似于批處理文件,相當于一種語言
? 6 通配符:如*表示任意 ----正則表達式?
}
查詢是否內(nèi)部命令:type
type [-tpa] name?如:type就是bash內(nèi)置命令
?可以 通過 type -a name 來達到 which命令的效果: 找命令用(絕對路徑)
命令的快捷鍵?
---
\+enter 來轉(zhuǎn)義字符:命令太長換到下一行繼續(xù)輸入?
下一行會出現(xiàn)>標志,代表換行成功可以繼續(xù)輸入
---------------?
組合鍵:
shell的變量功能
shell環(huán)境下的變量 ,跟編程語言里的變量一樣
以一組文字或符號等,來替換一些設(shè)置或一串保留的數(shù)據(jù)
可以對復(fù)雜的訪問路徑設(shè)置為一個變量 ,就不用繁瑣的輸入路徑了
變量的設(shè)置與取消
讀取變量內(nèi)容:
echo $變量名 或 echo ${變量名}取消:
unset 變量名設(shè)置:用等號來賦值
name=...變量的規(guī)范與注意點
1)如果變量數(shù)據(jù)有空格,要用單引號或雙引號括起來
? ? ? 單引號:原數(shù)據(jù),不進行轉(zhuǎn)換
? ? ? 雙引號:專換的數(shù)據(jù),進行了轉(zhuǎn)換
2)不能以數(shù)字開頭
3)若想借由額外的命令所提供的的信息:可以采用
$(其他命令) `...` //這里是鍵盤1左邊的那個按鍵?相當于?先執(zhí)行這里面的命令得出結(jié)果 再帶入原命令
4)若想變量新加信息
原變量名=${原變量名}添加的信息5)若變量要在其他子程序執(zhí)行,需要設(shè)置為環(huán)境變量
export 變量名6)通常大寫為系統(tǒng)默認變量
變量的刪除,替換,與測試
1)刪除部分內(nèi)容:
變量#+正則 代表從左到右刪除,且惰性 變量##+正則 代表從左到右刪除,選取最大的 % 表示從右到左 :與#規(guī)則一樣,也有%%2)替換部分內(nèi)容:
變量名/舊字符串/新字符串:第一個匹配的舊字符串會替換為新字符串 變量名//舊字符串/新字符串:全部符合的都會替換3)測試變量是否存在:
比較復(fù)雜,沒搞懂意思 ,通過+ = - 號來完成
環(huán)境變量的功能
使用純大寫字母來設(shè)置的變量一般為系統(tǒng)內(nèi)定需要的變量
set:觀察所有變量-環(huán)境+自定義
env:觀察環(huán)境變量
export:觀察環(huán)境變量 并且 可以把自定義變量轉(zhuǎn)換為環(huán)境變量
export 變量名 #轉(zhuǎn)換為環(huán)境變量注意:這樣能讓子進程使用-------子進程僅會繼承父進程的環(huán)境變量。
?locale:查看支持的語系,其中LANG,LC_ALL為主要的設(shè)置變量
Linux下的Locale詳解 - idlo - 博客園 (cnblogs.com)
重要環(huán)境變量
PATH:執(zhí)行文件查找路徑
LANG:語系數(shù)據(jù) ,必要時可以手動設(shè)置
RANDOM:返回一個隨機數(shù)
PS1:提示符的顯示設(shè)置,可以自行設(shè)置?
$? :代表shell進程號
?:上一個命令的返回結(jié)果 0為成功執(zhí)行
變量鍵盤讀取
1)read
read [-pt] 變量名 等待鍵盤輸入 //將鍵盤輸入賦值給變量 ,無則創(chuàng)建并賦值 -p:接提示字符 -讓輸入行有提示字符 -t:接秒數(shù)-- 等待時間 -防止無限等待2) declar/typeset
declare [-aixr] 變量名=... //定義類型并賦值 -a :定義為數(shù)組(array) -i:定義為整型 -x: 定義為環(huán)境變量 == export +變量名 -r:設(shè)為只讀變量注意:bash數(shù)組跟c語言的數(shù)組差不多
? ? ? ? ? 變量類型默認為字符串?
? ? ? ? ? bash數(shù)值運算默認整數(shù)
命名別名與歷史命令
alias
alias 新命令(別名)= 原命令(可以拼接多個命令)1)直接輸入 會顯示所有的命令別名、
2)變量 和命令別名的不同: 變量是echo才能查看內(nèi)容 ,而命令別名也是命令 --執(zhí)行
歷史命令:history
history n //顯示最近的n條命令 history [-c]// 清除全部內(nèi)容 history [-raw] histfiles -a:新增的添加到histfiles -r:讀取histfiles 到當前shell history記錄中 -w:記錄內(nèi)容寫入 histfiles1) 每次登錄bash時,會到目錄 ~/.bash_history? 讀取曾經(jīng)命令
? ? ? 注銷時,會講新增的命令更新到~/.bash_history中
2)執(zhí)行特定歷史命令操作?
!number :執(zhí)行第number條命令 !!:執(zhí)行上一條命令 !ls:執(zhí)行最近以ls開頭的命令3)如果同時登錄好幾個bash界面,且用戶相同,那么記錄會互相覆蓋
? ? ?-- 可以登錄單一bash 用任務(wù)管理器切換任務(wù),可以記錄全部內(nèi)容。
4)無法記錄時間,但能通過~/.bash_history? 設(shè)置
Bash shell 操作環(huán)境
命令的查找順序*
當我們執(zhí)行一個命令時,執(zhí)行的是哪個具體命令呢,按照以下順序查找并執(zhí)行
1)以絕對命令執(zhí)行(如/bin/ls)
2)由alias找到的別名來執(zhí)行
3)由bash內(nèi)置的(built in)命令來執(zhí)行
4)通過$PATH變量的順序查找來執(zhí)行
這個順序可以通過 type -a 命令名 來查詢
bash的歡迎與登錄信息
/etc/issue :終端界面登錄信息,通過修改此文件 自定義歡迎信息
/etc/issue.net: telnet連接到主機時顯示的信息
內(nèi)含\ 轉(zhuǎn)義:
環(huán)境配置文件
login shell:登錄時需要輸入賬號密碼的界面
1)調(diào)用系統(tǒng)整體設(shè)置 :/etc/profile?
? ? ?而/etc/profile 又會調(diào)用其他文件
2)調(diào)用 用戶個人設(shè)置:~/.bash_profile 或?~/.bash_login 或?~/.bash_profile
? ? ? 而又會調(diào)用? ~/.bashrc -->
? ? ? 再調(diào)用 /etc/bashrc : 整體環(huán)境設(shè)置 如 根據(jù)UID設(shè)置umask值,提示字符等,調(diào)用*sh等設(shè)置
non-login shell:不需要再重新登錄操作 的界面(如 su-)
login shell和non-login shell_肖邦_莫扎特的博客-CSDN博客_non-login shell
1)僅調(diào)用~/.bashrc? ? .
各文件內(nèi)容:
/etc/profile :調(diào)用系統(tǒng)整體設(shè)置?
~/.bash_profile 或?~/.bash_login 或?~/.bash_profile :調(diào)用 用戶個人設(shè)置
/etc/profile.d/*.sh :眾多文件,規(guī)定了操作界面的顏色,別名等
/etc/locale.conf: 決定了bash默認使用何種語系
/etc/bashrc : 整體環(huán)境設(shè)置 如 根據(jù)UID設(shè)置umask值,提示字符等,調(diào)用*sh等設(shè)置
/etc/man_db.conf :使用man時候, man page的路徑到哪去尋找
~/.bash_history: 記錄的歷史命令
~/.bash_logour:注銷bash后 ,系統(tǒng)幫我做完的操作
讀入配置文件命令
立即讀入到目前的shell環(huán)境中來(更新?)
source 或 .?
source 配置文件名 . 配置文件名終端環(huán)境設(shè)置(stty/set)
tty1-tty6的終端界面中
stty:
stty -a //列出所有參數(shù)快捷鍵 stty erase ^h //把erase快捷鍵換成 ctrl+h ^表示 ctrl鍵 intr:中斷當前程序 quit:退出當前程序 erase:向后刪除字符 kill:刪除當前一行所有文字 eof:代表輸入結(jié)束 stop:停止屏幕輸出 start:重啟停止的程序 susp:送出一個terminal stop信號給正在運行的程序set:
Linux set命令 | 菜鳥教程 (runoob.com)
set -u //設(shè)置這個參數(shù) set +u// 取消 設(shè)置這個參數(shù)通配符與特殊符號:
通配符:
通配符不是正則表達式,通配符(wildcard)代表的是bash操作接口的一個功能
而正則表達式是一個字符串的處理方式
特殊符號:
數(shù)據(jù)重定向
三個標準流:
標準輸入(stdin): 代碼0 < 或 << 默認鍵盤 標準輸出(stdout):代碼1 > 或 >> 默認屏幕 標準錯誤輸出(stderr):代碼2 2> 或 2>> 默認屏幕1)stdout,stderr 默認輸出是屏幕? 可以利用 >等重定向(輸出到指定的位置)
2)標準輸出指的是命令執(zhí)行返回的正確信息,stderr是命令執(zhí)行失敗所返回的信息
3)重定向輸出時 指定文件,若不存在則會自動建立一個新文件
4)>? 2> 會覆蓋文件內(nèi)容 ,>> 2>> 則是累加
5)<指定輸入流的來源 <<表示邊界符號,代表結(jié)束的輸入字符?
6)當stdout,stderr 要輸出到同一個文件夾時,必須使用特殊語法,而不能連續(xù)指定文件
---- 2>&1 :將2重定向為? 1的流設(shè)備 -stderr重定向到 stdout的定向文件
find /home -name .bashrc > list 2> list //錯誤 會導(dǎo)致亂序 find /home -name .bashrc > list 2>&1 //特殊語法命令執(zhí)行判斷符號
0):利用 分號 ; 來一行執(zhí)行多條命令語句?
利用命令執(zhí)行的返回變量 &?(成功返回0) 來條件執(zhí)行 相關(guān)命令?
&& :前句執(zhí)行成功,后句才執(zhí)行
||:前失敗后面才執(zhí)行
cmd1 && cmd2 //cmd1 執(zhí)行成功(返回0) 后面才執(zhí)行 cmd1 || cmd2 //cmd1 執(zhí)行失敗 后面才執(zhí)行1) 是從左到右順序執(zhí)行的,多個條件判斷符號組合時,應(yīng)該注意順序?
2) 可以? && + || 組合達到三段式的效果
cmd1 && cmd2 || cmd3等效于 : if(cmd1執(zhí)行成功) 執(zhí)行cmd2 else 執(zhí)行 cmd3
注意 : && || 順序不能變,因為返回值不一樣
管道 pipe |
通過管道??|? + 命令來處理數(shù)據(jù)?
每個管道 |? :只能處理stdout-標準輸出的數(shù)據(jù) ,也就是后一個命令能處理stdout的數(shù)據(jù)
選取命令 cut ,grep(重點*)
兩個命令都只能一行一行的處理信息
1) cut?
??輸出特定的字符
cut -d '分隔字符' -f n // 輸出 第n個被分開的字符串 1) -d 必須 搭配 -f 使用 2) 分隔符不會輸出 cut -c [字符個數(shù)區(qū)間] //顯示區(qū)間內(nèi)的字符2)grep-Globally search a Regular Expression and Print? ?
輸出特定的字符的一行
grep -acinv '查找字符' filename // 查找到一行中的匹配字符 若有 則輸出此行若沒有 則檢索總文本中的下一行Linux grep 命令 | 菜鳥教程 (runoob.com)
-A+n:after,除了選定的行,后面的n行也列出來
-B+n:befer 除了選定的行,前面的n行也列出來
排序命令 sort uniq?
根據(jù)行進行排序
1) sort? ?
默認文本+升序 進行排序,根據(jù)語系編碼進行排序?
sort -fbMnrtuk fileNmae / stdinLinux sort命令 | 菜鳥教程 (runoob.com)
2) uniq?
合并相同的數(shù)據(jù)行
uniq -ic -i:忽略大小寫 -c:進行計數(shù)統(tǒng)計行數(shù)等 wc
?wc-?word count
? 對文本進行計數(shù) --默認全部列出
wc -lwm -l:列出行 -w:列出有多少英文字符 -m:多少字符列:查看有多少個用戶名
雙重定向 tee
既輸出到文件,又輸出到stdout
tee -a file -a:以累加的的方式保存至file字符轉(zhuǎn)換命令:tr,col,jion,paste,expand
1) tr
刪除或替換一段信息當中的文字?
tr -ds str1 str2 -d 刪除str1,此時無需str2 -s 將str1 替換為 str22) col : 講tab鍵轉(zhuǎn)換為空格
3)join?
指定分隔符,對比欄位,若相同:? 將對比欄位復(fù)制到最前方 并且 合并兩條數(shù)據(jù)
默認:空格符分割-對比第一個欄位的數(shù)據(jù)
jion -ti12 file1 file2-t:指定分隔符,配合 -1 -2 使用 -i 無視大小寫 -1 n :以file1 的第n個分割欄位來分析 -2 n :以file2 的第n個分割欄位來分析3) paste
合并兩個文件的數(shù)據(jù),中間用tab來隔開
4) expand :將tab 轉(zhuǎn)換為空格鍵
劃分文件命令:split
將文件按行或者按大小劃分為小文件 ,默認 前綴+a,前綴+b。。。
split -bl file 源文件 前綴 -b:接要劃分成的子文件大小 -l:按行來劃分Linux split命令 | 菜鳥教程 (runoob.com)
分割參數(shù): xargs
可配合非管道命令使用,將數(shù)據(jù)分割為指定的參數(shù)供命令使用
xargs -0epn command -0:將特殊字符還原為一般字符 -e +EOF:指定用于結(jié)束的字符 -p:每次執(zhí)行command時,都會詢問 -n 次數(shù):表示一次提供給command幾個參數(shù)列:id這個命令只能接受一個參數(shù) 而 stdout輸出的數(shù)據(jù)有很多組 -通過xargs分為一個個參數(shù)提供給id命令
-->通過cut+head 取出3個GID 提供給xargs,通過xargs 執(zhí)行三次 id命令
cut -d ':' -f1 /etc/passwd | head -n3 | xargs -p -n1 id關(guān)于減號 - 的用途?
代表前一個命令的 stdout 或者 stdin?
第十一章 正則表達式與文件格式化處理
正則表達式是一種字符串表達方式,用于搜尋檢索字符串--與通配符不是一個東西?
除基礎(chǔ)正則表達式還有擴展正則表達式(群組等),本章介紹基礎(chǔ)正則表達式 -在LANG=C的情況下
注意點:
1)語系的編碼順序?qū)φ齽t表達式有影響?
如 LANG=C 時 :0123。。ABC。。abc..
而 LANG=zh_CN:01234.。。aAbB。。。
如果我們使用 [A-Z]時 ,選定的字符范圍并不一樣?
2)符號意義 :
基礎(chǔ)正則表達式集合
注意點:
1)與bash通配符不一樣, 如bash下 *表示任意多個字符 ,而正則表達式* 表示重復(fù)前一個字符0+次
2) {} 和 . 都要通過\轉(zhuǎn)義?
3) *和 {} 是限定前一個字符個數(shù)的意思 -前面必須有一個任意字符,而.則表示任意一個字符?
->.* 表示 多個(0-n個)任意字符
擴展正則表達式
grep時 要加 -E 參數(shù) 或直接使用egrep命令 表示使用的是擴展正則表達式?
3)+?是是限定前一個字符個數(shù)的意思
?
sed管道命令?
stream?edit?:流式編輯器
可以對數(shù)據(jù)進行很多操作
sed -nefr 'n1,n2操作代碼' -n:使用安靜模式,只有經(jīng)過處理的行才會顯示。默認全部顯示 -e:命令行模式上進行sed操作,可以省略;但有多個操作時不能省略 -f filename:此文件內(nèi)內(nèi)容是 sed操作 -r:使用擴展正則表達式 -i:直接按操作修改源文件,不會輸出到屏幕操作代碼: a +字符:在目前的下一行新增這些字符 i +字符:在目前的上一行新增這些字符 c +字符:替換 n1-n2 之間的行 s:搜索+替換功能 以 s/1/2/g 形式出現(xiàn)--1替換為2 d :刪除 p:打印 一般使用-n 安靜模式--否則會重復(fù)輸出1)n1,n2 不是一定要出現(xiàn),一般代表行數(shù)
2)a i 新增行時,若需要新增多行 :應(yīng) \ + -> 表示字符
/etc/passwd | sed '2a 第一行\(zhòng) > 第二行 '?在第二行下一行添加 兩行數(shù)據(jù)?
3)sed 后面一定要用 ' ' 括起來
4)替換功能*常用 :' s/指定字符/要替換成的字符/g'?支持正則表達式
5)-i 非常危險,可以直接不通過編輯器等修改內(nèi)容
文件格式化 printf
不是管道命令,需要人為的將數(shù)據(jù)送給此命令
1)與c語言當中模式幾乎一樣
2)也是對一行做處理 ,格式(如%s)個數(shù) 需要與一行當中數(shù)據(jù)個數(shù) 一致
數(shù)據(jù)處理工具 awk
?awk命令英文單詞縮寫:Aho、(Peter)Weinberg和(Brain)Kernighan,沒錯,awk是三個人名的縮寫,正式這三個人創(chuàng)造了amk——一個優(yōu)秀的樣式掃描與處理工具。
行處理工具
適合處理一行中分段數(shù)據(jù)(以分隔符分為的欄)
awk '條件{操作}...' filename1)可以有多個條件+操作 ;條件可以省略-表示直接執(zhí)行操作;
? ? ?多個條件-操作之間分隔:a 用; 間隔? b 用enter分隔
2)條件符號是><==!=等c語言邏輯符號 ;可以用if(條件) 使條件放在操作{}內(nèi)
3)自動以 空白符為分割 ; &0代表一整行 &1 第一欄 &2代表第二欄 ,以此類推
4)變量可以不帶&直接使用 ; awk自帶變量:
?5)流程:
-->因此我們修改FS分隔變量時,第一行并不準確(第二行才開始生效)
>此時用BEGIN關(guān)鍵字來先修改變量內(nèi)容
awk 'BEGIN{FS=" " }...'?6)由于awk后面自動接' ' ,則操作中都要用雙引號'' '' 來表示原單引號操作?
列子:無條件列出 regular.txt 的第一欄
文件對比工具diff cmp
diff
1)通常比較純ASCII ,文件差異不大-通常新舊版本之間
2)按行比較?
3)以第二個參數(shù)為基準比較(新文件)
diff - oldFile newFile //有很多參數(shù) 看下面連接Linux diff 命令 | 菜鳥教程 (runoob.com)
4)也可以比較不同目錄下 相同文件名里的內(nèi)容
cmp
主要用字節(jié)單位去比較,當然可以用于對比二進制文件、
cmp -l file1 file2Linux cmp 命令 | 菜鳥教程 (runoob.com)
補丁文件 patch
1)用diff命令+重定向 生成.patch補丁文件?
$ diff passwd.old passwd.new > passwd.patch--------------------
$ patch -p0 testfile1 testfile.patch #使用補丁程序升級文件Linux patch命令 | 菜鳥教程 (runoob.com)
-p0:數(shù)字代表目錄層數(shù) p0代表都在當前目錄內(nèi)?
文件打印設(shè)置 pr
自行查看 ,可以設(shè)置頁碼,標頭等?
注意:
1)正則表達式自帶的符號需要表示原本含義時:利用 \ 轉(zhuǎn)義
2)最后一題答案-除去#,空白,顯示英文開頭行?
利用 sed s/ / / g 來替換 +grep 選定一行?
第十二章 shell腳本
基本
概念
shell腳本是利用shell功能寫的一個程序,是純文本文件;將命令寫在里面達到集合操作的目的;
早期的dos時代的.BAT批處理類似;
是利用shell與相關(guān)工具命令,所以不需要編譯即可執(zhí)行;
功能:最簡單的就是簡化一系列命令,封裝效果;
建議用vim編寫,能自動糾錯;
跟標準意義上的語言不一樣,速度比不上傳統(tǒng)語言;大量計算上速度較慢,cpu使用多;
如何執(zhí)行
假設(shè) 腳本名為 shell.sh
1)一定要設(shè)定wr權(quán)限,才能正常執(zhí)行----chmod 7777? shell.sh
2)? 絕對路徑或者 ./shell? :這個./就代表當前目錄(不能不加入PATH又直接執(zhí)行shell.sh--查找不到)
3)將目錄放到PATH變量內(nèi)(加入了就可以直接 shell.sh? ? 來執(zhí)行了)
4)bash shell.sh 或者 sh shell.sh? 來執(zhí)行
????????????????由于是調(diào)用bash功能,所以只需要有r權(quán)限
? ? ? ? ? ? ? ? sh其實是bash 的鏈接文件?
sh命令調(diào)試腳本
sh [-nv] shell.sh // -n 不執(zhí)行腳本,只檢查語法-v 執(zhí)行腳本前,先輸出腳本內(nèi)容-x 一步一步顯示執(zhí)行過程+結(jié)果 (調(diào)試很常用--單步調(diào)試注意點
環(huán)境
1)#!bash名:表示要使用的bash 如---- #!/bin/bash -->使用bin下的bash
2)#為注釋
3)exit 0 表示返回系統(tǒng)的值,0為正常
4)要養(yǎng)成良好的習慣
? ? ? ? ? ? ? ? 腳本功能;版本信息;特殊命令解釋;預(yù)先設(shè)置聲明;--跟編寫其他語言程序一樣
變量內(nèi)容
1)可以使用read -p +提醒字符串 +變量 來交互
?變量的檢查?
num=${a:-表達式} # 若變量a(配合上一行read 交換輸入變量)為空或不存在 則用指定表達式代替2)bash默認只能支持整數(shù)運算,有小數(shù)點會報錯
3)通過這種來賦值或者輸出
賦值:3種
等號兩邊不能空格
表示變量的符號$后不能空格
Linux let 命令 | 菜鳥教程
shell腳本的作用,shell腳本變量的定義和三種賦值方式【shell腳本的學(xué)習筆記一】_oba沒有馬的博客-CSDN博客_linux shell腳本學(xué)習
i=0let i=i+1i=$[$i+1]i=$(($i+1))i=${i}+1 這種不行 會變成字符串 3+1 var= $( (變量內(nèi)容 -->${變量名}操作碼${變量名} ) )輸出:
echo $( (變量內(nèi)容 -->${變量名}操作碼${變量名} ) )? ? ? ? 一定要兩個括號
? ? ? ? ${變量名}來表示變量內(nèi)容,字符串里也可以
4)通過 “表達式” | bc? 管道命令來浮點數(shù)運算
"${變量名}操作碼${變量名}" |bc? ? ? ? 必須要在引號里面
總實例?
->
當a或b是小數(shù)時 低四行會報錯
執(zhí)行方式差異
sh 或 直接執(zhí)行方式執(zhí)行:會在子進程bash環(huán)境執(zhí)行--創(chuàng)建的變量等都會消失
source : 會在當前bash環(huán)境下執(zhí)行,共享變量?
--??:mac 終端下? source命令執(zhí)行完shell腳本 終端會自動結(jié)束(exit 0 了當前進程shell)
判斷命令/符號
test(返回值
? ? ? ? 可以判斷數(shù)字比較,字符串比較,文件是否存在等;配合 && || 等來進行操作
Shell test 命令 | 菜鳥教程
[ ]?
1 括號兩邊 以及 每一個組件(符號,變量等)之間必須空格
2 變量以及常量 要用引號擴起來
3 -參數(shù) 跟test一樣?
shell腳本默認變量
? ? ? ? 在執(zhí)行文件里面可以使用的默認變量---帶命令行參數(shù)的腳本
默認:
? ? ? ? ?在腳本內(nèi)使用
shift n 指令:位移參數(shù)
? ? ? ? 相當于刪除前n幾個參數(shù)(不包括文件名)? n沒有默認右移1
?
----------?
常用語法
注意 : 不再像c語言一樣是 ()? ,[ ] 來判斷----所以要記得空格
? ? ? ? ? ? ? ?變量的賦值兩邊不能有空格
1 if
if [ ] ;thenelif [ ] ;thenelse fi2 case ${} in?
? ? ? ? ? ? 一個變量多次判斷 ;
? ? ? ? ? ? ?每一個小判斷用 ) +程序段+;; 來隔開
1 read -p "請輸入一個變量: " a2 case ${a} in3 "hello")4 echo "hello!"5 ;;6 "")7 echo "不能為空"8 ;;9 *)#表示其他情況10 echo "不知到你輸入的是什么"11 esac12 exit 1;3 while / until? + do..done
? ? ? ? until? ? ?[ 條件 ] :表示條件滿足才退出,與while相反?
1 i=02 s=03 while [ $i != 100 ]# 每一個部件要空格4 do #do--done 規(guī)定循環(huán)段 5 let i++; #let命令自增6 let s=s+i;7 done8 echo $s #可以不加{}表示變量,加了規(guī)范且不會誤認為為字符串9 exit 14 for?
?分為范圍for 和 標準for
?范圍for:for 變量 in ....
1 users=$(cut -d ':' -f1 /etc/passwd)2 for unername in $users3 do4 id $unername5 done6 exit 1普通for :一定要兩層括號
for (( ; ; )) do .. done-->
1 read -p "請輸入一個累加數(shù)字: " s2 count=03 for (( i=1; i<=$s ; i++ ))4 do5 echo $i6 let count=count+$i7 8 done9 echo "1+2+...${s}的結(jié)果為:$count"10 exit 1 ~5 函數(shù) function
????????定義函數(shù)名時要加上 function 前綴
? ? ? ? 調(diào)用函數(shù)時不用括號,調(diào)用時輸入的形參 會在函數(shù)內(nèi)覆蓋腳本默認變量
? ? ? ? 定義的函數(shù)一定要寫在調(diào)用前面 ---不然無法識別是函數(shù)
1 function print(){2 echo "hello! $1\n" #覆蓋默認變量 3 }4 print 小明 #調(diào)用時不用括號 且后面的小明在函數(shù)內(nèi)就是 $1 --起到了傳遞參數(shù)的作> 用5 exit 1????????
? ? ? ??
第十三章? Linux賬號管理與ACL權(quán)限設(shè)置
????????
賬號與用戶組
UID / GID
? ? ? ? 操作系統(tǒng)只認識具體的ID(一組號碼)--也就是UID(擁有人ID)與GID(用戶組ID)
? ? ? ? ls 顯示的明文id 其實是讀取ID之后轉(zhuǎn)換而來的
/etc/passwd? ? ? 與 /etc/shadow
終端登錄過程:
/etc/passwd內(nèi)容:
root:*:0:0:System Administrator:/var/root:/bin/sh ---> 賬號名稱:密碼:UID:GID:用戶信息說明欄:家目錄:shell 密碼是加密過的--單向密碼? ? ? ? 對于UID范圍:
0:系統(tǒng)管理員,不一定是root 1~999:系統(tǒng)賬號 1000-60000:給一般用戶使用/etc/shadow內(nèi)容:
? ? ? ? 將密碼的一些屬性單獨拿出來放在此文件中
賬號名稱:加密密碼:最近修改密碼日期:不可修改的天數(shù):需要重新修改的天數(shù):需要修改前的警告天數(shù):密碼過期后寬限時間:賬號失效日期:保留用戶組---etc/group?與 /etc/gshadow?
初始用戶組與有效用戶組
? ? ? ? ?一個用戶(UID)可以擁有多個用戶組--但只有一個初始用戶組-->passwd第四欄目
? ? ? ? 當創(chuàng)建文件時文件屬性:擁有者為本UID 和 本UID初始用戶組
? ? ? ? groups命令查看當前用戶所支持的用戶組---第一個為初始用戶組;
? ? ? ? /etc/group內(nèi)第四欄目表示此用戶組 有效的用戶(UID)---不包括初始用戶組
? ? ? ? newgrp切換用戶組--但只能切換已有當用戶組---且時新shell環(huán)境下獲得,跟su一樣exit退出
/etc/group內(nèi)容:
組名/用戶組密碼/GID/此用戶組支持的 用戶名 用戶組密碼通常給用戶組管理員使用,不常見 若為!表示無組管理員賬戶;/etc/gshadown內(nèi)容:
組名/密碼欄/用戶組管理員賬號/組支持的用戶名(與group當內(nèi)容一樣用戶加入一個用戶組兩種方式:
? ? ? ? 1? 通過root利用usermod幫忙加入
? ? ? ? 2 通過用戶組管理員以gpasswd幫忙加入?
賬號管理
? ? ? ? 通過useradd+passwd命令來創(chuàng)建新用戶
useradd相關(guān)
? ? ? ? 創(chuàng)建新用戶Linux useradd命令 | 菜鳥教程
useradd [-mMnr][-c <備注>][-d <登入目錄>][-e <有效期限>][-f <緩沖天數(shù)>][-g <群組>][-G <群組>][-s <shell>][-u <uid>][用戶帳號] 注意: g表示初始用戶組 G額外用戶組? ? ? ? 使用默認值時,會幫我們默認處理:
? ? ? ? ? ? ? ? 1 在/etc/passwd里面建立一行用戶數(shù)據(jù)(gid,uid等)
? ? ? ? ? ? ? ? 2 在/etc/shadow里面將此賬號的密碼相關(guān)參數(shù)寫入,但尚未有密碼(需通過passwd創(chuàng)建
? ? ? ? ? ? ? ? 3 在/etc/group 里面加入一個同名用戶組(如果指定了存在用戶組,則不會新增
? ? ? ? ? ? ? ? 4 在/home下建立一個與用戶同名的家目錄,權(quán)限為700 (系統(tǒng)用戶不會默認增添家目錄
? ? ? ? useradd默認值:useradd -D 查看 (是/etc/default/useradd調(diào)出來的)
? ? ? ? ? ? ? ? 包括默認GID
????????????????私有用戶組機制(某些版本如Centos--創(chuàng)建一個相同用戶組)
????????????????共有用戶組機制(共擁有一個用戶組,方便共享)
? ? ? ? ? ? ? ? 家目錄內(nèi)容參考:/etc/skel/*? ? ? ? ,也就是復(fù)制過去的
? ? ? ? ? ? ? ? UID/GID參數(shù) 參考:/etc/login.defs????????
passwd?
Linux passwd命令 | 菜鳥教程
passwd [-k] [-l] [-u [-f]] [-d] [-S] [username]? ? ? ? ? ? ? ? 如果沒有填username默認修改自身賬戶密碼
? ? ? ? ? ? ? ? root可以不用輸入舊密碼更改他人密碼?,且密碼幾乎都會被接受
? ? ? ? ? ? ? ? 新密碼的設(shè)定受到到PAM模塊(/etc/pam.d/passwd 文件描述機制?)? ? ?的管理? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? 可以用stdin的內(nèi)容來指定內(nèi)容---- >
stdin內(nèi)容 | passed --stdin usernamechage 顯示密碼相關(guān)參數(shù)
chage -[ldEImMW] username 通常使用-l來顯示全部具體參數(shù)usermod 微調(diào)賬號設(shè)置
usermod [-LU][-c <備注>][-d <登入目錄>][-e <有效期限>][-f <緩沖天數(shù)>][-g <群組>][-G <群組>][-l <帳號名稱>][-s <shell>][-u <uid>][用戶帳號]Linux usermod命令 | 菜鳥教程
userdel 刪除用戶相關(guān)數(shù)據(jù)
userdel -r username-r:連同家目錄一起刪除(可能保留有其他文件,如mailbox,crontab等? ? ? ? 通常不再使用此用戶的情況下使用
? ? ? ? ----如果只是想暫時不使用,/etc/shadow第八個字段設(shè)置為0
id/finger/chfn/chsh--用戶功能
id 查看用戶gid/uid等消息
finger 查看用戶相關(guān)信息:基本都是 passwd文件里的內(nèi)容
chfn 改變finger信息,需要密碼
chsh 改變用戶shell
用戶組管理
基本 groupadd等
groupadd?
groupadd [-g gid [-o]] [-r] [-f] 用戶組名稱 -g:指定新建工作組的 id; -r:創(chuàng)建系統(tǒng)工作組,系統(tǒng)工作組的組 ID 小于 500;groupmod :與usermod類似
groupdel +用戶組名:刪除(必須要確定不是某賬號的初始用戶組?
設(shè)置用戶組管理員 gpasswd
? ? ? ? 分為root操作部分(添加管理員) 和 用戶組管理員操作部分
外部身份驗證系統(tǒng)(暫略
? ? ? ? 可能會使用到其他外部的身份驗證服務(wù)器所提供的驗證身份功能
? ? ? ? centOS提供了 authconfig-tui 命令供我們參考?
ACL
? ? ? ? 以單獨 文件為對象,添加 用戶/用戶組的特殊權(quán)限;并提供默認權(quán)限設(shè)置(mask)
? ? ? ? UNIX-like操作系統(tǒng)額外附加選項,幾乎自動支持ALC(dmesg | -i aci 命令查看)
getfacl
? ? ? ? filesystem ACL:查看該文件的ACL特殊權(quán)限
getfacl 文件名(目錄)? ? ? ? 1? ls時 第一欄會多出來一行'+'
? ? ? ? 2 #的內(nèi)容為默認內(nèi)容(擁有者,默認用戶組等
? ? ? ? 3? :::特定的ALC權(quán)限 用:隔開 表示? 用戶/組:用戶名/組名:特權(quán)限;-第二欄為空表示擁有者
setfacl
? ? ? ? 設(shè)置特殊權(quán)限:一般都要加上-m選項
setfacl -bkRd [-m或-x 表達式】 目標文件名-m:設(shè)置后續(xù)acl參數(shù) -x:刪除后續(xù)acl參數(shù) (刪除指定的alc權(quán)限 --權(quán)限字段不能留白用'-'表示-b:刪除全部的acl參數(shù)-k:刪除默認的acl參數(shù)-R:遞歸設(shè)置acl,包括子目錄-d:設(shè)置默認acl 只對目錄有效--mask-在該目錄新建的數(shù)據(jù)會默認設(shè)置此特殊權(quán)限? ? ? 表達式:
[u|g:userlist | groupList :權(quán)限]? ? ---- |表示或 u表示user對應(yīng)用戶列表userlistd:u|g:userlist | groupList :權(quán)限 ----多一個d表示 -d? ? ? ? 關(guān)于mask:還表示所能設(shè)置ALC權(quán)限的最大值;
用戶身份切換
? ? ? ? 有su 和 sudo 最重要區(qū)別是sudo只需要輸入調(diào)用用戶的密碼
su 切換用戶
??除root外 需要知道切換到的用戶的密碼才能成功(如 su- 需要輸入root密碼
su - --- 表示登陸shell方式切換到root su --- 表示非登陸方式切換到shell 很多原本變量內(nèi)容不會被修改sudo 允許的用戶執(zhí)行允許的命令
? ? ? ? 需要通過/etc/sudoers? ? 文件(==visudo命令)來修改訪問許可
? ? ? ? 1 sudo后面直接接命令 表示默認切換到root用戶執(zhí)行此命令
? ? ? ? 2 只有被運行的用戶才能使用sudo
? ? ? ? 3?/etc/sudoers文件只能root或whell用戶組能查看
-r--r----- 1 root wheel 1594 Jul 20 20:03 /etc/sudoers? ? ? ? 4 使用sudo時 只需要輸入自己的密碼即可(如并不需要知道root的密碼)
/etc/sudoers
? ? ? ?實際內(nèi)容:
? ? ? ? ????????四欄:
用戶賬號 登陸者的來源主機名 = 可切換到的身份 可執(zhí)行的命令 1 %開頭表示允許的用戶組 (如admin 2 可執(zhí)行的命令務(wù)必用絕對路徑? ? ? ? 添加允許使用sudo用戶方法:
? ? ? ? 1 自己修改 /etc/sudoers 內(nèi)容(格式必須一致
? ? ? ? 2 使用 visudo命令(== vi /etc/sudoers)
? ? ? ? 3 將用戶加入到wheel用戶組(如上圖到admin用戶組)
? ? ? ? 第四欄(可使用命令)規(guī)范:
? ? ? ? 1 務(wù)必使用絕對命令
? ? ? ? 2 要嚴格規(guī)范命令? ALL很危險(如可以使用 su - 切換到root為所欲為)
? ? ? ? 3 可以規(guī)定具體命令+具體參數(shù);最前面加?!表示不允許執(zhí)行的意思
? ? ? ? 4 可以使用自帶的宏功能?通過別名來管理權(quán)限
sudo 的配置詳解_besidemyself的博客-CSDN博客_sudo 配置
PAM 模塊
/sbin/nologin 無登陸的shell
? ? ? ? 無法登陸主機獲取交互的shell,但能使用系統(tǒng)資源(系統(tǒng)賬號默認此shell)
? ? ? ? 如果有/etc/nologin.txt這個文件,則被拒絕時會顯示此文件內(nèi)容;
簡介:
? ? ? ? Pluggable Authentication Modules :插入式驗證程序,可以看作API ,可以根據(jù)需求調(diào)用后返回結(jié)果(0/1);模塊一般為 .so文件 (動態(tài)鏈接庫?)
配置文件 /etc/pam.d/*
? ? ? ? 調(diào)用時,PAM查看會目錄內(nèi)的配置文件,并根據(jù)配置文件有序調(diào)用模塊(.so)
如/etc/pam.d/passwd:
內(nèi)容:
驗證類別 控制標準 PAM模塊與該模塊參數(shù)????????
?? ?5? ?include表示繼續(xù)調(diào)用第三欄的配置文件
????????
相關(guān)文件:p455
? ? ??
/etc/pam.d/*:每個程序的PAM配置文件 /lib65/security/*:存放具體模塊 /etc/security/*:其他PAM環(huán)境的配置文件 /usr/share/doc/pam-*/ :PAM說明文件 /etc/securetty/:會影響到root可登陸的安全終端 /etc/nologin :如果系統(tǒng)中存在 那么普通用戶登陸就會失敗 /var/log/secure:記錄登陸時PAM產(chǎn)生的錯誤信息 /var/log/messages:記錄login消息????????
login的PAM驗證流程:
? ? ? ? auth->account->password->session?
? ? ? ? 通過類別+標記+具體模塊 來實現(xiàn)驗證過程
注意點:PAM在調(diào)用時才給予設(shè)置(修改了無法立即生效)
主機上的消息傳遞
查詢用戶 w/who/last/lastlog
? ? ? ? tty==teletypewriter
w和who 用來查詢目前已經(jīng)登陸的用戶
last/lastlog用來查詢最后登陸的時間
用戶之間發(fā)送消息 write/mesg/wall
? ? ? ? writ
write 用戶名 用戶使用的tty +回車 ....內(nèi)容 EOF(control+D)? ? ? ? mesg:對于是否接收消息
mesg n 表示關(guān)閉接受消息,但root傳來的消息還是會接受? ? ? ? wall
wall "內(nèi)容" 對于所有在線用戶發(fā)送消息,包括自己? ? ? ??
接受發(fā)送郵件mail
? ? ? ? 發(fā):
mail -s "標題" 用戶 +回車 ...內(nèi)容.或者EOF結(jié)束內(nèi)容? ? ? ? 可以利用重定向進行發(fā)送:
mail -s "標題" + 用戶 <fileName? ? ? ? 接受:
mail 就會彈出幾個未讀郵件 mail里 &表示提示字符 :輸入? 查看郵件? ? ? ? 常用命令:
創(chuàng)建大量賬號方法
?賬號檢查工具 pwck/pwconv/pwunconv/chpasswd
鳥哥私房菜 - 第十三章、Linux 帳號管理與 ACL 權(quán)限設(shè)定
shell腳本創(chuàng)建樣本
[root@study ~]# vim accountadd.sh #!/bin/bash # This shell script will create amount of linux login accounts for you. # 1. check the "accountadd.txt" file exist? you must create that file manually. # one account name one line in the "accountadd.txt" file. # 2. use openssl to create users password. # 3. User must change his password in his first login. # 4. more options check the following url: # http://linux.vbird.org/linux_basic/0410accountmanager.php#manual_amount # 2015/07/22 VBird export PATH=/bin:/sbin:/usr/bin:/usr/sbin# 0. userinput usergroup="" # if your account need secondary group, add here. pwmech="openssl" # "openssl" or "account" is needed. homeperm="no" # if "yes" then I will modify home dir permission to 711# 1. check the accountadd.txt file action="${1}" # "create" is useradd and "delete" is userdel. if [ ! -f accountadd.txt ]; thenecho "There is no accountadd.txt file, stop here."exit 1 fi[ "${usergroup}" != "" ] && groupadd -r ${usergroup} rm -f outputpw.txt usernames=$(cat accountadd.txt)for username in ${usernames} #迭代文件內(nèi)名字 重點 docase ${action} in"create")[ "${usergroup}" != "" ] && usegrp=" -G ${usergroup} " || usegrp=""useradd ${usegrp} ${username} # 新增帳號[ "${pwmech}" == "openssl" ] && usepw=$(openssl rand -base64 6) || usepw=${username}echo ${usepw} | passwd --stdin ${username} # 建立密碼chage -d 0 ${username} # 強制登入修改密碼[ "${homeperm}" == "yes" ] && chmod 711 /home/${username}echo "username=${username}, password=${usepw}" >> outputpw.txt;;"delete")echo "deleting ${username}"userdel -r ${username};;*)echo "Usage: $0 [create|delete]";;esac done第十四章 磁盤配額 與 高級文件系統(tǒng)
quota配額
? ? ? ?適用情況:
quota 比較常使用的幾個情況是:
- 針對 WWW server ,例如:每個人的網(wǎng)頁空間的容量限制!
- 針對 mail server,例如:每個人的郵件空間限制。
- 針對 file server,例如:每個人最大的可用網(wǎng)路硬碟空間 (教學(xué)環(huán)境中最常見!)
上頭講的是針對網(wǎng)路服務(wù)的設(shè)計,如果是針對 Linux 系統(tǒng)主機上面的設(shè)定那麼使用的方向有底下這一些:主機上三種(本篇主要講這個
- 限制某一群組所能使用的最大磁碟配額 (使用群組限制):
你可以將你的主機上的使用者分門別類,有點像是目前很流行的付費與免付費會員制的情況, 你比較喜好的那一群的使用配額就可以給高一些!呵呵! ^_^...
? - 限制某一使用者的最大磁碟配額 (使用使用者限制):
在限制了群組之後,你也可以再繼續(xù)針對個人來進行限制,使得同一群組之下還可以有更公平的分配!
? - 限制某一目錄 (directory, project---xfs新功能) 的最大磁碟配額:
在舊版的 CentOS 當中,使用的預(yù)設(shè)檔案系統(tǒng)為 EXT 家族,這種檔案系統(tǒng)的磁碟配額主要是針對整個檔案系統(tǒng)來處理,所以大多針對『掛載點』進行設(shè)計。 新的 xfs 可以使用 project 這種模式,就能夠針對個別的目錄 (非檔案系統(tǒng)喔) 來設(shè)計磁碟配額耶!超棒的!
-----xfs_quota命令是整合在文件系統(tǒng)內(nèi)的,比UNIX工具快速,本章用這個命令做為列子
? ? ? ? 需要注意:
????????ext僅能支持整個文件系統(tǒng)
? ? ? ? 內(nèi)核必須支持磁盤配額 且 只對一般用戶有效(無法限制root
? ? ? ? 若啟用SELinux,則不是所有目錄都可以設(shè)置配額
? ? ? ? 需要先確定文件系統(tǒng),不同文件系統(tǒng)處理格式不太一樣(本章用xfs
xfs--- >?
? ? ? ? 1 可以針對用戶,用戶組,目錄(用戶組與目錄不能同時設(shè)置
? ? ? ? 2? 限制inode數(shù)量(限制文件數(shù)量) /? 限制block數(shù)量(磁盤容量-常見)
? ? ? ? 3 軟限制soft 與 硬限制hard :當達到軟限制時會警告,若警告時間內(nèi)(寬限時間內(nèi))還超過soft則 soft==hard 即被鎖定
? ? ? ? 4 對于不同文件系統(tǒng)目錄想要統(tǒng)一限額,可以將另一個目錄完整的移到xfs文件系統(tǒng)目錄如(/home)-->
將 /var/spool/mail 這個目錄完整的移動到 /home 底下; 利用 ln -s /home/mail /var/spool/mail 來建立連結(jié)資料; 將 /home 進行 quota 限額設(shè)定Linux ln 命令 | 菜鳥教程
xfs_quota
? ? ? ? 流程: 假如xfs文件系統(tǒng)掛載在 /home這個目錄下??
????????下文?【】表示可加可不加
? ? ? ? ? ? ? ? 1 通過重新掛載來啟動quota功能-->通過/etc/fstab 文件,修改默認掛載內(nèi)容(第四欄--文件掛載參數(shù))
[root@study ~]# vim /etc/fstab /dev/mapper/centos-home /home xfs defaults,usrquota,grpquota 0 0 # 第四欄加上usrquota/grpquota/prjquota(注意目錄與用戶組不能同時加[root@study ~]# umount /home [root@study ~]# mount -a? ? ? ? ? ? ? ? 2 利用命令查看
[root@study ~]# xfs_quota -x -c "指令" [掛載點] 選項與參數(shù): -x :專家模式,後續(xù)才能夠加入 -c 的指令參數(shù)喔! -c :後面加的就是指令,這個小節(jié)我們先來談?wù)剶?shù)據(jù)回報的指令 指令:print :單純的列出目前主機內(nèi)的檔案系統(tǒng)參數(shù)等資料df :與原本的 df 一樣的功能,可以加上 -b (block) -i (inode) -h (加上單位) 等report:列出目前的 quota 項目,有 -ugr (user/group/project) 及 -bi 等資料state :說明目前支援 quota 的檔案系統(tǒng)的資訊,有沒有起動相關(guān)項目等? ? ? ? ? ? ? ?3? 設(shè)置方式
針對用戶/用戶組配置設(shè)置方式? ? ?:
[root@study ~]# xfs_quota -x -c "limit [-ug] b[soft|hard]=N i[soft|hard]=N name" # name可以是用戶名,用戶組名,創(chuàng)建的project名 [root@study ~]# xfs_quota -x -c "timer [-ug] [-bir] Ndays" 選項與參數(shù): limit :實際限制的項目,可以針對 user/group 來限制,限制的項目有bsoft/bhard : block 的 soft/hard 限制值,可以加單位isoft/ihard : inode 的 soft/hard 限制值name : 就是用戶/群組的名稱啊! timer :用來設(shè)定 寬限時間,也是可以針對 user/group 以及 block/inode 設(shè)定????????
針對目錄設(shè)置方式:
? ? ? ? ?1 先指定好 目錄名稱(--寫入/etc/projects)和 目錄標識符號(隨便標識符--寫入/etc/projid)寫進對應(yīng)文件內(nèi)!
# 2.1 指定專案識別碼與目錄的對應(yīng)在 /etc/projects [root@study ~]# echo "11:/home/myquota" >> /etc/projects# 2.2 規(guī)範專案名稱與識別碼的對應(yīng)在 /etc/projid [root@study ~]# echo "myquotaproject:11" >> /etc/projid? ? ? ? 2? 初始化名稱
xfs_quota -x -c "project -s myquotaproject"? ? ? ? 3 設(shè)置
[root@study ~]# xfs_quota -x -c "limit -p bsoft=450M bhard=500M myquotaproject" /home [root@study ~]# xfs_quota -x -c "report -pbih " /home Project quota on /home (/dev/mapper/centos-home)Blocks Inodes Project ID Used Soft Hard Warn/Grace Used Soft Hard Warn/Grace ---------- --------------------------------- --------------------------------- myquotaproject 0 450M 500M 00 [------] 1 0 0 00 [------]xfs額外管理 與一覽表?
- disable:暫時取消 quota 的限制,但其實系統(tǒng)還是在計算 quota 中,只是沒有管制而已!應(yīng)該算最有用的功能囉!
- enable:就是回復(fù)到正常管制的狀態(tài)中,與 disable 可以互相取消、啟用!
- off:完全關(guān)閉 quota 的限制,使用了這個狀態(tài)後,你只有卸載再重新掛載才能夠再次的啟動 quota 喔!也就是說, 用了 off 狀態(tài)後,你無法使用 enable 再次復(fù)原 quota 的管制喔!注意不要亂用這個狀態(tài)!一般建議用 disable 即可,除非你需要執(zhí)行 remove 的動作!
- remove:必須要在 off 的狀態(tài)下才能夠執(zhí)行的指令~這個 remove 可以『移除』quota 的限制設(shè)定,例如要取消 project 的設(shè)定, 無須重新設(shè)定為 0 喔!只要 remove -p 就可以了!
軟件磁盤陣列RAID
RAID種類
RAID0:
? ? ? ? 一個數(shù)據(jù)同時寫入n快磁盤(等量分配),讀取寫入速度都是N倍;?無備份
RAID1:
? ? ? ? 一個數(shù)據(jù)同時寫入N份磁盤中,真實有效的數(shù)據(jù)只有一份,其他N-1全是備份
RAID10==1+0
? ? ? ? 先組成RAID1,再組成RAID0
RAID5/6
? ? ? ? 5可以通過邏輯校驗支持一個磁盤的損壞修復(fù),6可以支持兩個
硬件/軟件RAID
? ? ? ? 硬件有專門的磁盤陣列卡,能負責運算,速度快但價錢較高;
? ? ? ? 所以一般用軟件模擬,可以以分區(qū)或磁盤為單位,很方便;
RAID設(shè)置mdadm
????????multiple devices ADM(administration)
流程:下文的/dev/md0 就代表一個RAID整體,而內(nèi)部由具體分區(qū)/磁盤組合而成
?1 設(shè)置RAID:默認軟件模擬RAID設(shè)備名為 /dev/md0(下文create第二欄定義的名字)
? ? ? ??? ?mdadm --create
[root@study ~]# mdadm --create /dev/md[0-9] --auto=yes --level=[015] --chunk=NK \ > --raid-devices=N --spare-devices=N /dev/sdx /dev/hdx... 選項與參數(shù): --create :為建立 RAID 的選項; --auto=yes :決定建立後面接的軟體磁碟陣列裝置,亦即 /dev/md0, /dev/md1... --chunk=Nk :決定這個裝置的 chunk 大小,也可以當成 stripe 大小,一般是 64K 或 512K。 --raid-devices=N :使用幾個磁碟 (partition) 作為磁碟陣列的裝置 --spare-devices=N :使用幾個磁碟作為備用 (spare) 裝置 --level=[015] :設(shè)定這組磁碟陣列的等級。支援很多,不過建議只要用 0, 1, 5 即可 --detail :後面所接的那個磁碟陣列裝置的詳細資訊2??查看RAID詳細情況 兩種方法
[root@study ~]# mdadm --detail /dev/md0 #第一種 cat /proc/mdstat ##第二種 查看文件 顯示出以下內(nèi)容 Personalities : [raid6] [raid5] [raid4] md0 : active raid5 vda8[5] vda9[4](S) vda7[2] vda6[1] vda5[0] <==第一行3142656 blocks super 1.2 level 5, 256k chunk, algorithm 2 [4/4] [UUUU] <==第二---文件內(nèi)容
第一行部分:指出 md0 為 raid5 ,且使用了 vda8, vda7, vda6, vda5 等四顆磁碟裝置。每個裝置後面的中括號 [] 內(nèi)的數(shù)字為此磁碟在 RAID 中的順序 (RaidDevice);至於 vda9 後面的 [S] 則代表 vda9 為 spare 之意。
第二行:此磁碟陣列擁有 3142656 個block(每個 block 單位為 1K),所以總?cè)萘考s為 3GB, 使用 RAID 5 等級,寫入磁碟的小區(qū)塊 (chunk) 大小為 256K,使用 algorithm 2 磁碟陣列演算法。 [m/n] 代表此陣列需要 m 個裝置,且 n 個裝置正常運作。因此本 md0 需要 4 個裝置且這 4 個裝置均正常運作。 後面的 [UUUU] 代表的是四個所需的裝置 (就是 [m/n] 裡面的 m) 的啟動情況,U 代表正常運作,若為 _ 則代表不正常。
3? 開機自動啟動RAID并自動掛載
? ? ??? ?/etc/mdadm.conf配置文件
[root@study ~]# mdadm --detail /dev/md0 | grep -i uuidUUID : 2256da5f:4870775e:cf2fe320:4dfabbc6 # 查到本身的uuid識別碼(與系統(tǒng)的不同# 設(shè)置 mdadm.conf 文件 ----- 寫入上述的uuid [root@study ~]# vim /etc/mdadm.conf ARRAY /dev/md0 UUID=2256da5f:4870775e:cf2fe320:4dfabbc6# 查詢RAID設(shè)備UUID [root@study ~]# blkid /dev/md0 /dev/md0: UUID="494cb3e1-5659-4efc-873d-d0758baec523" TYPE="xfs"#將blkid查到的UUID 寫入自動掛載文件 [root@study ~]# vim /etc/fstab UUID=494cb3e1-5659-4efc-873d-d0758baec523 /srv/raid xfs defaults 0 0[root@study ~]# umount /dev/md0; mount -a [root@study ~]# df -Th /srv/raid Filesystem Type Size Used Avail Use% Mounted on /dev/md0 xfs 3.0G 111M 2.9G 4% /srv/raid # 你得確定可以順利掛載,並且沒有發(fā)生任何錯誤!4? 關(guān)閉RAID功能?
? ? ? ? 由于模擬RAID功能,實際上還是用到了具體的分區(qū)或磁盤,可能發(fā)生混亂;
# 1. 先卸載且刪除設(shè)定檔內(nèi)與這個 /dev/md0 有關(guān)的設(shè)定: [root@study ~]# umount /srv/raid [root@study ~]# vim /etc/fstab UUID=494cb3e1-5659-4efc-873d-d0758baec523 /srv/raid xfs defaults 0 0 # 將這一行刪除掉!或者是註解掉也可以!# 2. 先覆蓋掉 RAID 的 metadata 以及 XFS 的 superblock,才關(guān)閉 /dev/md0 的方法 [root@study ~]# dd if=/dev/zero of=/dev/md0 bs=1M count=50 [root@study ~]# mdadm --stop /dev/md0 mdadm: stopped /dev/md0 <==關(guān)閉整個RAID #填充具體分區(qū)/磁盤 [root@study ~]# dd if=/dev/zero of=/dev/vda5 bs=1M count=10 [root@study ~]# dd if=/dev/zero of=/dev/vda6 bs=1M count=10 [root@study ~]# dd if=/dev/zero of=/dev/vda7 bs=1M count=10 [root@study ~]# dd if=/dev/zero of=/dev/vda8 bs=1M count=10 [root@study ~]# dd if=/dev/zero of=/dev/vda9 bs=1M count=10[root@study ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] unused devices: <none> <==看吧!確實不存在任何陣列裝置![root@study ~]# vim /etc/mdadm.conf #ARRAY /dev/md0 UUID=2256da5f:4870775e:cf2fe320:4dfabbc6 # 一樣啦!刪除他或是註解他!? ? 注意:要卸載設(shè)備+刪除fstab內(nèi)容(取消自動掛載)
? ? ? ? ? ? ? ? ?DD命令? 覆蓋 實際分區(qū)或磁盤內(nèi)容:相當于重新規(guī)劃內(nèi)容,不然會自動建立
Linux dd 命令 | 菜鳥教程
???????????????mdadm --stop
??????????????刪除/etc/mdadm.conf內(nèi)容
5? 模擬出錯磁盤與 加入新磁盤?
? ? ? ? 因為有一個熱備份磁盤,我們可以讓一個磁盤無效以達到自動啟動熱備份磁盤的場景
? ? ? ??mdadm --manage?
[root@study ~]# mdadm --manage /dev/md[0-9] [--add 裝置] [--remove 裝置] [--fail 裝置] 選項與參數(shù):--add :會將後面的裝置加入到這個 md 中! --remove :會將後面的裝置由這個 md 中移除 --fail :會將後面的裝置設(shè)定成為出錯的狀態(tài)--人為設(shè)置為出錯? ? ? ? 出錯磁盤刪除并加入:
? ? ????裝置代表的是md0(我們軟件模擬的整個RIAD)內(nèi)部的具體分區(qū)/磁盤組成
LVM
? ? ? ? Logical Volume Manager 重點在于可以彈性調(diào)整容量
流程:
物理分區(qū)-->pv(組成LVM底層物理卷)--->vg(組成邏輯卷組,規(guī)定pe大小)-->lv(vg內(nèi)分區(qū))-->格式化文件系統(tǒng)
物理分區(qū)階段:
? ? ? ? 利用gdisk等第七章工具分出物理區(qū)
pv:
LVM最基本組成部分
- pvcreate :將實體 partition 建立成為 PV ;
- pvscan :搜尋目前系統(tǒng)裡面任何具有 PV 的磁碟;
- pvdisplay :顯示出目前系統(tǒng)上面的 PV 狀態(tài);
- pvremove :將 PV 屬性移除,讓該 partition 不具有 PV 屬性。
VG:
此階段指定LVM最小單位PE的大小(類似于物理塊)
邏輯卷組VG可以自己取名字
- vgcreate :就是主要建立 VG 的指令啦!他的參數(shù)比較多,等一下介紹。
- vgscan :搜尋系統(tǒng)上面是否有 VG 存在?
- vgdisplay :顯示目前系統(tǒng)上面的 VG 狀態(tài);
- vgextend :在 VG 內(nèi)增加額外的 PV ;
- vgreduce :在 VG 內(nèi)移除 PV;
- vgchange :設(shè)定 VG 是否啟動 (active);
- vgremove :刪除一個 VG?
LV?
? ? ? ? 類似于磁盤的分區(qū),LV里包含很多PE,總?cè)萘康檬荘E的整數(shù)倍
- lvcreate :建立 LV 啦!
- lvscan :查詢系統(tǒng)上面的 LV ;
- lvdisplay :顯示系統(tǒng)上面的 LV 狀態(tài)啊!
- lvextend :在 LV 裡面增加容量!
- lvreduce :在 LV 裡面減少容量;
- lvremove :刪除一個 LV !
- lvresize :對 LV 進行容量大小的調(diào)整!
格式化磁盤階段
? ? ? ? 用mkfs等命令格式化這個分區(qū)就行啦
# 1. 格式化、掛載與觀察我們的 LV 吧! [root@study ~]# mkfs.xfs /dev/vbirdvg/vbirdlv <==注意 LV 全名! [root@study ~]# mkdir /srv/lvm [root@study ~]# mount /dev/vbirdvg/vbirdlv /srv/lvm [root@study ~]# df -Th /srv/lvm Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vbirdvg-vbirdlv xfs 2.0G 33M 2.0G 2% /srv/lvm[root@study ~]# cp -a /etc /var/log /srv/lvm [root@study ~]# df -Th /srv/lvm Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vbirdvg-vbirdlv xfs 2.0G 152M 1.9G 8% /srv/lvm <==確定是可用的啊!放大LVM容量:
? ? ? ? 其實就是擴充LV,所以VG要有剩余空間(也就是--scan時?in no VG: 的內(nèi)容)
? ? ? ? LVM只是提供一種可擴展機制,實際還是要根據(jù)此LV的文件操作系統(tǒng);
-> xfs只能擴大,ext4可以擴大縮小;
過程:擴大完會自動調(diào)整超級快信息等,無需重新mount
vgdisplay vbirdvg #查看有多少剩余VG空間 lvresize -L +500M /dev/vbirdvg/vbirdlv #LV分區(qū)增加500MLVM池--?LVM thin Volume:
???????? ? 實際也就是劃分一個LV區(qū),但是此區(qū)又可以劃分給其他LV;
LV與此LV池子關(guān)聯(lián)后;LV用多少才到此池子里取多少容量---可以模擬很大容量的LV,但不能超過池子總?cè)萘?#xff1b;
建立:-T
[root@study ~]# lvcreate -L 1G -T vbirdvg/vbirdtpool # 最重要的建置指令? ? ?
關(guān)聯(lián)(分配給新LV):
?-T很重要:關(guān)聯(lián)
-v 10G:可以遠超VG總?cè)萘?#xff0c;但只是虛擬的;不要越界關(guān)聯(lián)的LV池的容量,很危險
lvcreate -V 10G -T vbirdvg/vbirdtpool -n vbirdthin1????????
磁盤快照功能
? ? ? ? 用pe創(chuàng)建一個快照區(qū)(也是一個分區(qū),可以掛載);當公用區(qū)域被修改時,修改前的內(nèi)容會保存(備份)到快照區(qū)內(nèi)--起到備份的作用;
? ? ? ? 快照區(qū)與被快照區(qū)必須要在同一個VG上;
制作:
lvcreate -s -l 26 -n vbirdsnap1 /dev/vbirdvg/vbirdlvLogical volume "vbirdsnap1" created # 上述的指令中最重要的是那個 -s 的選項!代表是 snapshot 快照功能之意! # -n 後面接快照區(qū)的裝置名稱, /dev/.... 則是要被快照的 LV 完整檔名。 # -l 後面則是接使用多少個 PE 來作為這個快照區(qū)使用。 ---> -n 快照區(qū)名字 被快照區(qū)名字? ? ? ? 但此區(qū)與被快照區(qū)UUID是相同的因此要使用 -o nouuid 命令
[root@study ~]# mkdir /srv/snapshot1 [root@study ~]# mount -o nouuid /dev/vbirdvg/vbirdsnap1 /srv/snapshot1 [root@study ~]# df -Th /srv/lvm /srv/snapshot1恢復(fù):
# xfsdump -l 0 -L lvm1 -M lvm1 -f /home/lvm.dump /srv/snapshot1LVM命令總覽與刪除:
刪除LVM
第十五章? ?計劃任務(wù)
? ? ? ? 分為只執(zhí)行一次的任務(wù)at 和定時(循環(huán))執(zhí)行的任務(wù)cron
單次任務(wù)at
?只執(zhí)行一次任務(wù)?
啟動atd服務(wù)與相關(guān)文件
? ? ? ? 必須要啟動atd服務(wù) 來支持at命令的允許
[root@study ~]# systemctl restart atd # 重新啟動 atd 這個服務(wù) [root@study ~]# systemctl enable atd # 讓這個服務(wù)開機就自動啟動 [root@study ~]# systemctl status atd # 查閱一下 atd 目前的狀態(tài) atd.service - Job spooling toolsLoaded: loaded (/usr/lib/systemd/system/atd.service; enabled) # 是否開機啟動Active: active (running) since Thu 2015-07-30 19:21:21 CST; 23s ago # 是否正在運作中Main PID: 26503 (atd)CGroup: /system.slice/atd.service└─26503 /usr/sbin/atd -f? ? ? ? /var/spool/at/:at執(zhí)行時,寫入目錄內(nèi)
? ? ? ? /etc/at.allwo :允許執(zhí)行的用戶名單(沒有的用戶則不能使用
? ? ? ? /etc/at.deny :at.allwo不存在時查看此文件,禁止使用的用戶名單(存在的用戶不能使用;
???????????????????????????????若都不存在只有root才能使用at
at
? ? ? ? 輸入完時限后按回車輸入任務(wù)內(nèi)容,EOF結(jié)束
[root@study ~]# at [-mldv] TIME [root@study ~]# at -c 工作號碼 選項與參數(shù): -m :當 at 的工作完成後,即使沒有輸出訊息,亦以 email 通知使用者該工作已完成。 -l :at -l 相當於 atq,列出目前系統(tǒng)上面的所有該使用者的 at 排程; -d :at -d 相當於 atrm ,可以取消一個在 at 排程中的工作; -v :可以使用較明顯的時間格式列出 at 排程中的工作列表; -c :可以列出後面接的該項工作的實際指令內(nèi)容。TIME:時間格式,這裡可以定義出『什麼時候要進行 at 這項工作』的時間,格式有:HH:MM ex> 04:00在今日的 HH:MM 時刻進行,若該時刻已超過,則明天的 HH:MM 進行此工作。HH:MM YYYY-MM-DD ex> 04:00 2015-07-30強制規(guī)定在某年某月的某一天的特殊時刻進行該工作!HH:MM[am|pm] [Month] [Date] ex> 04pm July 30也是一樣,強制在某年某月某日的某時刻進行!HH:MM[am|pm] + number [minutes|hours|days|weeks]ex> now + 5 minutes ex> 04pm + 3 days就是說,在某個時間點『再加幾個時間後』才進行。注意點:
? ? ? ? 1 會使用at shell(新shell)來執(zhí)行任務(wù)-->標準輸出or標準錯誤輸出都會發(fā)送到執(zhí)行者的mailbox中;
echo "hallo" > /dev/tty1 顯示到自己的終端? ? ? ? 2 最好使用絕對命令
? ? ? ? 3 可以脫機來執(zhí)行,不依賴于當前bash環(huán)境
? ? ? ? ? ? ? ? ? ? ? ??
atq/atrm查看與刪除
[root@study ~]# atq [root@study ~]# atrm (jobnumber)範例一:查詢目前主機上面有多少的 at 工作排程? [root@study ~]# atq 3 Tue Aug 4 23:00:00 2015 a root # 上面說的是:『在 2015/08/04 的 23:00 有一項工作,該項工作指令下達者為 # root』而且,該項工作的工作號碼 (jobnumber) 為 3 號喔!範例二:將上述的第 3 個工作移除! [root@study ~]# atrm 3 [root@study ~]# atq # 沒有任何資訊,表示該工作被移除了!batch與uptime任務(wù)負載
? ? ? ? 任務(wù)負載指同時執(zhí)行的任務(wù)數(shù)
uptime查看平均負載
uptime 20:21 up 2 days, 2:13, 2 users, load averages: 2.70 2.80 2.63 最后三組數(shù)字分別代表:1分鐘/5分鐘/15分鐘 的平均負載batch:當任務(wù)負載小于0.8時才執(zhí)行 與at一樣,但不支持時間參數(shù)了;
jobs/kill
?找出后臺任務(wù)/終止后臺任務(wù)?
?暫略
循環(huán)任務(wù)cron
? ? ? ? 利用cron服務(wù)提供的crontab命令來周期性的執(zhí)行任務(wù)
cron相關(guān)文件
? ? ? ?/var/spool/cron/用戶名:crontab命令編輯個人任務(wù)時會寫入這個文件內(nèi)
????????/etc/crontab:編輯關(guān)于系統(tǒng)任務(wù)時,可以直接寫入此文件;? cron服務(wù)每隔一分鐘會讀取??/etc/crontab和?/var/spool/cron/用戶名 這兩個文件
* * * * * user-name command to be executed 與crontab內(nèi)容不同,多了username,指定執(zhí)行的用戶??????
??????? /etc/cron.d/*: 在此目錄下的檔案是『crontab 的設(shè)定檔腳本』。
[root@study ~]# cat /etc/cron.d/0hourly # Run the hourly jobs SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root 01 * * * * root run-parts /etc/cron.hourly ----> run——parts腳本 去執(zhí)行后面文件里面的命令?????
???????/etc/cron.hourly:存放著每小時內(nèi)隨機執(zhí)行的腳本命令,必須是能被直接執(zhí)行的指令腳本,而不是分、時、日、月、周的設(shè)定值;也有/etc/cron.daily/等;
crontab 命令
[root@study ~]# crontab [-u username] [-l|-e|-r] 選項與參數(shù): -u :只有 root 才能進行這個任務(wù),亦即幫其他使用者建立/移除 crontab 工作排程; -e :編輯 crontab 的工作內(nèi)容 -l :查閱 crontab 的工作內(nèi)容 -r :移除所有的 crontab 的工作內(nèi)容,若僅要移除一項,請用 -e 去編輯。範例一:用 dmtsai 的身份在每天的 12:00 發(fā)信給自己 [dmtsai@study ~]$ crontab -e # 此時會進入 vi 的編輯畫面讓您編輯工作!注意到,每項工作都是一行。 0 12 * * * mail -s "at 12:00" dmtsai < /home/dmtsai/.bashrc #分 時 日 月 週 |<==============指令串========================>|? ? ?
? ??:???????時間是反過來的
? ? ? ? ? ? ? ? 日月和星期不能同時使用
? ? ? ? ? ? ? ? 想刪除一條任務(wù)只能 -e手動編輯刪除 -r是刪除所有
? ? ? ? ? ? ? ? */5 是一個整體
anacron 執(zhí)行過期的cron
? ? ? ? 通過對比 讀取配置文件獲得寬限逾期時間? 再將?時間戳(上次一次執(zhí)行ana的時間)?與當前時間進行做差 ,若差值超過寬限時間 ,則執(zhí)行配置文件的命令串內(nèi)容
? ? ? ? 配置文件:/etc/anacrontab
7 25 cron.weekly nice run-parts /etc/cron.weekly @monthly 45 cron.monthly nice run-parts /etc/cron.monthly 寬限天數(shù) 延遲時間 工作名稱定義 實際要進行的指令串 # 天數(shù)單位為天;延遲時間單位為分鐘;工作名稱定義可自訂,指令串則通常與 crontab 的設(shè)定相同 #延遲時間:指 執(zhí)行命令串時為防止繁忙,規(guī)定的最大延遲執(zhí)行時間 #最后一欄就是執(zhí)行的命令串? ? ? ? 也就是說如果將任務(wù)放在?/etc/cron.weekly等目錄下 逾期了也會執(zhí)行
? ? ? ? 時間戳:/var/spool/anacron/*
:::::::::::::: /var/spool/anacron/cron.daily :::::::::::::: 20150731? ? ? ? anacrontab命令:
[root@study ~]# anacron [-sfn] [job].. [root@study ~]# anacron -u [job].. 選項與參數(shù): -s :開始一連續(xù)的執(zhí)行各項工作 (job),會依據(jù)時間記錄檔的資料判斷是否進行; -f :強制進行,而不去判斷時間記錄檔的時間戳記; -n :立刻進行未進行的任務(wù),而不延遲 (delay) 等待時間; -u :僅更新時間記錄檔的時間戳記,不進行任何工作。 job :由 /etc/anacrontab 定義的各項工作名稱。第十六章 進程管理與 SELinux
進程PID/PPID?
? ? ? ? 進程是動態(tài)的程序 不在贅述;當觸發(fā)一個事件時(如執(zhí)行一個命令) ,系統(tǒng)會將他定義為一個進程,并賦予一個PID(process ID),并設(shè)置PID相關(guān)權(quán)限;
? ? ? ? 每個用戶觸發(fā)事件時,獲得的PID和對應(yīng)的權(quán)限也不同;
ps??
ps -l 查看進程相關(guān)信息父進程與子進程
? ? ? ? 子進程繼承父進程的一些屬性(fork-and-exec),子進程的PPID為父進程的PID
例:
? ? ? ? 父進程PID14384? 調(diào)用su - 命令?
? ? ? ? 產(chǎn)生的子環(huán)境再查看,CMD :su - 那一行 PPID赫然是14384;
服務(wù):
????????常駐在記憶體當中的程序通常都是負責一些系統(tǒng)所提供的功能以服務(wù)使用者各項任務(wù),因此這些常駐程式就會被我們稱為:服務(wù) (daemon)。有些服務(wù)會啟動監(jiān)聽端口
Linux多人任務(wù)相關(guān)
? ? ? ? 由于cpu的頻率很高,當多個用戶使用時,就好像專門為自己服務(wù)一樣;
? ? ? ? 每個人登陸bash時,獲取的shell PID是不同的;
? ? ? ? linux會默認啟動六個終端登錄環(huán)境進程,也即就是(tty1-tty6)
? ? ? ? 需要考慮資源管理,畢竟cpu總資源是有限的
任務(wù)管理jobs
? ? ? ? 每個任務(wù)都是當前bash的子進程 ,父進程無法管理別人的子進程;所以tty1的環(huán)境無法管理tty2的bash;(root 也不行,不是權(quán)限的問題);
????????
jobs任務(wù)管理及相關(guān)命令
? ? ? ? 由于bash前臺(有命令提示符可供輸入的環(huán)境)只能顯示一個任務(wù),但可以通過操& 放到后臺去暫停s或執(zhí)行r ;
? ? ? ? 后臺中的程序分為執(zhí)行狀態(tài)(必須是脫機的,比如vim就不行)?和? 暫停狀態(tài)
? ? ? ? 一個任務(wù)會配置一個PID;
放到后臺去執(zhí)行:&
命令串 &?列子:
? ? ? ? 顯示完成會提醒的? ? ? ? ?
? ? ? ? ???但輸出的消息stdout或stderr還是會輸出到前臺,最好通過重定向流避免影響前臺;
放到后臺中去暫停:control+z
? ? ? ? 會暫停到后臺去,只能暫停前臺的任務(wù),無法影響后臺中的任務(wù)
將后臺中暫停的任務(wù)啟動:bg
bg %任務(wù)號查看后臺任務(wù)jobs
[root@study ~]# jobs [-lrs] 選項與參數(shù): -l :除了列出 job number 與指令串之外,同時列出 PID 的號碼; -r :僅列出正在背景 run 的工作; -s :僅列出正在背景當中暫停 (stop) 的工作。??:?
+號表示最近的任務(wù) - 表示第二近的任務(wù)?
?j結(jié)尾有&的表示在運行中國
將任務(wù)拿到前臺來處理:fg--foreground
[root@study ~]# fg %jobnumber 選項與參數(shù): %jobnumber :jobnumber 為工作號碼(數(shù)字)。注意,那個 % 是可有可無的! MACOS 需要加數(shù)字 不加數(shù)字 默認最近的任務(wù)(jobs 中 +號的任務(wù))kill
? ? ? ? 默認接進程PID ,%才表示任務(wù)號;
? ? ? ? 可以配合signal有很多作用,sig和數(shù)字是對應(yīng)的 相當于簡化就;可以 man signal查看
[root@study ~]# kill -signal %jobnumber [root@study ~]# kill -l 選項與參數(shù): -l :這個是 L 的小寫,列出目前 kill 能夠使用的訊號 (signal) 有哪些? signal :代表給予後面接的那個工作什麼樣的指示囉!用 man 7 signal 可知:-1 :重新讀取一次參數(shù)的設(shè)定檔 (類似 reload);-2 :代表與由鍵盤輸入 [ctrl]-c 同樣的動作;-9 :立刻強制刪除一個工作;-15:以正常的程序方式終止一項工作。與 -9 是不一樣的。脫機管理問題
? ? ? ? at ,crontab 都是交給系統(tǒng)后臺管理的 ,就算退出終端bash也能正常運行
? ? ? ? 而 jobs查看的都是依托于bash的后臺(父進程bash沒了就都沒了)
讓任務(wù)可以脫機運行的兩種情況:
? ? ? ? 1 利用at
? ? ? ? 2 利用命令 nohup--no hang up
[root@study ~]# nohup [指令與參數(shù)] <==在終端機前景中工作 [root@study ~]# nohup [指令與參數(shù)] & <==在終端機背景中工作? 在默認情況下(非重定向時),信息(如完成通知的信息)會輸出一個名叫 nohup.out 的文件到當前目錄下,如果當前目錄的 nohup.out 文件不可寫,輸出重定向到?$HOME/nohup.out?文件中。
進程管理 ps
ps命令詳解
? ? ? ? 有很多選項,我們主要用到兩個:aux 與 -al
[root@study ~]# ps aux <==觀察系統(tǒng)所有的程序資料 [root@study ~]# ps -lA <==也是能夠觀察所有系統(tǒng)的資料 [root@study ~]# ps axjf <==連同部分程序樹狀態(tài) 選項與參數(shù): -A :所有的 process 均顯示出來,與 -e 具有同樣的效用; -a :不與 terminal 有關(guān)的所有 process ; -u :有效使用者 (effective user) 相關(guān)的 process ; x :通常與 a 這個參數(shù)一起使用,可列出較完整資訊。 輸出格式規(guī)劃: l :較長、較詳細的將該 PID 的的資訊列出; j :工作的格式 (jobs format) -f :做一個更為完整的輸出。ps -l:只顯示與自己bash有關(guān)的進程
範例一:將目前屬於您自己這次登入的 PID 與相關(guān)資訊列示出來(只與自己的 bash 有關(guān)) [root@study ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 14830 13970 0 80 0 - 52686 poll_s pts/0 00:00:00 sudo 4 S 0 14835 14830 0 80 0 - 50511 wait pts/0 00:00:00 su 4 S 0 14836 14835 0 80 0 - 29035 wait pts/0 00:00:00 bash 0 R 0 15011 14836 0 80 0 - 30319 - pts/0 00:00:00 ps-- >
- F:代表這個程序旗標 (process flags),說明這個程序的總結(jié)權(quán)限,常見號碼有:
- 若為 4 表示此程序的權(quán)限為 root ;
- 若為 1 則表示此子程序僅進行複製(fork)而沒有實際執(zhí)行(exec)。
- S:代表這個程序的狀態(tài) (STAT),主要的狀態(tài)有:
- R (Running):該程式正在運作中;
- S (Sleep):該程式目前正在睡眠狀態(tài)(idle),但可以被喚醒(signal)。
- D :不可被喚醒的睡眠狀態(tài),通常這支程式可能在等待 I/O 的情況(ex>列印)
- T :停止狀態(tài)(stop),可能是在工作控制(背景暫停)或除錯 (traced) 狀態(tài);
- Z (Zombie):僵尸進程,程序已經(jīng)終止但卻無法被移除至記憶體外。【命令后面接上<defunct> 時就代表是僵尸進程】不要盲目的kill,可以通過rboot命令
- UID/PID/PPID:代表『此程序被該 UID 所擁有/程序的 PID 號碼/此程序的父程序 PID 號碼』
? - C:代表 CPU 使用率,單位為百分比;
? - PRI/NI:Priority/Nice 的縮寫,代表此程序被 CPU 所執(zhí)行的優(yōu)先順序,數(shù)值越小代表該程序越快被 CPU 執(zhí)行。詳細的 PRI 與 NI 將在下一小節(jié)說明。
? - ADDR/SZ/WCHAN:都與記憶體有關(guān),ADDR 是 kernel function,指出該程序在記憶體的哪個部分,如果是個 running 的程序,一般就會顯示『 - 』 / SZ 代表此程序用掉多少記憶體 / WCHAN 表示目前程序是否運作中,同樣的, 若為 - 表示正在運作中。
? - TTY:登入者的終端機位置,若為遠端登入則使用動態(tài)終端介面 (pts/n);
? - TIME:使用掉的 CPU 時間,注意,是此程序?qū)嶋H花費 CPU 運作的時間,而不是系統(tǒng)時間;
? - CMD:就是 command 的縮寫,造成此程序的觸發(fā)程式之指令為何。
ps aux:顯示所有進程
範例二:列出目前所有的正在記憶體當中的程序: [root@study ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 60636 7948 ? Ss Aug04 0:01 /usr/lib/systemd/systemd ... root 2 0.0 0.0 0 0 ? S Aug04 0:00 [kthreadd] .....(中間省略)..... root 14830 0.0 0.1 210744 3988 pts/0 S Aug04 0:00 sudo su - root 14835 0.0 0.1 202044 2996 pts/0 S Aug04 0:00 su - root 14836 0.0 0.1 116140 2960 pts/0 S Aug04 0:00 -bash .....(中間省略).....--->
- USER:該 process 屬於那個使用者帳號的?
- PID :該 process 的程序識別碼。
- %CPU:該 process 使用掉的 CPU 資源百分比;
- %MEM:該 process 所佔用的實體記憶體百分比;
- VSZ :該 process 使用掉的虛擬記憶體量 (Kbytes)
- RSS :該 process 佔用的固定的記憶體量 (Kbytes)
- TTY :該 process 是在那個終端機上面運作,若與終端機無關(guān)則顯示 ?,另外, tty1-tty6 是本機上面的登入者程序,若為 pts/0 等等的,則表示為由網(wǎng)路連接進主機的程序。
- STAT:該程序目前的狀態(tài),狀態(tài)顯示與 ps -l 的 S 旗標相同 (R/S/T/Z)
- START:該 process 被觸發(fā)啟動的時間;
- TIME :該 process 實際使用 CPU 運作的時間。
- COMMAND:該程序的實際指令為何?
ps -al: 列出所有進程 但格式與ps -l 一樣
ps -axjf/ pstree : 列出進程樹相關(guān)
top實時查看進程
[root@study ~]# top [-d 數(shù)字] | top [-bnp] 選項與參數(shù): -d :後面可以接秒數(shù),就是整個程序畫面更新的秒數(shù)。預(yù)設(shè)是 5 秒; -b :以批次的方式執(zhí)行 top ,還有更多的參數(shù)可以使用喔!通常會搭配資料流重導(dǎo)向來將批次的結(jié)果輸出成為檔案。 -n :與 -b 搭配,意義是,需要進行幾次 top 的輸出結(jié)果。 -p :指定某些個 PID 來進行觀察監(jiān)測而已。 在 top 執(zhí)行過程當中可以使用的按鍵指令:? :顯示在 top 當中可以輸入的按鍵指令;P :以 CPU 的使用資源排序顯示;M :以 Memory 的使用資源排序顯示;N :以 PID 來排序喔!T :由該 Process 使用的 CPU 時間累積 (TIME+) 排序。k :給予某個 PID 一個訊號 (signal)r :給予某個 PID 重新制訂一個 nice 值。q :離開 top 軟體的按鍵。 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND ---> PID :每個 process 的 ID 啦! USER:該 process 所屬的使用者; PR :Priority 的簡寫,程序的優(yōu)先執(zhí)行順序,越小越早被執(zhí)行; NI :Nice 的簡寫,與 Priority 有關(guān),也是越小越早被執(zhí)行; %CPU:CPU 的使用率; %MEM:記憶體的使用率; TIME+:CPU 使用時間的累加;pstree :
? ? ? ? 查看進程樹 macOS用下面命令來安裝
brew install pstreepstree 命令解釋以及安裝 - 碼農(nóng)教程
-------------------
[root@study ~]# pstree [-A|U] [-up] 選項與參數(shù): -A :各程序樹之間的連接以 ASCII 字元來連接; -U :各程序樹之間的連接以萬國碼的字元來連接。在某些終端介面下可能會有錯誤; -p :並同時列出每個 process 的 PID; -u :並同時列出每個 process 的所屬帳號名稱。killall?
kill -SIGnumber $(ps aux | grep '進程名' | grep -v 'grep'| awk '{print $2}') ---找出具體進程的PID --例如關(guān)閉qq這個進程 kill -9 $(ps aux | grep 'QQ' | grep -v 'grep'| awk '{print $2}')? ? ? ? 直接接服務(wù)的名稱,而不用具體的PID,會對應(yīng)此服務(wù)的所有進程;
?------>
[root@study ~]# killall [-iIe] [command name] 選項與參數(shù): -i :interactive 的意思,互動式的,若需要刪除時,會出現(xiàn)提示字元給使用者; -e :exact 的意思,表示『後面接的 command name 要一致』,但整個完整的指令不能超過 15 個字元。 -I :指令名稱(可能含參數(shù))忽略大小寫。列:關(guān)閉QQ
killall -9 QQPriority / Nice 值
? ? ? ? 對應(yīng)PRI,NI值 ; PRI值用戶無法手動調(diào)節(jié),只能調(diào)節(jié)NI值
PRI(new) = PRI(old) + nice??:
- nice 值可調(diào)整的範圍為 -20 ~ 19 ;
- root 可隨意調(diào)整自己或他人程序的 Nice 值,且範圍為 -20 ~ 19 ;
- 一般使用者僅可調(diào)整自己程序的 Nice 值,且範圍僅為 0 ~ 19 (避免一般用戶搶佔系統(tǒng)資源);
- 一般使用者僅可將 nice 值越調(diào)越高,例如本來 nice 為 5 ,則未來僅能調(diào)整到大於 5;
--------分為nice指令 和 renice指令
nice:進程啟動時就指定
[root@study ~]# nice [-n 數(shù)字] command 選項與參數(shù): -n :後面接一個數(shù)值,讓原本的 nice 加上這個新的數(shù)值之意。修改後的最終數(shù)值的範圍則為 -20 ~ 19。renice:更改已經(jīng)啟動的進程nice值(top命令也能改)
[root@study ~]# renice [number] PID 選項與參數(shù): PID :某個程序的 ID 啊!系統(tǒng)資源信息命令free/uname/netstat/dmesg/vmstat
free:查看內(nèi)存使用情況
[root@study ~]# free [-b|-k|-m|-g|-h] [-t] [-s N -c N] 選項與參數(shù): -b :直接輸入 free 時,顯示的單位是 Kbytes,我們可以使用 b(bytes), m(Mbytes)k(Kbytes), 及 g(Gbytes) 來顯示單位喔!也可以直接讓系統(tǒng)自己指定單位 (-h) -t :在輸出的最終結(jié)果,顯示實體記憶體與 swap 的總量。 -s :可以讓系統(tǒng)每幾秒鐘輸出一次,不間斷的一直輸出的意思!對於系統(tǒng)觀察挺有效! -c :與 -s 同時處理~讓 free 列出幾次的意思~uname:查看系統(tǒng)與內(nèi)核有關(guān)信息
[root@study ~]# uname [-asrmpi] 選項與參數(shù): -a :所有系統(tǒng)相關(guān)的資訊,包括底下的資料都會被列出來; -s :系統(tǒng)核心名稱 -r :核心的版本 -m :本系統(tǒng)的硬體名稱,例如 i686 或 x86_64 等; -p :CPU 的類型,與 -m 類似,只是顯示的是 CPU 的類型! -i :硬體的平臺 (ix86)netstat:追蹤網(wǎng)絡(luò)或socket文件
[root@study ~]# netstat -[atunlp] 選項與參數(shù): -a :將目前系統(tǒng)上所有的連線、監(jiān)聽、Socket 資料都列出來 -t :列出 tcp 網(wǎng)路封包的資料 -u :列出 udp 網(wǎng)路封包的資料 -n :不以程序的服務(wù)名稱,以埠號 (port number) 來顯示; -l :列出目前正在網(wǎng)路監(jiān)聽 (listen) 的服務(wù); -p :列出該網(wǎng)路服務(wù)的程序 PID? ? ? ? 分為兩大部分 網(wǎng)絡(luò) 與 系統(tǒng)本地進程相關(guān)?
網(wǎng)絡(luò):
- Proto :網(wǎng)路的封包協(xié)定,主要分為 TCP 與 UDP 封包,相關(guān)資料請參考伺服器篇;
- Recv-Q:非由使用者程式連結(jié)到此 socket 的複製的總 bytes 數(shù);
- Send-Q:非由遠端主機傳送過來的 acknowledged 總 bytes 數(shù);
- Local Address :本地端的 IP:port 情況
- Foreign Address:遠端主機的 IP:port 情況
- State :連線狀態(tài),主要有建立(ESTABLISED)及監(jiān)聽(LISTEN);
本地:接受不同進程發(fā)過來的socket文件,以此來溝通;
- Proto :一般就是 unix 啦;
- RefCnt:連接到此 socket 的程序數(shù)量;
- Flags :連線的旗標;
- Type :socket 存取的類型。主要有確認連線的 STREAM 與不需確認的 DGRAM 兩種;
- State :若為 CONNECTED 表示多個程序之間已經(jīng)連線建立。
- Path :連接到此 socket 的相關(guān)程式的路徑!或者是相關(guān)資料輸出的路徑。
-------
dmesg:分析內(nèi)核產(chǎn)生的信息
vmstat(macOS下是vm_stat):檢查系統(tǒng)資源變化
[root@study ~]# vmstat [-a] [延遲 [總計偵測次數(shù)]] <==CPU/記憶體等資訊 [root@study ~]# vmstat [-fs] <==記憶體相關(guān) [root@study ~]# vmstat [-S 單位] <==設(shè)定顯示數(shù)據(jù)的單位 [root@study ~]# vmstat [-d] <==與磁碟有關(guān) [root@study ~]# vmstat [-p 分割槽] <==與磁碟有關(guān) 選項與參數(shù): -a :使用 inactive/active(活躍與否) 取代 buffer/cache 的記憶體輸出資訊; -f :開機到目前為止,系統(tǒng)複製 (fork) 的程序數(shù); -s :將一些事件 (開機至目前為止) 導(dǎo)致的記憶體變化情況列表說明; -S :後面可以接單位,讓顯示的資料有單位。例如 K/M 取代 bytes 的容量; -d :列出磁碟的讀寫總量統(tǒng)計表 -p :後面列出分割槽,可顯示該分割槽的讀寫總量統(tǒng)計表- 程序欄位 (procs) 的項目分別為:
r :等待運作中的程序數(shù)量;b:不可被喚醒的程序數(shù)量。這兩個項目越多,代表系統(tǒng)越忙碌 (因為系統(tǒng)太忙,所以很多程序就無法被執(zhí)行或一直在等待而無法被喚醒之故)。
? - 記憶體欄位 (memory) 項目分別為:
swpd:虛擬記憶體被使用的容量; free:未被使用的記憶體容量; buff:用於緩衝記憶體; cache:用於快取記憶體。 這部份則與?free?是相同的。
? - 記憶體置換空間 (swap) 的項目分別為:
si:由磁碟中將程序取出的量; so:由於記憶體不足而將沒用到的程序?qū)懭氲酱诺?swap 的容量。 如果 si/so 的數(shù)值太大,表示記憶體內(nèi)的資料常常得在磁碟與主記憶體之間傳來傳去,系統(tǒng)效能會很差!
? - 磁碟讀寫 (io) 的項目分別為:
bi:由磁碟讀入的區(qū)塊數(shù)量; bo:寫入到磁碟去的區(qū)塊數(shù)量。如果這部份的值越高,代表系統(tǒng)的 I/O 非常忙碌!
? - 系統(tǒng) (system) 的項目分別為:
in:每秒被中斷的程序次數(shù); cs:每秒鐘進行的事件切換次數(shù);這兩個數(shù)值越大,代表系統(tǒng)與周邊設(shè)備的溝通非常頻繁! 這些周邊設(shè)備當然包括磁碟、網(wǎng)路卡、時間鐘等。
? - CPU 的項目分別為:
us:非核心層的 CPU 使用狀態(tài); sy:核心層所使用的 CPU 狀態(tài); id:閒置的狀態(tài); wa:等待 I/O 所耗費的 CPU 狀態(tài); st:被虛擬機器 (virtual machine) 所盜用的 CPU 使用狀態(tài) (2.6.11 以後才支援)。
------
特殊文件與進程
SUID/SGID
? ? ? ? 其實就是觸發(fā)進程時,通過此特殊權(quán)限賦予此PID特殊權(quán)限;
/proc/*
? ? ? ? 各個進程都是以 /proc/進程PID? 的形式寫入/proc中的 ,里面有相關(guān)信息 如:
用文件(系統(tǒng))查找進程 fuser
[root@study ~]# fuser [-umv] [-k [i] [-signal]] file/dir 選項與參數(shù): -u :除了程序的 PID 之外,同時列出該程序的擁有者; -m :代表次文件的整個文件系統(tǒng),對 umount 不成功很有效! -v :可以列出每個檔案與程序還有指令的完整相關(guān)性! -k :找出使用該檔案/目錄的 PID ,並試圖以 SIGKILL 這個訊號給予該 PID; -i :必須與 -k 配合,在刪除 PID 之前會先詢問使用者意願! -signal:例如 -1 -15 等等,若不加的話,預(yù)設(shè)是 SIGKILL (-9) 囉!ACCESS表示: c :此程序在當前的目錄下(非次目錄); e :可被觸發(fā)為執(zhí)行狀態(tài); f :是一個被開啟的檔案; r :代表頂層目錄 (root directory); F :該檔案被開啟了,不過在等待回應(yīng)中; m :可能為分享的動態(tài)函式庫;通過進程找出所使用的文件lsof
[root@study ~]# lsof [-aUu] [+d] 選項與參數(shù): -a :多項資料需要『同時成立』才顯示出結(jié)果時! -U :僅列出 Unix like 系統(tǒng)的 socket 檔案類型; -u :後面接 username,列出該使用者相關(guān)程序所開啟的檔案; +d :後面接目錄,亦即找出某個目錄底下已經(jīng)被開啟的檔案!pidof:找出正在執(zhí)行的進程的PID
? ? ? ? macOS通過brew install 下載
[root@study ~]# pidof [-sx] program_name 選項與參數(shù): -s :僅列出一個 PID 而不列出所有的 PID -x :同時列出該 program name 可能的 PPID 那個程序的 PIDSELinux 初試探
? ? ? ? Security Enhanced Linux:安全強化的linux;是整合到內(nèi)核的一個模塊---再進行進程,文件等詳細權(quán)限配置時依據(jù)的一個模塊;
DAC與MAC
DAC:只通過對比rwx權(quán)限和用戶來實施控制;但不安全
MAC:Mandatory Access Control 強制訪問控制
? ? ? ? ? ? ? ? 在對比基本rwx權(quán)限之前增加的限制
? ? ? ? ? ? ? ? 針對控制的主體為進程而不是用戶
SElinux相關(guān)名詞
? ? ? ? SElinux通過MAC方式來管理進程的;
? ? ? 1??主體==進程
? ? ? 2??目標==文件系統(tǒng)
? ? ??3? 策略:如果一條條控制很繁瑣提供了一些默認策略
-->
- targeted:針對網(wǎng)路服務(wù)限制較多,針對本機限制較少,是預(yù)設(shè)的政策;
- minimum:由 target 修訂而來,僅針對選擇的程序來保護!
- mls:完整的 SELinux 限制,限制方面較為嚴格。
-? ? ? ? 我們采用targeted策略
? ? ? ?4?安全上下文:相當于SElinux模塊內(nèi)的rwx權(quán)限設(shè)置{
? ? ? ? ? ? ? ? 是放在文件的inode內(nèi)的;
? ? ? ? ? ? ? ? ls -Z? ? ? 查看
? ? ? ? ? ? ? ? 字段:主要用到前三個
system_u:object_r:admin_home_t Identify:role:type 身份識別:角色:類型}
安全上下文字段及匹配過程
- 身份識別 (Identify):
- unconfined_u:不受限的用戶,也就是說,該檔案來自於不受限的程序所產(chǎn)生的!一般來說,我們使用可登入帳號來取得 bash 之後, 預(yù)設(shè)的 bash 環(huán)境是不受 SELinux 管制的~因為 bash 並不是什麼特別的網(wǎng)路服務(wù)!因此,在這個不受 SELinux 所限制的 bash 程序所產(chǎn)生的檔案, 其身份識別大多就是 unconfined_u 這個『不受限』用戶囉!
- system_u:系統(tǒng)用戶,大部分就是系統(tǒng)自己產(chǎn)生的檔案囉!
- 角色 (Role):
透過角色欄位,我們可以知道這個資料是屬於程序、檔案資源還是代表使用者。一般的角色有:
- object_r:代表文件
- system_r:代表進程
- 類型 (Type) (最重要!):
? ? ? ? SELlinux能不能匹配通過主要看類型;
- type:在檔案資源 (Object) 上面稱為類型 (Type);
- domain:在主體程序 (Subject) 則稱為領(lǐng)域 (domain) 了!
匹配過程:
????????觸發(fā)進程時,會根據(jù)文件的type賦予進程相對的域;而域又包括了此域可以訪問的文件Type
-上面 【1-3 步相當于SElinux提供的額外控制過程】;
SElinux的三種啟動模式與開啟
模式:
- enforcing:強制模式,代表 SELinux 運作中,且已經(jīng)正確的開始限制 domain/type 了;
- permissive:寬容模式:代表 SELinux 運作中,不過僅會有警告訊息並不會實際限制 domain/type 的存取。這種模式可以運來作為 SELinux 的 debug 之用;
- disabled:關(guān)閉,SELinux 並沒有實際運作。
---
查看模式:
getenforce查看策略:
[root@study ~]# sestatus [-vb] 選項與參數(shù): -v :檢查列於 /etc/sestatus.conf 內(nèi)的檔案與程序的安全性本文內(nèi)容; -b :將目前政策的規(guī)則布林值列出,亦即某些規(guī)則 (rule) 是否要啟動 (0/1) 之意;SElinux配置文件--利用這個開啟SElinux:/etc/selinux/config
[root@study ~]# vim /etc/selinux/config SELINUX=enforcing <==調(diào)整 enforcing|disabled|permissive SELINUXTYPE=targeted <==目前僅有 targeted, mls, minimum 三種政策? ??: 只要關(guān)系到 disabled 啟動模式或 策略? 就需要重新啟動,可能要花費時間等待重新讀寫安全上下文
? ? ? ? ? 而從強制模式到寬限模式之間無需重新啟動
-->之間的轉(zhuǎn)換命令:
[root@study ~]# setenforce [0|1] 選項與參數(shù): 0 :轉(zhuǎn)成 permissive 寬容模式; 1 :轉(zhuǎn)成 Enforcing 強制模式?策略內(nèi)規(guī)則管理
getsebool 規(guī)則bool值查詢
[root@study ~]# getsebool [-a] [規(guī)則的名稱] 選項與參數(shù): -a :列出目前系統(tǒng)上面的所有 SELinux 規(guī)則的布林值為開啟或關(guān)閉值seinfo 查詢所有具體規(guī)則限制
[root@study ~]# seinfo [-trub] 選項與參數(shù): --all :列出 SELinux 的狀態(tài)、規(guī)則布林值、身份識別、角色、類別等所有資訊 -u :列出 SELinux 的所有身份識別 (user) 種類 -r :列出 SELinux 的所有角色 (role) 種類 -t :列出 SELinux 的所有類別 (type) 種類 -b :列出所有規(guī)則的種類 (布林值)sesearch? 以進程或文件為目標查看相關(guān)信息
[root@study ~]# sesearch [-A] [-s 主體類別] [-t 目標類別] [-b 布林值] 選項與參數(shù): -A :列出後面資料中,允許『讀取或放行』的相關(guān)資料 -t :後面還要接類別,例如 -t httpd_t -b :後面還要接SELinux的規(guī)則,例如 -b httpd_enable_ftp_serversetsebool 修改規(guī)則bool值:
[root@study ~]# setsebool [-P] 『規(guī)則名稱』 [0|1] 選項與參數(shù): -P :直接將設(shè)定值寫入設(shè)定檔,該設(shè)定資料未來會生效的!修改安全上下文
ll -z :查看文件類型;
chcon 手動修改文件的上下文
[root@study ~]# chcon [-R] [-t type] [-u user] [-r role] 文件 [root@study ~]# chcon [-R] --reference=類型 文件 選項與參數(shù): -R :連同該目錄下的次目錄也同時修改; -t :後面接安全性本文的類型欄位!例如 httpd_sys_content_t ; -u :後面接身份識別,例如 system_u; (不重要) -r :後面接角色,例如 system_r; (不重要) -v :若有變化成功,請將變動的結(jié)果列出來 --reference=範例檔:拿某個檔案當範例來修改後續(xù)接的檔案的類型!restorecon 恢復(fù)為默認上下文值
[root@study ~]# restorecon [-Rv] 檔案或目錄 選項與參數(shù): -R :連同次目錄一起修改; -v :將過程顯示到螢?zāi)簧?semanage 管理默認上下文值
[root@study ~]# semanage {login|user|port|interface|fcontext|translation} -l [root@study ~]# semanage fcontext -{a|d|m} [-frst] file_spec 選項與參數(shù): fcontext :主要用在安全性本文方面的用途, -l 為查詢的意思; -a :增加的意思,你可以增加一些目錄的預(yù)設(shè)安全性本文類型設(shè)定; -m :修改的意思; -d :刪除的意思。SElinux網(wǎng)絡(luò)服務(wù)🌰
? ? ? ? 主要用auditd 與 setroubleshootd 服務(wù),基本都整合到auditd服務(wù)當中;
????????setroubleshootd錯誤信息都寫到了 /var/log/messages? ? ? ??
curl命令登陸網(wǎng)絡(luò)服務(wù)器;?
sealert服務(wù)查看解決問題方案;
--------------不懂 應(yīng)該是后面的內(nèi)容;
第十七章 認識系統(tǒng)服務(wù)
service 與 daemon
? ? ? ? 服務(wù)是常駐于內(nèi)存中的進程且可以提供一些系統(tǒng)或網(wǎng)絡(luò)功能;
? ? ? ? 完成這個服務(wù)的進程稱為daemon,一般都用d結(jié)尾表示“deamon”---如cron這個周期服務(wù)的進程叫crond;
早期init服務(wù)
? ? ? ? 是早期unix版本的啟動系統(tǒng)服務(wù)--內(nèi)核第一個調(diào)用的程序,然后用init服務(wù)去啟動其他服務(wù)
服務(wù)啟動的分類
? ? ? 1? 獨立啟動模式:常駐于內(nèi)存中,反應(yīng)迅速
? ? ? 2??超級守護進程:由xinetd與inetd這兩個總管程序提供socket對應(yīng)或端口對應(yīng)管理;
服務(wù)的依賴性問題
? ? ? ? init在管理員自己手動處理這些服務(wù)的時候,是沒辦法協(xié)助喚醒所需的依賴服務(wù);
systemd 啟動服務(wù)管理機制
? ? ? ? ?放棄system v 開機啟動(init方法),而用systemd
特點:
? ? ? ? 并行處理開機服務(wù),而init是順序執(zhí)行的
? ? ? ? 僅有一個systemctl命令來管理此服務(wù),且反應(yīng)迅速
? ? ? ? 依賴的服務(wù)可以自動開啟
? ? ? ? 定義服務(wù)為一個unit,根據(jù)功能種類分為不同的類型
? ? ? ? target項目里包含很多服務(wù),啟動了target相當于啟動了很多服務(wù)
? ? ? ? 向下兼容部分init服務(wù)
配置文件
/usr/lib/systemd/system/:每個服務(wù)最主要的啟動腳本設(shè)定,有點類似以前的 /etc/init.d 底下的檔案;
/run/systemd/system/:系統(tǒng)執(zhí)行過程中所產(chǎn)生的服務(wù)腳本,這些腳本的優(yōu)先序要比 /usr/lib/systemd/system/ 高!
/etc/systemd/system/:管理員依據(jù)主機系統(tǒng)的需求所建立的執(zhí)行腳本,其實這個目錄有點像以前 /etc/rc.d/rc5.d/Sxx 之類的功能!執(zhí)行優(yōu)先序又比 /run/systemd/system/ 高
---->
到底系統(tǒng)開機會不會執(zhí)行某些服務(wù)其實是看 /etc/systemd/system/ 底下的設(shè)定,所以該目錄底下就是一大堆連結(jié)檔。而實際執(zhí)行的 systemd 啟動腳本設(shè)定檔, 其實都是放置在 /usr/lib/systemd/system/ 底下的喔!因此如果你想要修改某個服務(wù)啟動的設(shè)定,應(yīng)該要去 /usr/lib/systemd/system/ 底下修改才對!?
uint類型
systemctl管理命令
[root@study ~]# systemctl [command] [unit] command 主要有: start :立刻啟動后面接的 unit stop :立刻關(guān)閉后面接的 unit restart :立刻關(guān)閉后啟動后面接的 unit,亦即執(zhí)行 stop 再 start 的意思 reload :不關(guān)閉后面接的 unit 的情況下,重新載入設(shè)定檔,讓設(shè)定生效 enable :設(shè)定下次開機時,后面接的 unit 會被啟動 disable :設(shè)定下次開機時,后面接的 unit 不會被啟動 status :目前后面接的這個 unit 的狀態(tài),會列出有沒有正在執(zhí)行、開機預(yù)設(shè)執(zhí)行否、登錄等資訊等! is-active :目前有沒有正在運作中 is-enabled:開機時有沒有預(yù)設(shè)要啟用這個 unit注意: 不應(yīng)該使用kill直接殺死一個服務(wù) ,會無法繼續(xù)監(jiān)聽該服務(wù)
? ? ? ? ? ? 開機啟動和現(xiàn)在啟動不同;
? ? ? ? ? ??
status詳細
[root@study ~]# systemctl status atd.service atd.service - Job spooling toolsLoaded: loaded (/usr/lib/systemd/system/atd.service; enabled)Active: active (running) since Mon 2015-08-10 19:17:09 CST; 5h 42min agoMain PID: 1350 (atd)CGroup: /system.slice/atd.service└─1350 /usr/sbin/atd -fAug 10 19:17:09 study.centos.vbird systemd[1]: Started Job spooling tools. # 重點在第二、三行喔~ # Loaded:這行在說明,開機的時候這個 unit 會不會啟動,enabled 為開機啟動,disabled 開機不會啟動 # Active:現(xiàn)在這個 unit 的狀態(tài)是正在執(zhí)行 (running) 或沒有執(zhí)行 (dead) # 后面幾行則是說明這個 unit 程序的 PID 狀態(tài)以及最后一行顯示這個服務(wù)的登錄檔資訊! # 登錄檔資訊格式為:‘時間’ ‘訊息發(fā)送主機’ ‘哪一個服務(wù)的訊息’ ‘實際訊息內(nèi)容’ # 所以上面的顯示訊息是:這個 atd 預(yù)設(shè)開機就啟動,而且現(xiàn)在正在運作的意思!Active狀態(tài):
? ? ? ? running :正在執(zhí)行? dead:沒有執(zhí)行;
????????active (running):正有一隻或多隻程序正在系統(tǒng)中執(zhí)行的意思
????????active (exited):僅執(zhí)行一次就正常結(jié)束的服務(wù),目前并沒有任何程序在系統(tǒng)中執(zhí)行。 舉例來說,開機或者是掛載時才會進行一次的 quotaon 功能,就是這種模式! quotaon 不須一直執(zhí)行~只須執(zhí)行一次之后,就交給檔案系統(tǒng)去自行處理囉!通常用 bash shell 寫的小型服務(wù),大多是屬于這種類型 (無須常駐記憶體)。
????????active (waiting):正在執(zhí)行當中,不過還再等待其他的事件才能繼續(xù)處理。舉例來說,列印的佇列相關(guān)服務(wù)就是這種狀態(tài)! 雖然正在啟動中,不過,也需要真的有佇列進來 (列印工作) 這樣他才會繼續(xù)喚醒印表機服務(wù)來進行下一步列印的功能。
????????inactive:這個服務(wù)目前沒有運作的意思。
開機自啟狀態(tài):
enabled:這個 daemon 將在開機時被執(zhí)行
disabled:這個 daemon 在開機時不會被執(zhí)行
static:這個 daemon 不可以自己啟動 (enable 不可),不過可能會被其他的 enabled 的服務(wù)來喚醒 (相依屬性的服務(wù))
mask:這個 daemon 無論如何都無法被啟動!因為已經(jīng)被強制注銷 (非刪除)。可透過 systemctl unmask 方式改回原本狀態(tài)
mask/ unmask 注銷此服務(wù)
? ? ? ? 就算關(guān)閉了某些服務(wù),但因為依賴性會被自動啟動,不正規(guī)的方法-用mask來強制注銷
# 1. 保持剛剛的狀態(tài),關(guān)閉 cups.service,啟動 cups.socket,然后注銷 cups.servcie [root@study ~]# systemctl stop cups.service [root@study ~]# systemctl mask cups.service ln -s '/dev/null' '/etc/systemd/system/cups.service' # 喔耶~其實這個 mask 注銷的動作,只是讓啟動的腳本變成空的裝置而已!? ? ? ? 會將啟動的腳本變成空;
Loaded: masked (/dev/null)查看所有服務(wù) list
[root@study ~]# systemctl [command] [--type=TYPE] [--all] command:list-units :依據(jù) unit 列出目前有啟動的 unit。若加上 --all 才會列出沒啟動的。list-unit-files :依據(jù) /usr/lib/systemd/system/ 內(nèi)的檔案,將所有檔案列表說明。 --type=TYPE:就是之前提到的 unit type,主要有 service, socket, target 等管理不同的操作環(huán)境 target
systemctl list-units --type=target --all而跟操作界面相關(guān)性比較高的 target 主要有底下幾個:
????????graphical.target:就是文字加上圖形界面,這個項目已經(jīng)包含了底下的 multi-user.target 項目!
????????multi-user.target:純文字模式!
????????rescue.target:在無法使用 root 登入的情況下,systemd 在開機時會多加一個額外的暫時系統(tǒng),與你原本的系統(tǒng)無關(guān)。這時你可以取得 root 的權(quán)限來維護你的系統(tǒng)。 但是這是額外系統(tǒng),因此可能需要動到 chroot 的方式來取得你原有的系統(tǒng)喔!再后續(xù)的章節(jié)我們再來談!
????????emergency.target:緊急處理系統(tǒng)的錯誤,還是需要使用 root 登入的情況,在無法使用 ????????rescue.target 時,可以嘗試使用這種模式!
????????shutdown.target:就是關(guān)機的流程。
????????getty.target:可以設(shè)定你需要幾個 tty 之類的,如果想要降低 tty 的項目,可以修改這個東西的設(shè)定檔!
查看以及切換模式:
[root@study ~]# systemctl [command] [unit.target] 選項與參數(shù): command:get-default :取得目前的 target set-default :設(shè)定後面接的 target 成為預(yù)設(shè)的操作模式isolate :切換到後面接的模式改變 graphical.target 以及 multi-user.target 是通過 isolate 來處理的
在 service 部份用 start/stop/restart 才對,在 target 項目則請使用 isolate (隔離不同的操作模式) 才對!
分析各服務(wù)之間的依賴性
[root@study ~]# systemctl list-dependencies [unit] [--reverse] 選項與參數(shù): --reverse :反向追蹤誰使用這個 unit 的意思!systemd與 daemon 運行過程相關(guān)目錄的簡介
systemd? 啟動腳本設(shè)定檔在 /usr/lib/systemd/system/
/usr/lib/systemd/system/:
預(yù)設(shè)的啟動腳本設(shè)定檔都放在這裡,這裡的資料盡量不要修改~ 要修改時,請到 /etc/systemd/system 底下修改較佳!
/run/systemd/system/:
系統(tǒng)執(zhí)行過程中所產(chǎn)生的服務(wù)腳本,這些腳本的優(yōu)先序要比 /usr/lib/systemd/system/ 高!
/etc/systemd/system/:
管理員依據(jù)主機系統(tǒng)的需求所建立的執(zhí)行腳本,其實這個目錄有點像以前 /etc/rc.d/rc5.d/Sxx 之類的功能!執(zhí)行優(yōu)先序又比 /run/systemd/system/ 高喔!
/etc/sysconfig/*:
幾乎所有的服務(wù)都會將初始化的一些選項設(shè)定寫入到這個目錄下,舉例來說,mandb 所要更新的 man page 索引中,需要加入的參數(shù)就寫入到此目錄下的 man-db 當中喔!而網(wǎng)路的設(shè)定則寫在 /etc/sysconfig/network-scripts/ 這個目錄內(nèi)。所以,這個目錄內(nèi)的檔案也是挺重要的;
/var/lib/:
一些會產(chǎn)生資料的服務(wù)都會將他的資料寫入到 /var/lib/ 目錄中。舉例來說,資料庫管理系統(tǒng) Mariadb 的資料庫預(yù)設(shè)就是寫入 /var/lib/mysql/ 這個目錄下啦!
/run/:
放置了好多 daemon 的暫存檔,包括 lock file 以及 PID file 等等。
網(wǎng)絡(luò)服務(wù)與端口
IP是唯一的,端口相當于同一IP的不同的服務(wù);
有些約定俗成的服務(wù)都放在同一個端口上;
查看端口與服務(wù)的文件:
[root@study ~]# cat /etc/services ....(前面省略).... ftp 21/tcp ftp 21/udp fsp fspd ssh 22/tcp # The Secure Shell (SSH) Protocol ssh 22/udp # The Secure Shell (SSH) Protocol ....(中間省略).... http 80/tcp www www-http # WorldWideWeb HTTP http 80/udp www www-http # HyperText Transfer Protocol ....(底下省略).... # 這個檔案的內(nèi)容是以底下的方式來編排的: # <daemon name> <port/封包協(xié)定> <該服務(wù)的說明>關(guān)閉網(wǎng)絡(luò)服務(wù)
? ? ? ? 網(wǎng)絡(luò)服務(wù)會產(chǎn)生一個網(wǎng)絡(luò)監(jiān)聽端口(port)的進程;
netstat -tlunp ----用此來查看端口??
[root@study ~]# systemctl list-units --all | grep 端口服務(wù)名 --? 查看以此開頭的服務(wù) [root@study ~]# systemctl stop avahi-daemon.service [root@study ~]# systemctl stop avahi-daemon.socket [root@study ~]# systemctl disable avahi-daemon.service avahi-daemon.socket [root@study ~]# netstat -tlunpservice類型配置文件詳解
????????/usr/lib/systemd/system/vsftpd.service:官方釋出的預(yù)設(shè)設(shè)定檔;
????????
/etc/systemd/system/vsftpd.service.d/custom.conf:在 /etc/systemd/system 底下建立與設(shè)定檔相同檔名的目錄,但是要加上 .d 的副檔名。然后在該目錄下建立設(shè)定檔即可。另外,設(shè)定檔最好附檔名取名為 .conf 較佳!
在這個目錄下的檔案會‘累加其他設(shè)定’加入/usr/lib/systemd/system/vsftpd.service 內(nèi)喔!
???????
?/etc/systemd/system/vsftpd.service.wants/*:此目錄內(nèi)的檔案為連結(jié)檔,設(shè)定相依服務(wù)的連結(jié)。意思是啟動了 vsftpd.service 之后,最好再加上這目錄底下建議的服務(wù)。
??????
??/etc/systemd/system/vsftpd.service.requires/*:此目錄內(nèi)的檔案為連結(jié)檔,設(shè)定相依服務(wù)的連結(jié)。意思是在啟動 vsftpd.service 之前,需要事先啟動哪些服務(wù)的意思。
service參數(shù)說明
cat /usr/lib/systemd/system/sshd.service[Unit]: unit 本身的說明,以及與其他相依 daemon 的設(shè)定,包括在什么服務(wù)之后才啟動此 unit 之類的設(shè)定值;
[Service], [Socket], [Timer], [Mount], [Path]..:不同的 unit type 就得要使用相對應(yīng)的設(shè)定項目。我們拿的是 sshd.service 來當范本,所以這邊就使用 [Service] 來設(shè)定。 這個項目內(nèi)主要在規(guī)范服務(wù)啟動的腳本、環(huán)境設(shè)定檔檔名、重新啟動的方式等等。
[Install]:這個項目就是將此 unit 安裝到哪個 target 裡面去的意思!
多重設(shè)置方式:@---%I
*@.service
?????????/usr/lib/systemd/system/下有*@.service的服務(wù),就是通過此文件多重啟動服務(wù)的;
? 我們拿 getty@tty1.service 來說明一下好了!當我們執(zhí)行完 getty.target 之后, 他會持續(xù)要求 getty@tty1.service 等六個服務(wù)繼續(xù)啟動。那我們的 systemd 就會這麼作:
? ? ? ?1 先看 /usr/lib/systemd/system/, /etc/systemd/system/ 有沒有 getty@tty1.service 的設(shè)定,若有就執(zhí)行,若沒有則執(zhí)行下一步;(先看配置文件)
? ? ? ?2? 找 getty@.service 的設(shè)定,若有則將 @ 后面的資料帶入成 %I 的變數(shù),進入 getty@.service 執(zhí)行!
將tty數(shù)量減少
# 1. 修改預(yù)設(shè)的 logind.conf 內(nèi)容,將原本 6 個虛擬終端機改成 4 個 [root@study ~]# vim /etc/systemd/logind.conf [Login] NAutoVTs=4 ReserveVT=0 # 原本是 6 個而且還註解,請取消註解,然後改成 4 吧!# 2. 關(guān)閉不小心啟動的 tty5, tty6 並重新啟動 getty.target 囉! [root@study ~]# systemctl stop getty@tty5.service [root@study ~]# systemctl stop getty@tty6.service [root@study ~]# systemctl restart systemd-logind.service-
systemctl 針對 timer 的配置文件
? ? ? ? 類似于cron服務(wù),內(nèi)置于systemd
條件
·系統(tǒng)的 timer.target 一定要啟動(timer項目一定要啟動)
·要有個 sname.service 的服務(wù)存在 (sname 是你自己指定的名稱--不一定要啟動此服務(wù))
·要有個 sname.timer 的時間啟動服務(wù)存在(一定要啟動此服務(wù)-systemctl enable *.timer)
參數(shù)詳細:
/etc/systemd/system/?底下去建立這個 *.timer文件
默認啟動服務(wù)概要(主要網(wǎng)絡(luò)服務(wù))
第十八章 認識與分析日志文件???
????????記錄系統(tǒng)在什么時候由哪個進程做了什么樣的操作,發(fā)生了什么事情;
????????是非常重要的一環(huán);?
? ? ? ? 通常只有root能查看;
主要日志文件:
日志文件主要服務(wù)與程序
- systemd-journald.service:最主要的訊息收受者,由 systemd 提供的;
- rsyslog.service:主要登錄系統(tǒng)與網(wǎng)絡(luò)等服務(wù)的訊息;
- logrotate:主要在進行登錄文件的輪替功能。
日志文件格式
|--日期/時間---|--主機名--|-服務(wù)或相關(guān)函數(shù)-|-----------具體說明------>rsyslog.service:記錄日志文件的服務(wù)
syslog相關(guān)規(guī)范
? ? ? ? rsyslog主要通過內(nèi)核的syslog相關(guān)規(guī)范來設(shè)置數(shù)據(jù)分類;
syslog支持的相關(guān)服務(wù):
syslog支持的相關(guān)等級:
備注: none (不需要等級) ---想忽略時用此等級(或debug)
/etc/rsyslog.conf 配置文件
? ? ?參數(shù):(1)什么服務(wù) (2)的什么等級消息 (3)需要被記錄在哪里(裝置或檔案)』
服務(wù)名列表.()等級 寫入的目標文件 ------------------------ 服務(wù)名列表.服務(wù)名 代表'比后面還要嚴重的等級 (含該等級) 都被記錄下來'的意思,例如: mail.info 代表只要是 mail 的信息,而且該信息技術(shù)嚴重于 info (含 info 本身)時,就會被記錄下來的意思。服務(wù)名列表.=服務(wù)名 代表等級就是此服務(wù)的等級 服務(wù)名列表.!服務(wù)名 低于此服務(wù)等級才記錄 服務(wù)名列表.none 忽略,不記錄 服務(wù)名列表.* 此服務(wù)的所有信息都記錄(不管等級) *.() 表示所有服務(wù)的信息都。。。 服務(wù)名列表可以用,隔開 ;表示一個新的語句日志安全性問題
修改成只能增加狀態(tài)
注意:如果用vim去查看日志文件,:wq退出,由于你以 vi m儲存了此文件,則 rsyslogd 會誤判 為該檔案已被更動過, 將導(dǎo)致 rsyslogd 不再寫入該檔案新的內(nèi)容
日志服務(wù)器設(shè)置
? ? ? ? 讓一臺主機成為日志服務(wù)器,記錄其他客戶端的信息,就不用一臺一臺的去查看了;
? ? ? ? rsyslogd已經(jīng)提供了此功能,但需要手動開啟;
? ? ? ? 默認啟動UDP/TCP的514端口;
啟動:
[root@study ~]# vim /etc/rsyslog.conf#$ModLoad imtcp #$InputTCPServerRun 514 # 上面的是 UDP 埠口,底下的是 TCP 埠口!如果你的網(wǎng)路狀態(tài)很穩(wěn)定,就用 UDP 即可。 # 不過,如果你想要讓資料比較穩(wěn)定傳輸,那麼建議使用 TCP 囉!所以修改底下兩行即可! $ModLoad imtcp $InputTCPServerRun 514重啟服務(wù)并觀察新端口:
[root@study ~]# systemctl restart rsyslog.service [root@study ~]# netstat -ltnp | grep syslog設(shè)置客戶主機:
? ? ? ? 填的是服務(wù)器的ip
[root@study ~]# vim /etc/rsyslog.conf *.* @@192.168.1.100 #*.* @192.168.1.100 # 若用 UDP 傳輸,設(shè)定要變這樣![root@study ~]# systemctl restart rsyslog.service------需要有一定的網(wǎng)絡(luò)基礎(chǔ)
日志文件循環(huán)logrotate
? ? ? ? 利用cron服務(wù)來實現(xiàn)的
配置文件????????? ? ? ??
/etc/logrotate.conf /etc/logrotate.d//etc/logrotate.conf: 最主要的文件,/etc/logrotate.d/* 目錄下的文件會自動包含到此文件中;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 還包含默認配置參數(shù)--沒另外定義的參數(shù)設(shè)置,就用此默認參數(shù)設(shè)置
#默認的參數(shù)設(shè)置 weekly <==預(yù)設(shè)每個禮拜對登錄檔進行一次 rotate 的工作 rotate 4 <==保留幾個登錄檔呢?預(yù)設(shè)是保留四個! create <==由於登錄檔被更名,因此建立一個新的來繼續(xù)儲存之意! dateext <==就是這個設(shè)定值!可以讓被輪替的檔案名稱加上日期作為檔名喔! #compress <==被更動的登錄檔是否需要壓縮?如果登錄檔太大則可考慮此參數(shù)啟動include /etc/logrotate.d # 將 /etc/logrotate.d/ 這個目錄中的所有檔案都讀進來執(zhí)行 rotate 的工作!
/etc/logrotate.d/*:次目錄下的文件相當于以包的方式被引入到/etc/logrotate.conf中
systemd-journald.service
? ? ? ? systemd第一個啟動后,能主動喚醒此服務(wù),所以只能記錄開機后的情況;即 systemd-journald 用來管理與查詢這次開機后的登錄資訊,而 rsyslogd 可以用來記錄以前及現(xiàn)在的所以資料到磁碟檔案中;
journalctl命令
[root@study ~]# journalctl [-nrpf] [--since TIME] [--until TIME] _optional 選項與參數(shù): 預(yù)設(shè)會秀出全部的log 內(nèi)容,從舊的輸出到最新的訊息 -n :秀出最近的幾行的意思~找最新的資訊相當有用 -r :反向輸出,從最新的輸出到最舊的資料 -p :秀出后面所接的訊息重要性排序!請參考前一小節(jié)的rsyslogd 資訊 -f :類似tail -f 的功能,持續(xù)顯示journal 日志的內(nèi)容(即時監(jiān)測時相當有幫助!) --since --until:設(shè)定開始與結(jié)束的時間,讓在該期間的資料輸出而已 _SYSTEMD_UNIT=unit.service :只輸出unit.service 的資訊而已 _COMM=bash :只輸出與bash 有關(guān)的資訊 _PID=pid :只輸出PID 號碼的資訊 _UID=uid :只輸出UID 為uid 的資訊 SYSLOG_FACILITY=[0-23] :使用syslog.h 規(guī)范的服務(wù)相對序號來呼叫出正確的資料!logger讓數(shù)據(jù)儲存到日志文件中
[root@study ~]# logger [-p 服務(wù)名稱.等級] "信息" #-p 就是前文的 /etc/rsyslog.conf中的參數(shù)內(nèi)容保存journal方式
? ? ? ? 無法儲存上一次開機的信息;
那么就得要建立一個/var/log/journal 的目錄,并且處理一下該目錄的權(quán)限,那么未來重新啟動systemd-journald.service 之后, 日志登錄檔就會主動的復(fù)制一份到/var/log/journal 目錄下啰!
# 1. 先處理所需要的目錄與相關(guān)權(quán)限設(shè)定 [root@study ~]# mkdir /var/log/journal [root@study ~]# chown root:systemd-journal /var/log/journal [root@study ~]# chmod 2775 /var/log/journal# 2. 重新啟動systemd-journald 并且觀察備份的日志資料! [root@study ~]# systemctl restart systemd-journald.service [root@study ~]# ll /var/log/journal/ drwxr-sr-x. 2 root systemd-journal 27 Aug 20 02:37 309eb890d09f440681f596543d95ec7a分析日志文件
分析也很重要,以為日志里面有很多信息
系統(tǒng)自帶的logwatch
第十九章 啟動流程,模塊管理,Loader
第十九章 啟動流程,模塊管理,Loader_幸存者^的博客-CSDN博客
第二十章 基礎(chǔ)系統(tǒng)設(shè)置與備份策略
第二十章 基礎(chǔ)系統(tǒng)設(shè)置與備份策略_幸存者^的博客-CSDN博客
第21章 軟件的安裝:源代碼與Tarball
21章 軟件的安裝:源代碼與Tarball_幸存者^的博客-CSDN博客
第22章 軟件安裝 RPM/ YUM
第22章 軟件安裝 RPM/ YUM_幸存者^的博客-CSDN博客
第23章 X window
第23章 X window_幸存者^的博客-CSDN博客
第二十四章 Linux內(nèi)核編譯與管理
第二十四章 Linux內(nèi)核編譯與管理_幸存者^的博客-CSDN博客
總結(jié)
以上是生活随笔為你收集整理的Linux 私房菜 笔记(完结)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程挑战(6)
- 下一篇: 鸟哥的Linux私房菜-合集