跟運維學 Linux

2023-07-17 12:00:46

跟運維學 Linux - 01

運維的誕生

運維工程師有很多叫法:系統運維、Linux 工程師、系統管理員...

網管可以說是運維工程師最早的雛形。在個人電腦未普及時,大家去網咖玩遊戲。

玩家:「閘道器,我的電腦上不了網了」

網管負責維修電腦、維修系統、維護網路裝置...

網際網路的發展

現在大家在家裡上網、用手機上網、在公司上網、網咖上網

在網上玩遊戲、看新聞、炒股、上課、購物等等

背後是無數的伺服器(據說80%是linux)支撐著網際網路應用,運維工程師則拿著高薪維護著這些伺服器

伺服器 vs 個人電腦

伺服器和個人電腦都是計算機。個人電腦主要服務1人,而伺服器通常服務多人,所以需要更快的速度,需要全年不間斷的執行,而且穩定有時比速度更重要。

Tip:緊急時刻甚至可以把個人電腦也加入伺服器叢集中,臨時充當伺服器。

伺服器的好搭檔 Linux

伺服器就是計算機,需要作業系統才能執行。如果伺服器的硬體很穩定,但作業系統容易出問題,其上的應用也會被拖累,無數的客戶就會投訴。

linux 穩定、開源、可客製化。

有了 linux 的伺服器,其上的應用再也不會輕易被拖累了。

作業系統是怎麼回事

計算機包含主機板、cpu、記憶體、磁碟、鍵盤等硬體,真正幹活的就是他們。

人不能直接和這些硬體溝通並指揮它們幹活,所以才誕生了作業系統。

作業系統就是人和計算機硬體的橋樑。

比如要檢視某個記事本:

  1. 使用者通過滑鼠點選檔案,通過 i/o 傳給作業系統
  2. 作業系統指揮cpu在硬碟搜尋檔案地址
  3. 存取檔案內容並存入記憶體
  4. CPU告訴作業系統,最終顯示到顯示器

產品和生產環境

企業要賺錢,產品就是核心,比如網站就是產品,就網站數量在全球有上億。

現在開發產品比以前容易,以前產品可能得從0開始,現在可能找一個類似的,稍微改點東西,就是自己的一個產品。

而產品必須跑在一個平臺上,這個平臺就是生產環境

生產環境中除了有產品核心程式碼,還包含許多伺服器,伺服器中的Linux系統,還有防火牆...

產品由程式設計師開發,而生產環境就由運維工程師建設和維護。

伺服器型別

一般伺服器分為:機架式伺服器(出場頻率最高)、塔式伺服器(和家用臺式電腦外觀類似,通常放在辦公室給內部員工使用)、刀鋒伺服器(向刀片一樣整齊排列,很昂貴,十幾萬到幾十萬,上場機會少)。

機架式伺服器就是可以放在機架上的伺服器,這個機櫃上有刻度,刻度可以表示伺服器的高度。這個刻度,有一個標準單位叫 U,1U=4.445釐米,比如1U伺服器、2U伺服器(高度是1U伺服器的兩倍)、4U伺服器。

機架伺服器:

IDC和運維

伺服器通常會託管在一個叫 網際網路資料中心(簡稱 idc) 的地方。

idc 會給企業提供機房、機架、電源、頻寬等服務。

idc 維護人員只負責硬體,比如伺服器的硬碟壞了,可以遠端讓其更換,而伺服器中更高階的問題,比如linux系統和上面執行的應用,就是運維的工作

虛擬化和虛擬機器器

比如手上有一臺windows的電腦,現在我要學習 linux,不想把windows系統換成 linux,也沒錢在買一臺電腦,這時,我可以安裝一個虛擬機器器軟體,在該軟體上在安裝 linux。

知道了虛擬機器器,現在說一下虛擬化。

虛擬化是虛擬機器器的底層實現。

一臺電腦,其上的物理資源(cpu 4 核、8G 記憶體、2T 硬碟、頻寬10M)就這麼多,可以用建立多個虛擬機器器,比如01虛擬機器器分配20%資源、02虛擬機器器分配30%資源...

Tip:如果工作中有條件,儘量優先使用linux伺服器進行學習。如果沒有,可以使用 VirtualBox。

Linux 版本和 linux 核心

linux 發行版有很多,比如 centos Linux、Redhat Linux、Ubuntu Linux、Debian、

linux 除了表示發行版,還可以表示 Linux 核心。所有 linux 發行版,都是基於 linux 核心構建的。

通常來說,大多數 Linux 發行版都會使用最新穩定版本的 Linux 核心,並根據自身需求進行設定。這意味著雖然核心版本相同,但不同的發行版可能會有不同的核心選項、模組和修補程式。

核心是一個比較抽象的東西,可以理解成 linux 最核心部分,可理解成底層的驅動,最靠近硬體的部分,由成百上千萬行程式碼組成。前文我們也說到,計算機真正幹活的就是硬體,人得通過作業系統才能指揮硬體幹活。

Red Hat 是非常知名且被廣泛使用的 Linux 發行版之一。Redhat 是個系列,其中Redhat的企業版經克隆後,變成社群免費版本Centos

Tip:核心的主要功能包括:

  • 硬體管理:Linux 核心負責管理計算機硬體資源,包括處理器、記憶體、硬碟、網路介面等。它與這些硬體裝置進行通訊,併為應用程式提供存取硬體的介面。
  • 程序管理:核心控制和管理執行在系統上的各個程序。它分配和回收程序的資源,排程程序的執行順序,以及提供程序間通訊的機制。
  • 檔案系統管理:核心提供檔案系統的支援,包括檔案的建立、讀取、寫入和刪除操作。它負責將資料儲存到磁碟上,並提供檔案的存取和保護機制。
  • 裝置驅動程式:核心包含了各種裝置驅動程式,使得作業系統能夠與硬體裝置進行通訊。這些驅動程式充當了作業系統與硬體之間的橋樑,使其能夠正確地使用和控制硬體裝置。
  • 網路支援:Linux 核心具有強大的網路功能,包括網路協定棧、IP 路由、網路裝置驅動程式等。它能夠實現網路通訊、資料傳輸和網路安全等功能。

命令列登入伺服器

現在有了 linux 伺服器,接下來我們就得登入。

通常伺服器不在身邊,而且大多數企業中的 linux 伺服器都強制去除圖形桌面,只有命令列

這裡筆者使用 mobaxterm 遠端登入伺服器。

Tip:在 windows 上使用 Git Bash 也可以登入。就像這樣:

Administrator@K-10 MINGW64 ~/Desktop
$ ssh [email protected]
[email protected]'s password:
Welcome to Kylin V10 (GNU/Linux ... x86_64)

 * Management:     http://www.kylinos.cn/ * Support:        http://www.kylinos.cn/service.aspx
Last login: Thu Jul 13 11:22:26 2023 from 192.168.1.35
demo@demo-pc:~$ whoami
demo
demo@demo-pc:~$

第一個命令 ls

登入伺服器後,進入命令列。所謂命令列,也就是命令。

第一步我們得通過命令知道有什麼內容。

第一個命令是 ls(list),列表的意思,用於顯示當前目錄下檔案和資料夾。請看範例:

// 檢視當前目錄的檔案和資料夾
pj@pj-pc:~/command$ ls
a2.txt  a3.txt  a4.txt  a5.txt  a6.txt  dir2  test

如何判斷哪個是檔案,哪些是目錄。

一種方法是通過顏色,在筆者這裡,比如檔案 a2.txt 是白色,目錄 dir2 是藍色

也可以通過 ls 目錄/檔案,如果是目錄則顯示其中的內容,如果是檔案,則顯示該檔案。就像這樣:

// ls 目錄
pj@pj-pc:~/command$ ls dir2
a.txt

// ls 檔案
pj@pj-pc:~/command$ ls a2.txt
a2.txt

ls -l

上面我們通過顏色來粗略判斷是檔案還是資料夾,我們需要檢視檔案更詳細資訊的方法。

檢視一個檔案有哪些屬性,可以使用 ls -l

pj@pj-pc:~/command$ ls -l
總用量 8
-rw-rw-r-- 1 pj pj    0 7月  11 18:36 a2.txt
-rw-rw-r-- 1 pj pj    0 7月  11 18:36 a3.txt
-rw-rw-r-- 1 pj pj    0 7月  11 18:36 a4.txt
-rw-rw-r-- 1 pj pj    0 7月  11 18:36 a5.txt
-rw-rw-r-- 1 pj pj    0 7月  11 18:36 a6.txt
drwxrwxr-x 2 pj pj 4096 7月  11 16:50 dir2
-rw-rw-r-- 1 pj pj   45 7月  11 19:38 test

絕大多數linux 命令都支援引數,比如 ls -l,不但列出所有檔案,還列出所有檔案的屬性。一個檔案佔一行。

請看第一列的最左側:- 表示普通檔案、d代表目錄。

-rw-rw-r--
-rw-rw-r--
-rw-rw-r--
-rw-rw-r--
-rw-rw-r--
drwxrwxr-x
-rw-rw-r--

其他屬性,例如rw-rw-r--是什麼意思?後續學到相應的知識點在解釋。

檢視檔案內容

分清楚哪個是檔案,哪個是資料夾後,現在我們需要檢視檔案內容。

請看操作:

// cat - 一次性將內容輸出
pj@pj-pc:~/command$ cat a2.txt
111
222
333
444
555
666
777
888
999
10
11
12
// head - 預設顯示檔案頭部10行
pj@pj-pc:~/command$ head a2.txt
111
222
333
444
555
666
777
888
999
10
// tail - 預設顯示檔案尾部10行
pj@pj-pc:~/command$ tail a2.txt
333
444
555
666
777
888
999
10
11
12

cat 命令 - 一次性將內容輸出
head 命令 - 預設顯示檔案頭部10行
tail 命令 - 預設顯示檔案尾部10行

head 和 tail 預設是10條資料,我們可以通過引數修改,比如顯示2條:

pj@pj-pc:~/command$ head -n 2 a2.txt
111
222
pj@pj-pc:~/command$ tail -n 2 a2.txt
11
12

如果檔案內容很長,使用cat一次性輸出,還得捲動查詢,不是很方便,如果檔案內容過長,由於終端快取有限,可能檔案前頭的內容會被覆蓋。這時可以使用 less 命令,用法如下:

// less 長檔案
$ less /var/log/syslog

進入 less 顯示介面後,需要一些按鍵控制:

  • 空格 下一頁
  • b 上一頁
  • 上下鍵是上一行或下一行
  • q 退出

檔案位置

在windows中,如果要查詢某個檔案,直接使用滑鼠,先進入我的電腦,然後選擇D槽或E槽,然後依次點選。

而在 linux 伺服器中,滑鼠圖形介面都與我們無緣,一切得靠命令來操作。

首先通過 pwd 命令確定我們此刻的路徑:

test11@test11-pc:~$ pwd
/home/test11

Tip:在linux 中,不管是root使用者還是普通使用者,登入後預設都會處在自己的家目錄中(筆者使用 test11 使用者登入)。所謂家目錄,也就是回家了,進入到自己的檔案中。這種登入後進入家目錄的方式是可以改變的,後面學習 linux 賬號管理時,會了解。

通過 ls 檢視當前目錄中的內容,並通過 cd 進入某目錄:

test11@test11-pc:~$ ls
模板  桌面  a.txt  dir1
test11@test11-pc:~$ cd dir1
test11@test11-pc:~/dir1$ ls
test11@test11-pc:~/dir1$

通過 cd .. 可以回到上一層目錄:

test11@pj-pc:~$ cd dir1
test11@pj-pc:~/dir1$ cd ..
test11@pj-pc:~$ pwd
/home/test11

只輸入 cd + 回車會進入家目錄:

test11@pj-pc:~$ cd /var/log
// 進入家目錄
test11@pj-pc:/var/log$ cd
test11@pj-pc:~$ pwd
/home/test11

cd ~ 也能回到家目錄:

test11@test11-pc:~/dir1$ cd ~
test11@test11-pc:~$ pwd
/home/test11

快捷鍵

繼續學習之前介紹幾個常用的快捷鍵。

  • Tab 鍵用於命令和路徑的提示或補全

比如我要輸入 history 命令,但我只記得第一個字母,可以輸入 h 後,按2次Tab,終端會將 h 開頭的所有命令羅列:

test11@pj-pc:~$ h
h2ph                   hciattach              head                   helpztags              history                hostname               htseupdate
h2xs                   hciconfig              hedron-client          hex2hcd                host                   hostnamectl            httpserv
...

輸入 his 後,由於可以確定是 hisotry,按一次 Tab 就能自動補全。

輸入路徑時也能提示或補全:

test11@pj-pc:~$ cd /var/lo
local/ lock/  log/
  • ctrl + l 清空終端(或clear 命令)

  • ctrl + c 用於取消命令

比如我輸入top命令,不想要了,可以通過 ctrl + c 取消:

test11@pj-pc:~$ top^C
test11@pj-pc:~$

即使一個命令正在執行,例如 top,也可以通過 ctrl + c 將其取消。

  • ctrl + R 逆向查詢歷史命令

剛才輸入一個很長的命令,通過上下箭頭一個一個的查詢太累,可以通過 ctrl + R 逆向查詢。

// 為了測試顯示歷史命令
test11@jingjia-pc:~$ history
    1  ls
    2  cd
    3  ls
    4  mkdir dir1
    5  touch a.txt
    6  cd
    7  pwd
    8  ls
    9  cd dir1
   10  ls
   11  cd ~
   12  pwd
   13  cd dir1
   14  cd ..
   15  pwd
   16  cd /var/log
   17  cd
   18  pwd
   19  ll
   20  cd
   21
   22  hipercdecode
   23  cd /var/lo
   24  clear
   25*
   26  history

通過快捷鍵調出逆向查詢介面:

test11@jingjia-pc:~$
(reverse-i-search)`':

輸入 h 顯示最近匹配的命令

test11@jingjia-pc:~$
(reverse-i-search)`h': history

再次輸入 ctrl + r 則逆向查詢:

test11@jingjia-pc:~$
(reverse-i-search)`h': hipercdecode

確定命令後通過回車執行。

可通過 ctrl + c 退出。