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

歡迎訪問 生活随笔!

生活随笔

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

linux

《Linux就该这么学》读书笔记

發布時間:2023/12/15 linux 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Linux就该这么学》读书笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


開源文檔地址:?https://www.linuxprobe.com/docs/LinuxProbe.pdf

對linux感興趣的小伙伴可以移步到我的專欄:https://blog.csdn.net/sanhewuyang/category_9165933.html


第一章,部署虛擬環境安裝 Linux 系統

直接用阿里云學的,這個就不看啦。

如果您剛剛接手了一臺 Linux 系統,要先確定是否為 RHEL 7 系統。如果是,然后再 進行下面的操作。?

[root@liruilong ~]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) [root@liruilong ~]#


RPM(紅帽軟件包管理器)?

RPM 機制則為解決這些問題而設計的。RPM 有點像 Windows 系統中的控制面板,會建 立統一的數據庫文件,詳細記錄軟件信息并能夠自動分析依賴關系.

Yum 軟件倉庫可以 根據用戶的要求分析出所需軟件包及其相關的依賴關系,然后自動從服務器下載軟件包并安 裝到系統。

?

第2章新手必須掌握的Linux命令

常用系統工作命令

1.echo 命令?

echo 命令用于在終端輸出字符串或變量提取后的值,格式為“echo [字符串 | $變量]”。

2.date 命令?

date 命令用于顯示及設置系統的時間或日期,格式為“date [選項] [+指定的格式]”。 只需在強大的 date 命令中輸入以“+”號開頭的參數

[root@liruilong ~]# date "+%Y-%m-%d %H:%M:%S" 2020-11-06 22:17:15 [root@liruilong ~]# date $DATEFORM date: extra operand ‘%H:%M:%S’ Try 'date --help' for more information. [root@liruilong ~]# DATEFORM="+%Y-%m-%d-%H:%M:%S" [root@liruilong ~]# date $DATEFORM 2020-11-06-22:18:15 [root@liruilong ~]#

3.reboot 命令?

reboot 命令用于重啟系統,其格式為 reboot。 由于重啟計算機這種操作會涉及硬件資源的管理權限,因此默認只能使用 root 管理員來 重啟

?4.poweroff 命令?

poweroff 命令用于關閉系統,其格式為 poweroff。 該命令與 reboot 命令相同,都會涉及硬件資源的管理權限,因此默認只有 root 管理員才 可以關閉電腦,

[root@liruilong ~]# echo liruilong.com liruilong.com [root@liruilong ~]# echo $shell[root@liruilong ~]# echo $SHELL /bin/bash [root@liruilong ~]#

5.wget 命令?

wget 命令用于在終端中下載網絡文件,格式為“wget [參數] 下載地址”。?
?

6.ps 命令?

ps 命令用于查看系統中的進程狀態,格式為“ps [參數]”。?

在 Linux 系統中,有 5 種常見的進程狀態,分別為運行、中斷、不可中斷、僵死與停止,

  • ?R(運行):進程正在運行或在運行隊列中等待。
  • ?S(中斷) :進程處于休眠中,當某個條件形成后或者接收到信號時,則脫離該 ? 狀態。
  • ?D(不可中斷):進程不響應系統異步信號,即便用 kill 命令也不能將其中斷。
  • Z(僵死):進程已經終止,但進程描述符依然存在, 直到父進程調用 wait4()系統函數 后將進程釋放。
  • ?T(停止):進程收到停止信號后停止運行。

當執行 ps aux 命令后通常會看到如表進程狀態,

7.top 命令?

top 命令用于動態地監視進程活動與系統負載等信息,其格式為 top。 top 命令相當強大,能夠動態地查看系統運維狀態,完全將它看作 Linux 中的“強化版的 Windows 任務管理器”。

8.pidof 命令?

pidof 命令用于查詢某個指定服務進程的 PID 值,格式為“pidof [參數] [服務名稱]”。 每個進程的進程號碼值(PID)是唯一的,因此可以通過 PID 來區分不同的進程。例如, 可以使用如下命令來查詢本機上 sshd 服務程序的 PID:?
?

[root@liruilong]# pidof sshd 2156

9.kill 命令?

kill 命令用于終止某個指定 PID 的服務進程格式為“kill [參數] [進程 PID]”。 接下來,我們使用 kill 命令把上面用 pidof 命令查詢到的 PID 所代表的進程終止掉,其命 令如下所示。這種操作的效果等同于強制停止 sshd 服務。?

10.killall 命令?

killall 命令用于終止某個指定名稱的服務所對應的全部進程,格式為:“killall [參數] [進 程名稱]”。 通常來講,復雜軟件的服務程序會有多個進程協同為用戶提供服務,如果逐個去結束這 些進程會比較麻煩,此時可以使用 killall 命令來批量結束某個服務程序帶有的全部進程。下 面以 httpd 服務程序為例,來結束其全部進程。由于 RHEL7 系統默認沒有安裝 httpd 服務程序, 因此大家此時只需看操作過程和輸出結果即可,等學習了相關內容之后再來實踐

1.ifconfig 命令?

ifconfig 命令用于獲取網卡配置與網絡狀態等信息,格式為“ifconfig [網絡設備] [參數]” 。 使用 ifconfig 命令來查看本機當前的網卡配置與網絡狀態等信息時,其實主要查看的就 是網卡名稱、inet 參數后面的 IP 地址、ether 參數后面的網卡物理地址(又稱為 MAC 地址), 以及 RX、TX 的接收數據包與發送數據包的個數及累計流量(即下面加粗的信息內容)

[root@liruilong ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 172.17.57.70 netmask 255.255.240.0 broadcast 172.17.63.255ether 00:16:3e:12:20:cb txqueuelen 1000 (Ethernet)RX packets 122763 bytes 51583964 (49.1 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 90921 bytes 15046271 (14.3 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0loop txqueuelen 1 (Local Loopback)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0[root@liruilong ~]# uname -a Linux liruilong 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux [root@liruilong ~]#

2.uname 命令?

uname 命令用于查看系統內核與系統版本等信息,格式為“uname [-a]”。 在使用 uname 命令時,一般會固定搭配上-a 參數來完整地查看當前系統的內核名稱、主 機名、內核發行版本、節點名、系統時間、硬件名稱、硬件平臺、處理器類型以及操作系統 名稱等信息。?
??

3.uptime 命令?

uptime 用于查看系統的負載信息,格式為 uptime。 uptime 命令真的很棒,它可以顯示當前系統時間、系統已運行時間、啟用終端數量以 及平均負載值等信息。平均負載值指的是系統在近 1 分鐘、5 分鐘、15 分鐘內的壓力情 況(下面加粗的信息部分);負載值越低越好,盡量不要長期超過 1,在生產環境中不要 超過 5。?


??4.free 命令?

free 用于顯示當前系統中內存的使用量信息,格式為“free [-h]”。 為了保證 Linux 系統不會因資源耗盡而突然宕機,運維人員需要時刻關注內存的使用量。 在使用 free 命令時,可以結合使用-h 參數以更人性化的方式輸出當前內存的實時使用量信息。 表 2-8 所示為在劉遄老師的電腦上執行 free -h 命令之后的輸出信息。需要注意的是,輸出信 息中的中文注釋是作者自行添加的內容,實際輸出時沒有相應的參數解釋。?

?5.who 命令?

who 用于查看當前登入主機的用戶終端信息,格式為“who [參數]”。 這三個簡單的字母可以快速顯示出所有正在登錄本機的用戶的名稱以及他們正在開啟的 終端信息。表 2-9 所示為執行 who 命令后的結果

[root@liruilong ~]# who root tty1 2020-07-05 22:13 root pts/0 2020-10-09 04:17 (111.194.50.179) root pts/1 2020-10-09 04:59 (111.194.50.179) [root@liruilong ~]#

6.last 命令?

last 命令用于查看所有系統的登錄記錄,格式為“last [參數]”。 使用 last 命令可以查看本機的登錄記錄。但是,由于這些信息都是以日志文件的形式保 存在系統中,因此黑客可以很容易地對內容進行篡改。千萬不要單純以該命令的輸出信息而 判斷系統有無被惡意入侵!?
?7.history 命令?
history 命令用于顯示歷史執行過的命令,格式為“history [-c]”。 history 命令應該是作者喜歡的命令。執行 history 命令能顯示出當前用戶在本地計算機 中執行過的近 1000 條命令記錄。如果覺得 1000 不夠用,還可以自定義/etc/profile 文件中的 HISTSIZE 變量值。在使用 history 命令時,如果使用-c 參數則會清空所有的命令歷史記錄。 還可以使用“!編碼數字”的方式來重復執行某一次的命令。總之,history 命令有很多有趣的 玩法等待您去開發。

2.6 ?文本文件編輯命令?

?1.cat 命令?

cat 命令用于查看純文本文件(內容較少的),格式為“cat [選項] [文件]”。 Linux 系統中有多個用于查看文本內容的命令,每個命令都有自己的特點,比如這個 cat 命令就是用于查看內容較少的純文本文件的。cat 這個命令也很好記,

2.more 命令?

more 命令用于查看純文本文件(內容較多的),格式為“more [選項]文件”。?

3.head 命令?

head 命令用于查看純文本文檔的前 N 行,格式為“head [選項] [文件]”。?

[root@liruilong ~]# head nohup.out. ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v2.2.2.RELEASE)2020-02-29 22:25:39.873 INFO 20912 --- [ main] com.liruilong.hros.HrosApplication : Starting HrosApplication v0.0.1-SNAPSHOT on liruilong with PID 20912 (/root/hros-0.0.1-SNAPSHOT.jar started by root in /root)[root@liruilong ~]# tail nohup.out 2020-07-05 21:13:17.014 INFO 6470 --- [MessageBroker-1] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 212 total, 1 closed abnormally (1 connect failure, 0 send limit, 28 transport error)], stompSubProtocol[processed CONNECT(210)-CONNECTED(210)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 1929], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 460], sockJsScheduler[pool size = 1, active threads = 1, queued tasks = 1, completed tasks = 1946024]

4.tail 命令?

tail 命令用于查看純文本文檔的后 N 行或持續刷新內容,格式為“tail [選項] [文件]”。 只需要執行“tail -n 20 文件名”命令

tail 命令強悍的功能是可以持續刷新一個文件的內容,當想要實時 查看新日志文件時,這特別有用,此時的命令格式為“tail -f 文件名”:??

5.tr 命令?

tr 命令用于替換文本文件中的字符,格式為“tr [原始字符] [目標字符]”。?

6.wc 命令?

wc 命令用于統計指定文本的行數、字數、字節數,格式為“wc [參數] 文本”。?

7.stat 命令?

stat 命令用于查看文件的具體存儲信息和時間等信息,格式為“stat 文件名稱”。?

[root@liruilong ~]# stat nohup.outFile: ‘nohup.out’Size: 612547045 Blocks: 1196392 IO Block: 4096 regular file Device: fd01h/64769d Inode: 132546 Links: 1 Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2020-10-11 08:49:04.564740893 +0800 Modify: 2020-07-05 21:54:05.297348682 +0800 Change: 2020-07-05 21:54:05.297348682 +0800Birth: -

8.cut 命令?

cut 命令用于按“列”提取文本字符,格式為“cut [參數] 文本”。

?9.diff 命令?

diff 命令用于比較多個文本文件的差異,格式為“diff [參數] 文件”。?

在使用 diff 命令時,不僅可以使用--brief 參數來確認兩個文件是否不同,還可以使用-c 參數來詳細比較出多個文件的差異之處,這絕對是判斷文件是否被篡改的有力神器。例如, 先使用 cat 命令分別查看 diff_A.txt 和 diff_B.txt 文件的內容,然后進行比較:

1.touch 命令?

touch 命令用于創建空白文件或設置文件的時間,格式為“touch [選項] [文件]”。?

mkdir 命令?

mkdir 命令用于創建空白的目錄,格式為“mkdir [選項] 目錄”。 在 Linux 系統中,文件夾是常見的文件類型之一。除了能創建單個空白目錄外,mkdir 命令還可以結合-p 參數來遞歸創建出具有嵌套疊層關系的文件目錄。
??

3.cp 命令?

cp 命令用于復制文件或目錄,格式為“cp [選項] 源文件 目標文件”。 大家對文件復制操作應該不陌生,在 Linux 系統中,復制操作具體分為 3 種情況:?

4.mv 命令?

mv 命令用于剪切文件或將文件重命名,格式為“mv [選項] 源文件 [目標路徑|目標文件名]” 。
?剪切操作不同于復制操作,因為它會默認把源文件刪除掉,只保留剪切后的文件。如果 在同一個目錄中對一個文件進行剪切操作,其實也就是對其進行重命名:

5.rm 命令?

rm 命令用于刪除文件或目錄,格式為“rm [選項] 文件”。 在 Linux 系統中刪除文件時,系統會默認向您詢問是否要執行刪除操作,如果不想總是 看到這種反復的確認信息,可在 rm 命令后跟上-f 參數來強制刪除。另外,想要刪除一個目錄, 需要在 rm 命令后面一個-r 參數才可以,

6. dd 命令?

dd 命令用于按照指定大小和個數的數據塊來復制文件或轉換文件,格式為“dd [參數]” 。?

但在 Linux 系統中可以直接 使用 dd 命令來壓制出光盤鏡像文件,將它編程一個可立即使用的 iso 鏡像:

[root@liruilong liruilong]# dd if=/dev/zero of=560_file count=1 bs=60M 1+0 records in 1+0 records out 62914560 bytes (63 MB) copied, 0.106262 s, 592 MB/s [root@liruilong liruilong]# ls 560_file liruilong.html lirui.txt[root@liruilong liruilong]# dd if=/dev/zero of=Demo.iso

下面舉一個吃貨的例子進行 解釋。假設小明的飯量(即需求)是一個固定的值,用來盛飯的勺子的大小即 bs 塊大小, 而用勺子盛飯的次數即 count 塊個數。小明要想吃飽(滿足需求),則需要在勺子大小(bs 塊大小)與用勺子盛飯的次數(count 塊個數)之間進行平衡。勺子越大,用勺子盛飯的次數 就越少。有上可見,bs 與 count 都是用來指定容量的大小,只要能滿足需求,可隨意組合搭 配方式。

7.file 命令?

file 命令用于查看文件的類型,格式為“file 文件名”。 在 Linux 系統中,由于文本、目錄、設備等所有這些一切都統稱為文件

[root@liruilong liruilong]# file 60_file 60_file: data [root@liruilong liruilong]# file Demo.iso Demo.iso: data [root@liruilong liruilong]# file lirui.txt lirui.txt: UTF-8 Unicode text, with very long lines [root@liruilong liruilong]#

1.tar 命令?

tar 命令用于對文件進行打包壓縮或解壓,格式為“tar [選項] [文件]”。 在Linux 系統中,常見的文件格式比較多,其中主要使用的是.tar 或.tar.gz 或.tar.bz2 格式,我 們不用擔心格式太多而記不住,其實這些格式大部分都是由 tar 命令來生成的?

[root@liruilong ~]# tar -czvf etc.tar.gz /etc tar: Removing leading `/' from member names

2.grep 命令?

grep 命令用于在文本中執行關鍵詞搜索,并顯示匹配的結果,格式為 “grep [選項] [文件]” 。 grep 命令的參數及其作用如表 2-15 所示

[root@liruilong ~]# grep -nv INFO nohup.out

3.find 命令?

find 命令用于按照指定條件來查找文件,格式為“find [查找路徑] 尋找條件 操作”。?

課后習題:

  • .在 RHEL 7 系統及眾多的 Linux 系統中,常使用的 Shell 終端是什么? 答:Bash(Bourne-Again SHell)解釋器
  • .執行 Linux 系統命令時,添加參數的目的是什么? 答:為了讓 Linux 系統命令能夠更貼合用戶的實際需求進行工作。?
  • .Linux 系統命令、命令參數及命令對象之間,普遍應該使用什么來間隔? 答:應該使用一個或多個空格進行間隔。?
  • .請寫出用 echo 命令把 SHELL 變量值輸出到屏幕終端的命令。 答:echo $SHELL。?
  • .簡述 Linux 系統中 5 種進程的名稱及含義。 答:在 Linux 系統中,有下面 5 種進程名稱。?
    • ? R(運行):進程正在運行或在運行隊列中等待。
    • ?S(中斷) :進程處于休眠中,當某個條件形成后或者接收到信號時,則脫離該狀態。
    • ? D(不可中斷):進程不響應系統異步信號,即便用 kill 命令也不能將其中斷。
    • ?Z(僵死) :進程已經終止,但進程描述符依然存在, 直到父進程調用 wait4()系統函數 后將進程釋放。
    • T(停止):進程收到停止信號后停止運行。?
  • ?.請嘗試使用 Linux 系統命令關閉 PID 為 5529 的服務進程。 答:執行 kill 5529 命令即可;若知道服務的名稱,則可以使用 killall 命令進行關閉。?
  • 7.使用 ifconfig 命令查看網絡狀態信息時,需要重點查看的 4 項信息分別是什么? 答:這 4 項重要信息分別是網卡名稱、IP 地址、網卡物理地址以及 RX/TX 的收發流量數 據大小。?
    • ? [root@liruilong ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 172.17.57.70 netmask 255.255.240.0 broadcast 172.17.63.255ether 00:16:3e:12:20:cb txqueuelen 1000 (Ethernet)RX packets 251960 bytes 122897204 (117.2 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 184157 bytes 62783060 (59.8 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0loop txqueuelen 1 (Local Loopback)RX packets 10 bytes 528 (528.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 10 bytes 528 (528.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

  • 8.使用 uptime 命令查看系統負載時,對應的負載數值如果是 0.91、0.56、0.32,那么近 15 分鐘內負載壓力大的是哪個時間段? 答:通過負載數值可以看出,近 1 分鐘內的負載壓力是大的。?
  • 9.使用history 命令查看歷史命令的執行記錄時,命令前面的數字除了排序外還有什么用處? 答:還可以用“!數字”的命令格式重復執行某一次的命令記錄,從而避免了重復輸入較 長命令的麻煩。?
  • 10.若想查看的文件具有較長的內容,那么使用 cat、more、head、tail 中的哪個命令 合適? 答:文件內容較長,使用 more 命令;反之使用 cat 命令。?
  • 11.在使用 mkdir 命令創建有嵌套關系的目錄時,應該加上什么參數呢? ?答:應該加上-p 遞歸迭代參數,從而自動化創建有嵌套關系的目錄。?
  • 12.在使用 rm 命令刪除文件或目錄時,可使用哪個參數來避免二次確認呢? ?答:可使用-f 參數,這樣即可無需二次確認。?
  • 13.若有一個名為 backup.tar.gz 的壓縮包文件,那么解壓的命令應該是什么? ?答:應該用 tar 命令進行解壓,執行 tar -xzvf backup.tar.gz 命令即可。?
  • 14.使用 grep 命令對某個文件進行關鍵詞搜索時,若想要進行文件內容反選,應使用什么 參數? 答:可使用-v 參數來進行匹配內容的反向選擇,即顯示出不包含某個關鍵詞的行。

第三章,管道符、重定向與環境變量?

簡而言之,輸入重定向是指把文件導入到命令中,而輸出重定向則是指把原本要輸出到 屏幕的數據信息寫入到指定文件中

[root@liruilong ~]# man bash > reame.txt? [root@liruilong ~]# echo "加油" > reame.txt -bash: $'ech\345\212\240\346\262\271': command not found [root@liruilong ~]# echo "I am Liruilong Love sy" > reame.txt [root@liruilong ~]# cat reame.txt I am Liruilong Love sy [root@liruilong ~]# [root@liruilong ~]# echo "sunyu 不喜歡 我 " >> reame.txt [root@liruilong ~]# cat reame.txt I am Liruilong Love sy sunyu 不喜歡 我

管道命令符?

其執行格式為“命令 A | 命令 B”。命令符的作用也 可以用一句話來概括“把前一個命令原本要輸出到屏幕的數據當作是后一個命令的標準輸 入”

[root@liruilong ~]# wwc -l <reame.txt 35 [root@liruilong ~]# more reame.txt | wc -w 308

比如用翻頁的形 式查看/etc 目錄中的文件列表及屬性信息

命令行的通配符?

?重要的環境變量?

[root@liruilong mongodb4]# export PATH=/usr/local/mongodb4/bin:$PATH [root@liruilong ~]# TEMP=/liruilong/loruilong/liruitong [root@liruilong ~]# echo TEMP TEMP [root@liruilong ~]# echo $TEMP /liruilong/loruilong/liruitong

1. 顯示環境變量HOME

$ echo $HOME /home/redbooks

2. 設置一個新的環境變量hello

$ export HELLO="Hello!" $ echo $HELLO Hello!

3. 使用env命令顯示所有的環境變量

$ env HOSTNAME=redbooks.safe.org PVM_RSH=/usr/bin/rsh Shell=/bin/bash TERM=xterm HISTSIZE=1000

4. 使用set命令顯示所有本地定義的Shell變量

$ set BASH=/bin/bash BASH_VERSINFO=([0]="2"[1]="05b"[2]="0"[3]="1"[4]="release"[5]="i386-redhat-linux-gnu") BASH_VERSION='2.05b.0(1)-release' COLORS=/etc/DIR_COLORS.xterm COLUMNS=80 DIRSTACK=() DISPLAY=:0.0

5. 使用unset命令來清除環境變量
set可以設置某個環境變量的值。清除環境變量的值用unset命令。如果未指定值,則該變量值將被設為NULL。示例如下:

$ export TEST="Test..." #增加一個環境變量TEST $ env|grep TEST #此命令有輸入,證明環境變量TEST已經存在了 TEST=Test... $ unset $TEST #刪除環境變量TEST $ env|grep TEST #此命令沒有輸出,證明環境變量TEST已經存在了

6. 使用readonly命令設置只讀變量
如果使用了readonly命令的話,變量就不可以被修改或清除了。示例如下:

$ export TEST="Test..." #增加一個環境變量TEST $ readonly TEST #將環境變量TEST設為只讀 $ unset TEST #會發現此變量不能被刪除 -bash: unset: TEST: cannot unset: readonly variable $ TEST="New" #會發現此也變量不能被修改 -bash: TEST: readonly variable


環境變量的設置位于/etc/profile文件
如果需要增加新的環境變量可以添加下屬行

export path=$path:/path1:/path2:/pahtN

==============================================================
1.Linux的變量種類
按變量的生存周期來劃分,Linux變量可分為兩類:

  • 1.1 永久的:需要修改配置文件,變量永久生效。
  • 1.2 臨時的:使用export命令聲明即可,變量在關閉shell時失效。

2.設置變量的三種方法

2.1 在/etc/profile文件中添加變量【對所有用戶生效(永久的)】

用VI在文件/etc/profile文件中增加變量,該變量將會對Linux下所有用戶有效,并且是“永久的”。
例如:編輯/etc/profile文件,添加CLASSPATH變量

# vi /etc/profile export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib 注:修改文件后要想馬上生效還要運行# source /etc/profile不然只能在下次重進此用戶時生效。

2.2 在用戶目錄下的.bash_profile文件中增加變量【對單一用戶生效(永久的)】

用VI在用戶目錄下的.bash_profile文件中增加變量,改變量僅會對當前用戶有效,并且是“永久的”。
例如:編輯guok用戶目錄(/home/guok)下的.bash_profile

$ vi /home/guok/.bash.profile 添加如下內容: export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib 注:修改文件后要想馬上生效還要運行$ source /home/guok/.bash_profile不然只能在下次重進此用戶時生效。


2.3 直接運行export命令定義變量【只對當前shell(BASH)有效(臨時的)】
在shell的命令行下直接使用[export 變量名=變量值] 定義變量,該變量只在當前的shell(BASH)或其子shell(BASH)下是有效的,shell關閉了,變量也就失效了,再打開新shell時就沒有這個變量,需要使用的話還需要重新定義。

3.環境變量的查看

3.1 使用echo命令查看單個環境變量。例如:

echo $PATH

3.2 使用env查看所有環境變量。例如:

env

3.3 使用set查看所有本地定義的環境變量。

unset可以刪除指定的環境變量。

4.常用的環境變量

PATH 決定了shell將到哪些目錄中尋找命令或程序 HOME 當前用戶主目錄 HISTSIZE 歷史記錄數 LOGNAME 當前用戶的登錄名 HOSTNAME 指主機的名稱 SHELL 當前用戶Shell類型 LANGUGE  語言相關的環境變量,多語言可以修改此環境變量 MAIL 當前用戶的郵件存放目錄 PS1 基本提示符,對于root用戶是#,對于普通用戶是$

1.把 ls 命令的正常輸出信息追加寫入到 error.txt 文件中的命令是什么? 答:ls >> error.txt?
?
2.請簡單概述管道符的作用。 答:把左面(前面)命令的輸出值作為右面(后面)命令的輸入值以便進一步處理信息。
?
?
3.Bash 解釋器的通配符中,星號(*)代表幾個字符? 答:零個或多個。?
?
4.PATH 變量的作用是什么? 答:設定解釋器搜索所執行的命令的路徑。?
?

5.使用什么命令可以把名為 LINUX 的一般變量轉換成全局變量??答:export LINUX。?

第四章 Vim 編輯器與 Shell 命令腳本?

?配置主機名稱?

[root@liruilong /]# vim /etc/hostname [root@liruilong /]#

?配置網卡信息?

在 RHEL 5、RHEL 6 中,網卡配置文件的前綴為 eth,第 1 塊網卡為 eth0,第 2 塊網卡為 eth1;以此類推。而在 RHEL 7 中,網卡配置文件的前綴則以 ifcfg 開始, 加上網卡名稱共同組成了網卡配置文件的名字,例如 ifcfg-eno16777736;好在除了文件名變 化外也沒有其他大的區別。?

第1步:首先切換到/etc/sysconfig/network-scripts 目錄中(存放著網卡的配置文件)。

[root@liruilong /]# NETWORK=/etc/sysconfig/network-scripts/ [root@liruilong /]# ls $NETWORK ifcfg-eth0 ifdown-ippp ifdown-sit ifup-bnep ifup-plip ifup-Team network-functions-ipv6 ifcfg-lo ifdown-ipv6 ifdown-Team ifup-eth ifup-plusb ifup-TeamPort ifdown ifdown-isdn ifdown-TeamPort ifup-ib ifup-post ifup-tunnel ifdown-bnep ifdown-post ifdown-tunnel ifup-ippp ifup-ppp ifup-wireless ifdown-eth ifdown-ppp ifup ifup-ipv6 ifup-routes init.ipv6-global ifdown-ib ifdown-routes ifup-aliases ifup-isdn ifup-sit network-functions [root@liruilong /]#

第2步:使用 Vim 編輯器修改網卡文件 ifcfg-eno16777736,逐項寫入下面的配置參數并 保存退出。由于每臺設備的硬件及架構是不一樣的,因此請讀者使用 ifconfig 命令自行確認各 自網卡的默認名稱

  • ? 設備類型:TYPE=Ethernet
  • ? 地址分配模式:BOOTPROTO=static
  • ? 網卡名稱:NAME=eno16777736
  • ? 是否啟動:ONBOOT=yes
  • ? IP 地址:IPADDR=192.168.10.10
  • ? 子網掩碼:NETMASK=255.255.255.0
  • ?網關地址:GATEWAY=192.168.10.1
  • ? DNS 地址:DNS1=192.168.10.1
[root@liruilong /]# vim $NETWORK/ifcfg-eth1 [root@liruilong /]# [root@liruilong /]# cd $NETWORK [root@liruilong network-scripts]# ls ifcfg-eth0 ifdown-eth ifdown-post ifdown-TeamPort ifup-eth ifup-plip ifup-sit init.ipv6-global ifcfg-eth1 ifdown-ib ifdown-ppp ifdown-tunnel ifup-ib ifup-plusb ifup-Team network-functions ifcfg-lo ifdown-ippp ifdown-routes ifup ifup-ippp ifup-post ifup-TeamPort network-functions-ipv6 ifdown ifdown-ipv6 ifdown-sit ifup-aliases ifup-ipv6 ifup-ppp ifup-tunnel ifdown-bnep ifdown-isdn ifdown-Team ifup-bnep ifup-isdn ifup-routes ifup-wireless [root@liruilong network-scripts]# cat ifcfg-eth1 TYPE=Ethernet BOOTPRPOTO=static NAME=en1demo_Liruilong ONBOOT=no IP=192.168.10.10 NETMASK=255.255.255.0 GATEWAY=192.168.10.1 DNS1=192.168.10.1 d [root@liruilong network-scripts]#

第3步:重啟網絡服務并測試網絡是否聯通。 進入到網卡配置文件所在的目錄,然后編輯網卡配置文件,在其中填入下面的信息

執行重啟網卡設備的命令(在正常情況下不會有提示信息),然后通過 ping 命令測試網絡能否 聯通。由于在 Linux 系統中 ping 命令不會自動終止,因此需要手動按下 Ctrl-c 鍵來強行結束進程。?

[root@liruilong network-scripts]# systemctl restart network [root@liruilong network-scripts]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 172.17.57.70 netmask 255.255.240.0 broadcast 172.17.63.255ether 00:16:3e:12:20:cb txqueuelen 1000 (Ethernet)RX packets 287708 bytes 128706099 (122.7 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 213179 bytes 76660947 (73.1 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0loop txqueuelen 1 (Local Loopback)RX packets 17 bytes 908 (908.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 17 bytes 908 (908.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0[root@liruilong network-scripts]# ping 172.17.57.70 PING 172.17.57.70 (172.17.57.70) 56(84) bytes of data. 64 bytes from 172.17.57.70: icmp_seq=1 ttl=64 time=0.017 ms 64 bytes from 172.17.57.70: icmp_seq=2 ttl=64 time=0.030 ms 64 bytes from 172.17.57.70: icmp_seq=3 ttl=64 time=0.031 ms 64 bytes from 172.17.57.70: icmp_seq=4 ttl=64 time=0.028 ms 64 bytes from 172.17.57.70: icmp_seq=5 ttl=64 time=0.039 ms 64 bytes from 172.17.57.70: icmp_seq=6 ttl=64 time=0.029 ms 64 bytes from 172.17.57.70: icmp_seq=7 ttl=64 time=0.029 ms 64 bytes from 172.17.57.70: icmp_seq=8 ttl=64 time=0.030 ms 64 bytes from 172.17.57.70: icmp_seq=9 ttl=64 time=0.030 ms ^C

?配置 Yum 軟件倉庫?

  • 第1步:進入到/etc/yum.repos.d/目錄中(因為該目錄存放著 Yum 軟件倉庫的配置文件)。
  • 第2步:使用 Vim 編輯器創建一個名為 rhel7.repo 的新配置文件(文件名稱可隨意,但后 綴必須為.repo),逐項寫入下面加粗的配置參數并保存退出(不要寫后面的中文注釋)。
    • ?[rhel-media] :Yum 軟件倉庫唯一標識符,避免與其他倉庫沖突。
    • name=linuxprobe:Yum 軟件倉庫的名稱描述,易于識別倉庫用處。
    • ?baseurl=file:///media/cdrom:提供的方式包括 FTP(ftp://..)、HTTP(http://..)、本地 (file:///..)。
    • ?enabled=1:設置此源是否可用;1 為可用,0 為禁用。
    • ?gpgcheck=1:設置此源是否校驗文件;1 為校驗,0 為不校驗。
    • ?gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release:若上面參數開啟校 驗,那么請指定公鑰文件地址。
  • 第3步:按配置參數的路徑掛載光盤,并把光盤掛載信息寫入到/etc/fstab 文件中。
  • 第4步:使用“yum install httpd -y”命令檢查 Yum 軟件倉庫是否已經可用。 進入/etc/yum.repos.d 目錄中后創建 Yum 配置文件:?
[root@liruilong ~]# YUM_CONFIG=/etc/yum.repos.d/ [root@liruilong ~]# ls $YUM_CONFIG CentOS-Base.repo epel.repo mysql-community.repo mysql-community-source.repo [root@liruilong ~]# cd $YUM_CONFIG [root@liruilong yum.repos.d]#

apt-get: command not found,這個的出現是因為系統的原因。

Linux系統分為兩種:

  • 1.RedHat系列:Redhat、Centos、Fedora等
  • 2.Debian系列:Debian、Ubuntu等

RedHat系列的包管理工具是yum,Debian系列的包管理工具是apt-get

編寫Shell腳本?

Shell 腳本命令的工作方式有兩種:交互式和批處理。

  • 交互式(Interactive):用戶每輸入一條命令就立即執行。
  • ?批處理(Batch):由用戶事先編寫好一個完整的 Shell 腳本,Shell 會一次性執行腳本 中諸多的命令。 在 Shell 腳本中不僅會用到前面學習過的很多 Linux 命令以及正則表達式、管道符、數據 流重定向等語法規則,還需要把內部功能模塊化后通過邏輯語句進行處理,終形成日常所 見的 Shell 腳本。?
#!/bin/bashecho "當前的腳本名稱為 $0" echo "總計有:$# 個參數進來,分別為:$*" echo "第一個參數為:$1, 下雨了... sy 好想你" ~ [root@liruilong ~]# vim demo.sh [root@liruilong ~]# sh demo.sh 當前的腳本名稱為 demo.sh [root@liruilong ~]# vim demo.sh [root@liruilong ~]# vim demo.sh [root@liruilong ~]# bash demo.sh 當前的腳本名稱為 demo.sh 總計有:0 個參數進來,分別為: 第一個參數為:, 下雨了... sy 好想你 [root@liruilong ~]# ./demo.sh -bash: ./demo.sh: Permission denied [root@liruilong ~]# chmod u+x demo.sh [root@liruilong ~]# ./demo.sh 當前的腳本名稱為 ./demo.sh 總計有:0 個參數進來,分別為: 第一個參數為:, 下雨了... sy 好想你 [root@liruilong ~]#

判斷用戶的參數 :

。Shell 腳本中的條 件測試語法可以判斷表達式是否成立,若條件成立則返回數字 0,否則便返回其他隨機數值。 條件測試語法的執行格式如圖 4-16 所示。切記,條件表達式兩邊均應有一個空格。?

按照測試對象來劃分,條件測試語句可以分為 4 種:

  • ?文件測試語句;
  • ?邏輯測試語句;
  • ?整數值比較語句;
  • 字符串比較語句。

文件測試即使用指定條件來判斷文件是否存在或權限是否滿足等情況的運算符

在 Shell 終端中

  • 邏輯“與”的運算符號是&&,它表示當前面的命令執行成功后才會執行它后面的命令
  • 邏輯或它在 Linux 系統中的運算符號為||,表示當前面的 命令執行失敗后才會執行它后面的命令
  • [root@liruilong ~]# [ -e /dev/cdrom ] && echo 'Ecist' Ecist [root@liruilong ~]# echo $USER root [root@liruilong ~]# [ $USER = root] || 'user' -bash: [: missing `]' -bash: user: command not found

    ?

    [root@liruilong ~]# [ 10 -gt 10 ] [root@liruilong ~]# echo $? 1 [root@liruilong ~]# [ 10 -eg 10 ] && echo $? -bash: [: -eg: binary operator expected [root@liruilong ~]# [ 10 -eg 10 ] -bash: [: -eg: binary operator expected [root@liruilong ~]# echo $? 2 [root@liruilong ~]# [ 10 -eg 10 ] -bash: [: -eg: binary operator expected [root@liruilong ~]# [ 10 -eq 10 ] [root@liruilong ~]# echo $? 0 [root@liruilong ~]#

    ??free 命令

    它可以用來獲取當前系統正在使用及可用的內存量信息。 接下來先使用 free -m 命令查看內存使用量情況(單位為 MB),然后通過 grep Mem:命令過濾 出剩余內存量的行,再用 awk '{print $4}'命令只保留第四列,后用 FreeMem=`語句`的方式把語句內執行的結果賦值給變量。?

    [root@liruilong ~]# free -mtotal used free shared buff/cache available Mem: 1839 786 137 0 916 892 Swap: 0 0 0 [root@liruilong ~]# free -m | grep Men: [root@liruilong ~]# free -m | grep Mem: Mem: 1839 786 136 0 916 891 [root@liruilong ~]# free -m | grep Mem: | awk '{pring $4}' [root@liruilong ~]# free -m | grep Mem: | awk '{pring $6}' [root@liruilong ~]# free -m | grep Mem: | awk '{pring $4}' [root@liruilong ~]# FreeMem=`free -m | grep Mem: | awk '{pring $4}'` [root@liruilong ~]# echo FreemMem FreemMem [root@liruilong ~]# echo $FreemMem[root@liruilong ~]# [ $FreeMem -lt 1024 ] && echo "Insufficiient Memory" -bash: [: -lt: unary operator expected [root@liruilong ~]# [ $FreeMem -lt 1024 ] && echo "Insufficiient Memory" -bash: [: -lt: unary operator expected

    ?

    [root@liruilong ~]# echo $LANG en_US.UTF-8 [root@liruilong ~]# [ $LANG != 'en.US' ] && echo 'Not en.US' Not en.US [root@liruilong ~]#

    ?流程控制語句?

    if 條件測試語句?

    [root@liruilong ~]# vim [root@liruilong ~]# vim mkcdrow.sh [root@liruilong ~]# sh m mkcdrow.sh mysql57-community-release-el7-8.noarch.rpm mongodb-linux-x86_64-ubuntu1604-4.2.8.tgz [root@liruilong ~]# sh mkcdrow.sh [root@liruilong ~]# ls applog lishaoqing consul media consul_0.7.5_linux_amd64.zip mkcdrow.sh consul_1.6.2_linux_amd64.zip mongodb-linux-x86_64-ubuntu1604-4.2.8.tgz D: mysql57-community-release-el7-8.noarch.rpm demo-0.0.1-SNAPSHOT.jar nohup.out demo_0719.sh practice demo.sh reame.txt hros-0.0.1-SNAPSHOT.jar sh_script LIR.txt wget-log liruilong www.linuxprobe.com liruilong.txt [root@liruilong ~]# #!/bin/bash DIR="media/cdrom" if [ ! -e $DIR ] then mkdir -p $DIR fi

    [root@liruilong ~]# vim chkhost.sh [root@liruilong ~]# [root@liruilong ~]# sh ./chkhost.sh ./chkhost.sh: line 2: /dve/null: No such file or directory Host is Off-line. [root@liruilong ~]# chmod u+x ./chkhost.sh [root@liruilong ~]# sh ./chkhost.sh ./chkhost.sh: line 2: /dve/null: No such file or directory Host is Off-line. [root@liruilong ~]# sh ./chkhost.sh 39.97.241.18 ./chkhost.sh: line 2: /dve/null: No such file or directory Host 39.97.241.18 is Off-line. #!/bin/bash ping -c 3 -i 0.2 -W 3 $1 &> /dve/null if [ $? -eq 0 ] then echo "Host $1 is On-line." else echo "Host $1 is Off-line." fi

    [root@liruilong ~]# bash chkscore.sh Enter your score (0 - 100 ):30 chkscore.sh: line 4: [: -ge: unary operator expected 30 is 不及格的 [root@liruilong ~]# bash chkscore.sh Enter your score (0 - 100 ):99 chkscore.sh: line 4: [: -ge: unary operator expected 99 is 不及格的 [root@liruilong ~]# vim chkscore.sh [root@liruilong ~]# bash chkscore.sh Enter your score (0 - 100 ):99 chkscore.sh: line 4: [: -ge: unary operator expected 99 is 不及格的 [root@liruilong ~]# vim chkscore.sh [root@liruilong ~]# bash chkscore.sh Enter your score (0 - 100 ):90 chkscore.sh: line 4: [: -ge: unary operator expected 90 is 不及格的 [root@liruilong ~]# vim chkscore.sh [root@liruilong ~]# bash chkscore.sh Enter your score (0 - 100 ):99 99 is 優秀的 #!/bin/bashread -p "Enter your score (0 - 100 ):" GR if [ $GR -ge 85 ] && [ $GR -le 100 ] ; then echo "$GR is 優秀的" elif [ $GR -ge 70 ] && [ $GR -le 84 ] ; then echo "$GR is 良好的" else echo "$GR is 不及格的 " fi

    ?for 條件循環語句?

    echo "PSW" | password --stdin $UNAME &> /dev/nullME in `cat users.txt` do id $UNAME &> /dev/null if [ $? -eq 0 ] then echo "Alredy exists" else useradd $UNAME &> /dev/null echo "PSW" | password --stdin $UNAME &> /dev/null if [ $? -eq 0 ] then echo "$UNAME , Create success" else echo "$UNAME , Create failure" fi fi done

    如嘗試讓腳本從文本中自動讀取主 機列表,然后自動逐個測試這些主機是否在線。

    [root@liruilong ~]# sh ./CheckHosts.sh ping: $: Name or service not known 嗯,這個 192.168.10.10 不通 ping: $: Name or service not known 嗯,這個 192.168.10.11 不通 ping: $: Name or service not known 嗯,這個 192.168.10.12 不通 [root@liruilong ~]# #!/bin/bashfor IP in `cat ipadds.txt` do ping -c 3 -i 0.2 -W $IP $> /dev/null if [ $? -eq 0 ] ; then echo "嗯 這個 $IP 通啦" else echo "嗯,這個 $IP 不通" fi done

    /dev/null 是一個被稱作 Linux 黑洞的文件,把輸出信息重定向到這個文件等 同于刪除數據(類似于沒有回收功能的垃圾箱),可以讓用戶的屏幕窗口保持簡潔。?

    ?while 條件循環語句?

    root@liruilong ~]# sh ./Guess.sh ./Guess.sh: line 2: espr: command not found 商品實際價格為 0-999 之間,猜猜看是多少? 請輸入您猜測的價格:45 ./Guess.sh: line 9: [: 45: unary operator expected ./Guess.sh: line 13: [: 45: unary operator expected 太低了 請輸入您猜測的價格:45 ./Guess.sh: line 9: [: 45: unary operator expected ./Guess.sh: line 13: [: 45: unary operator expected 太低了 請輸入您猜測的價格:45 ./Guess.sh: line 9: [: 45: unary operator expected ./Guess.sh: line 13: [: 45: unary operator expected 太低了#!/bin/bash PR=$(espr $RANDOM % 1000 ) TIMES=0 echo "商品實際價格為 0-999 之間,猜猜看是多少?" while true doread -p "請輸入您猜測的價格:" INTlet TIMES++if [ $INT -eq $PR ] ; thenecho "答對啦 ;價格為: $PR"echo "您一共猜了: $TIMES 次 "exit 0elif [ $INT -gt $PR ] ; thenecho "太高了"elseecho "太低了"fi done

    case 條件測試語句?

    [root@liruilong ~]# vim CheckKeys.sh [root@liruilong ~]# sh ./CheckKeys.sh 請輸入一個字符串,并按Enter鍵結束4 您輸的是數字 [root@liruilong ~]# #!/bin/bash read -p "請輸入一個字符串,并按Enter鍵結束" KEY case "$KEY" in [a-z]|[A-Z]) echo "您輸入的是一個字符" ;; [0-9]) echo "您輸的是數字" ;; *) echo "您輸的亂七八糟" esac

    計劃任務服務程序(定時任務)?

    在指定的時間段自動 啟用或停止某些服務或命令,從而實現運維的自動化。

    計劃任務分為

    一次性計劃任務

    • 一次性計劃任務只執行一次,一般用于滿足臨時的工作需求。我們可以用 at 命令實現這種功能,只需要寫成“at 時間”的形式就可以。如果想要查看已設置好但還未執 行的一次性計劃任務,可以使用“at -l”命令;要想將其刪除,可以用“atrm 任務序號”。在 使用 at 命令來設置一次性計劃任務時,默認采用的是交互式方法。例如,使用下述命令將系 統設置為在今晚 23:30 分自動重啟網站服務。
    [root@liruilong ~]# at 23:30 at> java -jar liruilong.jar & at> <EOT> job 2 at Wed Oct 28 23:30:00 2020 [root@liruilong ~]# at -l 2 Wed Oct 28 23:30:00 2020 a root 1 Wed Oct 28 23:30:00 2020 a root [root@liruilong ~]# atrm 1 [root@liruilong ~]# at -l 2 Wed Oct 28 23:30:00 2020 a root [root@liruilong ~]# echo "java -jar liruilong.jar &" | 23:00 -bash: 23:00: command not found [root@liruilong ~]# echo "java -jar liruilong.jar &" |at 23:00 job 3 at Wed Oct 28 23:00:00 2020 [root@liruilong ~]# at-l -bash: at-l: command not found [root@liruilong ~]# at -l 2 Wed Oct 28 23:30:00 2020 a root 3 Wed Oct 28 23:00:00 2020 a root [root@liruilong ~]#

    長期性計劃任務

    • 如果我們希望 Linux 系統能夠周期性地、有規律地執行某些具體的任務,那么 Linux 系統 中默認啟用的 crond 服務簡直再適合不過了。創建、編輯計劃任務的命令為“crontab -e”,查看?當前計劃任務的命令為“crontab -l”,刪除某條計劃任務的命令為“crontab -r”。另外,如果您 是以管理員的身份登錄的系統,還可以在 crontab 命令中加上-u 參數來編輯他人的計劃任務

    • 1.Vim 編輯器的三種模式分別是什么? 答:命令模式、末行模式與輸入模式(也叫編輯模式或插入模式)。?
    • 2.怎么從輸入模式切換到末行模式? 答:需要先敲擊 Esc 鍵退回到命令模式,然后敲擊冒號(:)鍵后進入末行模式。?
    • 3.一個完整的 Shell 腳本應該哪些內容? 答:應該包括腳本聲明、注釋信息和可執行語句(即命令)。?
    • 4.分別解釋 Shell 腳本中$0 與$3 變量的作用。 答:在 Shell 腳本中,$0 代表腳本文件的名稱,$3 則代表該腳本在執行時接收的第三 個參數。?
    • 5.if 條件測試語句有幾種結構,靈活且復雜的是哪種結構? 答:if 條件測試語句包括單分支、雙分支與多分支等三種結構,其中多分支結構是靈活 且復雜的結構,其結構形式為 if…then…elif…then…else…fi。?
    • 6.for 條件循環語句的循環結構是什么樣子的? 答:for 條件循環語句的結構為“for 變量名 in 取值列表 do 命令序列 done”,如圖 4-20 所示。
    • 7.若在 while 條件循環語句中使用 true 作為循環條件,那么會發生什么事情? 答:因條件測試值永久為 true,因此腳本中循環部分會無限地重復執行下去,直到碰到 exit 命令才會結束。?
    • 8.如果需要依據用戶的輸入參數執行不同的操作,方便的條件測試語句是什么? 答:case 條件語句。?
    • 9.Linux 系統的長期計劃任務所使用的服務是什么,其參數格式是什么? 答:長期計劃任務需要使用 crond 服務程序,參數格式是“分、時、日、月、星期 命令”。

    第五章 用戶身份與文件權限?

    管理員 UID 為 0:系統的管理員用戶。 ? 系統用戶 UID 為 1~999: Linux 系統為了避免因某個服務程序出現漏洞而被黑客提 權至整臺服務器,默認服務程序會有獨立的系統用戶負責運行,進而有效控制被破壞 范圍。 ? 普通用戶 UID 從 1000 開始:是由管理員創建的用于日常工作的用戶。 需要注意的是,UID 是不能沖突的,而且管理員創建的普通用戶的 UID 默認是從 1000 開始的(即使前面有閑置的號碼)。?

    為了方便管理屬于同一組的用戶,Linux 系統中還引入了用戶組的概念。通過使用用 戶組號碼(GID,Group IDentification),

    在 Linux 系統中創建每個用戶時,將自動創建一個與其同名的基本用戶組,而且 這個基本用戶組只有該用戶一個人。如果該用戶以后被歸納入其他用戶組,則這個其他用戶 組稱之為擴展用戶組。一個用戶只有一個基本用戶組,但是可以有多個擴展用戶組,

    useradd 命令?

    可以使用 useradd 命令創建用戶賬戶。使用該命令創建用戶賬戶時,默認的用戶家目錄會 被存放在/home 目錄中,默認的 Shell 解釋器為/bin/bash,而且默認會創建一個與該用戶同名 的基本用戶組。這些默認設置可以根據表 5-1 中的 useradd 命令參數自行修改

    useradd 命令用于創建新的用戶,格式為“useradd [選項] 用戶名”。 可以使用 useradd 命令創建用戶賬戶。使用該命令創建用戶賬戶時,默認的用戶家目錄會 被存放在/home 目錄中,默認的 Shell 解釋器為/bin/bash,而且默認會創建一個與該用戶同名 的基本用戶組。

    [root@liruilong ~]# useradd -d /home/08091104 -e 2020-08-10 -u 10003 -g root -N useraddDemo080911 [root@liruilong ~]# tail -n 5 /etc/passwd eric:x:1006:1006::/home/eric:/bin/bash george:x:1007:1007::/home/george:/bin/bash liruilongdemo:x:10000:10000::/home/liruilongdemo:/bin/bash data:x:10001:10002::/home/username:/bin/bash useraddDemo080911:x:10003:0::/home/08091104:/bin/bash [root@liruilong ~]#

    ?groupadd 命令?

    groupadd 命令用于創建用戶組,格式為“groupadd [選項] 群組名”。 為了能夠更加高效地指派系統中各個用戶的權限,在工作中常常會把幾個用戶加入到同 一個組里面,這樣便可以針對一類用戶統一安排權限。創建用戶組的步驟非常簡單,例如使 用如下命令創建一個用戶組 ronny:?

    [root@liruilong ~]# useradd -d /home/liruilongdemo -u 10000 liruilongdemo [root@liruilong ~]# group groupadd groupdel groupmems groupmod groups [root@liruilong ~]# groupadd ronny [root@liruilong ~]# usermod

    usermod 命令?

    usermod 命令用于修改用戶的屬性,格式為“usermod [選項] 用戶名”。 用戶的信息保存在/etc/passwd 文件中,

    可以直接用文本編輯器來修改其中的 用戶參數項目,

    也可以用 usermod 命令修改已經創建的用戶信息,諸如用戶的 UID、基本/擴 展用戶組、默認終端等。

    usermod 命令的參數以及作用如表 5-2 所示

    [root@liruilong ~]# id uid=0(root) gid=0(root) groups=0(root) [root@liruilong ~]# id liruilong id: liruilong: no such user [root@liruilong ~]# id liruilongdemo uid=10000(liruilongdemo) gid=10000(liruilongdemo) groups=10000(liruilongdemo) [root@liruilong ~]# [root@liruilong ~]# usermod -G root useraddDemo080911 [root@liruilong ~]# usermod -u 1555 useraddDemo080911

    passwd 命令?

    passwd 命令用于修改用戶密碼、過期時間、認證信息等,格式為“passwd [選項] [用戶名]” 。
    ?普通用戶只能使用 passwd 命令修改自身的系統密碼,而 root 管理員則有權限修改其他所 有人的密碼、

    root 管理員在 Linux 系統中修改自己或他人的密碼時不需要驗證舊密 碼,這一點特別方便。既然 root 管理員可以修改其他用戶的密碼,就表示完全擁有該用戶的 管理權限。passwd 命令中可用的參數以及作用如表 5-3 所示。

    chage

    chage -d 0 用戶名 # 修改密碼,用于設置初始密碼 chage -l 用戶名 # 查看密碼的狀態和規則 chage -m 9 -M 30 -W 14 用戶名 # 密碼有效期 最長 警告天數 [root@liruilong ~]# passwd Changing password for user root. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@liruilong ~]# userdel -fr useraddDemo080911 [root@liruilong ~]# id useraddDemo080911 id: useraddDemo080911: no such user [root@liruilong ~]#

    5.2 ?文件權限與歸屬?

    5.3 ?文件的特殊權限?

    5.3.1 ?SUID?

    SUID 是一種對二進制程序進行設置的特殊權限,可以讓二進制程序的執行者臨時擁有屬主的權限(僅對擁有執行權限的二進制程序有效)。例如,所有用戶都可以執行 passwd 命令 來修改自己的用戶密碼,而用戶密碼保存在/etc/shadow 文件中。仔細查看這個文件就會發現 它的默認權限是 000,也就是說除了 root 管理員以外,所有用戶都沒有查看或編輯該文件的 權限。

    [root@liruilong ~]# ls -la /etc/shadow ---------- 1 root root 1121 Nov 6 23:21 /etc/shadow [root@liruilong ~]# ls -lah /bin/pass* -rwsr-xr-x 1 root root 28K Apr 1 2020 /bin/passwd [root@liruilong ~]#

    [root@liruilong ~]#>>$chage -l root Last password change : Nov 06, 2020 Password expires : never Password inactive : never Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7 [root@liruilong ~]#>>$

    5.3.2 ?SGID?

    SGID 主要實現如下兩種功能:?

    讓執行者臨時擁有屬組的權限(對擁有執行權限的二進制程序進行設置);?

    在某個目錄中創建的文件自動繼承該目錄的用戶組(只可以對目錄進行設置)。?

    [root@liruilong tmp]# ls -ald testdir/ drwxrwxrwx 2 root root 4096 Nov 7 02:11 testdir/ [root@liruilong tmp]# chmod u-x testdir/ [root@liruilong tmp]# ls -ald testdir/ drw-rwxrwx 2 root root 4096 Nov 7 02:11 testdir/ [root@liruilong tmp]# chmod g+s testdir/ [root@liruilong tmp]# ls -ald testdir/ drw-rwsrwx 2 root root 4096 Nov 7 02:11 testdir/

    命令位置:

    [root@liruilong tmp]# whereis ls ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz [root@liruilong tmp]# which ls alias ls='ls --color=auto'/usr/bin/ls [root@liruilong tmp]#

    chmod 命令是一個非常實用的命令,能夠用來設置文件或目錄的權限,格式為“chmod [參 數] 權限 文件或目錄名稱”。如果要把一個文件的權限設置成其所有者可讀可寫可執行、所 屬組可讀可、其他人沒有任何權限,則相應的字符法表示為 rwxrw----,其對應的數字法表示 為 760。

    這里使用的命令為 chown,其格式為“chown [參數] 所有者:所屬組 文件或目錄名稱”

    是針對目錄進行操作時需要加上大寫參數-R 來表示遞歸操作,

    [root@liruilong tmp]# ls -ald testdir/ drwxrwxrwx 2 root root 4096 Nov 7 02:11 testdir/ [root@liruilong tmp]# chown root:bin testdir/ [root@liruilong tmp]# ls -ald testdir/ drw-rwsrwx 2 root bin 4096 Nov 7 02:11 testdir/

    子母法:u g o a?

    [root@liruilong tmp]# !l ls -ld / dr-xr-xr-x. 21 root root 4096 Nov 5 22:11 / [root@liruilong tmp]# ls -ld testdir/ d-----S--- 2 root bin 4096 Nov 7 02:11 testdir/ [root@liruilong tmp]# chmod a=- testdir/ [root@liruilong tmp]# ls -ld testdir/ d-----S--- 2 root bin 4096 Nov 7 02:11 testdir/ [root@liruilong tmp]# chmod go+r testdir/ [root@liruilong tmp]# !l ls -ld testdir/ d---r-Sr-- 2 root bin 4096 Nov 7 02:11 testdir/ [root@liruilong tmp]#

    5.3.3 ?SBIT?

    SBIT 特殊權限位可確保用戶只能刪除自己的文件,而 不能刪除其他用戶的文件。換句話說,當對某個目錄設置了 SBIT 粘滯位權限后,那么該目錄 中的文件就只能被其所有者執行刪除操作了。

    [root@liruilong tmp]# chmod o+t testdir/ [root@liruilong tmp]# !l ls -ld testdir/ d---r-Sr-T 2 root bin 4096 Nov 7 02:11 testdir/

    數字表示: 7777?

    5.4 ?文件的隱藏屬性?

    Linux 系統中的文件除了具備一般權限和特殊權限之外,還有一種隱藏權限,即被隱藏 起來的權限,默認情況下不能直接被用戶發覺

    5.4.1 ?chattr 命令?

    chattr 命令用于設置文件的隱藏權限,格式為“chattr [參數] 文件”。如果想要把某個隱 藏功能添加到文件上,則需要在命令后面追加“+參數”,如果想要把某個隱藏功能移出文件, 則需要追加“-參數”

    [root@liruilong tmp]# chattr -R +ia testdir/ [root@liruilong tmp]# chattr -R +ia testdir/ [root@liruilong tmp]# chattr -R +ias testdir/ [root@liruilong tmp]# chattr -R +iasA testdir/ [root@liruilong tmp]# chattr -R +iasAb testdir/ Usage: chattr [-RVf] [-+=aAcCdDeijsStTu] [-v version] files...

    lsattr命令??

    lsattr 命令用于顯示文件的隱藏權限,格式為“lsattr [參數] 文件”。在 Linux 系統中,文 件的隱藏權限必須使用 lsattr 命令來查看

    [root@liruilong tmp]# lsattr -a testdir/ s---ia-A-----e-- testdir/. -------------e-- testdir/.. [root@liruilong tmp]# ls crontab.cp4b9Z +~JF3807956979297397557.tmp testdir tomcat.7151372715267221723.8083 crontab.eQFCIn +~JF6254427487714294215.tmp tomcat.2057303081224246633.8083 tomcat.7654033927032040791.8083 hsperfdata_root mongodb-27017.sock tomcat.5407954538588136141.8083 [root@liruilong tmp]# ls -la testdir/ total 8 d---r-Sr-T 2 root bin 4096 Nov 7 02:11 . drwxrwxrwt. 13 root root 4096 Nov 7 03:21 .. [root@liruilong tmp]# [root@liruilong tmp]# ls 2020.txt crontab.cp4b9Z hsperfdata_root mongodb-27017.sock testdir tomcat.7151372715267221723.8083 tomcat.7654033927032040791.8083 [root@liruilong tmp]# lsattr -a testdir/ s---ia-A-----e-- testdir/. -------------e-- testdir/.. [root@liruilong tmp]# lsattr -a testdir s---ia-A-----e-- testdir/. -------------e-- testdir/.. [root@liruilong tmp]# lsattr -a -------------e-- ./.X11-unix -------------e-- ./crontab.cp4b9Z lsattr: Operation not supported While reading flags on ./mongodb-27017.sock -------------e-- ./.XIM-unix -------------e-- ./hsperfdata_root -------------e-- ./2020.txt -------------e-- ./. -------------e-- ./tomcat.7654033927032040791.8083 -------------e-- ./.Test-unix -------------e-- ./.ICE-unix -------------e-- ./.font-unix -------------e-- ./.. -------------e-- ./tomcat.7151372715267221723.8083 s---ia-A-----e-- ./testdir [root@liruilong tmp]#

    ?5.5文件訪問控制列表 :

    基于普通文件或目錄設置 ACL 其實就是針對指定 的用戶或用戶組設置文件或目錄的操作權限。另外,如果針對某個目錄設置了 ACL,則目錄 中的文件會繼承其 ACL;若針對文件設置了 ACL,則文件不再繼承其所在目錄的 ACL。

    5.5.1 ?setfacl 命令

    setfacl 命令用于管理文件的 ACL 規則,格式為“setfacl [參數] 文件名稱”。文件的 ACL 提供的是在所有者、所屬組、其他人的讀/寫/執行權限之外的特殊權限控制,使用 setfacl 命令 可以針對單一用戶或用戶組、單一文件或目錄來進行讀/寫/執行權限的控制。其中,

    針對目錄 文件需要使用-R 遞歸參數;

    針對普通文件則使用-m 參數;

    如果想要刪除某個文件的 ACL, 則可以使用-b 參數。

    5.5.2 ?getfacl 命令

    getfacl 命令用于顯示文件上設置的 ACL 信息,格式為“getfacl 文件名稱”。,用的是 setfacl 命令;要想查看 ACL,則用 的是 getfacl 命令。下面使用 getfacl 命令顯示在 root 管理員家目錄上設置的所有 ACL 信息

    [root@liruilong tmp]# mkdir demo0813 [root@liruilong tmp]# ls 2020.txt demo0813 mongodb-27017.sock tomcat.7151372715267221723.8083 crontab.cp4b9Z hsperfdata_root testdir tomcat.7654033927032040791.8083 [root@liruilong tmp]# setfacl -Rm u:root:rwx demo0813 [root@liruilong tmp]# ls -l getfacl demo0813 ls: cannot access getfacl: No such file or directory demo0813: total 0 [root@liruilong tmp]# getfacl demo0813 # file: demo0813 # owner: root # group: root user::rwx user:root:rwx group::r-x mask::rwx other::r-x[root@liruilong tmp]# [root@liruilong tmp]# getfacl /root getfacl: Removing leading '/' from absolute path names # file: root # owner: root # group: root user::r-x group::r-x other::---[root@liruilong tmp]#

    5.6 ?su 命令與 sudo 服務

    su 命令可以解決切換用戶身份的需求,使得當前用戶在不退出登錄的情況下,順暢地切 換到其他用戶,比如從 root 管理員切換至普通用戶。

    [root@liruilong tmp]# su liruilongdemo [liruilongdemo@liruilong tmp]$ id uid=10000(liruilongdemo) gid=10000(liruilongdemo) groups=10000(liruilongdemo) [liruilongdemo@liruilong tmp]$ su - liruilongdemo Password: su: Authentication failure [liruilongdemo@liruilong tmp]$ su root Password: su: Authentication failure [liruilongdemo@liruilong tmp]$ exit exit [root@liruilong tmp]#

    sudo 命令用于給普通用戶提供額外的權限來完成原本 root 管理員才能完成的任務,格式 為“sudo [參數] 命令名稱

    ?限制用戶執行指定的命令:

    • ? 記錄用戶執行的每一條命令;
    • ? 配置文件(/etc/sudoers)提供集中的用戶管理、權限與主機等參數;
    • ? 驗證密碼的后 5 分鐘內(默認值)無須再讓用戶再次驗證密碼。?

    使用 sudo 命令提供的 visudo 命令 來配置用戶權限。這條命令在配置用戶權限時將禁止多個用戶同時修改 sudoers 配置文件,還 可以對配置文件內的參數進行語法檢查,并在發現參數錯誤時進行報錯。?

    只有 root 管理員才可以使用 visudo 命令編輯 sudo 服務的配置文件。?

    誰可以使用 ?允許使用的主機=(以誰的身份) ?可執行命令的列表?

    # # Defaults env_keep += "HOME"Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin## Next comes the main part: which users can run what software on ## which machines (the sudoers file can be shared between multiple ## systems). ## Syntax: ## ## user MACHINE=COMMANDS ## ## The COMMANDS section may have other options added to it. ## ## Allow root to run any commands anywhere root ALL=(ALL) ALL liruilongdemo ALL=(ALL) ALL## Allows members of the 'sys' group to run networking, software, ## service management apps and more. # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL## Allows members of the users group to mount and unmount the ## cdrom as root # %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom## Allows members of the users group to shutdown this system # %users localhost=/sbin/shutdown -h now## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment) #includedir /etc/sudoers.d ~ ~ ~

    以添加 NOPASSWD 參數, 使得用戶執行 sudo 命令時不再需要密碼驗證:?
    ?

    課后題

    • 在 RHEL 7 系統中,root 管理員是誰? 答:是 UID 為 0 的用戶,默認是 root 管理員。?
    • 如何使用 Linux 系統的命令行來添加或刪除用戶? 答:添加和刪除用戶的命令分別是 useradd 與 userdel。?
    • .若某個文件的所有者具有文件的讀/寫/執行權限,其余人僅有讀權限,那么用數字法表示 應該是什么? 答:所有者權限為 rwx,所屬組和其他人的權限為 r--,因此數字法表示應該是 744
    • 如果希望用戶執行某命令時臨時擁有該命令所有者的權限,應該設置什么特殊權限? 答:特殊權限中的 SUID
    • .若對文件設置了隱藏權限+i,則意味著什么? 答:無法對文件進行修改;若對目錄設置了該參數,則僅能修改其中的子文件內容而不能 新建或刪除文件。?
    • 使用訪問控制列表(ACL)來限制 linuxprobe 用戶組,使得該組中的所有成員不得在/tmp 目錄中寫入內容。 答:想要設置用戶組的 ACL,則需要把 u 改成 g,即 setfacl -Rm g:linuxprobe:r-x /tmp。?
    • 當普通用戶使用 sudo 命令時是否需要驗證密碼? 答:系統在默認情況下需要驗證當前登錄用戶的密碼,若不想要驗證,可添加 NOPASSWD 參數。

    第 6 章 ,存儲結構與磁盤劃分?

    ?物理設備的命名規則?

    /dev/目錄中保存的應當是硬件設備文件;其次,sd 表示是存儲設備;然后,a 表 示系統中同類接口中第一個被識別到的設備,最后,5 表示這個設備是一個邏輯分區。

    ?“/dev/sda5”表示的就是“這是系統中第一塊被識別到的硬件設備中分區編號為 5 的邏輯分區的設備文件.

    硬盤設備是由大量的扇區組成的,每個扇區的容量為 512 字節。其中 第一個扇區最重要,它里面保存著主引導記錄與分區表信息。

    就第一個扇區來講:

    • 主引導記錄需要占用 446 字節,
    • 分區表為 64 字節,
    • 結束符占用 2 字節

    其中分區表中每記錄一個分區 信息就需要 16 字節,這樣一來最多只有 4 個分區信息可以寫到第一個扇區中,

    這 4 個分區就 是 4 個主分區。第一個扇區中的數據信息如圖

    為了解決分區個數不夠,的問題,可以將第一個扇區的分區表中 16 字節(原本要寫入主分區信息)的空間(稱之為擴 展分區)拿出來指向另外一個分區。也就是說,擴展分區其實并不是一個真正的分區,而更 像是一個占用 16 字節分區表空間的指針—一個指向另外一個分區的指針

    用戶 一般會選擇使用 3 個主分區加 1 個擴展分區的方法,然后在擴展分區中創建出數個邏輯分區, 從而來滿足多分區(大于 4 個)的需求.

    所謂擴展分區,嚴格地講它不是一個實際意義的分區,它僅僅是一個指向下一個 分區的指針,這種指針結構將形成一個單向鏈表。?

    6.3文件系統與數據資料

    用戶在硬件存儲設備中執行的文件建立、寫入、讀取、修改、轉存與控制等操作都是依 靠文件系統來完成的。文件系統的作用是合理規劃硬盤,以保證用戶正常的使用需求。Linux 系統支持數十種的文件系統:

    • Ext3:是一款日志文件系統,能夠在系統異常宕機時避免文件系統資料丟失,并能自動修復數據的不一致與錯誤。然而,當硬盤容量較大時,所需的修復時間也會很長,而且也不能百分之百地保證資料不會丟失。它會把整個磁盤的每個寫入動作的細節都預先記錄下來,以便在發生異常宕機后能回溯追蹤到被中斷的部分, 然后嘗試進行修復。
    • ?Ext4:Ext3 的改進版本,作為 RHEL6 系統中的默認文件管理系統,它支持的存儲容量高達1EB(1EB=1,073,741,824GB),且能夠有無限多的子目錄。另外,Ext4 文件系 統能夠批量分配 block 塊,從而極大地提高了讀寫效率。
    • XFS:是一種高性能的日志文件系統,而且是 RHEL 7 中默認的文件管理系統,它的 優勢在發生意外宕機后尤其明顯,即可以快速地恢復可能被破壞的文件,而且強大的 日志功能只用花費極低的計算和存儲性能。并且它最大可支持的存儲容量為 18EB, 這幾乎滿足了所有需求。?

    在拿到了一塊新的硬盤存儲設備后,也需要先分區,然后再格式化文件系統,最后才能掛載并正常使用。硬盤的分區操作取決于您的需求和硬盤大小;您也 可以選擇不進行分區,但是必須對硬盤進行格式化處理.

    日常在硬盤需要保存的數據實在太多了,因此 Linux 系統中有一個名為 super block 的“硬 盤地圖”。

    Linux 并不是把文件內容直接寫入到這個“硬盤地圖”里面,而是在里面記錄著整 個文件系統的信息。因為如果把所有的文件內容都寫入到這里面,它的體積將變得非常大, 而且文件內容的查詢與寫入速度也會變得很慢。

    Linux 只是把每個文件的權限與屬性記錄在 inode 中,而且每個文件占用一個獨立的 inode 表格,該表格的大小默認為 128 字節,里面記 錄著如下信息:?

    • 該文件的訪問權限(read、write、execute);
    • 該文件的所有者與所屬組(owner、group);
    • ?該文件的大小(size);
    • ?該文件的創建或內容修改時間(ctime);
    • ?該文件的最后一次訪問時間(atime);
    • ?該文件的修改時間(mtime);
    • 文件的特殊權限(SUID、SGID、SBIT);
    • ?該文件的真實數據地址(point)。?

    而文件的實際內容則保存在 block 塊中(大小可以是 1KB、2KB 或 4KB),一個 inode 的 默認大小僅為 128B(Ext3),記錄一個 block 則消耗 4B。當文件的 inode 被寫滿后,

    Linux 系 統會自動分配出一個 block 塊,專門用于像 inode 那樣記錄其他 block 塊的信息,這樣把各個 block 塊的內容串到一起,就能夠讓用戶讀到完整的文件內容了。對于存儲文件內容的 block 塊,有下面兩種常見情況(以 4KB 的 block 大小為例進行說明)。?

    • 情況 1:文件很小(1KB),但依然會占用一個 block,因此會潛在地浪費 3KB。
    • 情況 2:文件很大(5KB),那么會占用兩個 block(5KB-4KB 后剩下的 1KB 也要占 用一個 block)。?

    計算機系統在發展過程中產生了眾多的文件系統,為了使用戶在讀取或寫入文件時不用 關心底層的硬盤結構,

    Linux 內核中的軟件層為用戶程序提供了一個 VFS(Virtual File System, 虛擬文件系統)接口。

    這樣用戶實際上在操作文件時就是統一對這個虛擬文件系統進行操作?

    6.4掛載硬件設備

    —當用戶需要使用 硬盤設備或分區中的數據時,需要先將其與一個已存在的目錄文件進行關聯,而這個關聯 動作就是“掛載”。

    6.4.1 mount命令

    mount 命令用于掛載文件系統,格式為“mount 文件系統 掛載目錄” 。mount 命令中可 用的參數及作用如表 :

    只需使用 mount 命令把硬盤設備或分區與一個目錄文件進行關聯,然后就能在這個目錄中看到硬件設 備中的數據了。

    [root@liruilong ~]# mount /dev/sdb2 /backup mount: mount point /backup does not exist [root@liruilong ~]#

    如果想讓硬件設備和目錄永久地進行自動關聯,就必須把掛載信息按照指定的填寫格式 “設備文件 掛載目錄 格式類型 權限選項 自檢 優先級”(各字段的意義見表 6-4)寫入到 /etc/fstab 文件中?

    ?如果想將文件系統為 ext4 的硬件設備/dev/sdb2 在開機后自動掛載到/backup 目錄上,并 保持默認權限且無需開機自檢,就需要在/etc/fstab 文件中寫入下面的信息,這樣在系統重啟 后也會成功掛載。?
    ?

    6.4.2 umount命令

    umount 命令用于撤銷已經掛載的設備文件,格式為“umount [掛載點/設備文件]”。

    [root@liruilong ~]# umount /dev/sdb2 umount: /dev/sdb2: mountpoint not found [root@liruilong ~]#

    6.5添加硬盤設備

    6.5.1 fdisk命令

    在 Linux 系統中,管理硬盤設備最常用的方法就當屬 fdisk 命令了。

    fdisk 命令用于管理磁盤 分區,格式為“fdisk ?[磁盤名稱]”,

    它提供了集添加、刪除、轉換分區等功能于一身的“一站式 分區服務”。不過與前面講解的直接寫到命令后面的參數不同,這條命令的參數是交互式的,因此在管理硬盤設備時特別方便,可以根據需求動態調整。?

    [root@liruilong dev]# fdisk vda1 Welcome to fdisk (util-linux 2.23.2).Changes will remain in memory only, until you decide to write them. Be careful before using the write command.Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0x162dcee5.Command (m for help): n Partition type:p primary (0 primary, 0 extended, 4 free)e extended Select (default p): p Partition number (1-4, default 1): 2 First sector (2048-83883998, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-83883998, default 83883998): +1GB^H^[[3~ Unsupported suffix: 'G'. Supported: 10^N: KB (KiloByte), MB (MegaByte), GB (GigaByte)2^N: K (KibiByte), M (MebiByte), G (GibiByte) Last sector, +sectors or +size{K,M,G} (2048-83883998, default 83883998): +1G Partition 2 of type Linux and of size 1 GiB is setCommand (m for help): pDisk vda1: 42.9 GB, 42948607488 bytes, 83883999 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x162dcee5Device Boot Start End Blocks Id System vda1p2 2048 2099199 1048576 83 LinuxCommand (m for help): w The partition table has been altered!Calling ioctl() to re-read partition table.WARNING: Re-reading the partition table failed with error 22: Invalid argument. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. [root@liruilong dev]# mkfs.xfs vda1 mkfs.xfs: vda1 contains a mounted filesystem Usage: mkfs.xfs /* blocksize */ [-b log=n|size=num] /* metadata */ [-m crc=0|1,finobt=0|1,uuid=xxx] /* data subvol */ [-d agcount=n,agsize=n,file,name=xxx,size=num,(sunit=value,swidth=value|su=num,sw=num|noalign),sectlog=n|sectsize=num /* force overwrite */ [-f] /* inode size */ [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,projid32bit=0|1] /* no discard */ [-K] /* log subvol */ [-l agnum=n,internal,size=num,logdev=xxx,version=nsunit=value|su=num,sectlog=n|sectsize=num,lazy-count=0|1] /* label */ [-L label (maximum 12 characters)] /* naming */ [-n log=n|size=num,version=2|ci,ftype=0|1] /* no-op info only */ [-N] /* prototype file */ [-p fname] /* quiet */ [-q] /* realtime subvol */ [-r extsize=num,size=num,rtdev=xxx] /* sectorsize */ [-s log=n|size=num] /* version */ [-V]devicename <devicename> is required unless -d name=xxx is given. <num> is xxx (bytes), xxxs (sectors), xxxb (fs blocks), xxxk (xxx KiB),xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB). <value> is xxx (512 byte blocks). [root@liruilong dev]# mkdir /newFS [root@liruilong /]# mount /dev/vda1 /newFS/ [root@liruilong /]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 911M 0 911M 0% /dev tmpfs 920M 0 920M 0% /dev/shm tmpfs 920M 448K 920M 1% /run tmpfs 920M 0 920M 0% /sys/fs/cgroup /dev/vda1 40G 8.9G 29G 24% / tmpfs 184M 0 184M 0% /run/user/0 [root@liruilong /]#

    在 Linux 系統中用于格式化操作的命令是 mkfs。

    完成了存儲設備的分區和格式化操作,

    接下來就是要來掛載并使用存儲設備了。與 之相關的步驟也非常簡單:

    首先是創建一個用于掛載設備的掛載點目錄;然后使用 mount 命 令將存儲設備與掛載點進行關聯;

    最后使用 df -h 命令來查看掛載狀態和硬盤使用量信息。?

    6.5.2 du命令.

    用于查看文件數據占用量的 du 命令,其格式為“du [選項] [文件]”。

    簡單來說,該命令就是用來查看一個或多個文件占用了多大的硬盤空間。我們還可 以使用 du -sh /*命令來查看在 Linux 系統根目錄下所有一級目錄分別占用的空間大小

    如果想讓這個設備文件的掛載永久有效,則需要把掛載 的信息寫入到配置文件中:?

    6.6添加交換分區

    添加交換分區 :SWAP(交換)分區是一種通過在

    硬盤中預先劃分一定的空間,然后將把內存中暫時不常 用的數據臨時存放到硬盤中,以便騰出物理內存空間讓更活躍的程序服務來使用的技術,其設 計目的是為了解決真實物理內存不足的問題

    但由于交換分區畢竟是通過硬盤設備讀寫數據的, 速度肯定要比物理內存慢,所以只有當真實的物理內存耗盡后才會調用交換分區的資源。?

    在生產環境中,交換分區的大小一般為真實物理內存的 1.5~2 倍,為了讓大家更明顯地感受交換分區空間的變化,這 里取出一個大小為 5GB 的主分區作為交換分區資源。在分區創建完畢后保存并退出即可:?

    使用 SWAP 分區專用的格式化命令 mkswap,對新建的主分區進行格式化操作:?

    使用 swapon 命令把準備好的 SWAP 分區設備正式掛載到系統中。我們可以使用 free -m 命令 查看交換分區的大小變化(由 2047MB 增加到 7167MB)?

    為了能夠讓新的交換分區設備在重啟后依然生效,需要按照下面的格式將相關信息寫入 到配置文件中,

    6.7磁盤容量配額

    可以使用 quota 命令進行磁盤容量配額管理,從而限制用戶的硬盤可用容量或所能創建的最大文件個數。

    quota 命令還有軟限制和硬限制的功能。

    • 軟限制:當達到軟限制時會提示用戶,但仍允許用戶在限定的額度內繼續使用。
    • ?硬限制:當達到硬限制時會提示用戶,且強制終止用戶的操作

    6.7.1 xfs_quota命令

    xfs_quota 命令是一個專門針對 XFS 文件系統來管理 quota 磁盤容量配額服務而設計的命令,

    格式為“quota [參數] 配額 文件系統”。其中,

    • -c 參數用于以參數的形式設置要執行的命令;
    • -x 參數是專家模式,讓運維人員能夠對 quota 服務進行更多復雜的配置。

    接下來我們使用 xfs_quota 命令來設置用戶 tom 對/boot 目錄的 quota 磁盤容量配額。

    具體的限額控制包括:硬盤使用量的軟 限制和硬限制分別為 3MB 和6MB;創建文件數量的軟限制和硬限制分別為 3 個和 6 個。?

    6.7.2 edquota命令

    edquota 命令用于編輯用戶的 quota 配額限制,格式為“edquota [參數] [用戶] ”。

    在為用 戶設置了 quota 磁盤容量配額限制后,可以使用 edquota 命令按需修改限額的數值。其中,

    • -u 參數表示要針對哪個用戶進行設置;
    • -g 參數表示要針對哪個用戶組進行設置。

    edquota 命令會 調用 Vi 或 Vim 編輯器來讓 root 管理員修改要限制的具體細節。下面把用戶 tom 的硬盤使用 量的硬限額從 5MB 提升到 8MB:?
    ?

    6.8軟硬方式鏈接In命令

    在 Linux 系統中存在硬鏈接和軟連接兩種文件。

    • ?硬鏈接(hard link):可以將它理解為一個“指向原始文件 inode 的指針”,系統不為 它分配獨立的 inode 和文件。所以,硬鏈接文件與原始文件其實是同一個文件,只 是名字不同。我們每添加一個硬鏈接,該文件的 inode 連接數就會增加 1;而且只 有當該文件的 inode 連接數為 0 時,才算徹底將它刪除。換言之,由于硬鏈接實際 上是指向原文件 inode 的指針,因此即便原始文件被刪除,依然可以通過硬鏈接文 件來訪問。需要注意的是,由于技術的局限性,我們不能跨分區對目錄文件進行 鏈接。
    • 軟鏈接(也稱為符號鏈接[symbolic link]):僅僅包含所鏈接文件的路徑名,因此能鏈 接目錄文件,也可以跨越文件系統進行鏈接。但是,當原始文件被刪除后,鏈接文件 也將失效,從這一點上來說與 Windows 系統中的“快捷方式”具有一樣的性質。?

    ln 命令用于創建鏈接文件,格式為“ln [選項] 目標”,在使用 ln 命令時,是否添加-s 參數,將創建出性質不同的兩種“快捷方式”。

    [root@liruilong ~]# ls $ consul_1.6.2_linux_amd64.zip ipadds.txt mongodb-linux-x86_64-ubuntu1604-4.2.8.tgz sh_script applog D: LIR.txt mysql57-community-release-el7-8.noarch.rpm testmongobackup CheckHosts.sh demo-0.0.1-SNAPSHOT.jar liruilong nohup.out users.txt CheckKeys.sh demo_0719.sh liruilong.txt practice wget-log chkhost.sh demo.sh lishaoqing reame.txt chkscore.sh Example.sh li.txt redis-5.0.7 consul Guess.sh media redis-5.0.7.tar.gz consul_0.7.5_linux_amd64.zip hros-0.0.1-SNAPSHOT.jar mkcdrow.sh save.txt [root@liruilong ~]# ln -s hros-0.0.1-SNAPSHOT.jar demo.jar [root@liruilong ~]# java -jar demo.jar. ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v2.2.2.RELEASE) [root@liruilong ~]# ls -l hros-0.0.1-SNAPSHOT.jar -rw-r--r-- 1 root root 51484868 Feb 29 2020 hros-0.0.1-SNAPSHOT.jar [root@liruilong ~]#

    ?即相當于針對原始文件的硬盤存儲位置創建 了一個指針,新創建的這個硬鏈接就不再依賴于原始文件的名稱等信息,也不會 因為原始文件的刪除而導致無法讀取。同時可以看到創建硬鏈接后,原始文件的硬盤鏈接數 量增加到了 2。?

    [root@liruilong ~]# ln hros-0.0.1-SNAPSHOT.jar demos.jar [root@liruilong ~]# ls -l hros-0.0.1-SNAPSHOT.jar -rw-r--r-- 2 root root 51484868 Feb 29 2020 hros-0.0.1-SNAPSHOT.jar [root@liruilong
    • 1./home 目錄與/root 目錄內存放的文件有何相同點以及不同點?
      • 答:這兩個目錄都是用來存放用戶的家目錄數據的,但是,/root 目錄存放的是 root 管理 員的家目錄數據。??
    • 2.假如一個設備的文件名稱為/dev/sdb,可以確認它是主板第二個插槽上的設備嗎?
      • 答:不一定,因為設備的文件名稱是由系統的識別順序來決定的。?
    • 3.如果硬盤中需要 5 個分區,至少需要幾個邏輯分區?
      • 答:可以選用創建 3 個主分區+1 個擴展分區的方法,然后把擴展分區再分成 2 個邏輯分 區,即有了 5 個分區。?
    • 4./dev/sda5 是主分區還是邏輯分區?
      • 答:邏輯分區。?
    • 5.哪個服務決定了設備在/dev 目錄中的名稱?
      • 答:udev 設備管理器服務。?
    • 6.用一句話來描述掛載操作。
      • 答:當用戶需要使用硬盤設備或分區中的數據時,需要先將其與一個已存在的目錄文件進 行關聯,而這個關聯動作就是“掛載”。?
    • 7.在配置 quota 磁盤容量配額服務時,軟限制數值必須小于硬限制數值么?
      • 答:不一定,軟限制數值可以小于等于硬限制數值。?
    • 8.若原始文件被改名,那么之前創建的硬鏈接還能訪問到這個原始文件么?
      • 答:可以。

    第7章使用RAID與LVM磁盤陣列技術

    7.1 ?RAID(獨立冗余磁盤陣列)?

    RAID 技術 通過把多個硬盤設備組合成一個容量更大、安全性更好的磁盤陣列

    并把數據切割成多個區 段后分別存放在各個不同的物理硬盤設備上,然后利用分散讀寫技術來提升磁盤陣列整體的 性能

    同時把多個重要數據的副本同步到不同的物理硬盤設備上,從而起到了非常好的數據 冗余備份效果。

    RAID 技 術的設計初衷是減少因為采購硬盤設備帶來的費用支出,但是與數據本身的價值相比較,現 代企業更看重的則是 RAID 技術所具備的冗余備份機制以及帶來的硬盤吞吐量的提升

    RAID 不僅降低了硬盤設備損壞后丟失數據的幾率,還提升了硬盤設備的讀寫速度

    RAID 0、RAID 1、RAID 5 與 RAID 10 這 4 種常見的方案。?

    7.1.1 RAID 0

    RAID 0 技術把多塊物理硬盤設備(至少兩塊)通過硬件或軟件的方式串聯在一起,組成 一個大的卷組,并將數據依次寫入到各個物理硬盤中。

    在理想的狀態下,硬盤 設備的讀寫性能會提升數倍,但是若任意一塊硬盤發生故障將導致整個系統的數據都受到破壞。

    RAID 0 技術能夠有效地提升硬盤數據的吞吐速度,但是不具備數據備份和錯 誤修復能力

    數據被分別寫入到不同的硬盤設備中,即 disk1 和 disk2 硬盤設 備會分別保存數據資料,終實現分開寫入、讀取的效果。?

    7.1.2 RAID 1

    如果生產環境對硬盤設備的讀寫速度沒有要求,而是希望增加數據的安全性時, 就需要用到 RAID 1 技術了。

    RAID1 把兩塊以上的硬盤設備進行綁定,在寫入數據時,是將數據同時寫入到多塊硬盤設備上(可以將其視為數據的鏡像或備份)。

    當其中某一塊硬盤發生故障后,一般會立即自動以熱交換的方式來恢復數據的正常 使用。?

    從理論上來說RAID1 硬盤空間的真實可用率 只有 50%,由三塊硬盤設備組成的 RAID 1 磁盤陣列的可用率只有 33%左右.

    7.1.3 RAID 5

    RAID 5 技術在理論上兼顧了三者(讀寫速度、數據安全性、成本)
    RAID5 技術是把硬盤設備的數據奇偶校驗信息保存到其他硬盤設備中。 RAID 5 磁盤陣列組中數據的奇偶校驗信息并不是單獨保存到某一塊硬盤設備中,而是存儲到 除自身以外的其他每一塊硬盤設備上,這樣的好處是其中任何一設備損壞后不至于出現致命 缺陷;

    ??RAID 5 技術實 際上沒有備份硬盤中的真實數據信息,而是當硬盤設備出現問題后通過奇偶校驗信息來嘗試 重建損壞的數據。parity 部分存放的就是數據的奇偶校驗信息

    RAID 5這樣的技術特性“妥協”地兼顧了硬盤設備的讀寫速度、數據安全性 與存儲成本問題。

    ?

    7.1.4 RAID 10

    RAID 10 技術是 RAID 1+RAID 0 技術的一個“組合體”。

    RAID 10 技術需要至少 4 塊硬盤來組建,其中先分別兩兩制作成 RAID 1 磁盤陣列

    然后再對兩個 RAID 1 磁盤陣列實施 RAID 0 技術,進一步提高硬盤設 備的讀寫速度。這樣從理論上來講,只要壞的不是同一組中的所有硬盤,那么多可以損 壞 50%的硬盤設備而不丟失數據

    7.1.5部署磁盤陣列

    [root@liruilong ~]# mdadm --help mdadm is used for building, managing, and monitoring Linux md devices (aka RAID arrays) Usage: mdadm --create device options...Create a new array from unused devices.mdadm --assemble device options...Assemble a previously created array.mdadm --build device options...Create or assemble an array without metadata.mdadm --manage device options...make changes to an existing array.mdadm --misc options... devicesreport on or modify various md related devices.mdadm --grow options deviceresize/reshape an active arraymdadm --incremental deviceadd/remove a device to/from an array as appropriatemdadm --monitor options...Monitor one or more array for significant changes.mdadm device options...Shorthand for --manage. Any parameter that does not start with '-' is treated as a device name or, for --examine-bitmap, a file name. The first such name is often the name of an md device. Subsequent names are often names of component devices.For detailed help on the above major modes use --help after the modee.g.mdadm --assemble --helpFor general help on options usemdadm --help-options [root@liruilong ~]#

    ?

    使用 mdadm 命令創建 RAID 10,名稱為“/dev/md0”。??

    • -C 參數代表創建一個 RAID 陣列卡;
    • -v 參數顯示創建的過程,同時在后面追加一個設備名稱/dev/md0,這樣/dev/md0 就是創建后的 RAID 磁盤陣列的名稱;
    • -a yes 參數代表自動創建設備文件;
    • -n 4 參數代表使用 4 塊硬盤來部 署這個 RAID 磁盤陣列;
    • -l 10 參數則代表 RAID 10 方案;后再加上 4 塊硬盤設備的名稱 就搞定了。?

    ?

    把制作好的 RAID 磁盤陣列格式化為 ext4 格式。?

    創建掛載點然后把硬盤設備進行掛載操作。掛載成功后可看到可用空間為 40GB。?
    ?

    查看/dev/md0 磁盤陣列的詳細信息,并把掛載信息寫入到配置文件中,使其永久 生效。?
    ?

    7.1.6損壞磁盤陣列及修復

    理硬盤設備出現損壞而不能繼續正常使用后,應該使用 mdadm 命令將其 移除,然后查看 RAID 磁盤陣列的狀態,可以發現狀態已經改變

    在 RAID 10 級別的磁盤陣列中,當 RAID 1 磁盤陣列中存在一個故障盤時并不影響 RAID 10 磁盤陣列的使用。當購買了新的硬盤設備后再使用 mdadm 命令來予以替換即可.

    7.1.7磁盤陣列+備份盤

    7.2LVM (邏輯卷管理器)

    LVM (邏輯卷管理器)。LVM 可以允許用戶對硬盤資源進行動態調整。?

    LVM 技術是在硬 盤分區和文件系統之間添加了一個邏輯層,它提供了一個抽象的卷組,可以把多塊硬盤進行 卷組合并。

    用戶不必關心物理硬盤設備的低層架構和布局,就可以實現對硬盤分 區的動態調整.

    7.2.1部署邏輯卷

    媽媽從隔壁老王家、老李家、老張家分別借來一些面粉,準備蒸饅頭吃。首先需 要把這些面粉(物理卷[PV,Physical Volume])揉成一個大面團(卷組[VG,Volume Group]), 然后再把這個大團面分割成一個個小饅頭(邏輯卷[LV,Logical Volume]),而且每個小饅頭 的重量必須是每勺面粉(基本單元[PE,Physical Extent])的倍數。

    yum -y install lvm2?

    • 新硬盤進行創建物理卷的操作,可以將該操 作簡單理解成讓硬盤設備支持 LVM 技術,或者理解成是把硬盤設備加入到 LVM 技術可 用的硬件資源池中,
    • 然后對這兩塊硬盤進行卷組合并,卷組的名稱可以由用戶來自定義。
    • 接下來,根據需求把合并后的卷組切割出一個約為 150MB 的邏輯卷設備,后把這個邏 輯卷設備格式化成 EXT4 文件系統后掛載使用

    在對邏輯卷進行切割時有兩種計量單位。第一種是以容 量為單位,所使用的參數為-L。例如,使用-L 150M 生成一個大小為 150MB 的邏輯卷。另外 一種是以基本單元的個數為單位,所使用的參數為-l。每個基本單元的大小默認為 4MB。例 如,使用-l 37 可以生成一個大小為 37×4MB=148MB 的邏輯卷。?

    • Linux 系統會把 LVM 中的邏輯卷設備存放在/dev 設備目錄中(實際上是做了一個符號鏈 接),同時會以卷組的名稱來建立一個目錄,其中保存了邏輯卷的設備映射文件(即/dev/卷組 名稱/邏輯卷名稱)。?
    • 查看掛載狀態,并寫入到配置文件,使其永久生效。?

    7.2.2擴容邏輯卷

    只要卷組中 有足夠的資源,就可以一直為邏輯卷擴容。擴展前請一定要記得卸載設備和掛載點的關聯。

    • 把上一個實驗中的邏輯卷 vo 擴展至 290MB?
    • ?檢查硬盤完整性,并重置硬盤容量。?
    • ?重新掛載硬盤設備并查看掛載狀態。?

    7.2.3縮小邏輯卷

    在對 LVM 邏輯卷進 行縮容操作之前,要先檢查文件系統的完整性(當然這也是為了保證我們的數據安全)。在執 行縮容操作前記得先把文件系統卸載掉。?

    • 第1步:檢查文件系統的完整性。
      ?
    • 第2步:把邏輯卷 vo 的容量減小到 120MB。
      ?
    • 第3步:重新掛載文件系統并查看系統狀態

    7.2.4邏輯卷快照

    LVM 還具備有“快照卷”功能,該功能類似于虛擬機軟件的還原時間點功能。

    可 以對某一個邏輯卷設備做一次快照,如果日后發現數據被改錯了,就可以利用之前做好的快 照卷進行覆蓋還原。

    LVM 的快照卷功能有兩個特點:

    • ?快照卷的容量必須等同于邏輯卷的容量;
    • 快照卷僅一次有效,一旦執行還原操作后則會被立即自動刪除。?

    首先查看卷組的信息

    [root@linuxprobe ~]# vgdisplay
    • ?第1步:使用-s 參數生成一個快照卷,使用-L 參數指定切割的大小。另外,還需要在命 令后面寫上是針對哪個邏輯卷執行的快照操作。?
    • 第2步:在邏輯卷所掛載的目錄中創建一個 100MB 的垃圾文件,然后再查看快照卷的狀 態。可以發現存儲空間占的用量上升了。?
    • 第3步:為了校驗 SNAP 快照卷的效果,需要對邏輯卷進行快照還原操作。在此之前記 得先卸載掉邏輯卷設備與目錄的掛載。
    • 第4步:快照卷會被自動刪除掉,并且剛剛在邏輯卷設備被執行快照操作后再創建出來 的 100MB 的垃圾文件也被清除了。

      ??

    7.2.5刪除邏輯卷

    當生產環境中想要重新部署 LVM 或者不再需要使用 LVM 時,則需要執行 LVM 的刪除 操作。為此,需要提前備份好重要的數據信息,

    然后依次刪除邏輯卷、卷組、物理卷設備, 這個順序不可顛倒?

    • 第1步:取消邏輯卷與目錄的掛載關聯,刪除配置文件中永久生效的設備參數
    • 第2步:刪除邏輯卷設備,需要輸入 y 來確認操作。
      ?
    • 第3步:刪除卷組,此處只寫卷組名稱即可,不需要設備的絕對路徑。?
    • 第4步:刪除物理卷設備。?
    • 再執行 lvdisplay、vgdisplay、pvdisplay 命令來查看 LVM 的信 息時就不會再看到信息了

    復習題

    1. RAID 技術主要是為了解決什么問題呢答:RAID 技術可以解決存儲設備的讀寫速度問題及數據的冗余備份問題。?
    ?
    2.
    RAID 0 和 RAID 5 哪個更安全? 答:RAID 0 沒有數據冗余功能,因此 RAID 5 更安全。?
    ?

    3.假設使用 4 塊硬盤來部署 RAID 10 方案,外加一塊備份盤,多可以允許幾塊硬盤同時損 壞呢答:多允許 5 塊硬盤設備中的 3 塊設備同時損壞。?
    ?
    4.位于 LVM 底層的是物理卷還是卷組? 答:底層的是物理卷,然后在通過物理卷組成卷組。?
    ?
    5. LVM 對邏輯卷的擴容和縮容操作有何異同點呢? 答:擴容和縮容操作都需要先取消邏輯卷與目錄的掛載關聯;擴容操作是先擴容后檢查文 件系統完整性,而縮容操作為了保證數據的安全,需要先檢查文件系統完整性再縮容。?
    ?

    6. LVM 的快照卷能使用幾次? 答:只可使用一次,而且使用后即自動刪除。?
    ?
    7. LVM 的刪除順序是怎么樣的?
    答:依次移除邏輯卷、卷組和物理卷。?

    第8章iptables與firewalld防火墻

    8.1防火墻管理工具

    在公網與企業內網 之間充當保護屏障的防火墻有軟件或硬件之分,

    主要功能都是依據策略對 穿越防火墻自身的流量進行過濾。防火墻策略可以基于流量的源目地址、端口號、協議、應用等信息來定制,

    然后防火墻使用預先定制的策略規則監控出入的流量,若流量與某一條策略規則相匹配,則執行相應的處理,反之則丟棄。這樣一來,就可以保證僅有合法的流量在 企業內網和外部公網之間流動了。?
    ?

    8.2 iptables

    iptables 服務會把配置好的防火墻策略交由內核層面的 netfilter 網絡過濾器來處理,

    firewalld 服務 則是把配置好的防火墻策略交由內核層面的 nftables 包過濾框架來處理。

    8.2.1策略與規則鏈

    一般而言,防火墻策略規則的設置有兩種:一種是“通”(即放行)?一種是“堵”(即阻止)。

    當防火墻的默認策略為拒絕時(堵),就要設置允許規則(通),否 則誰都進不來;

    如果防火墻的默認策略為允許時,就要設置拒絕規則,否則誰都能進來,防 火墻也就失去了防范的作用

    iptables 服務把用于處理或過濾流量的策略條目稱之為規則鏈,規則鏈依據數據包處理位置的不同進行分類

    • 在進行路由選擇前處理數據包(PREROUTING);
    • 處理流入的數據包(INPUT);
    • 處理流出的數據包(OUTPUT);
    • 處理轉發的數據包(FORWARD);
    • 在進行路由選擇后處理數據包(POSTROUTING)。?

    從內網向外網發送的流量一般都是可控且良性的因此使用多的就是 INPUT 規則鏈,該規則鏈可以增大黑客人員從外網入侵內網的難度。

    拒絕策略iptables 服務 的術語:

    • ACCEPT(允許流量通過)、
    • REJECT(拒絕流量通過)、?則會在拒絕流量后再回復一條“您的信息已經收到,但是被扔掉了”信息
    • LOG(記錄日志信息) 、
    • DROP(拒絕流量通過) 。是直接將流量丟棄而且不響應?

    8.2.2 iptables中基本的命令參數

    iptables 是一款基于命令行的防火墻策略管理工具,具有大量參數,學習難度較大。

    iptables 命令可以根據流量的源地址、目的地址、傳輸協議、服務類型等信息進行匹配,

    一旦匹配成功,iptables 就會根據策略規則所預設的動作來處理這些流量。

    防火墻策略規則的匹配順序是從上至下的,因此要把較為嚴格、優先級較高的策略規則 放到前面

    [root@liruilong ~]# ipt iptables iptables-restore iptables-save iptables-xml iptunnel [root@liruilong ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination [root@liruilong ~]# iptables -P INPUT DROP

    規則鏈的默認拒絕動作只能是 DROP,而不能是 REJECT。

    ??向 INPUT 鏈中添加允許 ICMP 流量進入的策略規則:

    在日常運維工作中,經常會使用 ping 命令來檢查對方主機是否在線,而向防火墻的 INPUT規則鏈中添加一條允許ICMP流量進入的策略規則就默認允許了這種ping命令檢 測行為

    iptables -D INPUT 1 iptables -p INPUT ACCEPT iptables -L # 刪除 INPUT 規則鏈中剛剛加入的那條策略(允許 ICMP 流量),并把默認策略設置為 允許: iptables -I INPUT -s 192.168.10.10/24 -p tcp --dport 22 -j ACCERT iptables -A INPUT -p tcp --dport 22 -j REJECT # 將 INPUT 規則鏈設置為只允許指定網段的主機訪問本機的 22 端口,拒絕來自其他所有 主機的流量:

    ?防火墻策略規則是按照從上到下的順序匹配的,因此一定要把允許動作放到 拒絕動作前面,否則所有的流量就將被拒絕掉,

    • iptables -I INPUT -p icmp -j ACCEPT
      • # 向 INPUT 鏈中添加允許 ICMP 流量進入的策略規則:?
    • iptables -D INPUT 1
    • iptables -p INPUT ACCEPT
    • iptables -L
      • # 刪除 INPUT 規則鏈中剛剛加入的那條策略(允許 ICMP 流量),并把默認策略設置為 允許:?
    • iptables -I INPUT -s? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
    • iptables -D INPUT 1
    • iptables -p INPUT ACCEPT
    • iptables -L
      • # 刪除 INPUT 規則鏈中剛剛加入的那條策略(允許 ICMP 流量),并把默認策略設置為 允許:?
    • iptables -I INPUT -s ?192.168.10.10/24 -p tcp --dport 22 -j ACCERT
    • iptables -A INPUT -p tcp ?--dport 22 -j REJECT
      • # 將 INPUT 規則鏈設置為只允許指定網段的主機訪問本機的 22 端口,拒絕來自其他所有 主機的流量:?
    • iptables -I INPUT -P tcp --dport 12345 -j REJECT
      • # 向 INPUT 規則鏈中添加拒絕所有人訪問本機 12345 端口的策略規則:?
    • iptables -I INPUT -P tcp -s 192.168.10.6 --dport 80 -j ?REJECT
      • # 向 INPUT 規則鏈中添加拒絕 192.168.10.5 主機訪問本機 80 端口(Web 服務)的策略 規則:
    • iptables -A INPUT -P tcp --dport 1000:1024 -j REJECT
    • iptables -A INPUT -P udp --dport 1000:1024 -j REJECT
      • # 向 INPUT 規則鏈中添加拒絕所有主機訪問本機 1000~1024 端口的策略規則:?

    使用 iptables 命令配置的防火墻規則默認會在系統下一次重啟時失效,如果 想讓配置的防火墻策略永久生效,還要執行保存命令:?

    • service iptables save?

    8.3 firewalld

    firewalld(Dynamic Firewall Manager of Linux systems,Linux 系統的動態防火墻管理器)服務是默認的防火墻配置管理工具,它擁有基于 CLI(命 令行界面)和基于 GUI(圖形用戶界面)的兩種管理方式

    相較于傳統的防火墻管理配置工具,firewalld 支持動態更新技術并加入了區域(zone) 的概念。簡單來說,區域就是 firewalld 預先準備了幾套防火墻策略集合(策略模板)

    8.3.1終端管理工具

    使用 firewalld 配置的防火墻策略默認 為運行時(Runtime)模式,又稱為當前生效模式,而且隨著系統的重啟會失效。

    如果想讓配 置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在用 firewall-cmd 命令正常設置防火墻策略時添加--permanent 參數,需要重啟。

    [root@liruilong ~]# firewall --get-default-zone -bash: firewall: command not found [root@liruilong ~]# yum install firewalld Loaded plugins: fastestmirror Repository epel is listed more than once in the configuration Loading mirror speeds from cached hostfile* base: mirrors.cloud.aliyuncs.com* extras: mirrors.cloud.aliyuncs.com* updates: mirrors.cloud.aliyuncs.com base | 3.6 kB 00:00:00 epel | 4.7 kB 00:00:00 extras | 2.9 kB 00:00:00 mongdb-org | 2.5 kB 00:00:00 mysql-connectors-community | 2.5 kB 00:00:00 mysql-tools-community | 2.5 kB 00:00:00 mysql57-community | 2.5 kB 00:00:00 updates | 2.9 kB 00:00:00 (1/3): updates/7/x86_64/primary_db | 4.5 MB 00:00:00 (2/3): epel/x86_64/updateinfo | 1.0 MB 00:00:00 (3/3): epel/x86_64/primary_db | 6.9 MB 00:00:00 Package firewalld-0.6.3-8.el7_8.1.noarch already installed and latest version Nothing to do [root@liruilong ~]#

    ?查看 firewalld 服務當前所使用的區域:?

    • ?firewall-cmd --get-default-zone?

    查詢 eno16777728 網卡在 firewalld 服務中的區域:?

    • firewall-cmd --get-zone-of-interface=eno16777728?

    把 firewalld 服務中 eno16777728 網卡的默認區域修改為 external,并在系統重啟后生效。分 別查看當前與永久模式下的區域名稱:

    • firewall-cmd --permanent --zone=external --change-interface= eno16777728
    • firewall-cmd --get-zone-of-interface=eno16777728?
    • firewall-cmd --permanent --get-zone-of-interface=eno16777728?

    把 firewalld 服務的當前默認區域設置為 public:?

    • ?firewall-cmd --set-default-zone=public?

    啟動/關閉 firewalld 防火墻服務的應急狀況模式,阻斷一切網絡連接(當遠程控制服務器 時請慎用):

    • ?firewall-cmd --panic-on?
    • firewall-cmd --panic-off?

    查詢 public 區域是否允許請求 SSH 和 HTTPS 協議的流量:?

    • ?firewall-cmd --zone=public --query-service=ssh?
    • ?firewall-cmd --zone=public --query-service=https?

    把 firewalld 服務中請求 HTTP 協議的流量設置為永久拒絕,并立即生效:?

    • firewall-cmd --permanent --zone=public --remove-service=http?
    • ?firewall-cmd --reload??

    把在 firewalld 服務中訪問 8080 和 8081 端口的流量策略設置為允許,但僅限當前生效:?

    • ?firewall-cmd --zone=public --add-port=8080-8081/tcp?
    • firewall-cmd --zone=public --list-ports?

    把原本訪問本機 888 端口的流量轉發到 22 端口,要且求當前和長期均有效

    • firewall-cmd --permanent --zone=public --add-forward-port= port=888:proto=tcp:toport=22:toaddr=192.168.10.10?
    • firewall-cmd --reload?

    firewalld 中的富規則表示更細致、更詳細的防火墻策略配置,它可以針對系統服務、端 口號、源地址和目標地址等諸多信息進行更有正對性的策略配置。

    它的優先級在所有的防火 墻策略中也是高的。

    比如,我們可以在 firewalld 服務中配置一條富規則,使其拒絕 192.168.10.0/24 網段的所有用戶訪問本機的 ssh 服務(22 端口):?

    • firewall-cmd --permanent --zone=public --add-rich-rule=" rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"?
    • firewall-cmd --reload?

    8.3.2圖形管理工具

    ?SNAT(Source Network Address Translation,源網絡地址轉換)技術。SNAT 是一種為了解決 IP 地址匱乏而設計的技術,它 可以使得多個內網中的用戶通過同一個外網 IP 接入 Internet。該技術的應用非常廣泛。

    局域網中有多臺 PC,如果網關服務器沒有應用 SNAT 技術,則互 聯網中的網站服務器在收到 PC 的請求數據包,并回送響應數據包時,將無法在網絡中找到這 個私有網絡的 IP 地址,所以 PC 也就收不到響應數據包了。在圖 8-7 所示的局域網中,由于 網關服務器應用了 SNAT 技術,所以互聯網中的網站服務器會將響應數據包發給網關服務器, 再由后者轉發給局域網中的 PC。?

    8.4服務的訪問控制列表

    TCP Wrappers 是RHEL 7 系統中默認啟用的一款流量監控程序,它能夠根據來訪主機的地址 與本機的目標服務程序作出允許或拒絕的操作。

    Linux 系統中其實有兩個層面的防火 墻,第一種是前面講到的基于 TCP/IP 協議的流量過濾工具,而 TCP Wrappers 服務則是能允許或 禁止 Linux 系統提供服務的防火墻,從而在更高層面保護了 Linux 系統的安全運行。

    ?TCP Wrappers 服務的防火墻策略由兩個控制列表文件所控制,

    • 可以編輯允許控制列表文件來放行對服務的請求流量,
    • 也可以編輯拒絕控制列表文件來阻止對服務的請求流量

    控制列表 文件修改后會立即生效,

    系統將會先檢查允許控制列表文件(/etc/hosts.allow),如果匹配到相應 的允許策略則放行流量;如果沒有匹配,則去進一步匹配拒絕控制列表文件(/etc/hosts.deny),若 找到匹配項則拒絕該流量。如果這兩個文件全都沒有匹配到,則默認放行流量

    在配置 TCP Wrappers 服務時需要遵循兩個原則:

    • 編寫拒絕策略規則時,填寫的是服務名稱,而非協議名稱;?
    • 建議先編寫拒絕策略規則,再編寫允許策略規則,以便直觀地看到相應的效果。
    # # hosts.deny This file contains access rules which are used to # deny connections to network services that either use # the tcp_wrappers library or that have been # started through a tcp_wrappers-enabled xinetd. # # The rules in this file can also be set up in # /etc/hosts.allow with a 'deny' option instead. # # See 'man 5 hosts_options' and 'man 5 hosts_access' # for information on rule syntax. # See 'man tcpd' for information on tcp_wrappers # sshd:* # # hosts.allow This file contains access rules which are used to # allow or deny connections to network services that # either use the tcp_wrappers library or that have been # started through a tcp_wrappers-enabled xinetd. # # See 'man 5 hosts_options' and 'man 5 hosts_access' # for information on rule syntax. # See 'man tcpd' for information on tcp_wrapperssshd:192.168.10. #

    禁止訪問本機 sshd 服務的所有流量(無須/etc/hosts.deny 文 件中修改原有的注釋信息),在允許策略規則文件中添加一條規則,使其放行源自 192.168.10.0/24 網段,訪 問本機 sshd 服務的所有流量。可以看到,服務器立刻就放行了訪問 sshd 服務的流量?
    ?

    [root@liruilong ~]# vim /etc/hosts.deny [root@liruilong ~]# vim /etc/hosts.allow [root@liruilong ~]#

    復習題

    .在 RHEL 7 系統中,iptables 是否已經被 firewalld 服務徹底取代?

    • 答:沒有,iptables 和 firewalld 服務均可用于 RHEL 7 系統。?

    請簡述防火墻策略規則中 DROP 和 REJECT 的不同之處。

    • 答:DROP 的動作是丟包,不響應;REJECT 是拒絕請求,同時向發送方回送拒絕信息

    如何把 iptables 服務的 INPUT 規則鏈默認策略設置為 DROP?

    • 答:執行命令 iptables -P INPUT DROP 即可。?

    怎樣編寫一條防火墻策略規則,使得 iptables 服務可以禁止源自 192.168.10.0/24 網段的流 量訪問本機的 sshd 服務(22 端口)?

    • 答:執行命令 iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j REJECT 即可。??

    請簡述 firewalld 中區域的作用。

    • 答:可以依據不同的工作場景來調用不同的 firewalld 區域,實現大量防火墻策略規則的快 速切換

    如何在 firewalld 中把默認的區域設置為 dmz?

    • 答:執行命令 firewall-cmd --set-default-zone=dmz 即可。?

    如何讓 firewalld 中以永久(Permanent)模式配置的防火墻策略規則立即生效?

    • 答:執行命令 firewall-cmd --reload。

    使用 SNAT 技術的目的是什么?

    • 答:SNAT 是一種為了解決 IP 地址匱乏而設計的技術,它可以使得多個內網中的用戶通過 同一個外網 IP 接入 Internet(互聯網)。?

    TCP Wrappers 服務分別有允許策略配置文件和拒絕策略配置文件,請問匹配順序是 怎么樣的?

    • 答:TCP Wrappers 會先依次匹配允許策略配置文件,然后再依次匹配拒絕策略配置文件, 如果都沒有匹配到,則默認放行流量。?

    第9章使用ssh服務管理遠程主機

    第9章使用ssh服務管理遠程主機

    9.1配置網絡服務

    用 nmtui 命令來配置網絡,如果服務沒有啟動,需要重新啟動。

    [root@liruilong ~]# nmtui NetworkManager is not running. [root@liruilong ~]# systemctl start NetworkManager [root@liruilong ~]# nmtui

    ?

    9.1.1配置網絡參數

    使用 Vim 編輯器將網卡配置文件中的 ONBOOT 參數修改成 yes,這樣在系統重啟后網卡就被激活了。?

    當修改完 Linux 系統中的服務配置文件后,并不會對服務程序立即產生效果。要想讓服 務程序獲取到新的配置文件,需要手動重啟相應的服務,之后就可以看到網絡暢通了:?

    9.1.2創建網絡會話

    RHEL 和 CentOS 系統默認使用 NetworkManager 來提供網絡服務,這是一種動態管理網 絡配置的守護進程,能夠讓網絡設備保持連接狀態。可以使用 nmcli 命令來管理 Network Manager 服務。nmcli 是一款基于命令行的網絡配置工具,功能豐富,參數眾多。它可以輕松 地查看網絡信息或網絡狀態:?

    • 顯示所有包括不活動連接:nmcli con show
    • 顯示所有活動連接:?nmcli con show –active
    • 顯示網絡連接配置:nmcli con show "System eth0“
    • 顯示設備狀態:nmcli dev status
    • 顯示網絡接口屬性:nmcli dev show eno16777736
    [root@liruilong ~]# nmcli con show NAME UUID TYPE DEVICE System eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0 [root@liruilong ~]# nmcli con show -active NAME UUID TYPE DEVICE System eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0 [root@liruilong ~]# nmcli con show "System eth0" connection.id: System eth0 connection.uuid: 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 connection.stable-id: -- connection.type: 802-3-ethernet

    RHEL7 系統支持網絡會話功能,允許用戶在多個配置文件中快速切換(非常類似 于 firewalld 防火墻服務中的區域技術)。如果我們在公司網絡中使用筆記本電腦時需要手動指 定網絡的 IP 地址,而回到家中則是使用 DHCP 自動分配 IP 地址。這就需要麻煩地頻繁修改 IP 地址,但是使用了網絡會話功能后一切就簡單多了—只需在不同的使用環境中激活相應 的網絡會話,就可以實現網絡配置信息的自動切換了

    以使用 nmcli 命令并按照“connection add con-name type ifname”的格式來創建網絡會 話。假設將公司網絡中的網絡會話稱之為 company,將家庭網絡中的網絡會話稱之為 house, 現在依次創建各自的網絡會話。

    # 使用con-name參數指定公司所使用的網絡會話名稱company,然后依次用ifname參數指定本機的網卡名稱,用autoconnect no參數設>置該網絡會話默認不被自動激活,以及用ip4及gw4參數手動指定網絡的IP地址: nmcli connection add con-name company ifname eno16777736 autoconnect no type ethernet ip4 192.168.10.10/24 gw4 192.168.10.1 # 使用con-name參數指定家庭所使用的網絡會話名稱house nmcli connection add con-name house type ethernet ifname eno16777736# 在成功創建網絡會話后,可以使用nmcli命令查看創建的所有網絡會話: nmcli connection show# 使用nmcli命令配置過的網絡會話是永久生效的,這樣當我們下班回家后,順手啟用house網絡會話,網卡就能自動通過DHCP獲取到IP地址了。 nmcli connection up house

    ?如果大家使用的是虛擬機,請把虛擬機系統的網卡(網絡適配器)切換成橋接模式,

    9.1.3綁定兩塊網卡

    一般來講,生產環境必須提供7×24小時的網絡傳輸服務。借助于網卡綁定技術,不僅可以提高網絡傳輸速度,更重要的是,還可以確保在其中一塊網卡出現故障時,依然可以正常提供網絡服務。

    網卡綁定的理論知識類似于前面學習的RAID硬盤組,我們需要對參與綁定的網卡設備逐個進行“初始設置”。需要注意的是,這些原本獨立的網卡設備此時需要被配置成為一塊“從屬”網卡,服務于“主”網卡,不應該再有自己的IP地址等信息。在進行了初始設置之后,它們就可以支持網卡綁定

    還需要將綁定后的設備命名為bond0并把IP地址等信息填寫進去,這樣當用戶訪問相應服務的時候,實際上就是由這兩塊網卡設備在共同提供服務

    讓Linux內核支持網卡綁定驅動。常見的網卡綁定驅動有三種模式—mode0、mode1和mode6。下面以綁定兩塊網卡為例,講解使用的情景。

    • mode0(平衡負載模式):平時兩塊網卡均工作,且自動備援,但需要在與服務器本地網卡相連的交換機設備上進行端口聚合來支持綁定技術。
    • mode1(自動備援模式):平時只有一塊網卡工作,在它故障后自動替換為另外的網卡。
    • mode6(平衡負載模式):平時兩塊網卡均工作,且自動備援,無須交換機設備提供輔助支持

    下面使用Vim文本編輯器創建一個用于網卡綁定的驅動文件,使得綁定后的bond0網卡設備能夠支持綁定技術(bonding);同時定義網卡以mode6模式進行綁定,且出現故障時自動切換的時間為100毫秒。

    內核模塊是可以按需加載或卸載的內核代碼,可以不重啟系統就擴充內核的功能。使用 /etc/modprobe.d/中的文件:要通過配置文件傳遞參數,在?/etc/modprobe.d/?中放入任意名稱?.conf?文件

    [root@liruilong ~]# ls /etc/modprobe.d/ blacklist-nouveau.conf disable_ipv6.conf mlx4.conf tuned.conf dccp-blacklist.conf firewalld-sysctls.conf truescale.conf alias bond0 bonding options bond0 miimon=100 mode=6

    重啟網絡服務后網卡綁定操作即可成功。正常情況下只有bond0網卡設備才會有IP地址等信息:?systemctl restart network

    9.2遠程控制服務.

    SSH(Secure Shell)是一種能夠以安全的方式提供遠程登錄的協議,也是目前遠程管理Linux系統的首選方式。

    想要使用SSH協議來遠程管理Linux系統,則需要部署配置sshd服務程序。sshd是基于SSH協議開發的一款遠程管理服務程序,不僅使用起來方便快捷,而且能夠提供兩種安全驗證的方法:

    • 基于口令的驗證—用賬戶和密碼來驗證登錄;
    • 基于密鑰的驗證—需要在本地生成密鑰對,然后把密鑰對中的公鑰上傳至服務器,并與服務器中的公鑰進行比較;該方式相較來說更安全。

    9.2.1 配置sshd服務

    sshd服務的配置信息保存在/etc/ssh/sshd_config文件中。運維人員一般會把保存著最主要配置信息的文件稱為主配置文件,而配置文件中有許多以井號開頭的注釋行,要想讓這些配置參數生效,需要在修改參數后再去掉前面的井號。sshd服務配置文件中包含的重要參數如表9-1所示。

    如果禁止以root管理員的身份遠程登錄到服務器,則可以大大降低被黑客暴力破解密碼的幾率。下面進行相應配置。首先使用Vim文本編輯器打開sshd服務的主配置文件,然后把第48行#PermitRootLogin yes參數前的井號(#)去掉,并把參數值yes改成no,這樣就不再允許root管理員遠程登錄了。記得最后保存文件并退出。

    9.2.2安全密鑰驗證

    密是對信息進行編碼和解碼的技術,它通過一定的算法(密鑰)將原本可以直接閱讀的明文信息轉換成密文形式。密鑰即是密文的鑰匙,有私鑰和公鑰之分。在傳輸數據時,如果擔心被他人監聽或截獲,就可以在傳輸前先使用公鑰對數據加密處理,然后再行傳送。這樣,只有掌握私鑰的用戶才能解密這段數據,除此之外的其他人即便截獲了數據,一般也很難將其破譯為明文信息。

    9.2.3遠程傳輸命令

    scp(secure copy)是一個基于SSH協議在網絡之間進行安全傳輸的命令,其格式為“scp [參數] 本地文件遠程帳戶@遠程IP地址:遠程目錄”。

    scp不僅能夠通過網絡傳送數據,而且所有的數據都將進行加密處理。例如,如果想把一些文件通過網絡從一臺主機傳遞到其他主機,這兩臺主機又恰巧是Linux系統,這時使用scp命令就可以輕松完成文件的傳遞了。

    類似于putty的上傳下載,windows到linux的遠程傳輸

    9.3不間斷會話服務

    screen是一款能夠實現多窗口遠程控制的開源服務程序,簡單來說就是為了解決網絡異常中斷或為了同時控制多個遠程終端窗口而設計的程序。用戶還可以使用screen服務程序同時在多個遠程會話中自由切換,能夠做到實現如下功能

    • 會話恢復:即便網絡中斷,也可讓會話隨時恢復,確保用戶不會失去對遠程會話的控制。
    • 多窗口:每個會話都是獨立運行的,擁有各自獨立的輸入輸出終端窗口,終端窗口內顯示過的信息也將被分開隔離保存,以便下次使用時依然能看到之前的操作記錄。
    • 會話共享:當多個用戶同時登錄到遠程服務器時,便可以使用會話共享功能讓用戶之間的輸入輸出信息共享。

    9.3.1管理遠程會話

    screen命令能做的事情非常多:可以用-S參數創建會話窗口;用-d參數將指定會話進行離線處理;用-r參數回復指定會話;用-x參數一次性恢復所有的會話;用-ls參數顯示當前已有的會話;以及用-wipe參數把目前無法使用的會話刪除,等等。

    9.3.2會話共享功能

    creen命令不僅可以確保用戶在極端情況下也不丟失對系統的遠程控制,保證了生產環境中遠程工作的不間斷性,而且它還具有會話共享、分屏切割、會話鎖定等實用的功能。其中,會話共享功能是一件很酷的事情,當多個用戶同時控制主機的時候,它可以把屏幕內容共享出來,也就是說每個用戶都可以看到相同的內容。

    復習題

    • 1.在Linux系統中有多種方法可以配置網絡參數,請列舉幾種。答:配置網卡參數可以使用nmtui命令、nmcli命令或者直接編輯網卡配置文件來實現對網卡參數的修改。
    • 2.在RHEL 7系統中使用網卡會話技術的目的是什么?答:使用nmcli命令來管理網卡會話的目的是為了快速切換網卡參數,以便適應不同的工作場景。
    • 3.請簡述網卡綁定技術mode6模式的特點。答:平時兩塊網卡均工作,且自動備援,無須交換機設備提供輔助支持。
    • 4.在Linux系統中,當通過修改其配置文件中的參數來配置服務程序時,若想要讓新配置的參數生效,還需要執行什么操作?答:需要重新啟動相關的服務程序,或讓服務程序重新加載配置文件,或重啟系統。
    • 5.sshd服務的口令驗證與密鑰驗證方式,哪個更安全?答:一般情況下,密鑰驗證方式更加安全。若用戶若認證有更高的安全需求,還可以再對密鑰文件進行口令加密,從而實現雙重加密。
    • 6.想要把本地文件/root/out.txt傳送到地址為192.168.10.20的遠程主機的/home目錄下,且本地主機與遠程主機均為Linux系統,最為簡便的傳送方式是什么?答:執行命令scp /root/out.txt root@192.168.10.20:/home,并在進行口令驗證后即可開始傳送。
    • 7.請簡述配置Yum倉庫的步驟。答:首先應該創建掛載目錄并把光盤鏡像文件與其關聯,然后修改Yu m的配置文件,填寫入相關參數,尤其需要注意掛載目錄的存放路徑要正確無誤,最后便可使用Yu m命令來安裝相關的服務程序了。
    • 8. screen服務程序能夠讓用戶實現遠程控制的不間斷會話服務,即便網絡發生中斷也不丟失對遠程主機的會話控制。那么,當想要恢復到一個名為linux的會話窗口時,應該怎么做呢?答:執行命令screen -r linux即可恢復到這個會話窗口中。

    第10章使用Apache服務部署靜態網站

    10.1網站服務程序

    10.2配置服務文件參數

    10.3 SELinux安全子系統

    10.3.1 semanage命令

    10.4個人用戶主頁功能

    10.5虛擬主機功能

    10.5.1基于IP地址

    10.5.2基于主機域名

    10.5.3基于端口號

    10.6 Apache的i問控制習題

    第11章使用vsftpd服務傳輸文件

    11.1文件傳輸協議

    FTP 是一種在互聯網中進行文件傳輸的協議,基于客戶端/服務器模式,默認使用 20、21 號端口。

    其中端口 20(數據端口)用于進行數據傳輸,端口 21(命令端口)用于接受客戶端 發出的相關 FTP 命令與參數

    FTP 服務器普遍部署于內網中,具有容易搭建、方便管理的特 點。而且有些 FTP 客戶端工具還可以支持文件的多點下載以及斷點續傳技術,因此 FTP 服務 得到了廣大用戶的青睞。FTP 協議的傳輸拓撲。

    • FTP 服務器是按照 FTP 協議在互聯網上提供文件存儲和訪問服務的主機,
    • FTP 客戶端則是向服務器發送連接請求,以建立數據傳輸鏈路的主機。

    FTP 協議有下面兩種工作模式。

    • 主動模式:FTP 服務器主動向客戶端發起連接請求。
    • 被動模式:FTP 服務器等待客戶端發起連接請求(FTP 的默認工作模式)

    防火墻一般是用于過濾從外網進入內網的流 量,因此有些時候需要將 FTP 的工作模式設置為主動模式,才可以傳輸數據。

    vsftpd(very secure ftp daemon,非常安全的 FTP 守護進程是一款運行在 Linux 操作系 統上的 FTP 服務程序,不僅完全開源而且免費,此外,還具有很高的安全性、傳輸速度,以 及支持虛擬用戶驗證等其他 FTP 服務程序不具備的特點

    grep 命令后面添加-v 參數,過濾并反選出沒有包含井號(#)的參 數行(即過濾掉所有的注釋信息),然后將過濾后的參數行通過輸出重定向符寫回原始的主配 置文件中:

    [root@liruilong ~]# [root@liruilong ~]# iptables -F [root@liruilong ~]# service iptables save The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl. [root@liruilong ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak [root@liruilong ~]# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf [root@liruilong ~]# cat /etc/vsftpd/vsftpd.conf anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YESpam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES [root@liruilong ~]#

    11.2 vsftpd服務程序

    vsftpd 作為更加安全的文件傳輸的服務程序,允許用戶以三種認證模式登錄到 FTP 服務 器上。

    • 匿名開放模式:是一種最不安全的認證模式,任何人都可以無需密碼驗證而直接登錄 到 FTP 服務器。
    • ?本地用戶模式:是通過 Linux 系統本地的賬戶密碼信息進行認證的模式,相較于匿名 開放模式更安全,而且配置起來也很簡單。但是如果被黑客破解了賬戶的信息,就可 以暢通無阻地登錄 FTP 服務器,從而完全控制整臺服務器。
    • ?虛擬用戶模式:是這三種模式中最安全的一種認證模式,它需要為 FTP 服務單獨 建立用戶數據庫文件,虛擬出用來進行口令驗證的賬戶信息,而這些賬戶信息在 服務器系統中實際上是不存在的,僅供 FTP 服務程序進行認證使用。這樣,即使 黑客破解了賬戶信息也無法登錄服務器,從而有效降低了破壞范圍和影響。

    ftp 是 Linux 系統中以命令行界面的方式來管理 FTP 傳輸服務的客戶端工具。我們首先手 動安裝這個 ftp 客戶端工具,以便在后續實驗中查看結果

    yum install ftp

    11.2.1匿名開放模式

    [root@liruilong ~]# systemctl restart vsftpd [root@liruilong ~]# systemctl enable vsftpd Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service. [root@liruilong ~]# ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service' ln: failed to create symbolic link ‘/etc/systemd/system/multi-user.target.wants/vsftpd.service’: File exists [root@liruilong ~]# systemctl start vsftpd.service [root@liruilong ~]# systemctl status vsftpd.service ● vsftpd.service - Vsftpd ftp daemonLoaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)Active: active (running) since Wed 2020-10-28 19:47:49 CST; 12min agoMain PID: 21698 (vsftpd)CGroup: /system.slice/vsftpd.service└─21698 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.confOct 28 19:47:49 liruilong systemd[1]: Starting Vsftpd ftp daemon... Oct 28 19:47:49 liruilong systemd[1]: Started Vsftpd ftp daemon. [root@liruilong ~]#

    [root@liruilong ~]# ftp 127.0.0.1 Connected to 127.0.0.1 (127.0.0.1). 220 (vsFTPd 3.0.2) Name (127.0.0.1:root): anonymous 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>

    11.2.2本地用戶模式

    11.2.3虛擬用戶模式

    我們最后講解的虛擬用戶模式是這三種模式中最安全的一種認證模式,當然,因為安全 性較之于前面兩種模式有了提升,所以配置流程也會稍微復雜一些。

    1.創建用于進行 FTP 認證的用戶數據庫文件,其中奇數行為賬戶名,偶數行為密 碼。例如,我們分別創建出 zhangsan 和 lisi 兩個用戶,密碼均為 redhat:

    [root@liruilong ~]# vim /etc/vsftpd/vuser.list [root@liruilong ~]#

    ?要使 用 db_load 命令用哈希(hash)算法將原始的明文信息文件轉換成數據庫文件,并且降低 數據庫文件的權限(避免其他人看到數據庫文件的內容),然后再把原始的明文信息文件 刪除

    [root@liruilong vsftpd]# db_load -T -t hash -f vuser.list vuser.db [root@liruilong vsftpd]# file vuser.db vuser.db: Berkeley DB (Hash, version 9, native byte-order) [root@liruilong vsftpd]# chmod 600 vuser.db [root@liruilong vsftpd]# rm -f vuser.list [root@liruilong vsftpd]#

    第2步:創建 vsftpd 服務程序用于存儲文件的根目錄以及虛擬用戶映射的系統本地 用戶。FTP 服務用于存儲文件的根目錄指的是,當虛擬用戶登錄后所訪問的默認位置。

    由于 Linux 系統中的每一個文件都有所有者、所屬組屬性,例如使用虛擬賬戶“張三” 新建了一個文件,但是系統中找不到賬戶“張三”,就會導致這個文件的權限出現錯誤。為此, 需要再創建一個可以映射到虛擬用戶的系統本地用戶。簡單來說,就是讓虛擬用戶默認登錄 到與之有映射關系的這個系統本地用戶的家目錄中,虛擬用戶創建的文件的屬性也都歸屬于 這個系統本地用戶,從而避免 Linux 系統無法處理虛擬用戶所創建文件的屬性權限。

    [root@liruilong vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual [root@liruilong vsftpd]# ls -ld /var/ftproot drwx------ 2 virtual virtual 4096 Oct 31 13:33 /var/ftproot [root@liruilong vsftpd]#

    第3步:建立用于支持虛擬用戶的 PAM 文件。

    PAM(可插拔認證模塊)是一種認證機制,通過一些動態鏈接庫和統一的 API 把系統提供的服務與認證方式分開,使得系統管理員可以根據需求靈活調整服務程序的不同認證方式。

    通俗來講,PAM 是一組安全機制的模塊,系統管理員可以用來輕易地調整服務程序的認 證方式,而不必對應用程序進行任何修改。PAM 采取了分層設計(應用程序層、應用接口層、 鑒別模塊層)的思想

    新建一個用于虛擬用戶認證的 PAM 文件 vsftpd.vu,其中 PAM 文件內的“db=”參數為 使用 db_load 命令生成的賬戶密碼數據庫文件的路徑,但不用寫數據庫文件的后綴:

    auth required pam_userdb.so db=/etc/vsftpd/vuser account requierd pam_userdb.db=/etc/vsftpd/vuser

    ?第4步:在 vsftpd 服務程序的主配置文件中通過 pam_service_name 參數將 PAM 認證 文件的名稱修改為 vsftpd.vu,PAM 作為應用程序層與鑒別模塊層的連接紐帶,可以讓應用程 序根據需求靈活地在自身插入所需的鑒別功能模塊。當應用程序需要 PAM 認證時,則需要在 應用程序中定義負責認證的 PAM 配置文件,實現所需的認證功能。

    在 vsftpd 服務程序的主配置文件中默認就帶有參數 pam_service_name=vsftpd,表 示登錄 FTP 服務器時是根據/etc/pam.d/vsftpd 文件進行安全認證的。現在我們要做的就是把 vsftpd 主配置文件中原有的 PAM 認證文件 vsftpd 修改為新建的 vsftpd.vu 文件即可

    anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YESguest_enable=YES guest_username=virtual pam_service_name=vsftpd.vn allow_writeable_chroot=YES userlist_enable=YES tcp_wrappers=YES ~

    ?第5步:為虛擬用戶設置不同的權限。雖然賬戶 zhangsan 和 lisi 都是用于 vsftpd 服務程 序認證的虛擬賬戶,但是我們依然想對這兩人進行區別對待。比如,允許張三上傳、創建、 修改、查看、刪除文件,只允許李四查看文件。這可以通過 vsftpd 服務程序來實現。只需新 建一個目錄,在里面分別創建兩個以 zhangsan 和 lisi 命名的文件,其中在名為 zhangsan 的文 件中寫入允許的相關權限(使用匿名用戶的參數):

    11.3簡單文件傳輸協議

    簡單文件傳輸協議(Trivial File Transfer Protocol,TFTP)是一種基于 UDP 協議在客戶端 和服務器之間進行簡單文件傳輸的協議。顧名思義,它提供不復雜、開銷不大的文件傳輸服 務(可將其當作 FTP 協議的簡化版本)。

    TFTP 的命令功能不如 FTP 服務強大,甚至不能遍歷目錄,在安全性方面也弱于 FTP 服務。而且,由于 TFTP 在傳輸文件時采用的是 UDP 協議,占用的端口號為 69,因此 文件的傳輸過程也不像 FTP 協議那樣可靠。但是,因為 TFTP 不需要客戶端的權限認證, 也就減少了無謂的系統和網絡帶寬消耗,因此在傳輸瑣碎(trivial)不大的文件時,效率 更高。

    在 RHEL 7 系統中,TFTP 服務是使用 xinetd 服務程序來管理的。xinetd 服務可以用來管理 多種輕量級的網絡服務,而且具有強大的日志功能。簡單來說,在安裝 TFTP 軟件包后,還需 要在 xinetd 服務程序中將其開啟,把默認的禁用(disable)參數修改為 no:

    1.簡述 FTP 協議的功能作用以及所占用的端口號。

    答:FTP 是一種在互聯網中進行文件傳輸的協議,默認使用 20、21 號端口,其中端口 20 (數據端口)用于進行數據傳輸,端口 21(命令端口)用于接受客戶端發起的相關 FTP 命 令與參數。

    2.vsftpd 服務程序提供的三種用戶認證模式各自有什么特點?

    答:匿名開放模式是任何人都可以無需密碼認證即可直接登錄到 FTP 服務器的驗證方式; 本地用戶模式是通過系統本地的賬戶密碼信息登錄到 FTP 服務器的認證方式;虛擬用戶 模式是通過創建獨立的 FTP 用戶數據庫文件來進行認證并登錄到 FTP 服務器的認證方式, 相較來說它也是最安全的認證模式。

    3. 使用匿名開放模式登錄到一臺用 vsftpd 服務程序部署的 FTP 服務器上時,默認的 FTP 根 目錄是什么?

    答:使用匿名開放模式登錄后的 FTP 根目錄是/var/ftp 目錄,該目錄內默認還會有一個名 為 pub 的子目錄。

    4.簡述 PAM 的功能作用。

    答:PAM 是一組安全機制的模塊(插件),系統管理員可以用來輕易地調整服務程序的認 證方式,而不必對應用程序進行過多修改。

    5.使用虛擬用戶模式登錄 FTP 服務器的所有用戶的權限都是一樣的嗎?

    答:不一定,可以通過分別定義用戶權限文件來為每一位用戶設置不同的權限。

    6.TFTP 協議與 FTP 協議有什么不同?

    答:TFTP 協議提供不復雜、開銷不大的文件傳輸服務(可將其當作 FTP 協議的簡化版本)。

    第12章使用Samba或NFS實現文件共享

    1987 年,微軟公司和英特爾公司共同制定了 SMB(Server Messages Block,服務器消息 塊)協議,旨在解決局域網內的文件或打印機等資源的共享問題,這也使得在多個主機之間 共享文件變得越來越簡單。

    12.1 Samba文件共享

    Samba 服務程序的配置方法與之前講解的很多服務的配置方法類似,首先需要先通過 Yum 軟件倉庫來安裝 Samba 服務程序

    [root@liruilong ~]# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak [root@liruilong ~]# ls 1.mp4 3.mp4 applog demo-0.0.1-SNAPSHOT.jar redis-5.0.7 2.mp4 apache-tomcat-9.0.21.tar.gz demo nohup.out redis-5.0.7.tar.gz [root@liruilong ~]# cat /etc/samba/smb.conf.bak | grep -v "#" | grep -v ";" | grep -v "^$" > /etc/sa samba/ sasl2/ [root@liruilong ~]# cat /etc/samba/smb.conf.bak | grep -v "#" | grep -v ";" | grep -v "^$" > /etc/samba/smb.conf [root@liruilong ~]# ls 1.mp4 3.mp4 applog demo-0.0.1-SNAPSHOT.jar redis-5.0.7 2.mp4 apache-tomcat-9.0.21.tar.gz demo nohup.out redis-5.0.7.tar.gz [root@liruilong ~]# cd /etc/samba/ [root@liruilong samba]# ls lmhosts smb.conf smb.conf.bak smb.conf.example [root@liruilong samba]#

    ?

    第1步:創建用于訪問共享資源的賬戶信息。在 RHEL 7 系統中,Samba 服務程序默認 使用的是用戶口令認證模式(user)。這種認證模式可以確保僅讓有密碼且受信任的用戶訪問 共享資源,而且驗證過程也十分簡單。不過,只有建立賬戶信息數據庫之后,才能使用用戶 口令認證模式。另外,Samba 服務程序的數據庫要求賬戶必須在當前系統中已經存在,否則 日后創建文件時將導致文件的權限屬性混亂不堪

    pdbedit 命令用于管理 SMB 服務程序的賬戶信息數據庫,格式為“pdbedit [選項] 賬戶”。 在第一次把賬戶信息寫入到數據庫時需要使用-a 參數,以后在執行修改密碼、刪除賬戶等操 作時就不再需要該參數了。

    [root@liruilong samba]# id root uid=0(root) gid=0(root) groups=0(root) [root@liruilong samba]# pdbedit -a -u root new password: retype new password: Unix username: root NT username: Account Flags: [U ] User SID: S-1-5-21-1487495890-3169242684-2109286927-1000 Primary Group SID: S-1-5-21-1487495890-3169242684-2109286927-513 Full Name: root Home Directory: \\liruilong\root HomeDir Drive: Logon Script: Profile Path: \\liruilong\root\profile Domain: LIRUILONG Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: Wed, 06 Feb 2036 23:06:39 CST Kickoff time: Wed, 06 Feb 2036 23:06:39 CST Password last set: Sat, 31 Oct 2020 15:06:10 CST Password can change: Sat, 31 Oct 2020 15:06:10 CST Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

    第2步:創建用于共享資源的文件目錄。在創建時,不僅要考慮到文件讀寫權限的問題, 而且由于/home 目錄是系統中普通用戶的家目錄,因此還需要考慮應用于該目錄的 SELinux 安全 上下文所帶來的限制。在前面對 Samba 服務程序配置文件中的注釋信息進行過濾時,這些過 濾的信息中就有關于 SELinux 安全上下文策略的說明,我們只需按照過濾信息中有關 SELinux 安全上下文策略中的說明中給的值進行修改即可。修改完畢后執行 restorecon 命令,讓應用于 目錄的新 SELinux 安全上下文立即生效。

    [root@liruilong ~]# mkdir /home/database [root@liruilong ~]# chown -Rf root:root /home/database/ [root@liruilong ~]# restorecon -Rv /home/database/

    ?第3步:設置 SELinux 服務與策略,使其允許通過 Samba 服務程序訪問普通用戶家目錄。 執行 getsebool 命令,篩選出所有與 Samba 服務程序相關的 SELinux 域策略,根據策略的名稱 (和經驗)選擇出正確的策略條目進行開啟即可:

    第4步:在 Samba 服務程序的主配置文件中,根據表 12-2 所提到的格式寫入共享信息。 在原始的配置文件中,[homes]參數為來訪用戶的家目錄共享信息,[printers]參數為共享的打 印機設備。這兩項如果在今后的工作中不需要,可以像劉遄老師一樣手動刪除,這沒有任何 問題。

    12.1.1配置共享盜源

    12.1.2 Windows訪問文件共享服務

    12.1.3 Linux訪問文件共享服務

    12.2 NFS (網絡文件系統)

    12.3 autofs自動掛載服務

    復習題

    嗯。越看越亂,后面的感覺不太適合照著書上敲,全是問題,這本書就看到這里了,有時間在看剩下的,總體來講,是不錯的一本書,通俗易懂。適合小白學習? ?2020.10.31

    總結

    以上是生活随笔為你收集整理的《Linux就该这么学》读书笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

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