主頁 > 作業系統 > 運維基礎

運維基礎

2020-09-19 14:50:13 作業系統

學習筆記

 目錄

前言  運維人員的核心職責... 1

第一章服務器硬體與組成原理... 1

服務器... 1

1.服務器的分類:... 1

2.服務器的組成:... 2

1)電源:... 2

2)cpu. 2

3)記憶體... 2

4)磁盤... 3

5)RAID卡(陣列卡).. 3

6)遠程管理卡:.. 3

第二章 LINUX系統介紹與環境搭建... 4

1.LINUX的起源與發展... 4

2.下載安裝VM虛擬機... 4

3.CentOS7.5  安裝... 5

4.下載安裝遠程連接工具.. 20

第三章 遠程連接管理... 20

1.遠程連接及服務無法上網原因:.. 20

1)檢查ip地址是否正確... 20

2)檢查網卡資訊是否正確.. 20

3)檢查是否關閉了CentOS7 NetworkManager 20

4)檢查vmware虛擬網路編輯器... 20

5)檢查VMware服務在Windows下的服務是否正常運行... 20

6)檢查VMware網卡問題(在Windows下的網路連接里).. 20

7)檢查Windows是否開啟了WIFI熱點軟體,是否被共享.. 21

8)測驗埠是否打開.. 21

9)虛擬機克隆之后網卡徹底無法啟動... 21

第四章 Linux命令列組成結構... 21

1.Linux系統命令操作語法的格式... 21

2.命令列中的快捷鍵.. 21

3.命令... 22

第五章 Linux目錄檔案與系統啟動... 26

1.Linux系統目錄建構基本特點:... 26

2.Linux 的目錄結構詳解:.. 27

3./etc 下系統初始化及配置相關檔案.. 28

1)/etc/sysconfig/network-    網卡組態檔... 28

2)/etc/resolv.conf    DNS客戶端配置.. 28

3)/etc/hostname   配置主機名... 29

4)/etc/hosts   本地配置決議域名.. 29

5)/etc/fstab   開機自動掛載... 29

6)/etc/rc.local    開機自動執行... 29

7)linux 下運行級別... 29

8)/etc/profile   環境變數配置... 30

9)/etc/bashrc   別名... 30

10)/etc/issue 和/etc/issue.net  用戶登錄系統前顯示的內容... 30

11)/etc/motd    用戶登錄系統后顯示的內容... 30

12)/etc/redhat-release  查看當前OS版本.. 30

13)history   查看歷史命令... 31

4.  /var. 31

1)/var/log/messages   系統默認的日志檔案.. 31

2)/var/log/secure    系統的安全日志... 31

5.  /proc   虛擬的目錄,記憶體的映射... 31

1)  /proc目錄下常用檔案介紹:... 31

2)/proc/cpuinfo  cpu資訊... 31

3)/proc/meminfo  查看記憶體資訊... 32

4)/proc/loadavg  load average系統負載.. 32

5) /proc/mounts  查看掛載資訊... 33

第二次考... 33

6.軟體安裝方法:... 35

1)yum.. 35

2)rpm.. 35

第六章  系統優化... 36

1.  yum源... 36

2. 創建普通用戶... 36

1)設定非互動式密碼:... 36

2)切換到用戶:.. 36

3)查看當前用戶是誰:... 36

4)查看用戶是否創建:... 37

5)在oldboy 回到root 37

6)如果直接使用Xshell連接 則上面的方法無效.. 37

3. 關閉SElinux  (必須關)... 37

4. 關閉防火墻... 38

1)CentOS7.x. 38

2)CentOS6.x. 38

3)在生產環境中.. 39

5. 字符集,亂碼... 39

1).如何查看字符集  language 語言... 39

2).臨時修改字符集  重啟失效... 39

3).永久修改字符集... 39

4).命令方式修改字符集... 40

6.安裝常用工具軟體,命令... 40

7.網路服務,永久和臨時關閉NetworkManager 40

第七章... 40

第八章  檔案屬性,檔案和目錄查找命令.. 41

1.檔案和目錄的查找... 42

2. 檔案的屬性... 45

3.chmod  修改權限... 46

4. 硬鏈接 和 軟鏈接... 47

1)硬鏈接: 47

2)軟鏈接... 48

第三次考... 48

第九章 通配符與特殊符號.. 51

1. 特殊符號... 51

2. 通配符(wildcard).. 52

第十章  正則運算式... 53

1.基本正則運算式.. 53

2.擴展正則運算式.. 54

第十一章Linux系統啟動流程.. 56

1.CentOS 6. 56

2.CentOS 7. 57

第十二章 用戶管理知識... 58

Linux系統用戶相關組態檔.. 58

1.存盤用戶資訊檔案/etc/passwd. 58

2.存盤用戶密碼資訊檔案/etc/shadow.. 58

3.useradd   添加用戶... 58

批量添加用戶:設定密碼和設定隨機密碼.. 58

4.userdel    洗掉用戶... 59

5.passwd   設定密碼... 59

6.chown    修改檔案或目錄的所有者和屬于的用戶組... 59

7.如何讓系統更安全:... 59

1)最小化安裝系統和軟體.. 59

2)保護好root用戶  禁止root用戶遠程登錄,.. 59

3)分析日志... 59

4)檔案系統權限.. 59

5)給重要的檔案或命令做一個指紋.. 59

6)定時任務:md5sum.. 60

8.用戶查詢與切換命令... 60

9.sudo 臨時讓用戶獲得root權限(尚方寶劍).. 60

第十三章Linux系統權限知識.. 61

第四次考... 73

第十四章 定時任務... 80

定時任務書寫要領:... 83

第十五章 磁盤管理... 86

Linux同步網路時間... 93

Linux誤刪檔案后恢復資料... 96

第十六章 課程知識回顧... 101

 

 

前言  運維人員的核心職責

   網站資料不能丟失;

   網站7*24小時運行穩定;

   提升用戶體驗,

第一章 服務器硬體與組成原理

   運維人員的主要戰場

   服務器由于需要提供高可靠的服務,因此在處理能力,穩定性,可靠性,安全性,可擴展性,可管理性等方面要求較高,

01.硬體服務器的分類:

1.塔式服務器:由于其個體較大,占用空間多,也不方便管理,所以使用較少,

2.刀片式服務器:高可用,高密度,可操作性很高

3.機架式服務器:1U=4.45cm  厚度

常見的服務器品牌;DELL  IBM  HP  聯想  浪潮等

DELL

 

 

時間

1U

2U

2010年以前

1850  1950

2850  2950

2010-2013

R410  R610

R710

2014-2016

R420/430  R620/630

R720/730    

2018

 

R740

互聯網公司應用最廣

 

IBM

 

1U

3550/m3   3550/m5

2U

3650

4U

3850

8U

3950

較高大上,質量好,但價格貴,互聯網公司不常用

 

IOE運動:

I=IBM          服務器

O=Oracle      資料庫

E=EMC        存盤

 

HP

 

2U

DL380G7/G8

部分互聯網公司應用

 

浪潮     國產服務器,傳統企業,學校用

華為     國產服務器

聯想     國產服務器,用戶較廣,雜

02.硬體服務器的組成:

1.電源:

雙電源 雙路供電(民用電+商用電)

UPS蓄電池 (30分鐘-1小時)

柴油發電機

2.cpu   ---負責運算和控制

相當于人的大腦  負責運算和控制  (需加風扇負者散熱,很關鍵)

 

常見品牌:Intel  AMD

   一般企業里的服務器:用2-4顆  記憶體總量一般16G-256G(32G,64G)

   做虛擬化的宿主機的服務器:用4-8顆  記憶體總量一般48G-128G(6-10個虛擬機)

3.記憶體  ---負者計算機資料的中轉

cpu和磁盤之間的緩沖的設備,負責計算機資料的中轉,記憶體的容量和處理速度直接決定了資料傳輸的快慢

  

程式:靜態的放在磁盤里的資料,代碼檔案

行程:正在運行著的程式

守護行程:一直持續保持運行著的程式

 

buffer寫入資料到記憶體里,這個存盤資料的空間稱為緩沖區

cache:從記憶體讀取資料,這個存資料的記憶體空間稱為快取區

4.磁盤 ---永久存放資料的地方

1)硬碟的介面型別:

IDE  SCSI  (已淘汰)

 

SATA (機械)  7200-7500轉

優點:容量大,價格便宜,

缺點:讀寫速度慢

 

SAS             15000轉

 

SSD (固態)

優點:速度快

缺點:容量小,價格貴

  

2)硬碟的型別:

機械硬碟

SSD固態硬碟

 

3)性能與價格:

SSD(固態)---SAS---SATA

 

4)實際中的使用:  

熱點資料   -----SSD

冷資料      -----SATA

5.RAID卡(陣列卡)  ---可整合所有磁盤的容量

作用:

可以獲得更高的容量

可以使資料更安全

可以獲得更高的性能(讀寫速度快)

  

磁盤陣列:

 

容量

性能

安全

RAID0

至少要一塊物理磁盤,容量時磁盤的總和

讀寫都很快

任何一塊損壞,所有資料不能使用

RAID1

損失50%的資料容量,只能2塊硬碟

不能提高存盤性能,理論上寫性能和單盤相差不大

資料安全性高

RAID5

需要至少3塊硬碟,損失一塊硬碟容量

寫入速度不快,讀取ok

最多可以損壞一塊硬碟

RAID10

最少4塊硬碟,增加硬碟必須是2的倍數,容量是所有硬碟容量的一半

寫入和讀取都很快

最多損壞一半硬碟

 

6.遠程管理卡:  ---遠程管理服務器

  遠程管理卡有服務器自帶的,也有獨立的,

  服務器自帶的遠程管理卡,可以關機,開機,但是看不到開關機的顯示程序,所以選擇獨立 的遠程管理卡,

  大客戶有KVM遠程管理卡,特大客戶會有自己的人員駐扎機房,

 

作用:

    遠程開關機

    遠程制作raid

    遠程安裝系統

 

分類:

    集成管理卡

    獨立管理卡

 

廠商:

    Dell--idrac

    Hp--ilo

    Ibm—rsa

 

 

03.云主機服務器

阿里云

騰訊云

亞馬遜云

等等…

 

 

 

第二章 LINUX系統介紹與環境搭建

01.LINUX的起源與發展

1.Linux的發展歷程

1969年 Unix在AT&T的貝爾實驗室誕生,在70年代逐步盛行,這期間產生了一個比較重要的分支BSD系統,因此各大廠商根據自身公司硬體架構研發了各種版本的Unix系統,

Unix促使了C語言的誕生,

UNIX有強大的網路能力,強大的資料庫能力,可擴展性,強大開發能力,技術成熟可靠性強,

 

70年代末,Unix面臨被AT&T回收著作權的問題,特別要求禁止對學生群體提供Unix系統源代碼,

 

80年代初,由于之前的Unix系統著作權和源代碼限制問題,使當時大學教學Unix系統束縛很大,因此譚寧邦教授寫了Minix系統用于教學,

 

84年,斯托曼發起了開發自由軟體的運動,

公司:創辦了自由軟體基金會——FSF,

專案:成立了GNU專案.

規則:遵循GPL通用公共許可協議

 

90年,芬蘭赫爾辛基大學生托瓦茲首次接觸Minix系統,

91年,他在Minix上撰寫各種驅動程式等作業系統內核組件,在年底公開了Linix內核原始碼0.02版,

 

93年,Linux 1.0版本發行,Linix轉向GPL協議,

Linux屬于自由軟體,它具有UNIX全部的優秀特性,廣泛應用于各個領域,

           蛋----人----人----人

 

2.Linux發行版本:

Slackware,

Redhat,

Debian,

FeDora,

TurboLinux,

M按drake,

SUSE,

CentOS,

Ubuntu,  

紅旗,

麒麟……

  

Redhat   --- 服務收費

        CentOS  ---  Redhat去掉logo和收費的組件

        Fedora  ---  Redhat的測驗版本

02.作業系統虛擬環境準備

下載安裝VM虛擬機

   VMware 12/15

   創建新的虛擬機—自定義

 

03.作業系統的選擇與安裝

1.作業系統架構介紹

區別:

    64位:

          運算能力:8車道

          記憶體容量:支持更大記憶體容量

          應用環境:應用在服務器環境,處理大量程式運算

    32位:

運算能力:4車道

記憶體容量:支持記憶體容量有限

應用環境:應用在臺式機環境

 

2.作業系統安裝

1)作業系統下載

官方網站下載:

    新版本:https://wiki.centos.org/Download

    舊版本:http://vault.centos.org/

鏡像平臺下載:

    阿里云鏡像:https://opsx.alibaba.com/mirror

    網易鏡像:http://mirrors.163.com/

    搜狐鏡像:http://mirrors.sohu.com/

    科技大學:http://mirrors.ustc.edu.cn/

    清華大學:https://mirrors.tuna.tsinghua.edu.cn/

 

2)部署安裝CentOS7.5

  

   

  

  

  

  

  

  

  

  

  

  

  

  

  

 

 

 

 

 

 

 

內核崩潰時使用,暫不開啟

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

總結安裝程序:

1. 創建虛擬機

2. 新增一塊網卡-->LAN區段

3. 掛載centos7.5光碟鏡像

4. 開機

5. 語言選擇(英語)

6. 修改時區->上海

7. 最小化安裝

8. 磁盤(默認—邏輯卷)

9. 自動配置磁區

10.     分析內核崩潰原因的話,不用開啟,需要的時候再開啟也可以

11.      配置網路

12.     11 主機名修改

13.     設定root密碼

14.     使用xshell鏈接對應centos7服務器

15.圖形化界面配置eth1網卡    命令nmtui

 

 

 

04.下載安裝遠程連接工具

免費的:Xshell ---  一路下一步完成安裝

花錢的:SecureCRT

簡易的:putty

 

 

第三章 遠程連接管理

01.遠程連接例外排錯思路:

檢查鏈路是否暢通 ---  ip概念說明

檢查策略是否阻止 ---  埠概念說明

檢查服務是否啟動 ---  服務協議概念說明

 

02.遠程連接例外排查:

1.檢查ip地址是否正確   

ip add/ifconfig

 

2.檢查網卡資訊是否正確  

cat /etc/sysconfig/network-scripts/ifcfg-eth0

 

3.檢查是否關閉了CentOS7 NetworkManager

systemctl stop NetworkManager

systemctl disable NetworkManager

 

4.檢查vmware虛擬網路編輯器

NAT模式:子網IP:10.0.0.0  設定網關:10.0.0.254

 

5.檢查VMware服務在Windows下的服務是否正常運行

(win鍵+r)在命令列輸入(services.msc)

  

 

6.檢查VMware網卡問題(在Windows下的網路連接里)

(win鍵+e)輸入“網路連接”進入網卡管理找到VMnet8,查看他的狀態

 

7.檢查Windows是否開啟了WIFI熱點軟體,是否被共享

 

8.測驗埠是否打開

telnet 10.0.0.200 22

 

9.虛擬機克隆之后網卡徹底無法啟動

洗掉網卡里包含UUID的行(CentOS7)

洗掉UUID和HWADDR(CentOS5和6)

清空 /etc/udev/rules.d/70-persistent-net.rules(CentOS5和6)

重啟虛擬機Linux

 

10.檢查網卡狀態,重新加載虛擬網卡(多加載幾次)

Systemctl restart network

 

ping不通百度:一般看IP地址是否配置正確,DNS,網卡是否有誤

連接不上xshell,一般與防火墻,selinux有關

 

03.虛擬軟體網路模式特點

1.NAT模式

優點:和主機IP地址不同, 不容易發生地址沖突

缺點:不便于被其他物理主機進行訪問

2.Bridged橋接模式

優點:容易被其他物理主機進行訪問

缺點:和主機IP地址網段相同, 容易發生地址沖突

3.Only-host僅主機模式

優點:安全性更高

缺點:無法訪問外網

 

第四章 Linux命令列組成結構

絕對路徑:從/開始

相對路徑:不從/開始

01.Linux系統命令操作語法的格式

   命令       空格 [引數選項](條件) 空格          [檔案或路徑]你要處理的內容

   結婚       空格 -有車有房有存款     空格          白富美

   結婚       空格 -沒車沒房沒存款     空格          女的就行

    rm        空格      -f           空格          /tmp/test.txt

    rm        空格          -fr        空格          /tmp/test.txt

 

# 在Linux中是注釋作用,不會執行

02.命令列中的快捷鍵

ctrl + a    游標快速移動到行首  Home 也可用

ctrl + e    游標快速移動到行尾  End 也可用

ctrl + l     快速清屏 相當于翻頁

ctrl + s     鎖當前的視窗

ctrl + q    解鎖當前的視窗

ctrl + r     搜索用過的命令

ctrl + u    剪切游標前的內容

ctrl + k     剪切游標后的內容

ctrl + y     粘貼剪切的內容

ctrl + ←  快速移動游標向左一個單詞

ctrl + →  快速移動游標向右一個單詞

ctrl + c     撤銷 中止當前的操作

ctrl + d    退出當前用戶  相當于 logout

Tab        命令或路徑的補全功能

ESC + .    獲取上一個命令的后一部分

03.命令:

登錄系統網路測驗命令:

ping 網路地址/網站域名

 

系統運行命令:

關機命令:

    shutdown -h now/0  可限定時間shutdown -c --取消

    halt

    poweroff

    init 0

 

重啟命令:

    shutdown -r now/0   可限定時間shutdown -c --取消

    reboot

    init 6

 

系統幫助命令:

    man 命令

 

系統快捷方式

ctrl + a      ---游標快速移動到行首  Home 也可用

ctrl + e    ---游標快速移動到行尾  End 也可用

ctrl + l     ---快速清屏 相當于翻頁

ctrl + s     ---鎖當前的視窗

ctrl + q    ---解鎖當前的視窗

ctrl + r     ---搜索用過的命令

ctrl + u    ---剪切游標前的內容

ctrl + k     ---剪切游標后的內容

ctrl + y     ---粘貼剪切的內容

ctrl + ←  ---快速移動游標向左一個單詞

ctrl + →  ---快速移動游標向右一個單詞

ctrl + c     ---撤銷 中止當前的操作

ctrl + d    ---退出當前用戶  相當于 logout

Tab        ---命令或路徑的補全功能

ESC + .    ---獲取上一個命令的后一部分

 

目錄路徑相關命令:

查看路徑:print working directory -> pwd

切換目錄:change directory -> cd

快速回傳之前所在目錄:cd -

快速回傳到上一級目錄:cd ..

快速回傳用戶的家目錄:cd ~/cd

快速創建多級目錄資訊:mkdir -p /oldboy/oldgirl/dog

 

檔案相關命令:

創建空白檔案:touch

查看資料屬性:list -> ls

顯示資料詳細資訊:ls -l /oldboy

顯示最新資料資訊:ls -lrt /oldboy

輸出字符資訊:echo

將字符資訊輸出到檔案中:echo oldboy >/tmp/oldboy.txt

將字符資訊追加到檔案中:echo oldboy >>/tmp/oldboy.txt

查看檔案資訊:cat

合并多個檔案的資料資訊:cat /etc/service /etc/sysconfig/network-scripts/ifcfg-eth0

 

 

 

外部命令 軟體功能實作   使用的時候才從硬碟中加載到記憶體里,執行速度慢一些

內置命令:

內置命令 bash自帶的命令 開機會把命令加載到記憶體,執行速度快

type cd 查看是否是內部命令

help cd 查看shell內置命令的使用方法

 

ls 顯示檔案或目錄的屬性資訊

ls 默認顯示當前檔案夾中的所有檔案及檔案夾,不包括隱藏檔案

ls -a 顯示所有檔案 檔案夾包括隱藏檔案

ls -l 顯示所有檔案long型別長檔案名

ls -R 遞回的顯示檔案內容:把所有檔案夾中的內容全部顯示出來

ls /xx 顯示特定目錄下的檔案內容

ls -l 命令的查詢結果

 

chmod 設定權限

chmod ugo <!-- u創建者,g同組用戶,o其他用戶 -->

chmod 777 <!-- 所有用戶擁有所有權 -->

chmod 644 <!-- 檔案創建之后的默認權限 創建者可讀可寫 其他用戶可讀 -->

chmod 755 <!-- 檔案夾創建后的默認權限 -->

chmod 764 檔案名 <!-- 擁有者可讀可寫可執行,同組用戶可讀可寫,其他用戶只能讀 -->

 

reboot <!-- 重啟服務器

 

絕對路徑 從/開始的路徑

相對路徑 從當前路徑算起

 

對目錄的操作命令

pwd(print work diretory) <!-- 顯示當前的作業目錄 -->

mkdir -p xxx <!-- 創建目錄 -->

mkdir -p xxx/xxx <!-- 創建多級目錄 -->

cd(change directory) <!-- 切換作業目錄 類似windows cd -->

-->

cd . <!-- 當前目錄 -->

cd .. <!-- 上級目錄 -->

直接輸入cd命令 <!-- 沒有任何額外引數 回到家目錄(home) 或 cd ~ -->

 

對檔案進行編輯

touch xxx <!-- 創建一個空檔案 -->

vi/vim <!-- 編譯器 創建一個檔案 -->

touch <!-- 一個存在檔案 則修改它的創建時間 -->

 

cp 拷貝

cp 要拷貝的全檔案名 目標檔案名

 

mv 移動

mv 目標檔案 移動目標路徑

mv 檔案改名

mv 原檔案名 目標檔案名

 

rm 洗掉

rmdir <!-- 洗掉空的目錄 -->

 

rm 檔案名 <!-- 洗掉檔案 -->

rm -rf 檔案名/檔案夾名

 

查看檔案內容

cat 檔案名

cat> 檔案名

vi 檔案名{

vi命令模式

:q <!-- 沒有改變文本內容時可推出 -->

:q! <!-- 改變文本內容后 強制退出 不保存結果 -->

:wq! <!-- 保存文本后退出 -->

dd <!-- 洗掉當前行 -->

yy <!-- 復制當前行 -->

p <!-- 黏貼 -->

/xxx <!-- 搜索 -->

}

head 檔案名 <!-- 默認顯示前10行 -->

head -n x 檔案名 <!-- 指定顯示多少行 -->

tail 檔案名 <!-- 默認查看最后10行 -->

tail -n x 檔案名

 

分屏查看檔案的內容

more 檔案名

less 檔案名(可按PageUp、PageDown 上下翻頁)

 

clear <!-- 清屏 -->

查看IP與管理網卡

ifconfig <!-- 查看ip地址/查看當前擁有的局域網 -->

ifconfig eth0 ip地址 <!-- 設定服務器的臨時ip地址 -->

ifconfig eth0 down <!-- 關閉網卡 -->

ifconfig eth0 up <!-- 激活網卡 -->

 

創建用戶/用戶組及密碼

groupadd 組名 創建組 <!-- 組的資訊會存放在/etc/group檔案中 -->

groupadd -g 組編號 組名 創建組 <!-- 手工分配組id -->

useradd 用戶名 創建用戶 <!-- 會在/etc/passwd和/etc/shadow添加一行資料 -->

useradd -g 組名 用戶名 <!-- 創建用戶并分組 -->

userdel 用戶名 洗掉用戶 <!-- 會洗掉/etc/passwd 和 /etc/shadow 不會洗掉家目錄 -->

userdel -r 用戶名 洗掉用戶 <!-- 會洗掉/etc/passwd 和 /etc/shadow 同時洗掉家目錄 -->

passwd <!-- 直接修改自己的密碼 -->

passwd 用戶名 修改指定用戶的密碼 <!-- 普通用戶只能修改自己的密碼 -->

groupdel 組名 <!-- 洗掉組 -->

passwd -l 用戶名 <!-- 給用戶加鎖 -->

 

useradd -u 100 -g mygroup1 -G mygroup2 -d /home/programmer s1 創建用戶s1

-u:指定用戶UID為100

-g:只用用戶的主要組為mygroup1

-G:指定用戶的附加組為mygroup2,一個用戶可以有多個附加組

-d:指定用戶的目錄名

usermod -u 601 -g 501 s1 <!-- 修改用戶的UID和GID -->

 

創建軟鏈接

ln -s 檔案夾名 別名 <!-- 給檔案名加別名,可以在任意位置通過別名訪問檔案夾 相當于超鏈接 -->

ls -l 查詢結果中軟連接以l開頭

find 檔案夾 -name "檔案名" <!-- 可用模糊查找用*代表通配符 -name指 按檔案名查找 -->

find 檔案夾 -type d <!-- 從指定檔案夾下開始查找型別為目錄的檔案 d:目錄 -->

grep "指定字符" 檔案名 <!-- 在指定檔案中查找指定字符 -->

grep -v "指定字符" 檔案名 <!-- 在指定檔案中查找不包含指定字符 -->

ls | grep "指定字符" <!-- 將ls命令的查詢結果通過管道輸入給后面的命令 在查找包含指定字符的結果-->

 

行程相關的命令

<!-- PID行程號 TTY連接方式 TIME啟動時間 CMD哪個命令啟動的 -->

ps -aux <!-- 查詢所有行程 a:所有行程 x:包括不占用控制臺的行程 u:哪個用戶創建的 -->

ps -ef <!-- 查詢所有行程 包括父行程 不顯示cup和記憶體占用率 -->

<!-- 檔案過多時一般使用ps -aux | grep 'java' 進行過濾查找 -->

kill -9 PID <!-- 根據行程id結束行程 -->

top <!-- 動態顯示所有行程 -->

 

tar 壓縮與解壓縮命令

tar -cvf 檔案名.tar 檔案夾 <!-- 將指定檔案夾壓縮 名為檔案名 -->

tar -zcvf 檔案名.tar.gz 檔案夾 <!-- 解壓壓縮檔案到指定目錄下 -->

tar -zxvf 檔案名 <!-- 解壓檔案夾默認解壓到當前目錄下 -->

 

centos6啟動/停止服務命令

service iptables stop <!-- 關閉當前防火墻 -->

service iptables start <!-- 開啟當前防火墻 -->

 

centos6開機啟動/停止服務命令

chkconfig iptables off <!-- 永久關閉防火墻 -->

chkconfig iptables on <!-- 開啟防火墻 -->

 

rpm 安裝軟體命令

rpm -ivh 檔案名 <!-- i:安裝 v:顯示處理程序 h:顯示#表示進度 -->

rpm -qa <!-- 查詢系統中安裝的所有軟體 -->

rpm -ql xx <!-- 查詢已安裝的軟體包xx中的檔案串列 -->

rpm -e xx <!-- 卸載指定軟體 -->

rpm -ivh --force 檔案名 <!-- 強制安裝 如果要安裝的軟體已存在或版本比當前版本低必須強制安裝 -->

rpm -ivh --nodeps 檔案名 <!-- 忽略軟體安裝時的依賴關系 -->

 

自動安裝軟體及需要的依賴軟體

yum install 檔案名 <!-- 安裝 -->

yum remove 檔案名 <!-- 卸載 -->

 

原始碼tar包編譯安裝

make install

makeclean與make distclean

 

在集群中進行檔案copy

scp 檔案名 ip地址:/目標路徑

 

修改主機名

hostname 名字<!-- 臨時修改主機名 -->

vi /etc/sysconfig/network <!-- 永久的改變主機名 –

hostnamectl set-hostname 主機名(centos7)

第五章 Linux目錄檔案與系統啟動

01.Linux系統目錄建構基本特點:

一切從根開始

Linux下面的目錄是一個有層次的目錄結構

Linux中的每個目錄可以掛載到不同的設備上

 

在Linux下設備不掛載不能使用,不掛載的設備相當于沒門沒窗的監獄,掛載相當于給設 備創造了一個入口(掛載點,一般為目錄)

02.Linux 的目錄結構詳解:

 

/bin               放二進制命令檔案

/boot             存放系統引導檔案,內核

/dev              存放外部設備

/etc               存放系統組態檔

/home           存放普通用戶家目錄

/lib                存放函式庫檔案

/64lib            存放64位函式庫檔案

/lost+found    磁盤或檔案系統損壞,斷電,臨時檔案位置

/media           存放媒體檔案

/mnt              臨時的掛載點

/opt               存放第三方軟體

/proc             虛擬目錄,存放記憶體中的程式和內核資訊

/root              超級管理員的家目錄

/sbin             存放只有超級管理員才能用的相關命令

/sys              虛擬的目錄,記憶體資訊

/tmp              存放臨時檔案,相當于回收站

/usr               存放用戶的程式

/var               存放經常變換的檔案,系統日志

03./etc 下系統初始化及配置相關檔案

1./etc/sysconfig/network-   ---網卡組態檔

/etc/sysconfig/network-scripts/ifcfg-eth0  

 

網卡組態檔

TYPE=Ethernet                    # 以太網

BOOTPROTO=none          # 以什么方式獲取IP地址 兩種方式

BOOTPROTO=DHCP         #自動獲取下發IP地址

或BOOTPROTO=static        #靜態IP地址  手動配置的IP地址

NAME=eth0                  # 硬體網卡的名稱

DEVICE=eth0                # 0代表了第一塊網卡 1代表第二塊網卡

ONBOOT=yes                # 開機自動激活網卡 自動連接  重啟網卡

IPADDR=10.0.0.200            # IP地址

PREFIX=24                   # 子網掩碼

GATEWAY=10.0.0.254             #網關,服務器和PC 必須都要配置網關   并且可ping通

DNS1=1.2.4.8                 #域名決議  域名方便瀏覽 方便記憶

DNS2=223.5.5.5                    服務器   你給他域名  他給你IP地址

 

DNS服務器

8.8.8.8                                谷歌

223.5.5.5     223.6.6.6     阿里

202.106.0.20                       聯通

1.2.4.8                           電信

2./etc/resolv.conf  ---DNS客戶端配置  

Linux系統DNS客戶端組態檔

必須有DNS服務器地址

 

優先于網卡配置DNS 優先進行決議

1.DNS組態檔

如果DNS配置在網卡,重啟網卡則網卡的DNS會覆寫resolv.conf

2. 網卡中配置

 

補充: 網卡中不配置DNS,只在/etc/resolv.conf中配置DNS,重啟網卡不覆寫

3./etc/hostname  ---配置主機名 

hostname 查看主機名    -I查看或者獲取IP地址

hostname+主機名  改主機名,臨時生效,重啟系統則失效

 

永久配置主機名:

CentOS6: /etc/sysconfig/network

CentOS7:1. hostnamectl set-hostname +  2. /etc/hostname重啟系統生效

4./etc/hosts  ---本地配置決議域名

 

IP地址     +     域名

5./etc/fstab  ---開機自動掛載 

按照組態檔的格式寫入,開機自動掛載我們地設備

6./etc/rc.local  ---開機自動執行

開機自動執行此組態檔中的內容(每次開機都會執行一次)

CentOS6  直接寫入即可生效

CentOS7  必須加一個執行權限 (chmod+x /etc/rc.d/rc.local)

7./etc/inittab  ---linux 下運行級別

 

a)查看啟動級別   

runlevel       

cat /etc/systemd/system/default.targe

 

CentOS6

CentOS7

0

關閉作業系統

poweroff.target

1

單用戶模式 救援模式 沒網路

rescue.target

2

多用戶模式 NFS  沒網路

multi-user

3

完全多用戶

multi-user

4

保留  待開發

 

5

桌面,圖形化模式,需要安裝desktop安裝包才可運行

graphical.target

6

重新啟動作業系統

reboot.target

 

b) 設定運行級別:

CentOS6 /etc/inittab

CentOS7 systemctl get-default     獲取默認的運行級別

          systemctl set-default poweroff.target  設定默認的運行級別

8./etc/profile ---環境變數配置

 

相當于國法 全域組態檔 (針對所有的用戶生效)  國家規定

/etc/profile

/etc/bashrc

 

家規  針對當前用戶生效(你當前登錄的用戶,只影響本身)

~/.bashrc   

~/.bash_profile

 

9./etc/bashrc  ---別名

  

10./etc/issue 和/etc/issue.net ---用戶登錄系統前顯示的內容

用戶登錄系統前顯示的內容,默認顯示 作業系統版本,內核版本

 

實際作業中需要清空,登陸前不提示

 

清空檔案的方法:

1. vim 編輯 洗掉 dG 從游標所在處洗掉到檔案底部  :wq 保存并退出

2. echo > /etc/issue issue.net  清空檔案 或者 > /etc/issue issue.net

11./etc/motd  ---用戶登錄系統后顯示的內容 

    

12./etc/redhat-release ---查看當前OS版本

查看當前OS版本      

uname –r  查看內核版本

13.history ---查看歷史命令

   

04.  /var

1./var/log/messages ---系統默認的日志檔案

日志切割  默認10分鐘切割  為了防止日志容量過大 (最好控制在1G以內)

2./var/log/secure ---系統的安全日志

記錄了用戶登錄的程序資訊

05.  /proc  ---虛擬的目錄,記憶體的映射 

proc被稱為虛擬檔案系統,

它是一個控制中心,可以通過更改其中某些檔案改變內核運行狀態,

它也是內核提空給我們的查詢中心,用戶可以通過它查看系統硬體及當前運行的行程資訊,

Linux中許多工具的資料來源正是proc目錄中的內容,比如lsmod的命令是cat /proc/modules的別名,

1./proc目錄下常用檔案介紹:

/proc/loadavg          前三列分別保存最近1分鐘,5分鐘,及15分鐘的平均負載,

/proc/meminfo          當前記憶體使用資訊

/proc/diskstats          磁盤I/O統計資訊串列

/proc/net/dev          網路流入流出統計資訊

/proc/filesystems        支持的檔案系統

/proc/cpuinfo         CPU的詳細資訊

/proc/cmdline          啟動時傳遞至內核的啟動引數,通常由grub進行傳遞

/proc/mounts           系統當前掛在的檔案系統

/proc/uptime             系統運行時間

/poc/version            當前運行的內核版本號等資訊

2./proc/cpuinfo  cpu資訊

查看命令:lscpu

processor : 0  第幾個核心

[root@oldboyedu ~]# cat /proc/cpuinfo|grep 'processor'

processor : 0

processor : 1

processor : 2

processor : 3

 

physical id     : 0  第幾個CPU 幾顆  幾路

[root@oldboyedu ~]# cat /proc/cpuinfo|grep 'physical id'

physical id : 0

physical id : 0

physical id : 1

physical id : 1

CPU(s):                4

On-line CPU(s) list:   0-3

Thread(s) per core:    1

Core(s) per socket:    2

Socket(s):             2

3./proc/meminfo  查看記憶體資訊

查看命令:free -h

MemTotal:             1528412 kB                  總共記憶體

MemFree:            1253588 kB                  剩余記憶體

MemAvailable:         1229392 kB               可用記憶體

Buffers:            2076 kB                    緩沖

Cached:             87272 kB                  快取

4./proc/loadavg  load average系統負載

查看命令: w   uptime

  (不絕對,業務不對外訪問,只放資料分析 達到    cpu核心的上線 也無所謂)

負載  衡量當前系統的一個繁忙程度 

 

如何衡量?

數字達到你cpu核心的數量

cpu  4核心  =====  如果負載已經到4  說明已經繁忙

cpu  2核心  =====  如果負載已經到2  說明已經繁忙

 

[root@oldboyedu ~]# cat /proc/loadavg

0.00       0.01         0.05          1/126 1484

最近1分鐘  最近五分鐘   最近15分鐘

  

問:你們公司的服務器負載的臨界點是多少

使用命令:  w

20:29:01    up 30 min,   1 user,    load average: 0.00, 0.01, 0.05

當前時間   系統運行時間  1個用戶登錄  平均負載   1分鐘  5分鐘 15分鐘

 

[root@oldboyedu ~]# uptime

20:34:43 up 36 min,  3 users,  load average: 0.00, 0.01, 0.05

5./proc/mounts  查看掛載資訊

rootfs / rootfs rw 0 0

sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0

proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0

06.第二次考

一,填空題-----------每題2分,共20分

1,網卡組態檔路徑:/___etc_____/____sysconfig___/___network-scripts___/ifcfg-eth0.

2,重啟網卡命令補全___systemctl____ ____restart___ network

3,/bin     是用來存放____二進制命令檔案____什么的目錄

4,/boot系統______引導系統程式檔案,系統內核______所需的檔案目錄,

5,/dev (Device flies)______設備檔案______目錄.

6,/mnt 臨時掛載存盤設備的_____掛載點________, u盤直接插入光驅無法使用,要先掛載后使用

7,/var 這個目錄的內容是經常變動的,是個用來存放系統______經常變動檔案,系統日 志_____目錄,____系統日志____的路徑/var/____log____/___messages____

8,/proc/loadavg    #<=__系統負載____(系統繁忙程度)

9,/proc/meminfo   # <=___系統記憶體____

10,/tmp     (Temporary files)____存放臨時檔案____目錄, ,這個目錄可以被用作回收站使用

 

二,命令操作類-----------每題2分,共20分

1.查看主機名命令   

hostname

2.(臨時)設定主機名   

hostname 主機名

3.(永久)設定主機名  

vim /etc/hostname 改主機名  

hostnamectl set-hostname 主機名

4.查詢當前登錄用戶  

whoami

5.查看主機名  

hostname

6.查詢當前系統版本  

cat /etc/redhat-release

7.切換到上一次所在路徑   

cd -

8.以樹形結構顯示目錄且只顯示目錄 

tree -d

9.批量創建1,2,3,4,5,這幾個目錄  

mkdir 1 2 3 4 5

10.以長格式列出檔案及目錄資訊并且要顯示目錄下的所有檔案

   ls -al

三,常見錯誤提示決議類(給出你的翻譯)-----------每題4分,共20分

1.cannot create directory “d1” file exists                 無法創建目錄,d1檔案已存在

2.no such file or directory                                   沒有此檔案或目錄

3.column window is too narrow                            列視窗太窄

4.ping: baidu.com: Name or service not known       ping百度:名字或服務無法識別

5.cannot:Network is unreachable                       無法建立連接

 

四,簡答題-----------前三題每題10分,共40分

1,     請寫出eth0網卡的必要配置

TYPE=Ethernet

BOOTPROTO=none

ONBOOT=yes

NAME=eth0

DEVICE=eth0

IPADDR=10.0.0.201

PREFIX=24

NETMASK=10.0.0.254

DNS1=1.2.4.8

2,簡述Centos 6 運行級別  0 1 2 3 4 5 6

3,請寫出十個與第二大題(命令操作類)無關的命令及引數以及具體命令作用,

 

4,簡述Raid0與Raid1的區別

 

5,xshell連接不上如何排錯,

 

 

07.軟體安裝方法:

1.yum 

常用   打包好了,可直接用  缺什么可以直接安裝什么,直接解決了依賴問題

yum repolist

yum install –y  命令    -y  安裝程序中,提示是否繼續全yes

yum provides route

yum remove

yum clean all

yum list|grep bash-

2.rpm       

不會自動解決依賴問題,需要自己安裝依賴

rpm –ivh xxx.rpm  

-i       install    

-v     顯示安裝程序   

-h      以人類可讀方式顯示

rpm –qa  查看所有的安裝包

rpm –ql 命令   查看是否安裝此命令

 

3. 編譯安裝

 

 

 

第六章  系統優化

01.  yum

默認源是隨機產生的

 

配置國內的yum源:

/etc/yum.repos.d/  配置yum源目錄

/etc/yum.repos.d/CentOS-Base.repo  yum倉庫地址 必須得有 如果沒有 找不到軟體

1.修改默認yum源(centos7不用修改)

更改為阿里云

更改yum源:

下載新的CentOS-Base.repo 到/etc/yum.repos.d/

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

之后運行yum makecache生成快取

 

更改epol源:

下載新repo 到/etc/yum.repos.d/

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

2.yum 基礎軟體安裝

yum install -y wget net-tools vim tree htop iftop \

iotop lrzsz sl unzip telnet nmap nc psmisc \

dos2unix bash-completion nethogs  glances -y

 

安裝管理repository及擴展包的工具 (主要是針對repository):

yum install yum-utils -y

 

02. 關閉防火墻

1.CentOS7.x                                   

1)臨時關閉防火墻重啟失效

systemctl stop firewalld         

 

2) 永久關閉防火墻                          

    禁止開機啟動                          

systemctl disable firewalld 

 

3)如何查看防火墻狀態

systemctl status firewalld        

  iptables-save    出結果 開啟狀態 無結果 關閉狀態

 

2.CentOS6.x

1)臨時關閉防火墻重啟失效

/etc/init.d/iptables stop  

service iptables stop

 

2)如何查看防火墻狀態

/etc/init.d/iptables status   

iptables-save    出結果 開啟狀態 無結果 關閉狀態

 

3) 永久關閉防火墻

chkconfig --list   查看所有的服務是否開機啟動

  chkconfig iptables off    off關閉  on 開啟

3.在生產環境中

在公司禁止關閉運行中的防火墻

 

什么時候關閉和開啟防火墻?

1)什么時候開啟

a.你的服務器是公網IP地址

b.服務器是阿里云的并且對外提供服務的(云服務)

         埠: ssh  22   遠程連接埠

2)什么時候不開啟

a.內網 辦公室環境  外面的人不容易訪問到你的服務器

b.服務器單純的測驗 內部使用 不安裝任何對外的服務

c.高并發訪問服務器   (硬體防火)

03. 關閉SElinux  (必須關)

1.永久關閉SElinux  美國國家安全域

/etc/selinux/config  selinux的組態檔

enforcing     表示selinux已經啟動狀態

permissive           表示selinux關閉狀態 會提示警告資訊

disabled      表示selinux關閉狀態

關閉selinux

SELINUX=enforcing  修改為SELINUX=disabled    重啟系統生效

2.臨時關閉SElinux

setenforce 0   0是關閉   1是開啟

3.查看SELinux狀態

getenforce    查看當前的狀態  selinux是否開啟

04.優化ulimit      調整檔案描述符

echo '* - nofile 65535' >> /etc/security/limits.conf

 

05.顯示優化(命令列色彩)

[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\]\w\[\e[0m\]]\\$ "

 

添加到/etc/bashrc,注釋掉原有的PS1,然后生效source /etc/bashrc

06. SSH連接速度慢優化

sed -i 's@#UseDNS yes@UseDNS no@g' /etc/ssh/sshd_config

 

sed -i 's@^GSSAPIAuthentication yes@GSSAPIAuthentication no@g' /etc/ssh/sshd_config

 

systemctl restart sshd

 

07. 創建普通用戶

Linux是一個多用戶,多任務的作業系統

 

超級管理員(root):root默認在Linux作業系統中擁有最高的管理權限,

 

普通用戶:管理員或者具備管理權限的用戶創建的,權限:系統管理僅可以讀,不能增 刪 改,需要授權,權限越大,責任越大,

 

一般情況下,在企業生產環境中應盡量避免直接到root用戶下操作,除非有超越普通用戶權限的系統維護需求, 使用完后立即退回到普通用戶,

1.設定非互動式密碼:

echo ********|passwd –stdin 用戶名&&history -c

2.切換到用戶:

su –用戶名

3.查看當前用戶是誰:

whoami

 

4.查看用戶是否創建:

方法1:

id 用戶名

方法2:

cat /etc/passwd|grep        用戶名

useradd oldboy           創建用戶

passwd oldboy              設定密碼

su - oldboy                  為什么需要加-

5.在oldboy 回到root

方法1:  ctrl + d

方法2:  logout

方法3:  exit

6.如果直接使用Xshell連接 則上面的方法無效 

如果普通用戶登錄root  必須有root的密碼

 

補充:xshell和CRT上傳下載 必須安裝lrzsz

xshell 直接拖拽直接上傳 下載使用 sz + 檔案名

CRT 上傳 在命令輸入 rz 然后選擇檔案進行上傳  sz +檔案名 下載

08. 字符集,亂碼

什么是字符集

字符集就是一套文字符號及其編碼

GBK   國標

UTF-8 萬國碼

 

字符集改成UTF-8

 

   1.如何查看字符集  language 語言

echo $PS1

echo $LANG

   2.臨時修改字符集  重啟失效

export LANG="zh_CN.UTF-8"

   3.永久修改字符集

[root@oldboyedu ~]# cat /etc/locale.conf

LANG="en_US.UTF-8"

 

修改組態檔后如何生效

方法1:重啟系統

方法2:source /etc/locale.conf 或 . /etc/locale.conf   使組態檔立即生效

   4.命令方式修改字符集

localectl set-locale LANG=”zh_CN.UTF-8”

 

09.安裝常用工具軟體,命令

yum -y install tree nmap sysstat lrzsz dos2unix telnet bash-completion bash-completion-extras vim nc lsof

 

10.網路服務,永久和臨時關閉NetworkManager 學習環境下使用

systemctl stop NetworkManager   

systemctl disable NetworkManager

 

第七章  

 

 

 

 

 

 

第八章  檔案屬性,檔案和目錄查找命令

[root@Linux-61-202k ~]# ll -hi

17458011 drwxr-xr-x 2 root root  167 May 15 12:16 oldboy

34376919 -rw-r--r-- 1 root root 655K May 15 09:21 services

 

01.檔案屬性詳細描述—inode與block

1.inode:

概念介紹:

    1. 用于存盤檔案資料屬性資訊

    2. 用于存盤資料指標資訊

 

如何誕生:

    格式化---創建檔案系統

 

如何進行查看:

查看inode的總量和使用量:

[root@oldboymeng oldboy]# df -i

Filesystem      Inodes IUsed   IFree IUse% Mounted on

/dev/sda3      9858560 60557 9798003    1% /

查看檔案的inode資訊方法

ls -li或

stat /etc/hosts

 

如何生成及指定inode大小

格式化命令:mkfs.ext4 -b 2048 -I 256 /dev/sdb

 

特點說明:

    1. 一個檔案會占用一個inode

    2. 大量小檔案會占用大量inode(理解了)

  

2.block:

概念介紹:

    1. 用于存盤檔案資料內容

 

如何誕生:

    格式化---創建檔案系統

 

如何進行查看:

[root@oldboymeng oldboy]# df

Filesystem     1K-blocks    Used Available Use% Mounted on

/dev/sda3       19706880 1861892  17844988  10% /

 

特點說明:

    1. 一個檔案資料會占用多個block

    2. 一個block大小:是大點好 小點好

    存盤的資料小檔案:2K -> 4Kblock           盡量調整blcok空間小一些

    存盤的資料大檔案:4K -> 1kblock 4個block

 

PS: 磁盤IO (input(寫入)/output(讀取)),消耗IO過多,降低磁盤性能

          10M  檔案 --- 硬碟: 用時多久:  10s

          100M 檔案 --- 硬碟: 用時會更久  100s

   

系統資料讀取原理:(重點掌握)

    1. inode中:存盤目錄或檔案的屬性資訊 指標資訊(指向block)

    2. block中:

       目錄的block存盤下一級資料的名稱資訊

       檔案的block存盤真正的資料資訊

 

02. 檔案屬性資訊詳述---檔案資料型別

*普通檔案:  -    可編輯文本.txt  腳本檔案.sh  二進制檔案(命令檔案) 壓縮檔案 

*目錄檔案:  d    

*鏈接檔案:  l    軟連接-快捷方式

*設備檔案: b c   b 塊檔案  c 字符流檔案(生成隨機字符)

/dev/urandom

/dev/null     系統的黑洞(定時任務)

/dev/zero     系統的黑洞(磁盤管理) 如何讓系統快速生成大檔案               

*套接字檔案: s(socket)   網路有關的檔案(網路編程 socket)

 

PS:linux系統中一切皆檔案

 

查找目錄或檔案的命令

yum provides .route  按照命令查找安裝包名

 

file:顯示檔案的型別

檔案型別:

-  是普通檔案

        1)純普通檔案  2)命令型別  3)資料型別 (例如壓縮包. rpm)

d  是目錄檔案 (directory)

l  是鏈接檔案 (軟鏈接 softlinks),它指向另一個檔案

b  塊設備 block ,是特殊型別的檔案

c  字符設備檔案  character special

s  socket檔案

p  是管道檔案

  

03.快速檢索系統檔案資訊:

which 命令         --- 查看命令檔案所在路徑

whereis 命令       --- 查看命令檔案所在路徑 以及命令檔案先關其他檔案所在路徑

locate oldboy.txt    --- 尋找系統中任意檔案所在路徑

updatedb       --- 生成檔案資料路徑資訊資料庫表 /var/lib/mlocate/mlocate.db

find:                     --- 快速查找檔案資訊  ****

04.檔案相關基礎命令

1.find命令  查找系統檔案資料

-type         根據檔案型別查找

-name         根據檔案名稱查找

-iname        根據檔案名稱忽略大小寫進行查找

-size          根據檔案大小查找資料

-perm          根據檔案權限

-mtime         根據檔案(修改)時間查找資料

-mmin         根據檔案創建生成分鐘

-exec          將查找到的資料進行處理

-delete         將查找到的資料進行直接洗掉

-path           指定檔案路徑資訊

-prune         修剪引數(排除)

-o              多個條件或者關系

-a              多個條件并且關系(默認)

-not            指定條件進行取反

-print           取消排除的目錄顯示

-inum           根據檔案inode號碼進行過濾資料

 

1)尋找指定大小檔案資訊:

find /oldboy -type f -size +10 

          +xx : 找出大于指定數值的檔案

          -xx : 找出小于指定數值的檔案

          沒有加減符號: 找出指定大小檔案

         -size n[cwbkMG]

         File uses n units of space.  The following suffixes can be used:

         `c'    for bytes

         `k'    for Kilobytes (units of 1024 bytes)

         `M'    for Megabytes (units of 1048576 bytes)

         `G'    for Gigabytes (units of 1073741824 bytes)

 

2)批量洗掉資料方法:

find /oldboy -type f -size 100k|xargs rm

find /oldboy -type f -size 100k -delete

3)批量復制或移動資料方法:

第一種方法:

    find /oldboy -type f -size 100k|xargs cp -t /tmp  

    補充:

    cp 備份的資料  備份目錄資訊   --- 將資料由前 -- 后  復制

    cp -t 備份目錄資訊 備份的資料 --- 將資料由后 -- 前  復制

第二種方法:

    find /oldboy -type f -size 100k|xargs -i cp {} /tmp

第三種方法:

    cp -t /tmp `find /oldboy -type f -size +100k`

第四種方法:

    find /oldboy -type f -size 100k -exec cp {} /tmp \;

4)根據資料權限查找資料:

    find /oldboy -type f -perm 644

  

5)根據時間資訊查找資料:

find /oldboy -type f -mtime  +30        --- 找出30天以前的資料

find /oldboy -type f -mtime  -30           --- 找出最近30天的資料

find /oldboy -type f -mtime   30       --- 找出距離當前第30天的資料

  

6)find命令排除指定目錄不要進行過濾

find /oldboy -path "/oldboy/oldboy02" -prune -o -type f -name "*.txt" -print

      

第一個步驟:找出.txt檔案并且檔案型別是 普通檔案f

find /oldboy -type f -name "*.txt"

 

第二個步驟:找出.txt檔案并且檔案型別是 普通檔案f 或者 找出指定路徑

find /oldboy -type f -a -name "*.txt" -o -path "/oldboy/oldboy02"

-path:在指定目錄中,過濾檢索指定路徑

-o : 多個沖突條件可以同時滿足

 

第三個步驟:修剪掉指定路徑下面的資訊

find /oldboy -type f -a -name "*.txt" -o -path "/oldboy/oldboy02" -prune

-prune:根據指定的-path資訊,進行資料排除

 

第四個步驟:只顯示找出的檔案資訊,不顯示排除的目錄資訊

find /oldboy -type f -a -name "*.txt" -print -o -path "/oldboy/oldboy02" -prune

   

特殊方法:

 [root@oldboymeng ~# find /oldboy -type f -a -name "*.txt" -not -path "/oldboy/oldboy02*"

 

 

tree  查看目錄資料結構資訊

tree -d    只查看目錄資料資訊

tree -L 1  查看目錄的指定層級資訊

  

2.tar   壓縮資料命令

zcvf                 對資料進行壓縮

tf                    對資料壓縮包進行查看

xf                       對資料包進行解壓

h                      壓縮軟連接檔案時,將軟鏈接指向源檔案進行壓縮

-C                    指定解壓的路徑

1.如何壓縮資料:

tar  zcvf  /路徑資訊/壓縮包檔案.tar.gz 壓縮的資料資訊  

tar zcvf /oldboy/oldboy.tar.gz /oldboy/oldboy{01,02}.txt 絕對路徑壓縮資料

tar zcvf /oldboy/oldboy.tar.gz ./oldbig{01,02}.txt       相對路徑壓縮資料

z:   指定壓縮資料方式 gzip方式壓縮資料

c:   創建壓縮包檔案

v:   顯示壓縮的程序   

f:  指定壓縮包檔案保存的路徑

tar zcvf /oldboy/oldbig.tar.gz  /oldboy/oldbig01.txt

tar zcvf /oldboy/oldbig.tar.gz  /oldboy/oldbig01.txt  /oldboy/oldbig02.txt /etc/

  

2.補充:

壓縮包的資料如何進行查看和過濾:

zgrep -a oldgirl oldboy.tar.gz

zcat oldboy.tar.gz

 

如何檢查壓縮包資料完整:

tar tf  /路徑資訊/壓縮包檔案.tar.gz

   

如何解壓資料包:

tar xf    /路徑資訊/壓縮包檔案.tar.gz

tar xf oldbig.tar.gz

 

tar壓縮目錄資料,如何進行排除  --exclude  --exclude-from

[root@oldboymeng oldboy]# tar zcvf /oldboy/oldboy.tar.gz  ./oldboy01 --exclude=./oldboy01/oldboy02.txt

[root@oldboymeng oldboy]# tar zcvf /oldboy/oldboy.tar.gz  ./oldboy01  ./oldboy02 ./oldboy03  --exclude-from=./exclude.txt

[root@oldboymeng oldboy]# cat exclude.txt

 

 

05. 檔案的屬性說明

Ls -lhi

 

 

第1列:  inode資訊 -- 目錄

 

第2列: 檔案資料的型別  檔案 目錄  軟鏈接(快捷方式)

         檔案資料權限    r讀 w寫 x可執行    

 

第3列: 硬鏈接數   為了讀取到檔案資訊,可以通過打開不同的檔案進行讀取,不同的檔案inode號碼是一致的 ???

 

第4-5列:檔案的屬主資訊  資料(孩子)--- 誕生出來  所屬用戶(監護人)

檔案的屬組資訊  資料(孩子)--- 家人      所屬組  

          檔案的其他用戶  資料(孩子)--- 隔壁老王  管理權力最低 沒有權限

 

第6列: 檔案的大小資訊  檔案--真實大小  目錄--不是真實大小

         磁盤空間不足,需要找出比較大的檔案進行清空洗掉 

         du -sh /*|sort -rh

          補充:ll命令顯示資訊,也可以進行排序

           ll -rt  r反向  t按照時間排序

 

第7-9列:檔案資料的時間資訊  修改時間資訊

          修改時間(mtime) 訪問時間(atime)  改變時間(ctime)

 

06.檔案屬性資訊--檔案權限

1.系統中檔案權限:3種權限

r    read      讀           4

w   write      寫          2

x   execute    執行         1

-              沒權限      0   

  

2.權限賦予誰:

1. 檔案資料所屬用戶 (屬主)

2. 檔案資料所屬組   (屬組)

3. 檔案資料其他用戶 (其他用戶)

   

rw-r--r-- (檔案9位權限位)

每三位為一組:

rw-   屬主權限        可讀可寫 沒有執行權限

r--    屬組權限        只讀

r--    其他用戶權限    只讀

 

可讀:        普通檔案 不需要執行權限,只能查看檔案 不能寫入 不能執行

可寫:        擁有可寫入權限

可執行:   針對可執行檔案 .sh 命令 服務 應用程式

 

644: 屬主(rw) 屬組(r)其他用戶(r)

755: 屬主(rwx)屬組(rx)其他用戶(rx)

 

Linux下所有目錄和檔案全部都是9位權限位

所有和網站相關的目錄全部是755權限,檔案全部是644權限

 

3.chmod  修改權限

授予權限:

+ 添加權限

- 去掉某一個權限

= 先去掉原有的權限,然后在賦予新的權限

chmod ugo <!-- u創建者,g同組用戶,o其他用戶

chmod 777 <!-- 所有用戶擁有所有權

chmod 644 <!-- 檔案創建之后的默認權限 創建者可讀可寫 其他用戶可讀

chmod 755 <!-- 檔案夾創建后的默認權限

chmod 764 檔案名 <!-- 擁有者可讀可寫可執行,同組用戶可讀可寫,其他用戶只能讀

 

07.檔案的用戶資訊(屬組 屬主 其他用戶)

系統用戶有什么:

1)超級管理用戶(皇帝)(0)      root

2)系統虛擬用戶(傀儡)(1-999)  nobody    管理服務行程資訊/管理資料檔案資訊,不能用于登錄系統/沒有家目錄資訊

3)系統普通用戶(平民)(1000+)  oldboy    登錄系統,擁有家目錄,代替root管理系統(初級中級運維人員)--- 限制運維人員權限

如何查看用戶數值級別:

id          --- 查看系統用戶id數值

uid         ---用戶級別數值編號

gid         ---用戶組級別數值變化

groups     ---顯示附屬組資訊

  

用戶和用戶組有什么關系

    oldboy01.txt  6 root  6 用戶組 讀 oldboy  alex

    oldboy02.txt  6 root  6 用戶組 讀 oldgirl

    oldboy03.txt  6 root  6 用戶組 讀 oldbaby

   

    root用戶組:root oldboy oldgirl oldbaby

   

用戶和用戶組的關系:

    1vs1關系  root用戶 --> root 組

    1vsn關系  root用戶 --> root 組(主要組)  oldboy組 oldgirl組(附屬組)

              雷明春   --> 雷氏家族(主要組) 張氏(附屬組)

    nvsn關系  root用戶 oldboy用戶  --> root組  oldboy組

    nvs1關系

 

 

08.檔案屬性資訊--檔案的時間資訊

1.時間資訊有三種:

atime:訪問時間

mtime:修改時間

ctime: 改變時間???

        

[root@oldboymeng oldboy]# stat /etc/hosts  --- 查看詳細屬性資訊

File: ‘/etc/hosts’

Size: 7           Blocks: 8          IO Block: 4096   regular file

Device: 803h/2051d    Inode: 16810611    Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Context: unconfined_u:object_r:net_conf_t:s0

Access: 2019-06-13 15:20:53.538925666 +0800

Modify: 2019-06-13 15:20:52.038925775 +0800

Change: 2019-06-13 15:20:52.038925775 +0800

Birth: -

 

什么是訪問時間:訪問查看檔案,會改變訪問時間

Access: 2019-06-13 18:38:46.307068633 +0800

Modify: 2019-06-13 18:37:51.453072592 +0800

Change: 2019-06-13 18:37:51.453072592 +0800

   

什么是改變時間:檔案屬性資訊發生變化,會修改改變時間

Access: 2019-06-13 18:38:46.307068633 +0800

Modify: 2019-06-13 18:37:51.453072592 +0800

Change: 2019-06-13 18:40:32.520060966 +0800

   

什么是修改時間:檔案內容被修改了,會更新修改時間 ***

Access: 2019-06-13 18:41:42.042055947 +0800

Modify: 2019-06-13 18:41:42.042055947 +0800

Change: 2019-06-13 18:41:42.043055947 +0800

 

2.系統時間命令-- date (顯示當前時間和修改系統時間)

1.顯示系統時間:

date

Thu Jun 13 18:46:04 CST 2019

 

1)按照指定格式顯示時間

[root@oldboymeng oldboy]# date +%y-%m-%d

19-06-13

[root@oldboymeng oldboy]# date +%Y-%m-%d

2019-06-13

[root@oldboymeng oldboy]# date +%F

2019-06-13

[root@oldboymeng oldboy]# date +%H:%M:%S

18:51:22

[root@oldboymeng oldboy]# date +%T

18:51:50

 

2) 顯示過去或未來的時間資訊

[root@oldboymeng oldboy]# date +%F -d "-1 day"      顯示過去時間

2019-06-12

[root@oldboymeng oldboy]# date +%F -d "+22500 day  顯示未來時間

[root@oldboymeng oldboy]# date +%F -d "2 day"       顯示未來時間

  

2.時間資訊命令作用:

方便備份資料時,顯示資料時間資訊:

cp /etc/hosts /tmp/hosts-`date +%F`

  

3.修改系統時間資訊:

date -s "20200505"           --- 修改日期資訊

date -s "2030/05/05 10:10:10"  --- 修改日期和時間

    Sun May  5 10:10:10 CST 2030

 

4.時間資訊同步:ntpdate

root@oldboymeng oldboy]# ntpdate ntp1.aliyun.com

13 Jun 19:08:24 ntpdate[32975]: step time server 120.25.115.20 offset -343775.764894 sec

 

 

09. 硬鏈接 和 軟鏈接

 

1.硬鏈接:

概念說明:

    1. 相當于查看一個檔案資料的多個入口資訊

    2. inode號碼相同的檔案,互為硬鏈接

如何創建:

    ln 源檔案  硬鏈接檔案

    ln oldboy.txt oldboy_hard_link.txt

特點總結:

    1. 源檔案被洗掉,鏈接檔案不會失效

    2. 創建多個硬鏈接檔案,不會占用block空間和inode空間

    3. 目錄無法創建硬鏈接

用途說明:

    1. 防止檔案被誤洗掉 不能防止檔案誤修改

                cp:防止誤洗掉 防止誤修改

    ?2. 檔案被洗掉條件:

           1)硬鏈接數為0 i_link=0

              2) i_count=0 ???

   

補充:查詢所有硬鏈接檔案

    [root@oldboymeng oldboy]# find / -type f -inum 33574990

    /tmp/oldboy_link.txt

    /oldboy/oldboy_hard_link.txt

    /oldboy/oldboy_hard_link02.txt

    /oldboy/oldboy_hard_link03.txt

    /oldboy/oldboy.txt

   

洗掉硬鏈接:

    如果只洗掉源檔案 不洗掉硬鏈接檔案 則檔案不會被洗掉

    只有洗掉源檔案和所有的硬鏈接檔案 則檔案被洗掉

    如果普通檔案(沒有被系統呼叫的檔案)硬鏈接數0 則被洗掉 如果只洗掉源檔案或者硬鏈接 則只是洗掉了inode指向 沒有真正的洗掉block

    只有洗掉源檔案和所有的硬鏈接 則真正意義上洗掉了block 檔案被洗掉

    硬鏈接顯示為普通檔案 可直接使用rm 洗掉

    當所有的硬鏈接檔案及源檔案被洗掉后,再存放新的資料會占用這個檔案的空間,或者磁盤fsck檢查的時候,洗掉的資料也會被系統回收,

2.軟鏈接

概念說明:

    1. 相當于快捷方式,是一個普通檔案,以l 開頭

    2. 軟連接檔案存盤源檔案的路徑資訊

如何創建:

    ln 源檔案  軟鏈接檔案

    ln -s oldboy.txt oldboy_soft_link.txt

特點總結:

    1. 源檔案被洗掉,鏈接檔案會失效. 洗掉軟鏈接檔案 檔案不是真正的洗掉,不影響源檔案

    2. 創建多個軟連接檔案,會占用多個inode空間

    3. 目錄也可以創建軟連接

用途說明:

    1. 減少開發人員代碼修改難度

  

3.關于硬鏈接的企業面試題:

    01. 創建一個檔案,有幾個硬鏈接數?

        1個硬鏈接

    02. 創建一個目錄,有幾個硬鏈接數

        2個硬鏈接

          目錄本身占用一個硬鏈接

          目錄下面的點 . 占用一個硬鏈接

        總結:目錄的硬鏈接數==本身目錄(1)+目錄中 .(1個)+目錄中的自目錄中的..(1個)

    03. 查看/etc目錄屬性資訊,顯示的硬鏈接數是什么意思

       drwxr-xr-x. 80 root root 8192 Oct 10 01:47 /etc/

          80 = etc(1)+ .(1) + 78個子目錄(..)

          ll /etc|grep -c "^d"

          78

 

 

10.第三次考題

一, 簡答題

1.什么是buffer和cache

答:寫入資料到記憶體里,這個存盤資料的空間稱為緩沖區(buffer)

    從記憶體讀取資料,這個存資料的記憶體空間稱為快取區(cache)

2.硬鏈接和軟連接的區別

  答:1)軟鏈接可以理解成快捷方式,它和windows下的快捷方式的作用是一樣的

  軟鏈接檔案的大小和創建時間和源檔案不同,軟鏈接檔案只是維持了從軟鏈接到源檔案的指向關系,不是源檔案的內容,大小不一樣容易理解,

      2)硬鏈接等于cp -p 加 同步更新

  硬鏈接檔案和源檔案的大小和創建時間一樣,硬鏈接檔案的內容和源檔案的內容一模一樣,相當于copy了一份

3.Linux下通過 mkdir 命令創建一個新目錄/oldboy它的硬鏈接數是多少,為什么?

答:2個,因為:

1.創建的目錄本身為一個硬鏈接,

2.新目錄ett下的隱藏目錄.(點號)為創建的新目錄的又一個硬鏈接,也算一個鏈接數,因此,硬鏈接數是2,

如果在/oldboy/下面再創建一個目錄 test,再問/oldboy/的硬鏈接數是多少?為什么,

       3個,因為創建的目錄是上級目錄的一個硬鏈接,oldboy這個目錄它本身就有兩個硬鏈接,相加起來就是3個,

4,請執行命令取出 Linux 中 eth0 的 IP 地址(不低于2種方法),

  答:

1)hostname -I

      2)ip a|sed -rn ‘s#.*et (.*)/24 br.*#\1#gp’

      3)ip a|awk -F "[ /]+" 'NR==9{print $3}'

5,請寫出,ll -hi /etc 顯示輸出的每一列含義(以空格為分隔符),

  33899913 drwxr-xr-x.     3       root    root   101     May 15 07:01   abrt

答 inode 檔案屬性與權限 硬鏈接數   屬主    屬組 檔案大小  檔案修改時間  檔案名

6,請寫出20個學過的命令及引數以及他們的作用,

7,請簡單寫出xshell鏈接不上虛擬機排錯流程

8,請寫出eth0網卡組態檔中必須存在的條目選項,

答:

TYPE=Ethernet

   BOOTPROTO=none

   ONBOOT=yes

   NAME=eth0

   DEVICE=eth0

   IPADDR=10.0.0.201

   PREFIX=24

   NETMASK=10.0.0.254

   DNS1=1.2.4.8

9,說說inode與block特點

  答:

inode 是用來存盤資料屬性資訊的,他包含有指向檔案物體的指標功能,但他不包括檔案名,

       block 是用來存盤實際資訊的

10,寫出命令列下五個常用快捷鍵及作用

答:

ctrl + a  游標快速移動到行首  Home

   ctrl + e  游標快速移動到行尾  End

   ctrl + l  快速清屏 相當于翻頁

   ctrl + s  鎖當前的視窗

   ctrl + r  搜索用過的命令

   ctrl + u  剪切游標前的內容

   ctrl + k  剪切游標后的內容

   ctrl + y  粘貼剪切的內容

   ctrl + ←  快速移動游標向左一個單詞

   ctrl + →  快速移動游標向右一個單詞

   ctrl + c  撤銷 中止當前的操作

 

二.常見錯誤提示決議類(給出你的翻譯)

1.cannot create directory “oldboy” file exists  無法創建目錄“oldboy”檔案存在

2.no such file or directory   沒有這樣的檔案或目錄

3.-bash: command not found    bash:未找到命令

4.connection failed    連接失敗

Could not connect to '10.0.0.100' (port 22): Connection failed.

無法連接到“10.0.0.100”(埠22):連接失敗

5.name or server not known   名稱或服務器未知

6.cp: omitting directory ‘/etc/sysconfig/’ cp:忽略目錄' /etc/sysconfig/ '

7.Permission denied  權限被拒絕

8.Not a directory   不是一個目錄

 

三,請寫出命令滿足作業需求

1,查看磁盤inode的使用率   df -i  df -ih

2,當前路徑下有一a.tar.gz壓縮包,我想將其解壓到/home/GAO666中

 tar xf a.tar.gz -C /home/GAO666                

3,臨時和永久關閉seLinux和防火墻 

vim /etc/selinux/config 

SELINUX=disabled  setenforce 0   

systemctl stop firewalld  

systemctl disable firewalld  

4,永久關閉防火墻關閉后查看防火墻狀態  

iptables-save

5,已知我曾經創建了一個名字叫做gao什么的檔案,里面放置了我的私密資訊,最近體重增長了,我想更新下那個檔案的內容,找不到了,怎么辦?

find -type f -name “gao*”

6,NetworkManager臨時和永久關閉

systemctl stop NetworkManager    systemctl disable NetworkManager

7,因開發需要,我們要實時監測系統日志/var/log/messages的實時更新,請寫出命令完成,tail -f

8,如何查詢一個軟體是否安裝 

rpm -qa

 

 

第九章 通配符與特殊符號

.        #當前目錄,任意一個字符(正則)

..     #當前目錄的上一級目錄

*      #任意0個或多個字符(文本) (通配符)

>     #輸出重定向會清空原來的內容,然后在里面追加內容

>>    #追加輸出重定向,追加到檔案的最后一行

<     #輸入重定向,tr      xargs

<<    #用來給檔案追加多行文本

!      #find與awk中表示取反,linux中bash命令列使用

       邏輯運算中的“非”;vi/vim 強制退出;!+字母,調出最近一次以此字母開頭的命令

     !!使用最近一次操作的命令   !+數字  調出歷史的第幾條命令

?      #任意一個字符,通配符

#      #表示注釋     Linux會忽視他,給人看的,解釋說明,

       #root用戶的提示符

|       #管道,或者(正則) | xargs將前一個命令的結果交給后一個命令來處理

$      #以,,,結尾(正則),$LANG  $取變數內容

^      #以.......開頭(正則運算式)

~      #當前用戶的家目錄

``      #(反引號)  $() #參考命令的結果   ``中間是命令,會先執行,等價$()

&&   #并且 同時成立    前一個命令成功在執行后一個命令

[]       #表示一個范圍,集合 [abcdefg] [a-g] (正則,通配符)

{}      #產生一個序列,(通配符)

;    #分號,分隔多個命令

‘’ #不具有變數置換功能, 輸出時所見即所得(吃啥吐啥)

“” #雙引號   具有變數置換功能,決議變數輸出

/      #根,路徑分隔符

\      #轉義符號   \班長====>>學生

?    #通配符  正則運算式

01. 特殊符號

1.基礎符號系列:

美元符號:$

    1)用于取出變數中的內容

    2)用于取出指定列的資訊(awk) ???

    3)表示用戶命令提示符號

       超級用戶為 #

       普通用戶為 $

   

嘆號符號:!

    1)用于表示取反或者排除意思

    2)命令列中表示取出最近命令

    3)用于表示強制操作處理

       vim底行模式保存 退出 wq! q!   

   

豎線符號:|

    管道符號:將前面命令執行的結果交給后面命令進行處理

              xargs --> 后面命令處理

    什么時候用到xargs進行過濾:

    一般基礎命令接收管道傳過來的資訊,都要用xargs命令進行過渡 rm cp mv

    高級命令接收管道傳過來的資訊,可以不用xargs命令進行過度   grep sed awk

   

井號符號:#

    1)表示檔案內容注釋符號

    2)表示用戶命令提示符號

       超級用戶為 #

       普通用戶為 $

 

2.引號符號系列:

'':       所見即所得

"":     會將指定內容進行輸出,有些資訊會被決議 $ ``

          echo "PS1='\[\e[32;1m\][\u@\h \W]\\$\[\e[0m\] '" >>/etc/profile

``:   將反引號中的命令優先執行,將執行結果交給外面的命令進行處理 ==$()

          rpm -qf `which tree`

沒有引號:和雙引號功能類似,可以識別通配符號資訊

 

3.重定向符號系列:

>:       標準輸出重定向符號

2>:     錯誤輸出重定向符號

>>:   標準輸出追加重定向符號

2>>: 錯誤輸出追加重定向符號

<:    標準輸入重定向符號

<<:   標準輸入追加重定向

   

錯誤和正確資訊都記錄到一個日志檔案中 ??? -- 定時任務

方法1: 2>>tar.log >>tar.log  

方法2: &>>tar.log

方法3: >>tar.log 2>&1

 

4.路徑資訊系列:

單點符號:.  表示當前目錄

雙點符號:..表示上級目錄

波浪符號  ~ 表示用戶家目錄資訊

                     超級用戶:/root

                       普通用戶:/home/用戶名稱

橫線符號:-  兩個目錄路間進行切換

   

系統邏輯符號:

    &&:前面命令執行成功,在執行后面命令

          [root@oldboymeng ~]# mkdir -p /oldgirl && echo "前面命令執行成功"||echo "前面命令執行失敗"

             前面命令執行成功

    ||:前面命令執行失敗,再執行后面命令

             [root@oldboymeng ~]# mkdr -p /oldgirl && echo "前面命令執行成功"||echo "前面命令執行失敗"

             -bash: mkdr: command not found

             前面命令執行失敗

02. 通配符(wildcard)

通配符指的是包含這些字符的字串,“?” “*” “[]” “{}”.他是shell的內置功能

通配符是用來匹配/查找檔案名,Linux命令基本都支持通配符,

 

通配符含義=============>>匹配檔案名

 

符號                           作用

*                匹配任何字串/文本,包括空字串

                代表任意字符(0個或多個)

?              匹配任何一個字符(不在括號內時)?代表任意一個字符

[abcd]           匹配abcd中任何一個字符

[a-z]             表示范圍a到z,-表示范圍的意思

{__}             表示生成序列,以逗號分隔,且不能有空格

[!abcd][^abcd]     表示非,表示不匹配括號里面的任何一個字符

 

系統通配符號:借助通配符號 匹配檔案名稱資訊

*: 匹配所有(任意)字符資訊

find /oldboy -type f  -name "old*"   找尋以什么資訊開頭的檔案

find /oldboy -type f  -name "*txt"   借助正則符號無法匹配檔案名稱資訊  

find /oldboy -type f  -name "old*txt"

   

{}: 批量創建資料資訊

echo {01..10}   echo {01..10..2}  echo {01,03,09}

touch oldboy{01..10}

不同序列資訊,可以進行組合

[root@oldboymeng ~# echo A{A,B}

AA AB

[root@oldboymeng ~# echo A{,B}

A AB

 

ifcfg-eth0  ifcfg-eth0.bak -- cp ifcfg-eth0  ifcfg-eth0.bak

[root@oldboymeng ~# echo A{A,}

AA A

   

快速備份資料:

cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.bak

 

轉換:

cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.bak}     cp 源 目標

cp /etc/sysconfig/network-scripts/ifcfg-eth0  /etc/sysconfig/network-scripts/ifcfg-eth0.bak

   

快速還原資料:

cp /etc/sysconfig/network-scripts/ifcfg-eth0{.bak,}

 

 

 

第十章  正則運算式

通過正則運算式從字串中我們可以取出檔案中正確的身份證號碼;幫助我們快速過濾

通配符作用:查找檔案名    (支持Linux大部分命令都支持   以.txt結尾)

正則作用:在檔案中過濾內容   (支持的命令:三劍客sed,grep,awk,Python,java)

正則運算式注意事項:神坑-中文符號

正則運算式分類:基本正則+擴展正則

01.基本正則運算式  grep  sed

為處理大量的字串而定義的一套規則和方法,通過定義這些的特殊符號的輔助,系統管理員可以快速過濾,替換或輸出需要的字串

1.【^】  以...開頭

[root@oldboymeng ~# grep "^I" oldboy.txt

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinese chess!

2.【$】  以...結尾

[root@oldboymeng ~# grep "m$" oldboy.txt

my blog is http://oldboy.blog.51cto.com

3.【^$】 空行    -n 顯示行號

過濾檔案內的空行:  

[root@oldboymeng ~]# grep '^$' datafile

^my blog is http://oldboy.blog.51cto.com$

^$

 

組態檔:如何更好的閱讀

#行 空行  --- 屏蔽掉

[root@oldboymeng ~# grep -v "^$" oldboy.txt

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinese chess!

my blog is http://oldboy.blog.51cto.com

our site is http://www.etiantian.org

my qq num is 49000448.

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

4.【.】  任意一個字符,不會匹配空行

[root@oldboymeng ~# grep . oldboy.txt -o

I

 

a

m

 

o

5.【\】  轉義字符,讓有意義的字符脫掉馬甲,還原他本身的含義

將有意義的符號資訊,變成沒有意義    

[root@oldboymeng ~# grep "\.$" oldboy.txt

I teach linux.

my qq num is 49000448.

not 4900000448.

 

將沒有意義的字符資訊,變成有意義的資訊

\t: 制表符

\n: 換行符

\r: 換行符

[root@oldboymeng ~# echo -e "oldboy01\noldboy02"

oldboy01

oldboy02

6.【*】  前一個字符出現了0次或0次以上(逐行匹配)

[root@oldboymeng ~# grep "0*" oldboy.txt -o

000

00000

7.【.*】 所有內容,包括空行

 

8.【[]】 匹配多個字符資訊(或者關系),他里邊的字符都用或者區分,都包含,但都各是各

 

9.【[^]】排除指定的字符資訊不要進行匹配, ^在里邊是取反的,不包含里邊的字符的意思

需求:排除小寫字母資訊不要顯示

[root@oldboymeng ~# grep -v [a-z] oldboy.txt

 

[root@oldboymeng ~# grep [^a-z] oldboy.txt

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinese chess!

my blog is http://oldboy.blog.51cto.com

our site is http://www.etiantian.org

my qq num is 49000448.

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

02.擴展正則運算式  grep -E/egrep  sed -r awk

1.【+】  ---前一個字符出現1次或1次以上

--- 匹配前一個字符連續出現1次或者多次

[root@oldboymeng ~# grep -E "0+" oldboy.txt

my qq num is 49000448.

not 4900000448.

2.【|】  ---管道符在正則運算式中的意思是或者

--- 匹配的資訊之間是或者的關系

[root@oldboymeng ~# grep -Ev "^$|^#" oldboy.txt

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinese chess!

our site is http://www.etiantian.org

my qq num is 49000448.

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

 

[root@oldboymeng ~# grep  -E "oldb(o|e)y" oldboy.txt

I am oldboy teacher!

#my blog is http://oldboy.blog.51cto.com

my god ,i am not oldbey,but OLDBOY!

3.【()】 ---表示一個整體,反向參考/后向參考

--- 將多個字符資訊匯總為一個整體進行過濾

--- 替換修改檔案內容,后向參考前項

[root@oldboymeng ~# echo 123456

123456

 

[root@oldboymeng ~# #echo 123456|xxx --> <123456>

 

[root@oldboymeng ~#

 

[root@oldboymeng ~# echo 123456|sed "s#123456#<123456>#g"

<123456>

 

[root@oldboymeng ~# echo 123456|sed "s#(.*)#<\1>#g"

sed: -e expression #1, char 13: invalid reference \1 on `s' command's RHS

 

[root@oldboymeng ~# echo 123456|sed -r "s#(.*)#<\1>#g"

<123456>

 

[root@oldboymeng ~# echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#\1#g"

1

 

[root@oldboymeng ~# echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#\1\2#g"

12

 

[root@oldboymeng ~# echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#\1\2\3#g"

123

 

[root@oldboymeng ~# echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#<\1>\2\3\4\5\6#g"

<1>23456

       

示例:批量創建用戶資訊(設定固定密碼)

第一個歷程:生成序列資訊

[root@oldboymeng ~# echo {01..10}|xargs -n1

01

02

03

04

05

06

07

08

09

10

 

[root@oldboymeng ~# seq 10

1

2

3

4

5

6

7

8

9

10

 

[root@oldboymeng ~# seq -w 10

01

02

03

04

05

06

07

08

09

10

 

第二個歷程:生成命令資訊,交給bash命令執行

[root@oldboymeng ~# seq -w 10|sed -r 's#(.*)#useradd oldboy\1;echo 123456|passwd --stdin oldboy\1#g'|bash

useradd: user 'oldboy01' already exists

Changing password for user oldboy01.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy02.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy03.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy04.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy05.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy06.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy07.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy08.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy09.

passwd: all authentication tokens updated successfully.

Changing password for user oldboy10.

passwd: all authentication tokens updated successfully.

     

思考:如何批量創建用戶,并且每個用戶的密碼是隨機密碼

1. 如何生成隨機密碼資訊---如何生成隨機字符

2. 隨機密碼資訊如何保留下來

 

腳本如何實作???

4.【{}】 ---{n,m}匹配其前面的字符出現至少n次,至多m次

--- 匹配前一個字符連續出現指定的次數

{n,m}  --- 匹配前一個字符連續最少出現n次  最多出現m

[root@oldboymeng ~# grep -E "0{3,5}" oldboy.txt

my qq num is 49000448.

not 4900000448.

 

[root@oldboymeng ~# grep -E "0{3,5}" oldboy.txt -o

000

00000

 

[root@oldboymeng ~# grep -E "0{2,4}" oldboy.txt

my qq num is 49000448.

not 4900000448.

 

[root@oldboymeng ~# grep -E "0{2,4}" oldboy.txt -o

000

0000

 

[root@oldboymeng ~# grep -E "0{1,4}" oldboy.txt -o

000

0000

0

 

[root@oldboymeng ~# grep -E "0{1,4}" oldboy.txt

my qq num is 49000448.

not 4900000448.

         

{n}  --- 匹配前一個字符連續正好出現n

[root@oldboymeng ~# grep -E "0{3}" oldboy.txt

my qq num is 49000448.

not 4900000448.

 

[root@oldboymeng ~# grep -E "0{3}" oldboy.txt -o

000

000

         

{n,}  --- 匹配前一個字符連續最少出現n次,最多出現次數沒有限制

[root@oldboymeng ~# grep -E "0{2,}" oldboy.txt

my qq num is 49000448.

not 4900000448.

 

[root@oldboymeng ~# grep -E "0{2,}" oldboy.txt -o

000

00000

 

[root@oldboymeng ~# grep -E "0{4,}" oldboy.txt

not 4900000448.

 

[root@oldboymeng ~# grep -E "0{4,}" oldboy.txt -o

00000

         

{,m}  --- 匹配前一個字符連續最少出現0次,最多出現次數m

[root@oldboymeng ~# grep -E "0{,4}" oldboy.txt

I am oldboy teacher!

I teach linux.

 

I like badminton ball ,billiard ball and chinese chess!

#my blog is http://oldboy.blog.51cto.com

our site is http://www.etiantian.org

my qq num is 49000448.

 

not 4900000448.

my god ,i am not oldbey,but OLDBOY!

 

[root@oldboymeng ~# grep -E "0{,4}" oldboy.txt -o

000

0000

0

5.【?】  ---匹配前一個字符重復0次或1次

 

03.正則匹配資訊:

01. 具有貪婪匹配特性

解決方法:

[root@oldboymeng ~# grep "^m.*og " oldboy.txt

my blog is http://oldboy.blog.51cto.com

[root@oldboymeng ~# grep "^m.*g " oldboy.txt

my blog is http://oldboy.blog.51cto.com

 

02. 過濾時顯示的資訊不正確

grep過濾資訊,過濾資訊外面使用雙引號

sed awk過濾資訊,過濾資訊外面使用單引號

 

04.測驗練習:

如何取出IP地址:

sed

第一個歷程:獲取有IP地址資訊命令

ip address show eth0

   

第二個歷程:定位有IP地址資訊行

[root@oldboymeng ~# ip a s eth0|sed -n '3p'

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

   

第三個歷程:取出指定資訊

[root@oldboymeng ~# ip a s eth0|sed -n '3p'

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|sed -n '3p'|sed -r "s#^.*t (.*)#\1#g"

10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|sed -n '3p'|sed -r "s#^.*t (.*)#\1#g"|sed -r 's#(.*)/24.*$#\1#g'

             10.0.0.201

   

第四個歷程:命令整合:

第一次整合:

sed -r 's#^.*t (.*)#\1#g'

sed -r 's#(.*)/24.*$#\1#g'

 

sed -r 's#^.*t (.*)/24.*$#\1#g'

 

[root@oldboymeng ~# ip a s eth0|sed -n '3p'|sed -r 's#^.*t (.*)/24.*$#\1#g'

10.0.0.201

 

第二次整合:

sed -n '3p'

sed -r 's#^.*t (.*)/24.*$#\1#g'

 

sed -nr '3s#^.*t (.*)/24.*$#\1#gp'

 

[root@oldboymeng ~# ip a s eth0|sed -nr '3s#^.*t (.*)/24.*$#\1#gp'

10.0.0.201

 

grep:

第一個歷程:獲取有IP地址資訊命令

ip address show eth0

 

第二個歷程:定位有IP地址資訊行    

[root@oldboymeng ~# ip a s eth0|grep global

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|grep inet

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

inet6 fe80::20c:29ff:fe37:df1b/64 scope link

 

[root@oldboymeng ~# ip a s eth0|grep -w inet

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

   

第三個歷程:取出指定資訊

[root@oldboymeng ~# ip a s eth0|grep -w inet

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep "[0-9].[0-9].[0-9].[0-9]"

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep "[0-9]+.[0-9]+.[0-9]+.[0-9]+"

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "[0-9]+.[0-9]+.[0-9]+.[0-9]+"

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "[0-9]+.[0-9]+.[0-9]+.[0-9]+" -o

10.0.0.201

10.0.0.255

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "[0-9]+.[0-9]+.[0-9]+.[0-9]+" -o|head -1

10.0.0.201

 

[root@oldboymeng ~#

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "([0-9]+.){3}[0-9]+"

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "([0-9]+.){3}[0-9]+" -o

10.0.0.201

10.0.0.255

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "([0-9]+.){4}" -o

10.0.0.201/

10.0.0.255

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "([0-9]+.){4}"

    inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "([0-9]+\.){4}"

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "([0-9]+\.?){4}"

    inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

[root@oldboymeng ~# ip a s eth0|grep -w inet|grep -E "([0-9]+\.?){4}" -o

10.0.0.201

10.0.0.255

 

  awk???

 

05.三劍客之sed命令

sed - stream editor for filtering and transforming text

流編輯器工具(檔案字符流進行處理編輯)

作用: 擅長對檔案的行進行處理  修改編輯檔案內容

語法:sed [引數] '條件 指令(如何處理)'  檔案資訊

      sed -n '/oldboy/p'  oldboy.txt

引數:

       -n  取消默認輸出

       -i  真實修改檔案內容

       -e  識別多個指令資訊,可以讓多個指令同時執行

       -r  識別擴展正則符號資訊

指令:

      p   print  輸出資訊    

       d   delete 洗掉檔案資訊

       i   insert 在指定條件行的上面添加資訊

       a   append 在指定條件行的下面添加資訊

       s   substitute  取代==替換

       g   global 將所有匹配的資訊都做替換(沒有 將一行中第一個匹配的資訊做替換)

       c   change 修改替換指定的整行資訊

 

sed命令執行原理: ---按行處理檔案資訊

 

sed命令操作實踐:

sed命令能完成什么事情:增 刪 改 查 (處理文本檔案  組態檔-sed  日志檔案-grep/awk)

 

測驗環境準備:

cat >person.txt<<EOF

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

EOF

 

1.如何查詢資訊:

需求:查詢單行資訊:

1. 將第3行資訊進行顯示

[root@oldboymeng ~# sed -n '3p' person.txt

103,Alex,COO

 

2. 將有oldboy的行進行顯示

[root@oldboymeng ~# sed -n '/oldboy/p' person.txt

101,oldboy,CEO

    

需求:查詢多行資訊

1. 將第3~5行資訊進行顯示

# sed -n '3,5p' person.txt

103,Alex,COO

104,yy,CFO

105,feixue,CIO

 

2. oldboy ~ alex資訊進行顯示

# sed -n '/oldboy/,/Alex/p' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,COO

 

3. 只查看第3行和第5行內容

# sed -n '3p;5p' person.txt

103,Alex,COO

111,Alex,CEO

 

4.只查看有oldboyalex資訊

#sed -n '/oldboy/p;/Alex/p' person.txt

101,oldboy,CEO

103,Alex,COO

111,Alex,CEO

 

2.如何洗掉檔案資訊

需求:

01. 將第三行資訊進行洗掉

[root@oldboymeng ~# sed '3d' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

[root@oldboymeng ~# cat person.txt

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,COO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

[root@oldboymeng ~# sed -i '3d' person.txt

[root@oldboymeng ~# cat person.txt

101,oldboy,CEO

102,zhaoyao,CTO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

 

02. 將有oldboy資訊的行進行洗掉

sed '/oldboy/d' person.txt

sed -i '/oldboy/d' person.txt   

 

03. oldboyAlex資訊的行進行洗掉 

[root@oldboymeng ~# sed '/oldboy/d;/Alex/d' person.txt

102,zhaoyao,CTO

104,yy,CFO

105,feixue,CIO

[root@oldboymeng ~# sed -r '/oldboy|Alex/d' person.txt

102,zhaoyao,CTO

104,yy,CFO

105,feixue,CIO

  

3.如何增加資訊

需求:

01. 在第3行后面增加新的一行  內容 oldboy61

[root@oldboymeng ~# sed '3a oldboy61' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,COO

oldboy61

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

 

02. 在第5行前面增加新的一行  內容 oldboy61  

[root@oldboymeng ~# sed '5i oldboy61' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,COO

104,yy,CFO

oldboy61

111,Alex,CEO

105,feixue,CIO

         

03. 在第3行前面加oldboy61,同時在第5行后面加oldboy61      

[root@oldboymeng ~# sed -e '3ioldboy61' -e '5aoldboy61' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

oldboy61

103,Alex,COO

104,yy,CFO

111,Alex,CEO

oldboy61

105,feixue,CIO

    

04. 在檔案最后一行后面,添加多行資訊

[root@oldboymeng ~# sed -e '$aoldboy61' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,COO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

oldboy61

 

[root@oldboymeng ~# sed '$aoldboy61\noldboymeng' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,COO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

oldboy61

oldboymeng

    

4.替換修改檔案內容:

需求

01. 123456 資訊顯示 <123456>

[root@oldboymeng ~# echo 123456|sed -r 's#(.*)#<\1>#g'

<123456>

[root@oldboymeng ~# echo 123456|sed  's#.*#<&>#g'

<123456>

[root@oldboymeng ~# echo 123456|sed -r 's#([0-9]+)#<\1>#g'

<123456>

 

02.123456 資訊顯示 <123><456>

[root@oldboymeng ~# echo 123456|sed -r 's#([0-9]{3})#<\1>#g'

<123><456>

[root@oldboymeng ~# echo 123456|sed -r 's#(.{3})#<\1>#g'

<123><456>        

 

03.123456 資訊顯示 <1><2><3><4><5><6>

[root@oldboymeng ~# echo 123456|sed -r 's#([0-9])#<\1>#g'

<1><2><3><4><5><6>

[root@oldboymeng ~# echo 123456|sed -r 's#([0-9]{1})#<\1>#g'

<1><2><3><4><5><6>

[root@oldboymeng ~# echo 123456|sed -r 's#(.)#<\1>#g'

<1><2><3><4><5><6>

     

修改檔案內容:

使用-i引數問題:

01. -i.bak 表示對源檔案進行備份  -- i引數后面不能跟其他引數

#sed -ri.bak 's#(.*)#<\1>#g' oldboy.txt

# ll oldboy.txt*

-rw-r--r--. 1 root root 9 Oct 10 13:52 oldboy.txt

-rw-r--r--. 1 root root 7 Oct 10 13:52 oldboy.txt.bak

 

02. 在利用-i替換檔案內容資訊,-i引數和-n引數一定不能同時使用

替換的錯誤方法

[root@oldboymeng ~# sed -n '/Alex/s#COO#CEO#gp' person.txt

103,Alex,CEO

[root@oldboymeng ~# sed -ni.bak '/Alex/s#COO#CEO#gp' person.txt

[root@oldboymeng ~# cat person.txt

103,Alex,CEO

[root@oldboymeng ~# cat person.txt.bak

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,COO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

正確替換方法

[root@oldboymeng ~# sed -i '/Alex/s#COO#CEO#g' person.txt

[root@oldboymeng ~# cat person.txt

101,oldboy,CEO

102,zhaoyao,CTO

103,Alex,CEO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

   

02. 批量修改檔案擴展名稱

方法一:

find /oldboy -maxdepth 1 -type f -name "oldboy*.txt"|sed -r 's#(.*)txt#mv \1txt \1jpg#g'|bash

mv /oldboy/oldboy.txt /oldboy/oldboy.jpg

mv /oldboy/oldboy01.txt /oldboy/oldboy01.jpg

mv /oldboy/oldboy02.txt /oldboy/oldboy02.jpg

mv /oldboy/oldboy03.txt /oldboy/oldboy03.jpg

mv /oldboy/oldboy04.txt /oldboy/oldboy04.jpg

mv /oldboy/oldboy05.txt /oldboy/oldboy05.jpg

mv /oldboy/oldboy06.txt /oldboy/oldboy06.jpg

mv /oldboy/oldboy07.txt /oldboy/oldboy07.jpg

mv /oldboy/oldboy08.txt /oldboy/oldboy08.jpg

mv /oldboy/oldboy09.txt /oldboy/oldboy09.jpg

mv /oldboy/oldboy10.txt /oldboy/oldboy10.jpg

   

方法二:

[root@oldboymeng /oldboy# ls oldboy*.txt|xargs -n1|sed -r 's#(.*)txt#mv & \1jpg#g'

mv oldboy01.txt oldboy01.jpg

mv oldboy02.txt oldboy02.jpg

mv oldboy03.txt oldboy03.jpg

mv oldboy04.txt oldboy04.jpg

mv oldboy05.txt oldboy05.jpg

mv oldboy06.txt oldboy06.jpg

 

方法三:利用rename

#rename "修改檔案名稱什么資訊" "修改成什么"  修改什么檔案

rename ".txt" ".jpg" oldboy*.txt

   

03. 取出檔案權限數值資訊

方法一:

[root@oldboymeng ~# stat /etc/hosts|sed -nr '4s#^A.*s: \((.*)/-.*$#\1#gp'

0644

 

[root@oldboymeng ~# stat /etc/hosts|sed -n '4s#^A.*s: (\(.*\)/-.*$#\1#gp'

0644

 

方法二:???

[root@oldboymeng ~# ll /etc/hosts|sed -r 's#^-(.*)\. 1.*$#\1#g'

rw-r--r--

 

[root@oldboymeng ~# ll /etc/hosts|sed -r 's#^-(.*)\. 1.*$#\1#g'|tr "rwx-" "4210"

420400400

   

04.特殊替換檔案內容資訊:

[root@oldboymeng ~# sed -n '3s/#103/103/gp' person.txt

103,Alex,COO

 

[root@oldboymeng ~# sed -n '3s#\#103#103#gp' person.txt

103,Alex,COO

 

05.修改整行資訊:

[root@oldboymeng ~# sed '3coldboy61' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

oldboy61

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

 

06.取消空行不要顯示

方法一:

[root@oldboymeng ~# sed '/^$/d' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

#103,Alex,COO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

 

方法二:

[root@oldboymeng ~# sed -n '/^$/!p' person.txt

101,oldboy,CEO

102,zhaoyao,CTO

#103,Alex,COO

104,yy,CFO

111,Alex,CEO

105,feixue,CIO

 

擴展:利用sed命令顯示檔案行號資訊

       sed '=' person.txt|xargs -n2

 

06.三劍客之awk命令

1.awk三劍客命令概述

1)作用:擅長取列 擅長統計運算

 

2)語法:awk [引數] '模式(條件){動作}(指令)'  檔案資訊

       awk命令引數:

-F  : 指定分隔符號資訊  ":"  "[:/]"  "[:/]+"

-v  : 設定變數資訊

       awk命令動作:

       print: 列印輸出資訊  空格 , " "  字串 "oldboy"  變數資訊  oldboy  指定列 $1 $NF $(NF-1) $0(所有列)

       gsub:  替換指定列的資訊   gsub(/要替換的內容/,"替換成什么",$N)

       計算:

       累加運算:i=i+1  i++

       求和運算:i=i+$n       

       awk內置變數:

       FS NF NR

模式:常用模式 特殊模式(BEGIN END)

 

3)原理:

gawk - pattern scanning and processing language

      模式掃描(條件匹配)and 程式語言

awk: 擅長取列  擅長統計分析(nginx zabbix tomcat ... SSH)ELK awk

 

[root@oldboymeng ~# which awk

/usr/bin/awk

[root@oldboymeng ~# ll /usr/bin/awk

lrwxrwxrwx. 1 root root 4 May 31 16:06 /usr/bin/awk -> gawk

 

 

把檔案內容按列對齊:

column -t test.txt

2.awk三劍客命令實踐操作:查詢 排除 替換

部署準備環境:

cat > oldboy.txt <<EOF    捐款 1   2   3

Zhang  Dandan    41117397    :250:100:175

Zhang  Xiaoyu    390320151   :155:90:201

Meng   Feixue    80042789    :250:60:50

Wu     Waiwai    70271111    :250:80:75

Liu    Bingbing  41117483    :250:100:175

Wang   Xiaoai    3515064655  :50:95:135

Zi     Gege      1986787350  :250:168:200

Li     Youjiu    918391635   :175:75:300

Lao    Nanhai    918391635   :250:100:175

EOF

 

實踐操作練習:

01. 顯示xiaoyu的姓氏和ID號碼

滿足需求不符合規范

[root@oldboymeng ~# awk '/Xiaoyu/{print $1 $3}' oldboy.txt

Zhang390320151

[root@oldboymeng ~# awk '/Xiaoyu/{print $1,$3}' oldboy.txt

Zhang 390320151

[root@oldboymeng ~# awk '/Xiaoyu/{print $1" "$3}' oldboy.txt

Zhang 390320151

 

按照指定列進行搜索資訊

[root@oldboymeng ~# awk '/Xiaoyu/' oldboy.txt        --- 將匹配資訊的行直接顯示

Zhang  Xiaoyu    390320151   :155:90:201

Xiaoyu zhang     390320151   :155:90:201

[root@oldboymeng ~# awk '$2~/Xiaoyu/' oldboy.txt     --- 指定列資訊匹配

Zhang  Xiaoyu    390320151   :155:90:201

[root@oldboymeng ~# awk '$2!~/Xiaoyu/' oldboy.txt

Zhang  Dandan    41117397    :250:100:175

Xiaoyu zhang     390320151   :155:90:201

Meng   Feixue    80042789    :250:60:50

Wu     Waiwai    70271111    :250:80:75

Liu    Bingbing  41117483    :250:100:175

Wang   Xiaoai    3515064655  :50:95:135

Zi     Gege      1986787350  :250:168:200

Li     Youjiu    918391635   :175:75:300

Lao    Nanhai    918391635   :250:100:175

 

滿足要求,正確語法格式

[root@oldboymeng ~# awk '$2~/Xiaoyu/{print $1,$3}' oldboy.txt

Zhang 390320151

 

PS:awk命令默認區分大小寫  沒有類似grep命令 -i引數功能

 

02.姓氏是zhang的人,顯示他的第二次捐款金額及他的名字

第一歷程:找出姓氏是張的人

[root@oldboymeng ~# awk '$1~/Zhang/' oldboy.txt

Zhang  Dandan    41117397    :250:100:175

Zhang  Xiaoyu    390320151   :155:90:201

 

第二歷程:顯示出名字資訊和所有捐款記錄

[root@oldboymeng ~# awk '$1~/Zhang/{print $2,$4}' oldboy.txt

Dandan :250:100:175

Xiaoyu :155:90:201

PS:awk默認使用空格進行作為列分隔符

 

第三歷程:指定字符資訊作為分隔符

[root@oldboymeng ~# awk -F "[: ]+" '$1~/Zhang/{print $2,$5}' oldboy.txt

Dandan 100

Xiaoyu 90

 

總結:

    01. awk默認使用空格分隔列

    02. 可以使用-F 指定分隔列的符號資訊

    03. 利用-F "[: ]+"  +表示將多個連續的分隔符匯總為一個整體

 

03. 顯示所有以41開頭的ID號碼的人的全名和ID號碼

第一個歷程:找出匹配id號碼是41開頭的行資訊 --- 找出東西(模式寫好)

[root@oldboymeng ~# awk '$3~/^41/' oldboy.txt

Zhang  Dandan    41117397    :250:100:175

Liu    Bingbing  41117483    :250:100:175

 

第二個歷程:顯示出人的全名 ID號碼 --- 對找出東西進行處理(執行動作)

[root@oldboymeng ~# awk '$3~/^41/{print $1,$2,$3}' oldboy.txt|column -t

Zhang  Dandan    41117397

Liu    Bingbing  41117483

 

04. 顯示所有ID號碼最后一位數字是15的人的全名

第一個歷程:找出id號碼以15結尾資訊   --- 找出資訊

awk '$3~/1$|5$/' oldboy.txt

awk '$3~/[15]$/' oldboy.txt

 

第二個歷程:顯示全名資訊               --- 找出資訊做處理

awk '$3~/[15]$/{print $1,$2}' oldboy.txt|column -t

 

05. 顯示檔案中第二行,第三列的資訊

第一個歷程:匹配第二行

[root@oldboymeng ~# awk 'NR==2' oldboy.txt

Zhang  Xiaoyu    390320151   :155:90:201

 

第二個歷程:顯示第三列

awk 'NR==2{print $3}' oldboy.txt

 

測驗:利用awk取出IP地址資訊(grep sed

第一個歷程:定位有IP地址的行          --- 找出資訊

ip a s eth0|awk 'NR==3'

inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0

 

第二個歷程:只顯示IP地址              --- 做處理

[root@oldboymeng ~# ip a s eth0|awk -F "[ /]+" 'NR==3{print $3}'

10.0.0.201

 

說明:在不指定-F引數資訊,

1. 默認將多個連續的空格匯總為整體

2. 默認將一行頭部開始空格資訊忽略不計

[root@oldboymeng ~# ip a s eth0|awk -F "[^0-9.]+" 'NR==3{print $2}'

10.0.0.201

 

06. 顯示Xiaoyu的捐款,每個捐款數值都有以$開頭, $110$220$330

方法一:

[root@oldboymeng ~# awk -F "[:]" '$2~/Xiaoyu/{print "$"$2"$"$3"$"$4}' oldboy.txt   ???

$155$90$201

 

方法二:

[root@oldboymeng ~# awk  '$2~/Xiaoyu/{print $4}' oldboy.txt|sed 's#:#$#g'

$155$90$201

[root@oldboymeng ~# awk  '$2~/Xiaoyu/{print $4}' oldboy.txt|tr ":" "$"

$155$90$201

 

方法三:awk替換功能  sed tr

gsub(/要替換的資訊/,"替換成什么",將第幾列進行替換)

[root@oldboymeng ~# awk  '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' oldboy.txt

$155$90$201

   

利用awk排除指定資訊不要顯示

awk '!/^$/' oldboy.txt

3.awk命令高級功能說明

普通模式: 

正則運算式作為模式      

^ 還可以表示某一列的開始

$ 還可以表示某一列的結尾

 

比較運算式作為模式

[root@oldboymeng ~# awk 'NR==1{print $NF}' oldboy.txt

:250:100:175

 

范圍模式  

awk 'NR==1;NR==2' oldboy.txt    --- 只查看第1和第2行

    awk 'NR==1,NR==3' oldboy.txt    --- 查看第一到第三行

特殊模式:  BIGIN  END

BEGIN  在處理檔案之前先執行的動作

1)生成檔案內容表頭資訊

[root@oldboymeng ~# awk 'BEGIN{print "姓氏","名稱","id號碼","捐款記錄"}{print $0}' oldboy.txt |column -t

姓氏    名稱      id號碼      捐款記錄

Zhang   Dandan    41117397    :250:100:175

Zhang   Xiaoyu    390320151   :155:90:201

Xiaoyu  zhang     390320151   :155:90:201

Meng    Feixue    800412789   :250:60:50

Wu      Waiwai    70271111    :250:80:75

Liu     Bingbing  41117483    :250:100:175

Wang    Xiaoai    3515064655  :50:95:135

Zi      Gege      1986787350  :250:168:200

Li      Youjiu    918391635   :175:75:300

Lao     Nanhai    918391635   :250:100:175

 

2)用于在系統中進行運算元值

awk 'BEGIN{print 2+3}'

 

3) 修改或設定變數資訊

 

a. awk命令中,會直接將字串資訊當成變數  $1 $NF $0(取一行中所有列)

[root@oldboymeng ~# awk 'BEGIN{oldboy=62;print oldboy}'

62

 

[root@oldboymeng ~# awk 'BEGIN{oldboy=62;print "oldboy"}'

oldboy

 

b. awk命令中,變數分類:

自定義變數:oldboy=62

內置變數:

NF : 顯示最后一列資訊  $(NF-1) 取倒數第2列

NR : 表示行號資訊,取出第幾行  NR==2 NR>=2 NR<=2

FS : 指定分隔符資訊  -F

 

[root@oldboymeng ~# awk -F ":" 'NR==1{print $2}' oldboy.txt

250

 

[root@oldboymeng ~# awk  'BEGIN{FS=":"}NR==1{print $2}' oldboy.txt

250

 

[root@oldboymeng ~# awk -vFS=":" 'NR==1{print $2}' oldboy.txt

250

 

END    在處理檔案之后再執行的動作 ***

1)顯示表格補充資訊

[root@oldboymeng ~# awk 'BEGIN{print "姓氏","名稱","id號碼","捐款記錄"}{print $0}END{print "總結:這是一個學生登記表"}' oldboy.txt|column -t

姓氏 名稱 id號碼 捐款記錄

Zhang  Dandan    41117397    :250:100:175

Zhang  Xiaoyu    390320151   :155:90:201

Meng   Feixue    800412789    :250:60:50

Wu     Waiwai    70271111    :250:80:75

Liu    Bingbing  41117483    :250:100:175

Wang   Xiaoai    3515064655  :50:95:135

Zi     Gege      1986787350  :250:168:200

Li     Youjiu    918391635   :175:75:300

Lao    Nanhai    918391635   :250:100:175

 

總結:這是一個學生登記表

 

2)顯示計算的最終結果 OK

awk '/^$/{i=i+1}END{print i}' /etc/services

4.awk運算方法:

1)累加運算:a b c d  1+1+1+1

i=i+1 --> i++

練習題01:統計一個檔案中有多少個空行

第一個歷程:找出空行

awk '/^$/' /etc/services

 

第二個歷程:做運算處理

[root@oldboymeng ~# awk '/^$/{i=i+1;print i}' /etc/services

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

 

[root@oldboymeng ~# awk '/^$/{i=i+1}END{print i}' /etc/services

17

    

練習題02:統計/etc/passwd檔案中最后一列有/sbin/nologin的出現了多少次

[root@oldboymeng ~# awk -F ":" '$NF~/nologin$/{i++}END{print i}' /etc/passwd

17

[root@oldboymeng ~# awk '/nologin$/{i++}END{print i}' /etc/passwd

17

2)求和運算: 10 20 30 60

i=i+$n

實踐操作:

[root@oldboymeng ~# seq 10|awk '{i=i+$1;print i}'

1

3

6

10

15

21

28

36

45

55

[root@oldboymeng ~# seq 10|awk '{i=i+$1}END{print i}'

55

 

第十一章Linux系統啟動流程

01.系統啟動流程

1.Centos6

1. 開機加電自檢        --- 檢查bios中識別的硬體資訊是否正常

 

2. 開機MBR引導     --- /boot磁區引導系統啟動的記錄資訊(MBR引導記錄--系統啟動檔案資訊/磁區表資訊)

 

3. grub選擇選單             --- 可以選擇系統內核資訊/可以選擇進入單用戶模式

 

4. 加載內核資訊        --- 用于管理控制硬體

 

5. 啟動系統行程        --- /sbin/init --- 后續行程啟動(串型)

 

6. 加載啟動級別檔案  --- 加載/etc/inittab     選擇不同級別啟動系統

 

7. 運行初始化腳本      --- /etc/rc.d/rc.sysinit 設定主機名稱 設定網卡地址資訊

 

8. 執行服務運行腳本   --- /etc/rc.d/rc         實作服務開機自動運行

 

9. 啟動mingetty行程 --- 顯示登錄提示資訊

 

 

開機自檢 --- 加載MBR --- 加載grup選單 --- 加載內核 --- 啟動第一個服務行程 --- 加載運行級別檔案--- 加載初始化腳本 --- 加載運行腳本(實作服務程式開機自啟)--- 啟動mingetty行程顯示登錄界面

CentOS 6串行啟動,執行完一個,再執行下一個

2.CentOS 7

1. 開機加電自檢            --- 檢查bios中識別的硬體資訊是否正常

 

2. 開機MBR引導         --- /boot磁區引導系統啟動的記錄資訊(MBR引導記錄--系統啟動檔案資訊/磁區表資訊)

 

3. grup選擇選單             --- 可以選擇系統內核資訊/可以選擇進入單用戶模式

 

4. 加載內核資訊            --- 用于管理控制硬體

 

5. 啟動系統行程            --- /usr/lib/systemd/systemd --- 后續行程啟動(并型)

 

6. 加載啟動target檔案   --- /etc/systemd/system/default.target  選擇不同級別啟動系統

 

7. 加載系統初始化檔案       --- /usr/lib/systemd/system/sysinit.target 設定主機名稱 設定網卡地址資訊

8. 執行服務運行腳本         --- /etc/systemd/system         實作服務開機自動運行

                          /usr/lib/systemd/system/    保存系統中所有程式啟動檔案

 

9. 啟動mingetty行程       --- 顯示登錄提示資訊

 

 

開機自檢 --- 加載MBR --- 加載grup選單 --- 加載內核 --- 啟動第一個服務行程 --- 加載運行target資訊--- 加載初始化腳本 --- 加載運行檔案(實作服務程式開機自啟)--- 啟動mingetty行程顯示登錄界面

CentOS 7并行啟動,一起執行

 

02.系統服務程式自動運行方法

1. 利用/etc/rc.local

 

2. 利用chkconfig命令  --- centos6

chkconfig --list|grep 服務名稱    --- 檢查服務開機自啟狀態

chkconfig 服務名稱 on/off         --- 設定234級別開機自動

chkconfig 服務名稱 --level 級別   --- 設定指定級別開機自啟

 

3. 利用syetemctl命令  --- centos7

systemctl disable/enable 服務名稱 --- 設定服務開機自啟

 

第十二章 用戶管理知識

01.用戶相關的重要目錄

/etc/skel   --- 是用戶家目錄的樣板房

 

01. 此目錄中有什么資料,新建的用戶家目錄中就有什么

 

02. 恢復普通用戶提示符資訊

    cp -a /etc/skel/.bash* /home/oldboy/ 

02.用戶相關的重要組態檔

1. /etc/passwd  ---存盤系統用戶資訊檔案

他是Linux中的重要系統檔案之一,主要作用是存盤系統用戶的資訊

檔案中的每一行表示一個用戶資訊,仔細觀察可以發現他們之間通過“:”號劃分成了多個欄位,共7段,他們分別定義了用戶的不同屬性

root

x

0

0

/root

/bin/bash

用戶名稱

:用戶密碼

:用戶UID

:用戶組GID

:用戶注釋

:用戶家目錄

:shell解釋器

 

用戶UID一般是由一個整數表示的,默認范圍是0~60000,最大可以到65535

 

centos6中普通用戶UID從500開始,包含500,

 

centos7中普通用戶UID從1000開始,包含1000

 

默認創建的用戶每次創建比上次創建加1

2./etc/shadow    ---存盤系統用戶密碼資訊檔案(加密)

由于passwd檔案必須要被所有的用戶讀,所以會帶來安全隱患shadow檔案就是為了解決這個安全隱患而增加的,

3./etc/group --- 記錄用戶組資訊

 

4./etc/gshadow       --- 記錄用戶組密碼資訊

 

03.用戶相關命令說明:

1.useradd   ---創建用戶命令

useradd -u     --- 指定用戶uid數值 1000 oldboy  1001 oldgirl

 

useradd -g     --- 指定用戶gid數值

groupadd -g 666 oldboy666

useradd -u 666 -g 666 oldboy666

 

useradd -G     --- 指定用戶屬于哪個附屬組

groupadd -g 666 oldboy666

useradd -u 666 -g 666 -G oldboy oldboy666

 

useradd -M    --- 指定創建用戶時,不創建家目錄

 

useradd -s     --- 指定用戶shell登錄方式  默認 /bin/bash

 

useradd -c     --- 指定用戶注釋資訊

 

創建虛擬用戶: useradd www -M -s /sbin/nologin

 

PS: linux系統有幾種shell形式  cat /etc/shells

  

2.usermod   ---修改用戶資訊命令(這個用戶已經存在)

usermod -u     --- 指定用戶uid數值 1000 oldboy  1001 oldgirl

 

usermod -g     --- 指定用戶gid數值及主要組

                   groupadd -g 666 oldboy666

                   usermod -u 666 -g 666 oldboy666

 

usermod -G     --- 指定用戶屬于哪個附屬組

                   groupadd -g 666 oldboy666

                   usermod -u 666 -g 666 -G oldboy oldboy666

 

usermod -s     --- 指定用戶shell登錄方式  默認 /bin/bash

 

usermod -c     --- 指定用戶注釋資訊

 

3.userdel   ---洗掉用戶資訊

userdel 用戶        默認不洗掉用戶的家目錄和郵箱

 

userdel -r     --- 徹底洗掉指定用戶相關資訊

  

4.groupadd   ---創建用戶組資訊

groupadd -g    --- 指定用戶組gid資訊

   

groupdel         ---洗掉用戶組資訊(了解)

   

groupmod       ---修改用戶組資訊(了解)

  

5.passwd   ---修改用戶密碼資訊

PS:root用戶可以修改所有用戶密碼資訊

普通用戶只能修改自己的密碼資訊(密碼復雜度 數字加字母>=8個字符)

 

免互動創建密碼  --stdin(只有root用戶可以操作

  echo ******|passwd –stdin 檔案名

 

企業生產場景:用戶及密碼管理

  密碼要復雜,12位以上數字 字母 特殊字符

 

企業中:如何管理用戶密碼

   01. 撰寫用戶密碼資訊檔案

   02. 利用密碼管理軟體

        本地管理密碼軟體 -- keepass

        在線管理密碼軟體      

   03. 域控管理服務器

   04. 動態密碼

 

批量添加用戶+設定密碼和設定隨機密碼

echo stu{1..10}|xargs -n1|sed -r 's#(.*)#useradd \1 ;echo 123456|passwd --stdin \1#g'|bash

批量創建用戶+設定隨機密碼

[root@oldboyedu ~]# pass=`date +%N|md5sum |cut -c1-8`

[root@oldboyedu ~]# echo $pass

192d2eb2

[root@oldboyedu ~]# pass=$(date +%N|md5sum |cut -c1-8)

[root@oldboyedu ~]# echo $pass

b6daea4a

 

echo stu{1..10}|xargs -n1|sed -r 's#(.*)#useradd \1 ;pass=$(date +%N|md5sum|cut -c1-8);echo $pass \1 >> pass.txt;echo $pass|passwd --stdin \1#g'|bash

 

1.sed拼接

 

把密碼存入2.txt

 

2.awk拼接
 
3.for回圈
 

 

6.chown    ---修改檔案或目錄的屬主和屬組

chown oldgirl.oldgirl /oldboy/oldboy.txt

 

-R 遞回修改  注意在相對路徑下使用

chown -R oldgirl.oldgirl /oldboy          --- 遞回修改目錄權限資訊

 

04.如何讓系統更安全:

1.最小化安裝系統和軟體

2.保護好root用戶  禁止root用戶遠程登錄

修改遠程連接埠,禁止使用22埠,除非是不對外訪問的服務器(內部測驗)

 

更改默認的段口,修改ssh組態檔

vim /etc/ssh/sshd_config

3.分析日志

查看/var/log/secure 安全日志

4.檔案系統權限

給系統常用命令加  -i

給系統組態檔加  -a

5.給重要的檔案或命令做一個指紋

檔案內容的變化==指紋變化    檢查檔案內容是否被改了

 

給檔案創建指紋md5sum + 檔案名

 

把指紋記錄下來md5sum + 檔案名 > police.md5

 

police.md5 是指紋庫

 

如何進行對比md5sum -c police.md5 顯示OK 則正常,顯示FAILED,說明檔案被修改,

 

查看是不是自己的人修改了檔案,如果是,先關掉警報,然后重新生成指紋,如果不是自己人修改,可使用備份恢復,

6.定時任務:md5sum

定時檢查,使用md5命令判斷檔案是否發生了變化

多個檔案做md5指紋

find . -type f -name “*.txt”|xargs md5sum > police.md5

 

05.用戶查詢管理與切換命令

1.用戶查詢命令:

id

whoami

w

last       --- 記錄系統有哪些用戶曾經登錄過

lastlog     --- 記錄系統中所有用戶,登錄系統使用情況

 

2.系統相關檢查命令

top      --- 檢查負載情況/記憶體/CPU使用情況

每個行程消耗的系統資源情況

us:    用戶態資訊:時間消耗

sy:    內核態資訊:時間消耗

id:    空閑狀態: 

 

htop     --- top一個升級版

安裝:

yum -y install epel-release

yum -y install htop

 

iotop     --- 檢查確認磁盤的IO消耗情況

 

free    

 

iftop      --- 檢查網路帶寬使用情況

 

netstat(ss) -lntup|grep ssh   --- 檢查網路狀態資訊命令,已知服務,獲得對應埠號

-l       串列顯示網路服務狀態資訊

-n       網路中的埠號碼以數字形式顯示

-t       顯示網路的tcp協議服務資訊

-u       顯示網路的udp洗衣服務資訊

-p       網路協議服務行程資訊進行顯示

 

修改ssh埠號:

vi /etc/ssh/ssh_config

port 埠號

 

lsof  -i:埠號       --- 檢查網路服務資訊,已知埠號,獲得對應服務行程名

  

3.安全操作命令

chattr    ---將檔案資料進行上鎖命令

+i         ---對檔案進行上鎖

-i          ---對檔案進行解鎖

lsattr      ---查看檔案鎖定狀態

 

4.用戶切換命令:

su 用戶名

 

06.如何讓普通用戶擁有root用戶的能力

方法一:篡權奪位

    su - root  --- 知識root用戶密碼

 

方法二:修改檔案資料權限

    chmod o=rwx -R /oldboy/oldboy01/   --- 遞回修改目錄權限資訊

 

方法三:普通用戶提權(sudo)  皇帝 -大寶劍- 平民

第一個歷程:配置sudo檔案

 

visudo(推薦--組態檔語法檢查功能) == vim /etc/sudoers

101 oldboy  ALL=(ALL)   /bin/cat /etc/shadow

101 oldboy  ALL=(ALL)   NOPASSWD: /bin/cat /etc/shadow     ---免密碼執行

 

sudo提權操作:

101 oldboy  ALL=(ALL)   NOPASSWD: /bin/cat, /bin/vim, /bin/rm ---批量授權多個命令

101 oldboy  ALL=(ALL)   NOPASSWD: /bin/*  vim       ---批量授權多個命令

 

PS:企業中利用sudo進行授權,需要進行權限分配規劃

開發人員:  需要有什么權限  查看權限

 

資料庫人員: 需要有什么權限  查看權限  mysql服務命令的權限(mysql mysqladmin mysqldump)

 

運維人員:  需要有什么權限  查看權限  創建資料資訊的權限  部分修改編輯權限 部分資料洗掉

   

第二個歷程:利用oldboy進行測驗權限

    sudo cat /etc/shadow

   

第三個歷程:查看root用戶授予的權限資訊

    [oldboy@oldboymeng ~]$ sudo -l

    User oldboy may run the following commands on oldboymeng:

    (ALL) NOPASSWD: /bin/cat /etc/shadow

   

    [root@oldboymeng ~]# sudo -v     --- 檔案配置語法檢查

    >>> /etc/sudoers: syntax error near line 101 <<<

    sudo: parse error in /etc/sudoers near line 101

    sudo: no valid sudoers sources found, quitting

    sudo: unable to initialize policy plugin

   

總結:

    01. 利用命令編輯提權資訊  visudo == vim /etc/sudoers

    02. 利用命令查看權限資訊  sudo -l

    03. 利用命令檢查配置語法  sudo -v

    04. 利用命令清除密碼記錄  sudo -k

   

方法四:修改檔案特殊權限位

    chmod u+s /usr/bin/cat

 

07.sudo 臨時讓用戶獲得root權限(尚方寶劍)

sudo -l 查看當前用戶的尚方寶劍

  在某些情況下, 以root用戶身份訪問系統有潛在危險,并可能導致系統和資料損害,

我們可以用setuid程式,例如su和sudo解決

  一旦在使su命令登錄root,用戶獲取了系統的絕對管理權限

  

只有/etc/sudoers組態檔中列出的用戶才可以使用該sudo命令,命令在用戶的 shell中執行,而不是在rootshell中執行,這意味著root可以完全禁用shell

  

每個使用該sudo命令的成功身份驗證都會記錄/var/log/messages,并將的用戶和發出的命令記錄到檔案/var/log/secure

 

visudo  給用戶授予尚方寶劍  ===vim /etc/sudoers

要賦予某人完全的管理權限:

用visudo命令編輯/etc/sudoers

   用戶名 ALL =(ALL)ALL      #允許用戶使用sudo執行任何命令

 

賦予部分管理權限:

%users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom  #允許users組中的成員執行執行的掛載磁盤命令

 

不需要輸入sudo密碼執行一組命令

   Cmnd_Alias SYS_BACKUP = /bin/su - root -c ->

          -> /usr/locale/sbin/sys_backup.sh,/mnt/cdrom

   insmsop1 ALL=(ALL)     NOPASSWD: SYS_BACKUP 

 

配置sudo記錄密碼的時間

sudo將密碼保存五分鐘的超時時間,在此期間對該命令的任何后續使用都不會提示用戶輸入密碼,添加下面的一行將修改時間

Defaults    timestamp_timeout=value    #value=https://www.cnblogs.com/oldmeng/p/0,每次sudo都需要輸入密碼

 

如果某個帳戶遭到入侵攻擊者可以使以下sudo管理權限打開一個新的shell

sudo /bin/bash  #繞過/etc/sudoers檔案中指定的超時時間,并且永遠不要求攻擊者sudo再次輸入密碼

  

 

 

第十三章Linux系統權限知識

  Linux檔案或目錄的基礎權限位是由9個字符來控制的,每3位字符為一組,

01.檔案/目錄的權限說明

r4 w2 x1 -0

檔案:

r-:是否可以查看檔案內容

w-:是否可以編輯檔案內容

x-執行:是否可以直接運行一個檔案

 

檔案權限總結:

01. root用戶可以隨時查看/編輯任意檔案,沒有任何權限,只是不能執行檔案 (root用戶就是無敵的存在)

 

02. 屬主用戶想編輯查看檔案,最好屬主用戶擁有讀(*)和寫

 

03. 檔案權限中最重要權限為r權限 

                   擁有r權限,可以結合w權限,正常編輯和查看檔案

                   擁有r權限,可以結合x權限,正常執行和查看檔案

 

目錄:

r-:讀取顯示目錄下面檔案名稱資訊

w-:是否可以在目錄中創建洗掉資料資訊

x-執行:是否可以進行目錄的切換  

 

目錄權限總結:

01. root用戶對目錄管理是無敵的權限

02. 目錄權限中最重要權限為x權限 

     擁有x權限,可以結合r權限,正常查看目錄中資料資訊

     擁有x權限,可以結合w權限,正常在目錄中創建或洗掉資料

           

默認檔案權限644  rw-r--r--  600

默認目錄權限755  rwxr-xr-x  700

 

02.資料資訊默認權限設定方法

1. 利用命令設定檔案的權限

1)chmod  修改資料權限

單獨修改指定用戶權限

chmod u+rwx     --- 屬主添加指定權限

chmod u-rwx      --- 屬主洗掉指定權限

chmod u=rwx     --- 屬主直接設定權限   

chmod g+rwx     --- 屬組添加指定權限

chmod g-rwx      --- 屬組洗掉指定權限

chmod g=rwx     --- 屬組直接設定權限

chmod o+rwx     --- 其他用戶添加指定權限

chmod o-rwx      --- 其他用戶洗掉指定權限

chmod o=rwx     --- 其他用戶直接設定權限  

 

批量修改所有用戶權限

chmod 權限數值  --- 批量修改

chmod a+rwx     --- 所有用戶添加指定權限

chmod a-rwx     --- 所有用戶洗掉指定權限

chmod a=rwx     --- 所有用戶設定指定權限

 

2)umask  修改資料權限(臨時設定)  /etc/profile(永久設定)

檔案權限數值==666 - umask數值

    umask數值為偶數: 666 - umask(066)數值   == 600

    umask數值為奇數: 666 - umask(066)       == 644

 

目錄權限數值==777 - umask數值

   

需求:

    1)創建的檔案權限默認都是600  

       umask 066

    2)創建的目錄前線默認都是700

       umask 077

    3)創建的檔案權限默認都是633

       chmod

2.利用檔案配置引數設定權限

if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]   條件運算式

then                               --- 條件為真

    umask 002  娶白富美

else                                --- 條件為假

    umask 022  娶個女的

fi

 

    >    greater than       gt

    <    less    than     lt

    =    equal           eq

    >=   greater equal      ge

    <=   less equal        le

    <>   no equal         ne

03.系統特殊權限位:

檔案屬性資訊:

12位權限位  第一個三位(屬主權限位) 第二個三位(屬組權限位) 第三個三位(其他用戶權限位)

   

setuid: 讓其他用戶擁有檔案屬主的能力    u+s s=4 

[root@oldboymeng ~]# ll /usr/bin/cat

rwxr-xr-x. 1 root root 54160 Oct 31  2018 /usr/bin/cat

[root@oldboymeng ~]# chmod u+s /usr/bin/cat

[root@oldboymeng ~]# ll /usr/bin/cat

rwsr-xr-x. 1 root root 54160 Oct 31  2018 /usr/bin/cat

 

setgid:     讓其他用戶組擁有檔案屬組的能力 (了解) g+s s=2

chmod g+s /usr/bin/cat

   

sticky bit:可以創建一個共享目錄/共享目錄中的資料不能被別的用戶修改   o+t t=1

    chmod o+t /share

   

12位權限位:

124 124 124 124   -->  /tmp  1777  /bin/cat 4755  /bin/cat 2755

 

04.實踐:修改檔案的權限 chmod

方法1 使用 r w x

1: 屬主去掉寫入權限使用 chmod u-w 1.sh

 

 

2: 屬主同時給rwx權限 = 先清除在賦值權限

 

 

3: 屬主屬組其他用戶同時增加x執行權限

 

 

1:使用a對所有用戶洗掉x執行權限 a=ugo

 

 

2:使用a對所有用戶增加x執行權限

 

 

3: 直接增加x 權限(注只對x使用此種方法 rw建議使用ugo方式)

 

 

方法2 使用數字進行權限修改(常用)

1: 檔案修改為644權限 rw-r--r

 

2:檔案修改為755權限 rwx-r-xr-x

 

 

05.屬性權限對目錄和檔案的作用

最終要求(獨立解決檔案權限問題Permission denied

測驗檔案的rwx權限

環境準備

兩個視窗一個root(權限修改) oldboy(測驗) 保證oldboy用戶正常使用

腳本中放一個命令

 

 

測驗檔案的rwx含義

修改2.sh 所有者為oldby

 

 

例1:測驗r權限

root執行

 

oldboy測驗 除了可讀 不可寫和執行

 

 

例2: 測驗w權限

root修改

 

oldboy測驗 可寫 不可讀不可執行

 

注意:權限的特殊性

是否能修改檔案的內容, 需要有r權限配置

只有w 強制保存退出會導致源檔案內容清空

root下查看源檔案

 

oldboy下寫入命令whoami 并強制保存退出

 

root下查看內容 內容被覆寫

 

 

例3: 測驗x權限

root修改

 

oldboy測驗 什么權限都沒有 因為bash不知道檔案里有什么內容看不到,所以x也不允許執行

 

x想要執行 則需要r配置 rx

 

 

 

檔案權限小結:

r 顯示檔案內容

w是否能修改檔案的內容 需要有r權限配置

只有w的時候 保存退出會導致源檔案內容清空

x是否有執行權限 需要有r可讀權限配置

 

測驗目錄的rwx權限

r 是否能查看目錄的內容 ls

w 是否能在目錄中創建 洗掉 重命名 檔案權限

x 是否有進入目錄路的權限cd

 

注意:

1.r 是否能查看目錄內容 ls 需要x權限配合

2.w 是否能在目錄中創建洗掉 重命名 檔案權限需要x權限配合

3.x 是否能進入到目錄權限 cd 是否能修改或查看目錄中檔案屬性

 

Linux下所有的目錄大部分都是755權限

 

例1:測驗目錄的r權限

環境準備:

 

/oldboy/下創建目錄和檔案

 

 

 

oldboy測驗

 

 

2:

 

oldboy測驗沒有任何權限需要x權限配置

 

修改

 

測驗

 

 

問答:

root修改檔案權限1.sh

 

在oldboy下是否可洗掉1.sh

 

 

權限拒絕排查流程

 

odlboy用戶下面幾個操作報錯原因:

[oldboy@lzy oldboy]$ cat /etc/shadow

cat: /etc/shadow: Permission denied

[oldboy@lzy oldboy]$ echo '#' >> /etc/passwd

-bash: /etc/passwd: Permission denied

[oldboy@lzy oldboy]$ touch /etc/passwd.txt

touch: cannot touch ‘/etc/passwd.txt’: Permission denied

[oldboy@lzy oldboy]$ rm -rf /etc/shadow

rm: cannot remove ‘/etc/shadow’: Permission denied

[oldboy@lzy oldboy]$ ls /root/

ls: cannot open directory /root/: Permission denied

 

 

 

06.第四次考

一,添加一個UID是888的虛擬用戶mysql寫出命令

useradd -u 888 -s /sbin/nologin mysql

 

二,測驗環境如下,請完成后面題的要求

[root@oldboyedu ~]# cat datafile

Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300

Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500

Igor Chevsky:385-375-8395:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400

Norma Corder:397-857-2735:74 Pine Street, Dearborn, MI 23874:3/28/45:245700

Jennifer Cowan:548-834-2348:583 Laurel Ave., Kingsville, TX 83745:10/1/35:58900

Jon DeLoach:408-253-3122:123 Park St., San Jose, CA 04086:7/25/53:85100

Karen Evich:284-758-2857:23 Edgecliff Place, Lincoln, NB 92086:7/25/53:85100

Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200

Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200

Fred Fardbarkle:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900

Fred Fardbarkle:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900

Lori Gortz:327-832-5728:3465 Mirlo Street, Peabody, MA 34756:10/2/65:35200

Paco Gutierrez:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500

Ephram Hardy:293-259-5395:235 CarltonLane, Joliet, IL 73858:8/12/20:56700

James Ikeda:834-938-8376:23445 Aster Ave., Allentown, NJ 83745:12/1/38:45000

Barbara Kertz:385-573-8326:832 Ponce Drive, Gary, IN 83756:12/1/46:268500

Lesley Kirstin:408-456-1234:4 Harvard Square, Boston, MA 02133:4/22/62:52600

William Kopf:846-836-2837:6937 Ware Road, Milton, PA 93756:9/21/46:43500

Sir Lancelot:837-835-8257:474 Camelot Boulevard, Bath, WY 28356:5/13/69:24500

Jesse Neal:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000

Zippy Pinhead:834-823-8319:2356 Bizarro Ave., Farmount, IL 84357:1/1/67:89500

Arthur Putie:923-835-8745:23 Wimp Lane, Kensington, DL 38758:8/31/69:126000

Popeye Sailor:156-454-3322:945 Bluto Street, Anywhere, USA 29358:3/19/35:22350

Tommy Savage:408-724-0140:1222 Oxbow Court, Sunnyvale, CA 94087:5/19/66:34200

Yukio Takeshida:387-827-1095:13 Uno Lane, Ashville, NC 23556:7/1/29:57000

Vinh Tranh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900

 

1.顯示包含 San的行

 

 

 

 

2.顯示以 J 開頭的人名所在的行

 

 

 

 

 

3.顯示 700 結尾的行

 

 

 

 

 

4,顯示不包 834 的行

 

 

5,顯示電話號碼的區號為 834 的行

 

 

 

 

 

6,顯示姓以 K k 開頭的行

 

 

 

 

 

三,創建一個用戶 用戶UID為666 組屬于為test 不創建家目錄 并且為其非互動式創建一個秘密123456

 

 

 

useradd -u 666 -M my      usermod -G test my    echo 123456|passwd –stdin my

useradd -u 666 -g test -M bairihong;echo 123456|passwd --stdin bairihong

 

四,統計/var/log下檔案的個數,

 

 

五,創建一個bairihong的用戶-----并設定密碼為123.com-----切換到bairihong用戶------然后顯示當前用戶名,

useradd bairihong       passwd bairihong   123.com     su – bairihong   whoami

 

六,取出網卡ip地址(至少2種方法)

[root@oldboyedu ~]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:16:3e:01:4c:a6 brd ff:ff:ff:ff:ff:ff

inet 172.31.196.105/20 brd 172.31.207.255 scope global eth0

ip a |awk -F “[ /]+” ‘NR==6{print $2}’

ip a |sed -rn ‘s#.*et (.*)/20 br.*#\1#p’                                                                                                                                                  

hostname -I

 

 

 

七,使用awk取出/etc/passwd第一列資料也就是取出用戶名,

 

 

八,用awk命令列印檔案所有行的第一個欄位

awk ‘{print $1}’

 

九,寫出目前所學過的系統優化和具體執行的命令 例如selinux如何永久關閉 給出詳細資訊

 1.  yum源   選擇國內的yum源倉庫aliyun   /etc/yum.repos.d/  yum源組態檔

 2. 創建普通用戶   useradd

 3. 關閉SElinux  (必須關)/etc/selinux/config  SELINUX=disabled

 4. 關閉防火墻  systemctl stop firewalld  systemctl disable firewalld

 5. 字符集,亂碼

 6.安裝常用工具軟體,命令

 7.網路服務,永久和臨時關閉systemctl disable NetworkManager

                             systemctl stop NetworkManager

十,用命令列更改 config.txt 檔案,把里面所有的“name更改為“address

sed -ni ‘s#name#address#gp’ config.txt

 

十一,顯示/etc/passwd檔案中其默認shell為/bin/bash的用戶

 

 

 

 

十二,顯示/etc/passwd檔案中其默認shell為非/sbin/nologin的用戶

cat /etc/passwd|grep -v ‘/sbin/nologin’

 

 

十三,寫出CentOS6的啟動流程

1. 按下電源

2. 開機自檢(BIOS)

3. MBR引導

4. GRUB選單

5. 加載內核

6. 運行INIT行程

7. 讀取/etc/inittab

8. 讀取/etc/rc.sysinit初始化系統

9. 根據運行級別運行/etc/rc數字.d下面的腳本

10.     啟動mingetty顯示登錄界面,運行login

 

十四,翻譯下面錯誤陳述句

1,no space left on device 磁盤空間不足

No package ip available 沒有可用的包ip

3,-bash: LS: command not found 命令沒有找到

4.mkdir: cannot create directory ‘aa.txt’: Permission denied

無法創建目錄' aa,txt:權限拒絕

5.id: zhangsan: no such user  沒有這樣的用戶

 

 

第十四章 定時任務

01.定時任務概念介紹

什么是定時任務?

固定時間做什么事情

    作用說明:自動備份資料 自動同步時間  自動清空資料

              鬧鐘 Alarmy  叫醒方式:演算法(加減乘除 2位)  動作(5次)  拍照()

    定時任務實作方法:cronie

 

實作方式:

1.系統默認定時任務

/etc/cron.daily     --- 每天執行的任務

logrotate 腳本      --- 實作日志檔案切割功能

切割檔案程序

01. 將源檔案進行重命名

02. 重啟程式服務,生成源檔案

/etc/cron.hourly    --- 每小時執行的任務

/etc/cron.monthly   --- 每個月執行的任務

/etc/cron.weekly    --- 每周執行的任務

 

2.自定義定時任務

一個命令:

crontab -l  --- 顯示定時任務配置資訊

crontab -e  --- 撰寫定時任務配置資訊 visudo         

兩個檔案:

/var/spool/cron/root(oldboy)   --- root用戶撰寫的定時任務配置資訊  /etc/sudoers

/var/log/cron                  --- 定時任務日志檔案(排錯)

/etc/cron.deny                 --- 定義定時任務用戶黑名單  (了解)

02.定時任務的應用:

1. 備份 MySQL資料 重要資料日志

cp

mv

tar

2.什么時間備份

業務低谷的時間

游戲公司 5-6點左右

公司的網站 12點左右

電商(京東 淘寶 當當 拼多多 唯品會 聚美)

  

3.使用什么定時任務軟體

cron table

crond(crontab) 定時任務軟體 (軟體包cronie) 

4.為什么要切割

800M左右 直接卡死系統

資料的統計 分析

5.用戶的定時任務 如何使用

定時任務的相關命令:

crontab -l:查看定時任務

crontab -e:檢測語法 編輯定時任務檔案 寫入定時任務  ==編輯/var/spool/cron

crontab -r:洗掉當前用戶的所有定時任務,若僅要洗掉一項,請用-e去編輯

crontab -u: 只有root才能進行這個任務,也即幫其他用戶新建/洗掉crontab作業調度

crontab檔案格式:

  *       *       *      *      *       command

minute   hour    day   month   week     command

 

分       時      天     月    星期       命令

 

minute      表示分鐘,可以是從0到59之間的任何整數,

hour:                 表示小時,可以是從0到23之間的任何整數,

day:             表示日期,可以是從1到31之間的任何整數,

month:         表示月份,可以是從1到12之間的任何整數,

week:           表示星期幾,可以是從0到7之間的任何整數,這里的0或7代表星期日,

user-name:    用戶名

command   要執行的命令,可以是系統命令,也可以是自己撰寫的腳本檔案

 

設定crond開機自動啟動:

查看服務是否已經運行用 ps -ax | grep cron

chkconfig –list crond           查看crond是否開機自動啟動

chkconfig –level 35 cron on            設定crond開機自動啟動

 

定時任務格式說明:

每天的上午8點30分,來學校上車(go to school)

分時日月周

30 8 * * *

 

每天晚上12點準時,回家自己開車(go to bed)

*/30 00 * * * go to bed

 

*  代表每一分鐘 都執行任務特殊字符:

星號(*):代表每的意思,例如month欄位如果是星號,則表示每月都執行該命令操作,

逗號(,):表示分隔時段的意思,例如,“1,3,5,7,9”,

中杠(-):表示一個時間范圍,例如“2-6”表示“2,3,4,5,6”,

正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次,同時正斜線可以和星號一起使用,例如*/10,如果用在minute欄位,表示每十分鐘執行一次,

 

* * * * *

每天的上午7點到上午11點 每一個小時運行CMD命令

00 07-11 * * *  CMD

##表示整點的時候  沒幾個小時運行一次的時間

##分鐘寫上00

筆試題: 要求每日的凌晨執行一條定時任務xxx

* 00 * * * xxxx  錯誤的

00 00 * * * xxx  正確的

 

00 07-11 * * * pwd

 

每分鐘把自己的名字 追加到 /oldboy/oldboy.txt

crontab -e  編輯檔案 寫入定時任務

crontab -l  查看當前用戶的定時任務

 

超過兩條命令,都是用腳本 (命令大禮包)

定時任務中-命令或腳本結果(正確及錯誤)定向到黑洞(>/dev/null 2>&1)或追加到檔案中 >>/tmp/oldboy.txt 2>&1

03.定時任務書寫要領:

要領1:定時任務要加注釋

要領2:定時任務命令或腳本結尾加 &>/dev/null 或 >/dev/null 2>&1 或 1>/dev/null 2>/dev/null

要領3:定時任務執行shell腳本前加/bin/sh,定時任務執行shell腳本不必添加執行權限

要領4:定時任務命令或程式盡量寫到腳本里,定時任務只要執行腳本即可

注意操作步驟:

(1)命令列執行

(2)撰寫腳本

(3)測驗腳本

(4)設定定時任務

要領5:生產任務程式不要隨意列印輸出資訊

要領6:定時任務執行的腳本要規范路徑 (例如 /server/script)

要領7:配置定時任務要規范操作程序

要領8:定時任務執行特殊的字符需要進行轉義,否則會報錯,例如 百分號%

 

1.定時任務撰寫方法:

準備作業:定時任務服務是否開啟

[oldboy@oldboymeng ~]$ ps -ef|grep cron

root       6389      1  0 Jun23 ?        00:00:01 /usr/sbin/crond -n

 

撰寫定時任務:crontab -e

格式資訊:

* * * * *  具體做的事情

測驗01:每天晚上9:30 上床睡覺  --- 30 21 * * *  上床睡覺

 

測驗02:每天早上7:00 起床上學  --- 00 07 * * *  起床上學

 

測驗03:每隔1個小時  下課休息  --- * */1 * * *  休息時間

 

測驗04:上午10點整 11點整 12點整  都要進行休息     --- 00  10-12 * * *  進行休息

 

測驗05:上午10點整休息 12點整  下午  15點整  下午 17點整   --- 00  10,12,15,17 * * * 進行休息

   

* 每          每分鐘     每小時     每天  每月  每周

/ 每隔  */1   每隔一分鐘 每隔1小時

- 間隔(連續)10-12      10 11 12   10:00 10:01 10:02 11:00 11:01

, 間隔(不連續) 10,12

 

測驗06:每月5號 周三 晚上12點整 和女朋友睡覺 

 

PS: 日期和星期不能同時出現

 

2.撰寫定時任務實踐:

1)每隔3分鐘,進行時間同步

第一步:利用命令實作時間同步

ntpdate ntp1.aliyun.com

 

第二步:編輯定時任務時間資訊

*/3 * * * *  /usr/bin/ntpdate ntp1.aliyun.com

 

第三步:撰寫定時任務注釋說明

  # 完成時間同步

  */3 * * * *  ntpdate ntp1.aliyun.com

 

2)每隔1小時的整點,執行資料備份任務 (cp /etc/hosts /tmp/hosts.bak)

00 */1 * * * cp /etc/hosts /tmp/hosts.bak

* */1 * * * cp /etc/hosts /tmp/hosts.`date +%T`

      

3)每隔1分鐘,將/etc/hosts  /etc/rc.local  /server/scripts 進行壓縮,生成壓縮有時間資訊壓縮包保存在/tmp目錄/oldboy_10:00:00.tar.gz

第一個歷程:執行命令測驗

cd /

tar zchf /tmp/oldboy_$(date +%H-%M).tar.gz  ./etc/hosts ./etc/rc.local  ./server/scripts/

 

第二個歷程:撰寫腳本資訊

#!/bin/bash

cd /

tar zchf /tmp/oldboy_$(date +%H-%M).tar.gz  ./etc/hosts ./etc/rc.local  ./server/scripts/

 

第三個歷程:測驗執行腳本

/bin/sh /server/scripts/compress.sh

 

第四個歷程:撰寫定時任務

crontab -e

* * * * *  /bin/sh /server/scripts/compress.sh &>/dev/null

 

第五個歷程:驗證定時任務

01.調整時間

02.縮短時間

 

【企業案例】

如果定時任務規則結尾不加>/dev/null 2>&1或者追加到檔案中>>/tmp/oldboy 2>&1,很容易導致硬碟inode空間被占滿,從而系統服務不正常,

You have mail in /var/spool/mail/root

/dev/null

1 正確輸出

    1>> oldboy.txt

  2>> test.txt

>/dev/null 2>&1

ntpdate ntp1.aliyun.com >/dev/null 2>&1

 

每天凌晨1點把/etc/目錄 打包備份/tmp目錄下 要求每天的名字不同,

date +%F

tar zcf xx.tar.gz /etc

 

#命令的決議方式

第一種 ``   引號中寫命令 例如 `pwd`

第二種 $()  括號中寫命令 例如 $(pwd)

[root@oldboyedu scripts]# echo `pwd`

/server/scripts

[root@oldboyedu scripts]# echo $(pwd)

/server/scripts

[root@oldboyedu scripts]# echo `date +%F`

2019-05-29

[root@oldboyedu scripts]# echo $(date +%F)

 

每天創建一個 創建一個以ip地址命名的目錄,并把/etc/目錄打包壓縮放在里面,保持每天的壓縮包名字不同

1. 如何取IP ip  ifconfig+三劍客 取出IP

ifconfig |awk 'NR==2{print $2}'

方法1 變數  dir=`ifconfig |awk 'NR==2{print $2}'`

方法2 mkdir `ifconfig |awk 'NR==2{print $2}'`

 

2. 到/進行打包 放在第一步創建好的目錄 并且名稱每天不一樣

cd / && tar zcf /root/$dir/`date +%F`.tar.gz etc

 

time=`date +%F`

dir=`ifconfig|awk 'NR==2{print $2}'`

[ -d /data/$dir ] || mkdir /data/$dir

cd / && tar zcf /data/$dir/$time.tar.gz etc

 

3. x寫入定時任務

* * * * * sh /root/tar.sh

 

報錯:

[root@oldboyedu ~]# cat /tmp/ip.log

/root/tar.sh: line 2: ifconfig: command not found

/root/tar.sh: line 2: ifconfig: command not found

 

解決方法1

      命令加全路徑執行

解決方法2

      在腳本的開頭. /etc/profile

 

04.定時任務日志資訊:

/var/log/cron

Jun 24 17:44:57 oldboymeng crontab[13105]: (root) BEGIN EDIT (root)

Jun 24 17:45:34 oldboymeng crontab[13105]: (root) REPLACE (root)

Jun 24 17:45:34 oldboymeng crontab[13105]: (root) END EDIT (root)

Jun 24 17:45:40 oldboymeng crontab[13107]: (root) LIST (root)

Jul  7 00:03:01 oldboymeng CROND[13127]:   (root) CMD (ntpdate ntp1.aliyun.com)

     01           02                   03

   

   01. 定時任務進行處理操作的時間

   02. 主機名稱資訊

   03. 什么用戶執行了定時任務

 

05.定時任務撰寫注意事項:

1)定時任務中命令資訊最好使用絕對路徑

定時任務執行時識別PATH環境變數資訊:/usr/bin:/bin

2)定時任務中命令資訊中特殊符號無法直接識別

方法一:特殊符號加 \

方法二:將命令資訊寫成腳本

3)定時任務撰寫不正確,會產生錯誤資訊

postfix 郵件服務開啟

錯誤資訊存放位置:/var/spool/mail/root     block占用過多,造成磁盤存盤資源減少

postfix 郵件服務關閉

錯誤資訊存放位置:/var/spool/postfix/maildrop/  inode占用過多,造成磁盤存盤資源減少

解決方式:將郵件服務開啟,將產生錯誤資訊追加到黑洞中

* */1 * * * /bin/sh /server/scripts/backup_file.sh &>/dev/null

 

4)執行一些命令時,盡量較少命令資訊輸出(錯誤輸出/正確輸出)

5)完成任務大于兩個命令,就需要撰寫腳本

6)腳本撰寫是需要有注釋資訊

7)定時任務執行java程式操作時,需要撰寫環境變數  !!!

需要在腳本里定時java程式環境變數

JAVAHOME="XXXX"

CLASSPATH="XXXX"

PATH="$PATH:JAVAXXX"

      

./catlina.sh restart

 

 

#變數

PS1 

echo $PS1

 

LANG

echo $LANG

 

RANDOM

echo $RANDOM

 

PATH  變數存放著命令的路徑

echo $PATH

永久生效更改/etc/profile

命令的執行程序

1. 輸入命令

2. 查找PATH變數中有沒有命令

3. 如果有則執行

4. 如果沒有 command not found

 

 

第十五章 磁盤管理

1.Linux下配置一條默認網關

route add default gw 10.0.0.254

route del default gw 10.0.0.254

 

2.配置一條靜態路由

   ip route add 0/0 via 10.0.0.254

   ip route del 0/0 via 10.0.0.254

 

3.策略路由(在centos下使用vpn撥號的情況下)安全的給test表設定一個默認路由

   ip route add 0/0 via 10.0.0.254 table test

   ip rule add from 10.0.0.1 via table

 

 

查看磁盤磁區

fdisk -l

 

磁盤磁區

fdisk /dev/sdb

fdisk

     m 幫助

     n add a new partition磁區  創建一個新的磁區

     p 查看磁區 print the partition table

     d 洗掉 delete a partition

     w 保存退出 write table to disk and exit

 

格式化

mkfs.xfs===mkfs -t xfs

 

查看磁盤磁區的UUID

ls -l /dev/disk/by-uuid

blkid /dev/sdb

 

如何開機自動掛載

1. /etc/rc.local  ==== /etc/rc.d/rc.local

 

2. /etc/fstab

UUID=1efb0ec2-67c7-4a90-838       /              xfs           defaults         0                0

UUID=445c8f39-9c6c-4e10-941        /boot           xfs           defaults         0                0

UUID=85441e97-fdf4-4fef           swap          swap          defaults         0                0

設備名/UUID            掛載點     系統檔案型別     掛載屬性  (開機是否備份)  (開機是否自檢磁盤)

 

傳統的MBR (Master Boot Record)磁區方式,有一個局限:

無法支持超過2TB的硬碟的磁區(或單個磁區超過2TB )

如果大于2TB就用GPT (Globally Unique Identifier Partition Table Format)磁區的概念

GPT磁區表(http://baike.baidu.com/item/GPT/15413476)

GPT的磁區表很好了解決了傳統MBR無法逾越2TB的限制,

但是在Linux系統中,傳統的fdisk命令無法支持gpt磁區方式,

(在紅帽企業版Linux 4 Update 4之后的版本提供了對大于2 terabytes(TB)的磁盤設備的支持)

 

parted的操作都是實時的,

也就是說你執行了一個磁區的命令,他就實實在在地磁區了,

而不是像fdisk那樣,需要執行w命令寫入所做的修改, 所以進行parted的測驗千萬注意不能在生產環境中!

 

 

Parted磁盤磁區工具

簡述:parted是一個磁盤磁區管理工具,

它比fdisk更加靈活,功能也更豐富,同時還支持GUID磁區表(GUID Partition Table),

這在IA64平臺上管理磁盤時非常有用,它同時支持互動模式和非互動模式. 它除了能夠

進行磁區的添加,洗掉等常見操作外,還可以移動磁區, 制作檔案系統, 調整檔案系統大小,

復制檔案系統,

 

 

需求:現有一個做了RAID5的硬碟,要求分三個區

硬碟總磁區大小:6.2T

/data0           4.8T

/data1           1T

                 4G (無需格式化,作DRBD用)                     

具體操作方法如下:

1、磁區

parted /dev/sdb mklabel gpt    

parted /dev/sdb mkpart primary 0 4800000

parted /dev/sdb mkpart primary 4800001 5800001

parted /dev/sdb mkpart primary 5800002 5804098

parted /dev/sdb p

 

[root@drbd01 ~]# parted /dev/sdb p

 

Model: DELL PERC H700 (scsi)

Disk /dev/sdb: 6998GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

 

Number  Start   End     Size    File system  Name     標志

 1      17.4kB  4800GB  4800GB  ext3         primary     

 2      4800GB  5800GB  1000GB  ext3         primary     

 3      5800GB  5804GB  4097MB               primary  

 

2、格式化

mkfs.ext3 /dev/sdb1

mkfs.ext3 /dev/sdb2

 

3、掛載

 

mount /dev/sdb1   /data0

mount /dev/sdb2   /data1

 

4、查看磁區結果

[root@drbd01 ~]# df -h

檔案系統              容量  已用 可用 已用% 掛載點

/dev/sda2              20G  2.7G   16G  15% /

/dev/sda5             875G  1.1G  829G   1% /elain

/dev/sdb1             4.3T  1.3G  4.1T   1% /data0

/dev/sdb2            1000G  1.1G  998G   1% /data0

/dev/sda1             494M   17M  452M   4% /boot

 

 

大于2T硬碟parted磁區演示:

parted /dev/sdc mklabel gpt                                                     

parted /dev/sdc mkpart primary 0 200

parted /dev/sdc p

parted /dev/sdc mkpart primary 201 400

parted /dev/sdc mkpart primary 401 900

parted /dev/sdc p

 

[root@oldboy ~]# parted /dev/sdc p

 

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdc: 1074MB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

 

Number  Start   End    Size    File system  Name     Flags

 1      17.4kB  200MB  200MB                primary      

 2      200MB   400MB  200MB                primary      

 3      400MB   402MB  2000kB               primary      

 

Information: Don't forget to update /etc/fstab, if necessary.            

 

[root@oldboy ~]# ll /dev/sdc*

brw-r----- 1 root disk 8, 32 Mar 18 04:41 /dev/sdc

brw-r----- 1 root disk 8, 33 Mar 18 04:41 /dev/sdc1

brw-r----- 1 root disk 8, 34 Mar 18 04:41 /dev/sdc2

brw-r----- 1 root disk 8, 35 Mar 18 04:41 /dev/sdc3

 

mkfs.ext3 /dev/sdc1

tune2fs -c -1 /dev/sdc1

====================================================

parted具體操作方法如下:

 

GPT磁區全名為Globally Unique Identifier Partition Table Format,是指全域唯一標示磁盤磁區表格式,

由于MBR磁區表的最大可尋址的存盤空間只有2Tb(232×512位元組),因此,在大硬碟出現的現在,MBR磁區方式逐漸被GUID磁區表取代,

 

1、非互動磁區手動輸入提示實體

parted /dev/sdb mklabel gpt    

parted /dev/sdb mkpart primary 0 500

parted /dev/sdb mkpart primary 501 1000

parted /dev/sdb p

mkfs -t ext4 /dev/sdb1 /dev/sdb2

mount /dev/sdb2 /tmp

 

2、非互動磁區忽略提示實體:

parted /dev/sdb  mklabel gpt yes             

parted /dev/sdb  mkpart primary ext4 0 100  Ignore

parted /dev/sdb  mkpart primary linux-swap 101 8192 Ignore

parted /dev/sdb  mkpart logical ext4 8193 100GB  Ignore

parted /dev/sdb  mkpart logical ext4 101GB 3000GB Ignore 

parted /dev/sdb  quit

 

parted與fdisk區別:

1、支持gpt磁區表,可以對大于2T的磁盤磁區,

2、磁區直接生效,不需要使用命令寫入磁盤,最好partprobe /dev/sdb,

3、格式化掛載等和fdisk無區別,

 

更改GPT前的格式:

[root@oldboy /]# parted /dev/sdb p

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 107MB

Sector size (logical/physical): 512B/512B

Partition Table: msdos

更改后:

[root@oldboy /]# parted /dev/sdb p

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 107MB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

 

 

partprobe

 

實驗:100M盤(一鍵完成)

parted /dev/sdb mklabel gpt Yes

parted /dev/sdb mkpart primary 0 10 Ignore

parted /dev/sdb mkpart primary linux-swap 11 21 Ignore

parted /dev/sdb mkpart logical ext4 22 32 Ignore

parted /dev/sdb p

 

更改磁區格式:(一鍵完成)推薦

#parted /dev/sdb mklabel gpt Yes

#parted /dev/sdb mkpart primary 0 10 Ignore

#parted /dev/sdb mkpart primary 11 21 Ignore

#parted /dev/sdb mkpart logical 22 32 Ignore

#parted /dev/sdb p

 

parted /dev/sdb mklabel msdos Yes

parted /dev/sdb mkpart primary 0 10 Ignore

parted /dev/sdb mkpart primary 11 21 Ignore

parted /dev/sdb mkpart extended 22 100 Ignore

parted /dev/sdb mkpart logical 22 32 Ignore

parted /dev/sdb p

 

 

parted非互動式創建磁區

 

 

 

創建200M磁區

dd if=/dev/zero of=/tmp/200m bs=1M      count=200

 

 

 

 

掛載到swap

 

 

激活swap

 

 

01.磁盤管理體系結構

第一層:物理結構資訊  介面 內部和外部結構

第二層:邏輯結構資訊  RAID LVM

第三層:磁盤磁區概念  磁區命令 磁區原則

第四層:創建檔案系統  磁盤格式化

第五層:磁盤管理應用  掛載操作

 

1.物理結構資訊

外部結構:磁盤介面  轉速資訊(10K 15K) 盤片 主軸  機械臂 磁頭

 

內部結構:磁道 Track(多個同心圓)扇區 sectors(存盤資料最小單位-512位元組)柱面 Cylinder(多個盤片按照柱面讀取資料)

 

算出磁盤大小:

方法一:一個扇區大小*扇區總的數量

方法二:柱面數量*  單元塊大小(1個柱面大小)

方法三:扇區大小*一個磁道扇區數量*一個盤片磁道數*磁頭

 

磁盤讀取資料原理:

    需要在一定時期,進行磁盤維護

 

2.磁盤邏輯資訊

RAID: 速度更快  更安全  容量更大

RAID5:  特點:即安全 性能又好  只能壞一塊硬碟,少一塊盤容量

RAID10: 特點:即安全 性能又好  建議只能壞一塊硬碟,少一半容量

RAID01:特點:即安全 性能又好  建議只能壞一塊硬碟,少一半容量

 

如何配置RAID:

https://jingyan.baidu.com/article/da1091fb60acb0027849d6ce.html  IBM陣列配置

                                      

LVM:邏輯卷管理  彈性擴容和縮容磁盤  缺陷:存盤效率較低

 

配置方法:???

01. 磁區創建PE資訊

02. 創建VG 將PE加入到VG

03. 創建LV

04. 進行掛載

 

3.磁盤磁區方法

準備知識:MBR 引導資訊 + 磁區表資訊 = 512位元組

主磁區:4個   1-4

擴展磁區:1個 

邏輯磁區:n個 5-x

 

第一種方式:磁盤總容量小于2T  fdisk

準備環境:添加一塊磁盤 --- 查看fdisk -l

磁區操作程序:

第一個歷程:進行磁區

fdisk /dev/sdb

 

第二個歷程:設定磁區方案

  d   delete a partition

    洗掉磁區

  g   create a new empty GPT partition table

    創建一個新的空的GPT磁區表(對大于2T磁盤進行磁區)

  l   list known partition types

    列出已知的磁區型別

  m   print this menu

  n   add a new partition *****

    創建磁區

  o   create a new empty DOS partition table(對小于2T磁盤進行磁區)

    創建一個新的空的Dos磁區表

  p   print the partition table *****

    顯示磁區資訊

  q   quit without saving changes

    不保存退出

  t   change a partition's system id

    顯示磁區系統編號

  u   change display/entry units

  w   write table to disk and exit ******

    保存退出

 

  輸入n 創建 p主磁區 e擴展磁區

      磁區開始不用設定

         磁區結束需要設定:+NK +NM +NG

  輸入p 進行查看

 

第三個歷程:磁區確認后進行保存

w    保存磁區表資訊

 

第二種方式:磁盤總容量大于2T  parted   

準備環境:添加一塊磁盤 --- 查看fdisk -l

磁區指令資訊:

mklabel   (創建磁區表 MRB-msdos/gpt)             

          create a new disklabel (partition table)    mklabel gpt/msdos

mkpart    (創建新的磁區)

              make a partition                        mkpart primary 0 20M

print         (顯示磁區表資訊)

              display the partition table

rm           (洗掉指定磁區資訊)

              delete partition NUMBER

quit          (退出磁區界面)

              exit program

 

磁區操作程序:

第一步:修改磁區表

mklabel gpt

 

第二步:創建磁區

    mkpart primary 0 20M

 

第三步驟:退出格式化

    mkfs.xfs /dev/sdd1

 

總結:

GPT磁區表:可以分大于2T的磁盤

DOS磁區表:可以分小于2T的磁盤

 

4.磁盤格式化操作

格式化==創建檔案系統

檔案系統:組織檔案資料存盤的方式

linux:ext3/ext4  xfs   存盤資料效率/大容量磁盤效率較高

    nfs                網路檔案系統 通過網路存盤資料

       mfs fastdfs         分布式存盤系統

 

格式化命令:

mkfs -t xfs /dev/sdb1

 

02.磁盤例外問題:

1. 掛載上無法卸載

a 沒有退出掛載目錄

b 掛載點目錄中有資料被行程呼叫

c 其他情況

 

解決方式:強制卸載

umount -lf /mnt

    -l lazy(懶惰)   --- 不用退出掛載點目錄進行卸載

    -f force(強制)  --- 強制進行卸載

2. 整個系統 /目錄掛載點出現只讀情況

a 檔案系統損壞了

b 磁盤出現壞道

 

解決方法:

mount -o remount rw  /         

3. 磁盤空間慢如何解決 write error: No space left on device

inode不夠用

block不夠用 

 

如何快速清空目錄中的資料:

rsync命令

4. 如何洗掉資料資訊

i_link數為0: 確保檔案硬鏈接數為0  

i_count數為0:呼叫檔案的行程數為0

5. 磁盤磁區后,無法正常格式化

方法一:重啟系統

方法二:利用命令讓內核識別硬碟資訊

   partprobe /dev/sdd

 

03.如何實作磁盤自動掛載(開機自動掛載)

方法一:/etc/rc.local(執行權限)

    條件掛載命令

    echo 'mount /dev/sdc1 /oldboy01' >>/etc/rc.local 

方法二:/etc/fstab

檔案格式資訊:

UUID=f06d6457-4eb0-4dc1-a790-feff4873fc3e swap    swap    defaults        0 0

/dev/cdrom                             /mnt    iso9660   defaults        0 0

    01                               02          03        04         05 06

 

01:存盤設備檔案資訊 UUID資訊獲取

02:存盤設備掛載點目錄

03:掛載存盤設備檔案系統型別  centos7-xfs centos6-ext3/ext4

04:掛載引數資訊  默認引數資訊:rw, suid, dev, exec, auto, nouser, and async

05:是否自動備份磁盤資訊  lost+found

06:是否自動檢查磁盤資訊  fsck修復檢查磁盤檔案系統

 

默認掛載引數:

rw:                讓掛載點目錄具有可讀可寫權限             相反ro

suid(setuid):    讓掛載點目錄中的檔案特殊權限位生效        相反nosuid  安全

dev:             讓掛載點目錄存盤設備檔案保持屬性不變

exec:             讓掛載點目錄中的執行檔案可以執行         相反noexec

auto:              讓掛載點目錄實作快速自動掛載             相反noauto

nouser:            讓普通用戶是否可以卸載和掛載目錄         相反user    了解

async:             資料異步存盤概念???                  相反sync同步存盤???

man mounts

 

04.實作調整swap空間增大

服務比較消耗記憶體:java語言程式---tomcat

消耗記憶體資源:(測驗)

  dd if=/dev/zero of=/dev/null bs=1500M count=100

 

第一個歷程:將磁盤中取出一部分空間用于擴充swap磁區

    dd if=/dev/zero of=/tmp/1G  bs=10M  count=100

   

第二個歷程:將取出檔案空間用于swap使用

    mkswap /tmp/1G

   

第三個歷程:加載swap標識檔案,增加swap磁區大小

    swapon  /tmp/1G   -- 增加

    swapoff /tmp/1G       -- 還原

 

第十七章 命令匯總

01.基礎命令:

常用的基本命令:

1) mkdir                                            創建目錄資訊

          -p                                           可以創建多級目錄

         

2) touch                                            創建檔案

   

3) ls                                               串列查看目錄或檔案資訊

          ls -d                                          查看目錄是否存在

          ls -l                                           顯示檔案或目錄的詳細屬性資訊

          ls -h                                          以人類可讀方式顯示資訊

          ls -a                                          顯示隱藏檔案資料資訊

          ls -r                                           反向排序資訊

          ls -rt                                          按照檔案修改時間反向排序

          ls -S                                          按照檔案大小進行排序

          ls -i                                           查看檔案inode號碼資訊

         

4) pwd                                            顯示當前所在路徑(絕對路徑)

   

5) cat                                              直接查看檔案內容資訊

          zcat                                          直接查看壓縮包中的檔案資訊

   

6) vi                                               直接編輯修改檔案內容

          vi -r                                           恢復臨時檔案中內容

   

7) echo                                            將資訊輸出到螢屏上

   

8) cd                                              切換目錄路徑

          cd ..

          cd -

          cd ~

   

9) cp                                              復制備份資料

          cp -r                                          復制備份目錄

          cp -a                                         復制備份目錄

          cp -t                                          指定復制的目標路徑

         

10)mv                                             移動備份資料(剪切)

          mv -t                                         指定移動的目標路徑

   

11)tree                                             顯示目錄結構(樹形結構顯示)

   

12)rm                                              洗掉系統資料資訊

          -f                                            強制洗掉資料

          -r                                            遞回洗掉資料(洗掉目錄)

         

13)shutdown                                        關機重啟命令

          -h                                           關機操作

          -r                                            重啟操作

   

14)mount                                           掛載命令

          -o remout                                     重新掛載

          -o rw/ro                                     指定掛載點目錄權限為讀寫/只讀

   

15)umount                                          卸載命令

          -lf                                            強制卸載

   

16)df                                               查看磁盤掛載資訊/磁盤使用情況

          -h                                           以人類可讀方式查看資訊

         

17)export                                           用于修改設定環境變數

   

18)source/.                                          立即加載檔案配置資訊

   

19) alias                                              查看別名設定和修改別名設定

   

20)unalias                                           取消別名功能

   

21)hostname                                        顯示主機名稱和修改主機名稱

          hostname -I                                 顯示網卡地址資訊

         

22)systemctl                                         用于啟動/停止/重啟服務程式

          systemctl start/stop

          systemctl status/is-active/is-enabled

   

23)hostnamectl                                      永久和臨時修改主機名稱

   

24)ifup/ifdown                                       控制指定網卡啟動或停止

   

25)tail                                             查看檔案結尾資訊

          tail -5                                        查看倒數幾行(默認倒數10行)

          tail -f/-F                                       追蹤實時監控檔案的資訊變化

         

26)head                                          查看檔案頭部資訊

          head -5                                     查看頭部幾行(默認開頭10行)

         

27)rpm                                           管理軟體包命令

          -ivh                                         安裝軟體引數

          -ql                                         查看軟體安裝的資料資訊路徑

          -qa                                        查看軟體是否安裝成功

          -qf                                         查看軟體命令屬于哪個軟體大禮包

          -qc                                         查看軟體組態檔路徑資訊

          rpm -e tree --nodeps   ---              卸載指定軟體

         

         

28)uniq                                           去重命令

          uniq -c                                      將重復資訊進行統計

         

29)wc                                            統計字符資訊

          wc -l                                        統計行數

         

30)w                                             顯示系統連接用戶資訊/顯示負載資訊

   

31)free                                            顯示記憶體資訊

          free -h                                       人類可讀顯示資訊

         

32)lscpu                                          顯示系統CPU硬體資訊

   

33)uname                                        顯示系統資訊

          -a                                          顯示系統詳細資訊

         

34)useradd                                        創建用戶

   

   

35)passwd                                        設定用戶密碼

          --stdin                                       免互動設定密碼

         

36)su                                            切換用戶

          su -

         

37)whoami                                        顯示當前用戶資訊

   

38)yum                                          用于安裝系統軟體

          yum install -y                         安裝指定軟體

          yum groupinstall -y xxx                 安裝指定包組

          yum grouplist                        顯示可以安裝包組資訊

          yum list                            顯示可以安裝軟體包資訊

          yum repolist                         顯示使用的yum源資訊(base epel)

          yum provides                       顯示指定命令屬于哪個軟體大禮包

          yum remove                       移除(卸載)指定軟體程式(建議不要使用,容易卸載依賴軟體)

         

39)setenforce                             臨時修改selinux狀態

          getenforce                          查看selinux狀態資訊

         

40)ps -ef                                 查看系統行程資訊

   

41)kill                                    殺死行程資訊

          kill -9                               強制殺死指定行程(慎用)

   

42)history                                調取歷史命令記錄資訊

history -w                             將歷史命令保存到~/.bash_history檔案中

      history -c                              清空歷史記錄

   

43) less/more                               逐行和逐頁查看檔案資訊

   

44)tr                                    替換檔案資訊(顯示時替換)  sed vim >   

   

45)whereis                               查看命令所在路徑

   

46)locate/updatedb                         查看系統檔案所在路徑

   

47)file                                   查看檔案型別

   

48)xargs                                 實作對資訊進行分組

      xargs -n2 <oldboy.txt

      find|xargs -i cp {} 

   

49)tar                                   壓縮資料命令

          zcvf                               對資料進行壓縮

          tf                                 對資料壓縮包進行查看

          xf                                對資料包進行解壓

          h                                壓縮軟連接檔案時,將其指向源檔案進行壓縮

          -C                               指定解壓的路徑

         

50)id                                    查看用戶uid gid 以及所屬組資訊

   

51)date                                 修改時間資訊和顯示時間

          date "+%F"

          date "+%F" -d "-1 day"

          date -s "20201010"

         

52) ntpdate                                同步時間命令

          ntpdate ntp1.aliyun.com

          ntpdate ntp2.aliyun.com

         

53) stat                                   顯示資料詳細屬性資訊

          stat oldboy.txt

         

54)ln                                    創建鏈接命令

          ln -s                               創建軟連接

         

55)crontab                               撰寫定時任務

          crontab -e             

          crontab -l                           查看定時任務資訊

         

56)ping                                 測驗網路連通性

          -c                                指定ping多少個包

          -q                                只顯示ping包結果

          -f                                 極速ping

     

特殊的高級命令:

1) grep                                           過濾篩選檔案資訊命令

          grep -i                                       忽略大小寫進行過濾

          grep -A 2                                    查看指定行的后幾行內容

          grep -B 2                                    查看指定行的前幾行內容

          grep -C 2                                    查看指定行的前后幾行內容

          grep -c                                      統計顯示的行數資訊

         

          zgrep                                       直接過濾壓縮包中的資料資訊

          zgrep -a

         

2) sed                                           對檔案中行進行處理/替換修改檔案內容 

          -n                                          取消默認輸出

          -i                                           真正修改替換檔案內容

          p                                          輸出指定資訊

          s###g                                      替換指定資訊

         

3) awk

   

4) find                                            查找系統檔案資料

          -type                                       根據檔案型別查找

          -name                                      根據檔案名稱查找

          -iname                                      根據檔案名稱忽略大小寫進行查找

          -size                                        根據檔案大小查找資料

          -perm                                      根據檔案權限

          -mtime                                      根據檔案(修改)時間查找資料

          -mmin                                      根據檔案創建生成分鐘

          -exec                                       將查找到的資料進行處理

          -delete                                      將查找到的資料進行直接洗掉

          -path                                       指定檔案路徑資訊

          -prune                                      修剪引數(排除)

          -o                                          多個條件或者關系

          -a                                          多個條件并且關系(默認)

          -not                                        指定條件進行取反

          -print                                        取消排除的目錄顯示

          -inum                                       根據檔案inode號碼進行過濾資料

 

02. 快捷方式:

    tab                  對命令資訊或者路徑檔案資訊進行補全操作

    ctrl+l               清屏操作

    ctrl+a              將游標快速移動到命令列的行首

    ctrl+e              將游標快速移動到命令列的行尾

    ctrl+← →       將游標按照單詞快速移動

    ctrl+c             cancel(取消)快速終止或取消命令操作

    esc+.             呼叫上一個命令最后輸入的引數資訊

    ctrl+d              快速退出當前用戶登錄狀態

    ctrl+u              將游標所在位置之前的內容進行洗掉(剪切)

    ctrl+k              將游標所在位置之后的內容進行洗掉(剪切)

    ctrl+w             將游標之前的一個連續字串資訊進行洗掉(剪切)

    ctrl+y              將剪切的內容進行粘貼

    ctrl+s              將xshell界面進行了鎖定

    ctrl+q              進行解鎖

    ctrl+r              快速檢索歷史命令(條件:需要有歷史命令記錄)

    ctrl+z              中斷(暫停)程式腳本的運行  --- 死回圈 ???

 

03. 系統符號:

    ~        表示家目錄資訊

    ..        表示上一級目錄

    -        表示上一次所在的目錄資訊

    >        表示標準輸出重定向

    >>      表示標準輸出追加重定向

    <        表示標準輸入重定向

    <<      表示標準追加輸入重定向符號

    *        表示匹配所有內容  通配符號

    .         隱藏檔案

                表示當前目錄

    &&      表示前一個命令執行成功,再執行后一個命令

    $        呼叫變數資訊

                提示登錄的用戶為普通用戶

    |         管道符號  將前一個命令執行的結果,交給管道后面的命令進行處理

    $?       調取上一個命令回傳數值,數值為0表示執行正確 數值不為0表示執行失敗

    {..}      生成序列資訊  通配符號

    ``        將引號中的命令先執行,將執行結果交給引號外面的命令進行處理

    !         在find命令使用時,表示進行取反排除

 

04. 報錯總結:

 

1) -bash: tree: command not found    命令沒有找到

2) mkdir: cannot create directory ‘oldboy’: File exists  不能創建oldboy目錄,目錄已經存在

3) omitting directory ‘oldboy01/’    無法進行目錄直接復制

4) oldboy.txt: Permission denied     操作權限阻止

 

05. 操作習慣:

 

1)操作完檢查~

 

 

 

 

 

 

第十七章 基礎課程知識回顧

基礎部分回顧:

1) 服務器硬體做成介紹

* 服務器硬體組成 CPU 記憶體 硬碟 風扇 電源

* 服務器硬體詳細說明 

         CPU  核數 路數 

         記憶體 緩沖 快取

* 企業資料存盤案例: 高并發存盤/保證資料安全性

2) 服務器系統安裝

* 系統的組成: 雞蛋 (內核 shell解釋器 外圍軟體程式)

* 系統的歷史: GNU GPL

* 系統的安裝: 虛擬主機如何配置  centos7系統安裝(網路配置-網卡名稱設定 磁盤磁區-3種 軟體安裝--最小化安裝 1236)

3) 服務器網路配置修改

* 如何配置網路資訊 (修改網卡檔案 nmtui圖形化方式進行修改--NetworkManager需要開啟)

* 利用xshell實作遠程連接 (xshell軟體如何初始化配置) secureCRT

* 實作遠程連接(遠程連接例外排查三步曲)     

4) 服務器系統管理命令說明

* 引入系統操作命令 cp mv rm ls pwd mkdir touch ...

    

5) 系統目錄結構說明

* 磁盤掛載概念 mount

* 詳細的目錄結構說明 

/etc

/usr/local

/var(messages sercure cron) 

/proc

    

6) 系統優化操作

     省略

7) 檔案屬性說明

 [[email protected] ~]# ls -lih /etc/

total 1.2M

101115776 drwxr-xr-x.  3 root root  101 Dec 29 16:33 abrt

34011044 -rw-r--r--.  3 root root   16 Dec 29 16:35 adjtime

33596583 -rw-r--r--.  1 root root 1.5K Jun  7  2013 aliases

33554501 -rw-r--r--.  1 root root  12K Dec 29 16:42 aliases.db

33583455 drwxr-xr-x.  2 root root  236 Dec 29 16:33 alternatives

34030593 -rw-------.  1 root root  541 Apr 11  2018 anacrontab

33880205 -rw-r--r--.  1 root root   55 Apr 11  2018 asound.conf

101198241 drwxr-x---.  3 root root   43 Dec 29 16:33 audisp

   

8) 正則運算式說明

& ^ . ? + {} []

系統特殊符號分類

系統通配符號分類 find -name "*oldboy"  (find命令常見用法)

系統正則符號分類(基礎正則-grep sed awk 擴展正則- egrep/grep -E sed -r awk)    

 

9) 三劍客命令說明 awk sed grep過濾 -c(統計行數)

* 命令的執行原理 

* 命令的語法格式 

01.找出滿足條件一行資訊 

02.對一行資訊進行處理

* 命令應用說明   

增 刪 改 查

* awk命令還有統計功能

awk運算方法(累加運算 i=i+1/i++  求和運算 i=i+$n/i+=$n)

    

10) 用戶管理知識說明

* 用戶管理的相關命令

   useradd  userdel  usermod passwd

   groupadd groupdel groupmod  

* 檔案權限說明

   普通檔案權限有什么  r w x

   目錄檔案權限有什么  r w x             

* 特殊權限說明(普通用戶如何獲得root權限)

   1) su -

   2) sudo

   3) 設定特殊權限位 setuid setgid 粘滯位           

* 檔案或目錄的默認權限

檔案 644  目錄 755

umask命令生成的數值, 進行運算獲得默認檔案(666)或目錄(777)權限數值

     

11) 定時任務

* 一個檔案(/var/spool/cron/root)和一個命令crontab 

* 組態檔撰寫方法

* 1-5 * * *  定時操作任務命令

          分時日月周  需要執行任務

* 每  */n 每隔  1-5 時間連續范圍  1,3,5 時間不連續范圍

* 掌握定時任務的撰寫規范

* 掌握定時任務撰寫的注意事項

 

12) 磁盤管理概念

按照層次結構進行掌握

第一個層次  磁盤的結構 (外部結構 內部結構)

第二個層次  RAID(哪些級別) LVM

第三個層次  磁盤磁區方法 (fdisk--2T以下磁盤MBR  parted--2T以上磁盤GPT)

第四個層次  磁盤格式化(創建檔案系統)    

第五個層次  磁盤掛載應用(如何實作自動掛載-2種)   

      

企業案例: 服務器種java程式耗費記憶體比較多的時候, 如何進行臨時調整

解決方法: 臨時增加swap磁區空間大小  dd   /dev/zero(/dev/null)

 

 

 

 

第十七章 基礎階段總復習筆記

=============================================

01. 基礎階段--服務器硬體知識

1)云主機如何進行操作配置 ECS RDS

2)記錄一些硬體服務器品牌

3)服務器硬體組成部分

    CPU(內核 幾路)  記憶體(緩沖 快取 行程 守護行程) 硬碟(陣列 RAID 0 1 5 10 01)

    研究擴展:執行緒 協程

4)如何記錄學習筆記

    文本資訊:標題(多級串列) 正文(中文字體-微軟雅黑 英文資訊-Arial 3級正文) 注釋(表格注釋 提示資訊)

    表格資訊:表格模板修改

    圖片資訊:格式-修改列寬/邊框/陰影

    代碼資訊:樣式-代碼

 

02. 基礎階段--作業系統介紹說明

1)系統發展史中 GNU GPL

2)系統發行版本 Centos7/6 Ubuntu debian

3)系統虛擬化   vmware workerstaion  虛擬主機(虛擬硬體)快照 克隆

    問題:網路(NAT 橋接 僅主機) 服務問題(services.msc)虛擬主機資料有問題

4)安裝作業系統

  1.系統網卡名稱需要修改

  2.配置網卡資訊/磁盤磁區/指定軟體包(最小化 1236)    

03. 基礎階段--遠程連接管理系統

1)xshell 軟體如何進行配置

 

2)xshell 軟體遠程連接排錯 (大保健 - 三步曲)

       確認鏈路是否正常

       確認鏈路是否阻塞(安全策略開啟)

       確認服務是否開啟

 

3)虛擬主機三種網路模式

NAT: 外網  小孩(虛擬主機網卡地址10.0.0.201)---> 大人(本地網卡地址 192.168.20.100)

         NAT 網路地址轉換技術

                 優點:不容易造成地址沖突

                 缺點:不容易讓其他物理主機訪問

橋接:外網  成人(虛擬主機網卡地址192.168.20.2xx) == 大人(本地網卡地址 192.168.20.100)

缺點:不容易造成地址沖突

          優點:容易讓其他物理主機訪問

僅主機:不能訪問外網  

          優點:安全性高

          缺點:不能訪問外網    能訪問外網(作業系統路由資訊)       

    

 

04. 基礎階段--系統管理操作命令

1) 關閉和重啟命令

2) 幫助命令        man

3) 系統基礎操作命令   cd pwd mkdir touch ls cp mv rm echo cat less more tail head

4) 如何編輯檔案    vim/vi    i  esc :wq!/q!  

                    命令模式--編輯模式轉換---命令模式

                  命令模式--底行模式轉換---命令模式

                    

05. 基礎階段--系統目錄結構說明

1)什么是系統的掛載

2)系統常用重要目錄結構  

/etc     --- 組態檔保存的路徑 

/var     --- 日志保存的目錄

/home    --- 普通用戶家目錄

/root    --- root管理員家目錄

/tmp     --- 臨時目錄    

/mnt         --- 臨時掛載目錄

/proc    --- 存盤資料到記憶體中

/bin     --- 命令檔案保存路徑

/sbin    --- 命令檔案保存路徑

3) 系統環境變數  /etc/profile  export PATH="$PATH:/XXX"

PS1 PATH LANG

別名功能         

 

    

06. 基礎階段--系統基礎優化說明

1)掌握命令提示符優化

2)掌握yum源優化  

base:

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

或者

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

 

epel:

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

      

基礎yum軟體下載:

yum install -y vim wget tree lrzsz net-tools bash-completion

    vim              vi編輯的升級版軟體

    wget             下載軟體命令

    tree             列出目錄結構資訊

    lrzsz                 下載上傳資料資訊  linux -- windows

    net-tools          兼容centos6網路命令功能

    bash-completion  對centos7部分命令引數進行自動補全 systemctl

 

3) 系統安全優化

將防火墻服務關閉:  臨時關閉  永久關閉

將selinux服務關閉: 臨時關閉  永久關閉

4)系統字符集優化

臨時 永久  localectl set-locale LANG="xxx"

    

問題:批量創建用戶stu01..10,每個用戶有隨機密碼資訊

第一種方法:

第一步:用RANDOM生成亂數

    echo $RANDOM

    亂數生成方法:https://www.cnblogs.com/Mr-Ding/p/9427968.html

   

第二步:創建多個用戶

    seq -w 10|sed -r 's#(.*)#useradd oldboy\1#g'

   

第三步:批量創建用戶/設定密碼資訊(用RANDOM隨機生成密碼)

# seq -w 10|sed -r 's#(.*)#useradd oldboy\1;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy\1;echo $User_Pass oldboy\1 >>/tmp/user_info.txt#g'|bash

 

useradd oldboy01;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy01;echo $User_Pass oldboy01 >>/tmp/user_info.txt

useradd oldboy02;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy02;echo $User_Pass oldboy02 >>/tmp/user_info.txt

useradd oldboy03;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy03;echo $User_Pass oldboy03 >>/tmp/user_info.txt

useradd oldboy04;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy04;echo $User_Pass oldboy04 >>/tmp/user_info.txt

useradd oldboy05;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy05;echo $User_Pass oldboy05 >>/tmp/user_info.txt

useradd oldboy06;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy06;echo $User_Pass oldboy06 >>/tmp/user_info.txt

useradd oldboy07;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy07;echo $User_Pass oldboy07 >>/tmp/user_info.txt

useradd oldboy08;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy08;echo $User_Pass oldboy08 >>/tmp/user_info.txt

useradd oldboy09;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy09;echo $User_Pass oldboy09 >>/tmp/user_info.txt

useradd oldboy10;User_Pass=$RANDOM;echo "$User_Pass"|passwd --stdin oldboy10;echo $User_Pass oldboy10 >>/tmp/user_info.txt

   

#!/bin/bash

for user  in {01..10}

do

     User_Pass=6678

   useradd oldboy02

     echo "6678"|passwd --stdin oldboy02

   echo 6678 oldboy02 >>/tmp/user_info.txt   4565  oldboy01

done                                        6678  oldboy02

 

第二種方法:

第一步:用MD5生成亂數

    pass=$(date +%N|md5sum |cut -c1-8);echo $pass \1

    亂數生成方法:https://www.cnblogs.com/Mr-Ding/p/9427968.html

   

第二步:創建多個用戶

    echo stu{1..10}|xargs -n1|sed -r 's#(.*)#useradd \1#g’

 

第三步:批量創建用戶/設定密碼資訊(用MD5隨機生成密碼)

echo stu{1..10}|xargs -n1|sed -r 's#(.*)#useradd \1;pass=$(date +%N|md5sum |cut -c1-8);echo $pass \1 >> pass.txt;echo $pass|passwd --stdin \1#g'|bash

 

 

 

 

07. 基礎階段--系統檔案屬性說明

1)系統檔案屬性:

       inode  檔案型別權限  硬鏈接數 所屬用戶 所屬組  大小  時間   ==8

2)檔案型別:

       型別分類:d - l

       檔案命令:搜索檔案  find 尋找范圍  條件

                 如何將/oldboy 有權限為644檔案,移動到/tmp (至少三種方法)

                 壓縮檔案  tar (壓縮資料 查看壓縮包 解壓) unzip/zip

3)檔案權限:

       rwx -- 用戶(屬主 屬組 其他用戶) -- 檔案(r)

       rwx -- 用戶(屬主 屬組 其他用戶) -- 目錄(x)

      

4)屬主 屬組

       用戶分類:管理用戶 虛擬用戶 普通用戶

       用戶編號:id uid gid

       用戶和組的關系:1 v 1 1vn nvn n v 1

      

5) inode / block

       概念:

       如何誕生:

       如何查看:

   

6) 硬鏈接/軟連接  

       概念: inode號   01  110 110

       如何配置 ln

       特點:

       不同的磁區不能創建硬鏈接 

       /dev/sda3(/)   --- /oldboy/oldboy.txt      源     100 oldgirl.txt

       /dev/sdb2(/mnt)--- /oldboy/oldboy_hard.txt 目標   100 oldboy.txt

       以上方法創建硬鏈接會失敗

      

       nginx --- /application/nginx-1.17.0/sbin/nginx  軟連接 /application/nginx

       腳本:cmd_path="/application/nginx/sbin/"    

      

7)檔案時間資訊

       3個時間  mtime ctime  atime   date (修改時間 顯示時間) ntpdate 時間同步

 

 

08. 基礎階段--系統正則運算式

基礎符號資訊:引號系列  路徑符號 重定向符號 邏輯符號

通配符號資訊:*  {} cp /etc/oldboy.txt{,.bak}

正則符號資訊:grep sed awk

 

基礎正則;^ $ ^$ . * .* [] [^] \ grep sed awk 

 

擴展正則:+ ? () {} |            egrep sed -r awk

 

測驗題:如何取出IP地址 (grep sed awk)

 

09. 基礎階段--三劍客命令 sed /awk)

sed                          

1)概念作用

擅長取行 修改檔案            

2)語法結構 (執行原理)

sed [引數] ’條件指令‘ 檔案   

3)實踐操作:               

增  刪  替換 查詢            

4) 擴展說明   

                             

awk(陣列)

1)概念作用

擅長取列 統計分析

2)語法結構 (執行原理)

awk [引數] '模式{動作}'

3)實踐操作:

刪  替換gsub(//,"",$n) 統計(累加統計i++/i=i+1  求和統計i=i+$n)

4) 擴展說明

BEGIN、END  FS NF NR  

                                  

10. 基礎階段--系統用戶權限管理

1)權限相關知識--如何讓普通用戶獲取root權限

       a 直接su - 變為root

       b 修改指定資料權限  chmod ugoa 644 755  chown

       c 指定用戶提權      visudo sudo(大寶劍)

       d 設定特殊權限位    setuid(u+s(4)) setgid(g+s(2)) 粘滯位(o+t(1))  12個權限位

       權限相關知識--系統默認檔案資料權限

       檔案默認權限:644  目錄默認權限:755

       umask數值如何運算

2)系統用戶相關知識 --- 用戶的重要目錄和檔案

       /etc/skel  

       /etc/passwd /etc/shadow

       系統用戶相關知識 --- 用戶相關的命令

       useradd(虛擬用戶) 引數?  usermod  userdel -r

       groupadd

       passwd

       id last lastlog  whoami w

    

11. 基礎階段--系統定時任務資訊

1)如何撰寫定時任務 systemctl start crond

       一個命令 crontab -e

       語法格式  時間定義(*每 /n每隔 -連續時間范圍 , 間隔時間范圍) 分時 日 月周

       PS:日 星期 不能同時用                  

           * 10 * * *  10點每分鐘都執行   00 10 * * 6  每周6 10點整

2)如何查看定時任務成功

       一個檔案 /var/log/cron

3)撰寫定時任務注意事項

       1)注意命令使用絕對路徑

       2)注意特殊符號資訊   

       3)盡量撰寫腳本資訊放入定時任務中

       4)需要撰寫注釋

       5)盡量將執行任務后面加上重定向到空 &>/dev/null

       6)腳本中的命令執行不要顯示輸出資訊 -v取消 -s -q

       7)腳本中需要指定特殊環境變數       java-tomcat

     

0X. 企業案例01:資料存盤方案

    高并發存盤方案:資料存盤 -- 記憶體(寫-緩沖)--磁盤中--記憶體(讀-快取)-- 用戶讀取資料

    低并發存盤方案:資料存盤 -- 磁盤中 -- 記憶體(讀-快取)---用戶讀取資料

 

0X. 技術原理總結:

    1)磁盤資料讀取原理 (inode block)

       /etc/oldboy/oldboy.txt 

    2) 硬鏈接和軟鏈接作業特點區別

    3)如何表示資料被真正洗掉

       i_link=0  i_count=0

 

擴展知識

01.Linux同步網路時間

1.date '+%Y%M%D' 按照格式顯示當前日期,結果如下:

[root@oldboymeng ~]# date "+%Y-%m-%d %H:%M:%S"

2019-05-29 19:19:05

 

2.date -s "xxx xx:xx:xx" 設定系統時間

[root@oldboymeng ~]# date -s "20190529 19:20:30"

Wed May 29 19:20:30 CST 2019

 

3.時間同步服務器

[root@oldboymeng ~]# yum -y install ntp

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

[root@oldboymeng ~]# ntpdate -u ntp1.aliyun.com

29 May 19:24:04 ntpdate[17835]: step time server 120.25.115.20 offset -2.276150 sec

 

ntp常用服務器:

阿里云:ntp1.aliyun.com

        ntp2.aliyun.com

        ntp3.aliyun.com

        ntp4.aliyun.com

        ntp5.aliyun.com

        ntp6.aliyun.com

        ntp7.aliyun.com

中國國家授時中心:210.72.145.44

NTP服務器(上海) :ntp.api.bz

美國: time.nist.gov

復旦: ntp.fudan.edu.cn

微軟公司授時主機(美國) :time.windows.com

北京郵電大學 : s1a.time.edu.cn

清華大學 : s1b.time.edu.cn

北京大學 : s1c.time.edu.cn

臺警大授時中心(臺灣):asia.pool.ntp.org

 

4.時區操作

查看時區

date "+%Z"

[root@oldboymeng ~]# date "+%Z"

CST

 

5.將系統時間寫入硬體

查看硬體時間

hwclock

同步系統時間

clock -w

[root@oldboymeng ~]# hwclock

Wed 29 May 2019 07:55:27 PM CST  -0.990765 seconds

[root@oldboymeng ~]# hwclock -w

[root@oldboymeng ~]# hwclock

Wed 29 May 2019 07:57:00 PM CST  -0.434109 seconds

 

 

命令:取nginx行程pid號,并結束行程

[root@lzy ~]# ps axu|grep nginx|grep -v grep|awk '{print $2}'

3911

3912

[root@lzy ~]# ps axu|grep nginx|grep -v grep|awk '{print $2}'|xargs kill -9

 

腳本:備份etc目錄到/data/IP目錄下并壓縮成時間格式檔案

[root@oldboyedu ~]# cat tar.sh

time=`date +%F`

dir=`ifconfig|awk 'NR==2{print $2}'`

[ -d /data/$dir ] || mkdir /data/$dir

cd / && tar zcf /data/$dir/$time.tar.gz etc

 

 

02.Linux誤刪檔案后恢復資料

     在Linux下,基于開源的資料恢復工具有很多,常見的有debugfs、R-Linux、ext3grep、extundelete等,比較常用的有ext3grep和extundelete,這兩個工具的恢復原理基本一樣,只是extundelete功能更加強大;

    Extundelete能夠利用inode資訊結合日志去查詢該inode所在的block位置,以次來查找和恢復所需的資料,該工具最給力的一點就是支持ext3/ext4雙格式磁區恢復,基于整個磁盤的恢復功能較為強大,

 

注意事項

在資料被誤洗掉后,第一時間要做的是卸載被洗掉資料所在的磁盤或磁盤磁區,

因為將檔案洗掉后,僅僅是將檔案的inode結點中的扇區指標清零,實際檔案還存盤在磁盤上,如果磁盤以讀寫模式掛載,這些已洗掉的檔案的資料塊就可能被作業系統重新分配出去,在這些資料塊被新的資料覆寫后,這些資料就真的丟失了,恢復工具也回力無天,

所以,以只讀模式掛載磁盤可以盡量降低資料塊中資料被覆寫的風險,以提高恢復資料成功的幾率,

 

1.部署extundelete工具

1.wget http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2

2.yum -y install  bzip2  e2fsprogs-devel  e2fsprogs  gcc-c++  make    #安裝相關依賴和庫

3.tar -xvjf extundelete-0.2.4.tar.bz2

4.cd extundelete-0.2.4                            #進入程式目錄

5../configuremake && make install

 

2.部署誤洗掉檔案環境

1)模擬資料誤洗掉環境

在演示通過extundelete恢復資料之前,我們首先要模擬一個資料誤洗掉環境,這里我們以ext3檔案系統為例,在ext4檔案系統下的恢復方式與此完全一樣,

 

簡單的模擬操作程序如下:

[root@cloud1 ~]#mkdir /data

 

[root@cloud1 ~]#mkfs.ext3 /dev/sdc1

 

[root@cloud1 ~]#mount /dev/sdc1  /data

 

[root@cloud1 ~]# cp /etc/passwd  /data

 

[root@cloud1 ~]# cp -r /app/ganglia-3.4.0  /data

 

[root@cloud1 ~]# mkdir /data/test

 

[root@cloud1 ~]# echo "extundelete test" > /data/test/mytest.txt

 

[root@cloud1 ~]#cd /data

 

[root@cloud1 data]# md5sum  passwd

0715baf8f17a6c51be63b1c5c0fbe8c5  passwd

 

[root@cloud1 data]# md5sum  test/mytest.txt

eb42e4b3f953ce00e78e11bf50652a80  test/mytest.txt

 

[root@cloud1 data]# rm -rf /data/*

 

2)卸載磁盤磁區

在將資料誤洗掉后,立刻需要做的就是卸載這塊磁盤磁區:

[root@cloud1 data]#cd /mnt

 

[root@cloud1 mnt]# umount /data

3)查詢可恢復的資料資訊

在Linux下可以通過“ls –id”命令來查看某個檔案或者目錄的inode值,例如查看根目錄的inode值,可以輸入:

[root@cloud1 ~]# ls -id  /

2 /

 

通過extundelete命令可以查詢/dev/sdc1磁區可恢復的資料資訊:

[root@cloud1 /]# extundelete  /dev/sdc1  --inode 2

......

File name                                       | Inode number | Deleted status

.                                                2

..                                                2

lost+found                                        11             Deleted

passwd                                           49153          Deleted

test                                              425985         Deleted

ganglia-3.4.0                                       245761         Deleted

根據上面的輸出,標記為Deleted狀態的是已經洗掉的檔案或目錄,同時還可以看到每個已洗掉檔案的inode值,接下來就可以恢復檔案了,

3.通過extundelete恢復單個檔案

extundelete恢復單個檔案的引數是“--restore-file”,這里需要注意的是,“--restore-file”后面指定的是恢復檔案路徑,這個路徑是檔案的相對路徑,相對路徑是相對于原來檔案的存盤路徑而言的,比如,原來檔案的存盤路徑是/data/passwd,那么在引數后面直接指定passwd檔案即可,如果原來檔案的存盤路徑是/data/test/mytest.txt,那么在引數后面通過“test/mytest.txt”指定即可,

 

執行如下命令開始恢復檔案:

 

[root@cloud1 /]# extundelete  /dev/sdc1  --restore-file passwd

Loading filesystem metadata ... 40 groups loaded.

Loading journal descriptors ... 54 descriptors loaded.

Successfully restored file passwd

 

[root@cloud1 /]# cd RECOVERED_FILES/

 

[root@cloud1 RECOVERED_FILES]# ls

passwd

 

[root@cloud1 RECOVERED_FILES]# md5sum  passwd

0715baf8f17a6c51be63b1c5c0fbe8c5  passwd

 

在檔案恢復成功后,extundelete命令默認會在執行命令的當前目錄下創建一個RECOVERED_FILES目錄,此目錄用于存放恢復出來的檔案,所以執行extundelete命令的當前目錄必須是可寫的,

根據上面的輸出,通過md5sum命令校驗,校驗碼與之前的完全一致,表明檔案恢復成功,

 

4.通過extundelete恢復單個目錄

extundelete除了支持恢復單個檔案,也支持恢復單個目錄,在需要恢復目錄時,通過 “--restore-directory”選項即可恢復指定目錄的所有資料,

 

繼續在上面模擬的誤洗掉資料環境下操作,現在要恢復/data目錄下的ganglia-3.4.0檔案夾,操作如下:

 

[root@cloud1 mnt]# extundelete  /dev/sdc1  --restore-directory /ganglia-3.4.0

Loading filesystem metadata ... 40 groups loaded.

Loading journal descriptors ... 247 descriptors loaded.

Searching for recoverable inodes in directory /ganglia-3.4.0 ...

781 recoverable inodes found.

Looking through the directory structure for deleted files ...

4 recoverable inodes still lost.

 

[root@cloud1 mnt]# ls

RECOVERED_FILES

 

[root@cloud1 mnt]# cd RECOVERED_FILES/

 

[root@cloud1 RECOVERED_FILES]# ls

ganglia-3.4.0

 

可以看到之前洗掉的目錄ganglia-3.4.0已經成功恢復了,進入這個目錄檢查發現:所有檔案內容和大小都正常,

 

5.通過extundelete恢復所有誤洗掉資料

當需要恢復的資料較多時,一個個地指定檔案或目錄將是一個非常繁重和耗時的作業,不過,extundelete考慮到了這點,此時可以通過“--restore-all”選項來恢復所有被洗掉的檔案或檔案夾,

仍然在上面模擬的誤洗掉資料環境下操作,現在要恢復/data目錄下所有資料,操作程序如下:

 

[root@cloud1 mnt]# extundelete  /dev/sdc1 --restore-all

Loading filesystem metadata ... 40 groups loaded.

Loading journal descriptors ... 247 descriptors loaded.

Searching for recoverable inodes in directory / ...

781 recoverable inodes found.

Looking through the directory structure for deleted files ...

0 recoverable inodes still lost.

 

[root@cloud1 mnt]# ls

RECOVERED_FILES

 

[root@cloud1 mnt]# cd RECOVERED_FILES/

 

[root@cloud1 RECOVERED_FILES]# ls

ganglia-3.4.0  passwd  test

 

[root@cloud1 RECOVERED_FILES]# du -sh  /mnt/RECOVERED_FILES/*

15M     /mnt/RECOVERED_FILES/ganglia-3.4.0

4.0K    /mnt/RECOVERED_FILES/passwd

8.0K    /mnt/RECOVERED_FILES/test

 

可以看到所有資料全部完整地恢復了,

 

6.通過extundelete恢復某個時間段的資料

 

有時候洗掉了大量的資料量,其中很多資料都是沒用的,我們僅需要恢復其中的一部分資料,此時,如果采用恢復全部資料的辦法,不但耗時,而且浪費資源,在這種情況下,就需要采用另外的一種恢復機制有選擇地恢復,extundelete提供了“—after”“和”--before“引數,可以通過指定某個時間段,進而只恢復這個時間段內的資料,

下面通過一個簡單示例,描述下如何恢復某個時間段內的資料,

我們首先假定在/data目錄下有個剛剛創建的壓縮檔案ganglia-3.4.0.tar.gz,然后洗掉此檔案,接著卸載/data磁區,開始恢復一小時內的檔案,操作如下:

 

[root@cloud1 ~]#cd /data/

 

[root@cloud1 data]# cp /app/ganglia-3.4.0.tar.gz  /data

 

[root@cloud1 data]# date +%s

1379150309

 

[root@cloud1 data]# rm -rf ganglia-3.4.0.tar.gz

 

[root@cloud1 data]# cd /mnt

 

[root@cloud1 mnt]# umount /data

 

[root@cloud1 mnt]# date +%s

1379150340

 

[root@cloud1 mnt]# extundelete  --after 1379146740 --restore-all /dev/sdc1

Only show and process deleted entries if they are deleted on or after 1379146740 and before 9223372036854775807.

Loading filesystem metadata ... 40 groups loaded.

Loading journal descriptors ... 247 descriptors loaded.

Searching for recoverable inodes in directory / ...

779 recoverable inodes found.

 

[root@cloud1 mnt]#  cd RECOVERED_FILES/

 

[root@cloud1 RECOVERED_FILES]# ls

ganglia-3.4.0.tar.gz

 

可以看到,剛才洗掉的檔案,已經成功恢復,而在/data目錄下還有很多被洗掉的檔案卻沒有恢復,這就是”--after“引數控制的結果,因為/data目錄下其他檔案都是在一天之前洗掉的,而我們恢復的是一個小時之內被洗掉的檔案,這就是沒有恢復其他被洗掉檔案的原因,

在這個操作程序中,需要注意是“--after”引數后面跟的時間是個總秒數,起算時間為“1970-01-01 00:00:00 UTC”,通過“date +%s”命令即可將當前時間轉換為總秒數,因為恢復的是一個小時之內的資料,所以“1379146740”這個值就是通過“1379150340”減去“60*60=3600”獲得的,

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/81971.html

標籤:Linux

上一篇:Manjaro安裝后簡單配置

下一篇:全面解讀信創行業 關注國產作業系統

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more