Linux入門詳解


Linux基礎知識

Linux&Unix

​ 說起Linux,就不得不提Unix操作系統。

Unix系統號稱世界上最穩定的系統,就連蘋果公司也從中獲取靈感開發出了移動端大名鼎鼎的IOS

Unix操作系統有一個特點即為多用戶多任務,同一時刻允許多個用戶同時使用該系統且互不干擾。

Linux的全稱為GNU/Linux,內核於1991年10月5日首次發布,是基於Unix系統開發而來的。

​ 它的基本思想是一切皆文件,其描述如下:

每個文件都有確定的用途。其中第一條詳細來講就是系統中的所有都歸結為一個文件,包括命令硬件軟件設備、操作系統進程等等對於操作系統內核而言,都被視為擁有各自特性或類型的文件。

Linux全稱中的GNU也是一個可以聊的點,GNU是一個項目,由Richard Stallman在1983年9月27日公開發起,它的目標就是創建一套完全自由的操作系統,在其中有一條GPL條款,該條款大體思想如下:

​ 可以自由的使用,復制,修改,發布GNU項目下的軟件。

​ 所有GNU軟件都有一份在進制其他人添加任何限制的情況下授予所有權利給任何人的協議條款。

​ 1.你有自由以任何目的來運行該程序

​ 2.你有修改程序滿足自己需求的自由

​ 3.你有權利重新發布副本,既可以白送也可以收取一定的費用

​ 4.你有權利發布該程序修改過的版本,從而讓其他人得益於你的改進

​ 所以Linux其源代碼完全開源,歷經這么多年的沉淀已經非常優秀,大量的程序員對研究它樂此不疲。

Os&Kernel&系統調用接口

Os即為操作系統的意思,操作系統是一個用來協調,管控計算機硬件和軟件資源的系統程序。它位於硬件和應用程序之間。

​ 每個操作系統都有一個內核Kernel,它是為應用程序提供對計算機硬件安全訪問的一個軟件,負責所有的物理資源。包括:文件系統,內存管理,設備管理和進程管理。

​ 因此我們一般將計算機分為三層:

image-20210128161924772

​ 一個應用軟件如果想操縱底層硬件,必須經過系統調用接口發起系統調用,再由系統調用操縱內核,最后經內核幫助調用底層的系統硬件。

image-20210128162658049

​ 所以說操作系統的調用接口是服務於應用層面的軟件的,但其本身屬於操作系統這一層。

​ 在內核進行操縱硬件時,實際上會切換CPU狀態,內核態與用戶態,詳情參見: 計算機基礎

鏡像安裝

Linux下有很多發行版本,如最近大火的UOS常年霸占新聞頭條,除此之外還有CENTOS (企業級), RHEL(紅帽), FEDORA, UBUNTU(烏班圖), SUSE等...

​ 在這里我將采用CentOs7.3進行展示,其實各大發行版本的命令大差不差,可以說一通百通。

Windows環境下可采用虛擬機的方式進行安裝,這里我將采用vmware workstation

點擊進行下載Vmware workstation:版本(16.1.0),激活密鑰:

ZF3R0-FHED2-M80TY-8QYGC-NPKYF

​ 在下載虛擬機時,同時下載Centos7.3

點擊進行下載Centos 7.3 iso:

loading 的圖像結果

​ 這里將不演示Vmware的安裝,一路點擊下一步即可。

​ 安裝Centos鏡像:

image-20210201182139477 image-20210201182212400 image-20210201182229412 image-20210201182349331 image-20210201182408124 image-20210201182422781 image-20210201182446638 image-20210201182501799 image-20210201182520744 image-20210201182534194 image-20210201182557656 image-20210201182616869 image-20210201182630027

Centos安裝

image-20210201183002746 image-20210201183036576 image-20210201183128943
內存最低要求:512MB

時區選擇  亞洲中國上海
鍵盤選擇  美式標准鍵盤

帶GUI的服務器(請勿選擇最小安裝)

創建普通用戶與ROOT密碼(如果密碼強度不夠,按兩次done)

BOOT:引導分區 一般給 500M 內核

SWAP:虛擬內存 一般給物理內存的1.5倍至2.0倍(一般不超過8GB)  作用是緩解內存的壓力臨時存放數據

/:根目錄,類似於Windows 的C:\\ D:\\ E:\\ F:\\ 這些盤符概念。實際就叫根目錄

CentOS 默認最小安裝:可以手動選擇一些自帶的軟件

在成功安裝后如果提示:沒有足夠的內存自動啟用 kdump,請使用system-config-kdump手動配置 
出現這樣的信息。意思是說系統意外崩潰之后,kdump程序就負責將內核操作系統的狀態備份下來。

基本介紹

Terminal

​ 在桌面上單擊鼠標右鍵,選擇Open Terminal打開第一個終端。

​ 也可以使用CTRL + SHIFT + N開啟一個新的終端(當前終端已打開)。

Linux終端又叫虛擬控制台,Linux終端采用字符命令行方式工作,用戶通過鍵盤輸入命令,通過Linux終端對系統進行控制

Linux下可以開啟多個終端,使用CTRL + ALT + [ F1-F6 ]進行終端的切換。

​ 當用戶登錄完成后會有提示符信息,如上圖所示以普通用戶登錄系統后的提示符為$,如果使用root用戶進行登錄,提示符為#

# 普通用戶
[yunya@localhost ~]$  

# root用戶
[root@localhost yunya]# 

​ 使用exit命令退出終端。

​ 使用tab鍵進行命令補全。

命令演示

​ 在Linux中命令語法格式為:命令 [選項] [參數]

命令:要求Linux(Unix)執行的指令

選項:用來修飾命令,告訴命令具體怎么樣去執行(也可以改變命令)。部分是以‘-’字符開頭的。

參數:參數就是說命令影響(操作)的是什么(比如一個文件,一個視頻等等 ls -a/)

基本命令

​ 使用init 0關閉當前Linux系統。

​ 使用clear命令或者快捷鍵CTRL + R進行清屏。

​ 使用CTRL + C對一條正在執行的命令進行中止。

​ 查看幫助:man [命令]

​ 查看幫助:命令 --help

​ 查看歷史命令記錄:history

目錄查看

​ 使用ls命令進行目錄瀏覽。

​ 命令選項-l查看詳細信息。

​ 命令選項-a查看隱藏目錄。

​ 如下所示,瀏覽根目錄下的詳細信息:

[root@localhost yunya]# ls -l /

用戶相關

​ 使用who命令,列出目前該系統上工作的用戶:

[root@localhost yunya]# who
yunya    :0           2021-01-28 13:18 (:0)
yunya    pts/0        2021-01-28 13:32 (:0)
yunya    tty2         2021-01-28 13:29
root     tty3         2021-01-28 13:31

​ 使用whoami命令,顯示自身用戶的名稱:

[root@localhost yunya]# whoami
root

​ 使用useradd [username]新建用戶。

​ 使用passwd [username]修改指定用戶的密碼,如果不加選項[username],則默認清楚當前用戶的密碼。

​ 從當前用戶切換到另一個用戶,命令su [username]

​ 如下示例,使用su root命令切換至Root用戶,會提示你進行輸入密碼。(首次輸入密碼即相當於設置密碼)

# 密碼是隱藏的
[yunya@localhost ~]$ su root
Password: 
# 登錄成功
[root@localhost yunya]# 

日期相關

​ 使用date命令查看日期:

[root@localhost yunya]# date
Thu Jan 28 13:44:29 PST 2021

​ 如果想設置日期,格式為:date '月日時分年',需要root權限:

[root@localhost yunya]# date '120112002011'
Thu Dec  1 12:00:00 PST 2011

​ 使用hwcclock -s命令同步硬件時間:

[root@localhost yunya]# hwclock -s
[root@localhost yunya]# date
Thu Jan 28 13:51:49 PST 2021

​ 使用cal查看萬年歷:

[root@localhost yunya]# cal
    January 2021    
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

基礎操作篇

目錄結構

​ 在LinuxUnix操作系統中,所有的文件和目錄都被組織成一個以根/節點開始的倒置的樹狀結構。

Linux中的目錄相當於Windows中的文件夾,目錄中存放的既可以是文件也可以是其他子目錄。

Linux下的頂層目錄用/來表示,俗稱為根目錄。在Linux下只能有一個,而Windows下可以有多個,相當於C:\\ D:\\這樣的盤符概念。

​ 使用.代表當前目錄,即用戶工作的工作目錄。

​ 使用..代表上層目錄,即當前目錄的上一層目錄。

​ 使用*表示選中所有文件及目錄,如/*

重要目錄

​ 使用ls /可查看根目錄下的目錄和文件,其中有一些重要的目錄:

[root@localhost yunya]# ls /
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

Linux下重要目錄解釋:

目錄名稱 描述 使用方向
/bin 存放常用的可執行文件binary二進制的可執行文件 不推薦隨意使用
/sbin 存放系統的可執行文件super binary系統的命令 不推薦隨意使用
/usr 存放常用的可執行文件binary二進制的可執行文件 隨便用
/dev 設備文件目錄,存放linux系統下的設備文件,訪問該目錄下某個文件,相當於訪問某個設備 不推薦隨意使用
/home 家目錄,root用戶家目錄為/root,普通用戶家目錄都存放在/home目錄下,使用用戶名作家目錄下的名稱,如用戶名yunya的家目錄則存放在/home/yunya,另外使用~代表當前用戶的家目錄 隨便用
/mnt 掛載點目錄,通常可移除式硬件會掛載在此目錄或/media目錄下 隨便用
/media 掛載點目錄,通常可移除式硬件會掛載在此目錄或/mnt目錄下 隨便用
/proc 此目錄的數據都在內存中,如系統核心,外部設備,網絡狀態,由於數據都存放於內存中,所以不占用磁盤空間 不推薦隨意使用
/srv 服務啟動之后需要訪問的數據目錄,如www服務需要訪問的網頁數據存放在/srv/www內 不推薦隨意使用
/etc 配置文件目錄,不建議在此目錄下存放可執行文件 不推薦隨意使用
/tmp 臨時文件存放目錄 類似於Windows中的回收站,推薦將暫時不用的文件存放至此
/var 放置系統執行過程中經常變化的文件 不推薦隨意使用
/boot 放置linux系統啟動時用到的一些文件 不推薦隨意使用
/lib 系統使用的函數庫的目錄,程序在執行過程中,需要調用一些額外的參數時需要函數庫的協助,比較重要的目錄為/lib/modules。 不推薦隨意使用
/opt 給主機額外安裝軟件所擺放的目錄,但是一般情況下下載的軟件都會存放在/usr/local目錄下 隨便用

重要命令演示

工作目錄

​ 使用pwd命令展示當前的工作目錄

切換目錄

命令 描述
cd 返回家目錄,也可使用cd ~產生相同效果(root用戶回到/root下,普通用戶回到/home/username下)
cd [路徑] 進入某個目錄
cd .. 返回上級目錄
cd - 返回上一次所在的目錄中

ls命令

命令 描述
ls 查看當前目錄下的文件及目錄
ls -l 查看當前目錄下的文件及目錄的詳細信息,可簡寫為ll
ls -d 查看當前目錄下的子目錄,如加上-l參數,則為查看目錄的詳細信息
ls -a 查看當前目錄下的顯示文件/隱藏文件/顯示目錄/隱藏目錄
ls [選項] [路徑參數] 根據選項查看某一目錄下的文件及目錄

查看目錄大小

命令 描述
du -sh [目錄名] 查看目錄大小

查看文件

命令 描述
cat [目標文件路徑] 查看文本文件全部內容
head [行數] [目標文件路徑] 查看文本文件內容(默認頭十行) -1 顯示一行
tail [行數] [目標文件路徑] 查看文本文件內容(默認尾部十行)
tail -f [目標文件路徑] 查看文本文件內容,並動態監測文本變化(文本有文件更新立馬返回)
more [目標文件路徑] 查看文本文件內容,根據屏幕占比百分比顯示
less [目標文件路徑] 查看文本文件內容,使用上下鍵來翻頁文檔

復制和剪切

命令 描述
cp [原文件路徑] [目標文件路徑] 拷貝文件到目標目錄中,如果目標文件路徑不存在,則創建
cp -r [目錄] [目標文件路徑] 遞歸的拷貝目錄下的子目錄及文件至模板目標文件路徑,如果目標文件路徑不存在,則創建
mv [原文件路徑] [目標文件路徑] 剪切文件到目標目錄中,如果目標文件路徑不存在,則創建

注意:mv命令可用於重命名,如原文件路徑和目標文件路徑相同,則相當於重命名操作

創建目錄/文件

命令 描述
touch [目標文件路徑] 新建文件到目標文件路徑中
mkdir [目錄名] 創建一個空目錄
mkdir [目錄名1/目錄名2/目錄名3] 創建一串空目錄

rm命令

命令 描述
rm [目標文件] 刪除指定文件,並彈出提示
rm -f [目標文件] 刪除指定文件,不彈出提示
rm -rf [目標目錄] 刪除一個目錄樹。包括所有文件,並且不提示(rm -rf /*萬惡之源刪庫跑路)

管道符過濾

|管道符

​ 管道符的作用就是將一系列操作交由下一個命令繼續操作。待所有命令處理完后再打印出來。

grep

grep命令是過濾命令,使用正則進行過濾。

​ 通常與管道符進行配合使用,如下所示:

# 查看home目錄下所有項目
[root@localhost ~]# ls /home
Jack  ken  NewUser  yunya

# 查看home目錄下以J或者k開頭的項目名
[root@localhost ~]# ls /home | grep '^[Jk]'
Jack
ken

# 使用grep -v進行反向過濾
# 查看home目錄下不以J或者k開頭的項目名
[root@localhost ~]# ls /home | grep -v '^[Jk]'
NewUser
yunya

head

head命令可以從頭部提取幾條信息進行查看。

​ 除了在讀取文本的時候直接使用,也可以和管道符進行連接配合其他命令使用:

# 只查看home目錄下的第一個項目
[root@localhost ~]# ls /home | head -1
Jack

tail

tail命令可以從底部提取幾條信息進行查看。

​ 除了在讀取文本的時候直接使用,也可以和管道符進行連接配合其他命令使用:

# 只查看home目錄下的最后一個項目
[root@localhost ~]# ls /home | tail -1
yunya

alias內建命令

​ 在Linux操作系統中,所有的命令都是有一些默認參數。

​ 要么在/bin目錄下,要么在/sbin目錄下。

alias 命令(注意全為小寫)的功能是設置命令的別名,以簡寫命令,提高操作效率。根據參數的不同,該命令可查看已設定的別名,或為命令設置新的別名。

​ 比如cp里面有個-i的參數,它的作用是在於如果你復制文件時目標路徑擁有相同文件,會提示你是否去覆蓋,但是我們調用的時候並沒有加 -i 參數,卻還是有這樣的提醒。那就說明系統把 cp -i alisa 成了 cp了。

copy的原理

​ 操作系統中的copy底層實際原理其實就是在copy 的目標目錄建立一個和被copy文件同名的文件。

​ 再將被copy文件中的內容讀取出來再寫入到被拷貝文件的拷貝目標目錄中的同名文件里。這就完成了一次copy

step01:打開被copy的文件,加載內容至內存中

step02:在拷貝的目標目錄中創建同名文件

step03:將內存中存放的被copy文件數據寫入至同名文件中

step04:刪除原目錄下被copy的文件

用戶與群組篇

用戶信息文件

Linux下一切皆文件,當使用useradd命令新建一個用戶的話,其實內部也會發生一些變化。

​ 舉例,當我們使用新建名創建出NewUser后,變化如下:

[yunya@localhost /]$ su root
Password: 
[root@localhost /]# useradd NewUser

1.用戶信息文件:/etc/passwd

​ 截取最后兩行內容:

yunya:x:1000:1000:yunya:/home/yunya:/bin/bash
NewUser:x:1001:1001::/home/NewUser:/bin/bash

​ 在此文件中,每一行代表一個用戶的信息。並且以冒號為分隔符,將一行信息分為七段。

​ 第一段:用戶名

​ 第二段:密碼占位符

​ 第三段:UID(user id),即用戶識別碼,系統管理員是0,1-999為系統用戶,1000-65535為普通用戶

​ 第四段:GID,(group id),即用戶組識別碼,不同的用戶可以屬於同一個組,並且享有該組的共同權限

​ 第五段:COMMENT賬號描述信息(隨便寫)

​ 第六段:家目錄路徑,普通用戶在/home下,而root用戶在/root下

​ 第七段:這一段是一個可執行文件的路徑,如果該段內容是/bin/bash則說明該用戶可以登錄該系統,而如果是在/sbin/nologin下面則說明該用戶不可以登錄該系統

2.用戶密碼文件:/etc/shadow

​ 截取最后兩行內容:

yunya:$1$Af9h4qoA$6AkEHGBWgQjC1RGGAAFRp/:18655:0:99999:7:::
NewUser:!!:18657:0:99999:7:::

​ 第一段:用戶名

​ 第二段:經過加密的密碼

​ 后面所有部分為過期時間,過期時的提示信息等

3.組文件:/etc/group

​ 截取最后兩行內容:

yunya:x:1000:yunya
NewUser:x:1001:NewUser

​ 第一段:組名,組名默認為用戶名,可以說一個用戶就是一個組

​ 第二段:組密碼占位符,其真實密碼是存放在/etc/gshadow中

​ 第三段:組ID,具有唯一性

​ 第四段:組默認成員,默認的組成員就只有自己

4.組密碼文件:/etc/gshadow

yunya:!::
NewUser:!::

5.用戶家目錄:/home/userName

[root@localhost /]# ls /home
NewUser  yunya

6.用戶郵箱:/var/spool/mail

[root@localhost /]# ls /var/spool/mail
NewUser  root  rpc  yunya

​ 在了解完上述內容之后,我們發現其實useradd這條命令就是修改了這一系列文件,那么我們其實也可以手動的修改文件內容達到新增用戶的目的。

​ 第一步:編輯基本用戶信息,vim /etc/passwd打開該文件,按下G跳轉到最后一行,按下o進行編輯,寫入以下內容后按下ESC鍵進入命令模式,按下:進入擴展模式,輸入wq!進行保存退出。

ken:x:1002:1002:this is test user:/home/ken:/bin/bash

​ 第二步:編輯用戶密碼相關,vim /etc/shadow,重復上述步驟,寫入內容如下:

ken:!::ken

​ 第三步:編輯用戶組相關,vim /etc/group,重復上述步驟,寫入內容如下:

ken:x:1002:ken

​ 第四步:編輯用戶組密碼相關,vim /etc/gshadow,重復上述步驟,寫入步驟如下:

ken:!::

​ 第五步 :創建用戶家目錄,命令如下:

[root@localhost /]# mkdir /home/ken
[root@localhost /]# cp -r /etc/skel/.[!.]* /home/ken
[root@localhost /]# ls -a /home/ken
.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla

​ 第六步:創建用戶郵箱文件,命令如下:

[root@localhost /]# touch /var/spool/mail/ken

​ 嘗試使用su命令進行切換賬戶:

[root@localhost /]# su ken
[ken@localhost /]$ cd ~
[ken@localhost ~]$ 

用戶相關命令

查看用戶id

​ 你可以使用id userName的方式來查看某一用戶的ID

useradd命令

命令/選項 描述
useradd [選項] [用戶名] 使用默認方式創建新用戶
選項:-u 指定用戶的uid
選項:-g 指定用戶所屬的群組
選項:-d 指定用戶的家目錄
選項:-c 指定用戶的備注信息
選項:-s 指定用戶所用的shell(是否可登錄)
選項:-G 指定用戶所屬的附加組

​ 命令演示:

[root@localhost /]# useradd -u1003 -gken -d/home/Jack -cJack -s/bin/bash Jack
[root@localhost /]# su Jack
[Jack@localhost /]$ 
創建用戶id是1003,群組為ken的群組,家目錄為/home/Jack,賬號描述信息是Jack,登錄狀態是允許登錄,用戶名是Jack

userdel命令

命令 描述
userdel -r [用戶名] 刪除用戶,一定要帶上參數-r,否則將會失敗

​ 命令演示:

[root@localhost /]# userdel Jack

usermod命令

命令/選項 描述
usermod [選項] [用戶名] 修改現有的用戶相關信息及權限
選項:-u 修改用戶UID
選項:-g 修改用戶所屬的GID
選項:-d 修改用戶的家目錄(如果家目錄修改,無法通過su切換該用戶)
選項:-c 修改用戶的備注信息
選項:-s 修改用戶所用的shell(登錄狀態)
選項:-G 將用戶所在的組加入到另一個指定的組
選項:-L 鎖定用戶,不能登錄
選項:-U 解鎖用戶,可以登錄
選項:-o 一般與-g選項同時使用,表示新用戶組的GID可以與系統已有用戶組的GID相同

​ 命令演示:

[root@localhost /]# id NewUser
uid=1001(NewUser) gid=1001(NewUser) groups=1001(NewUser)
[root@localhost /]# usermod -u1020 -gyunya -cnew_user_message NewUser
[root@localhost /]# id NewUser
uid=1020(NewUser) gid=1000(yunya) groups=1000(yunya)
[root@localhost /]# 

passwd命令

命令/選項 描述
passwd [選項] [用戶名] 如果選項為空,則修改用戶密碼
選項:-l 鎖定口令,即禁用該用戶
選項:-u 解鎖口令,即接出該用戶的禁用狀態
選項:-d 使該賬號無口令
選項:-f 強迫用戶下次登陸時修改口令

群組相關命令

grounpmod命令

命令/選項 描述
grounpmod [選項] [群組名] 修改現有的組名相關信息及權限
選項:-g 修改群組的GID
選項:-n 修改群組的名稱
選項:-G 將用戶加入到一個指定的組中
選項:-L 鎖定群組,該群組下的用戶將不能登錄
選項:-U 解鎖群組,該群組下的用戶將可以登錄

groupdel命令

命令 描述
grounpmod [群組名] 刪除一個已有的群組

權限相關篇

文件權限操作

​ 使用命令ll可查看一個文件的詳細信息,如下所示:

[root@localhost ~]# touch test
[root@localhost ~]# ll test
-rw-r--r--. 1 root root 0 Jan 30 05:19 test

-rw-r--r--屬於文件權限信息,1是連接數,第一個root是創建者(屬主),第二個root是創建者所屬的群組(屬組),后面的信息是文件展位字節大小與時間。

​ 對於權限信息來說,它分為10個部分:

第一部分:第1位置,-是普通文件,d是目錄文件,b是塊文件,p是管道文件,l是軟鏈接

第二部分:第2、3、4位,代表屬主的權限,-是無權限,r是讀權限,w是寫權限,x是可執行權限

第三部分:第5、6、7位,代表屬組的權限,-是無權限,r是讀權限,w是寫權限,x是可執行權限

第四部分:第8、9、10位,代表其他用戶的權限(即除了root和屬主之外的用戶權限),-是無權限,r是讀權限,w是寫權限,x是可執行權限

​ 另外,root權限用戶高於其他所有,不可對其進行限制

執行可執行文件

​ 如果具有x權限,代表該文件可執行,執行方式如下:

# 方式1
sh [文件名]

# 方式2
./ [文件名]

權限修改命令chmod

​ 修改文件權限的命令是chmod,分別有在原有基礎上的 +- 權限方法,如原本只有 r-- 則可以修改成 +xw 就成了 rxw 了。還有一種就是 = 賦值法,清除原有權限,賦予新的權限。

chmod uga= (取消全部權限) -(只用輸入一個) 用a可以直接等同於 uga= 的操作

u是屬主,g是屬組,o是其他用戶,a是全部

# 取消所有權限
[root@localhost ~]# chmod uga= test
[root@localhost ~]# ll test
----------. 1 root root 0 Jan 30 05:19 test

# 取消所有權限
[root@localhost ~]# chmod a= test
[root@localhost ~]# ll test
----------. 1 root root 0 Jan 30 05:19 test

# 增加所有權限
[root@localhost ~]# chmod a=rwx test
[root@localhost ~]# ll test
-rwxrwxrwx. 1 root root 0 Jan 30 05:19 test

# 取消屬組的所有權限
[root@localhost ~]# chmod g= test
[root@localhost ~]# ll test
-rwx---rwx. 1 root root 0 Jan 30 05:19 test

# 取消用戶的所有權限
[root@localhost ~]# chmod u= test
[root@localhost ~]# ll test
-------rwx. 1 root root 0 Jan 30 05:19 test

# 給屬組增加所有權限
[root@localhost ~]# chmod g=rwx test
[root@localhost ~]# ll test
----rwxrwx. 1 root root 0 Jan 30 05:19 test

# 修改屬組的權限只有r
[root@localhost ~]# chmod g=r test
[root@localhost ~]# ll test
----r--rwx. 1 root root 0 Jan 30 05:19 test

# 修改屬組的權限在原有基礎上增加w
[root@localhost ~]# chmod g+w test
[root@localhost ~]# ll test
----rw-rwx. 1 root root 0 Jan 30 05:19 test

# 修改屬組的權限在原有基礎上減少w
[root@localhost ~]# chmod g-r test
[root@localhost ~]# ll test
----r--rwx. 1 root root 0 Jan 30 05:19 test

# 修改其他用戶的權限在原有基礎上減少x
[root@localhost ~]# chmod o-x test
[root@localhost ~]# ll test
----r--r-x. 1 root root 0 Jan 30 05:19 test
[root@localhost ~]# 

目錄權限操作

​ 使用ll -d來查看某個目錄的詳細信息,如下所示:

[root@localhost ~]# mkdir testDir
[root@localhost ~]# ll -d testDir
drwxr-xr-x. 2 root root 6 Jan 30 05:51 testDir

​ 對於目錄的可讀權限來說,意味着能夠查看該目錄下的內容。

​ 對於目錄的可寫權限(只限制子代,超子代不限制)來說,意味着能夠在此目錄中新建、刪除、重命名項目,對於項目本身的內容操作並不在此范疇之中,如打開文本文件編輯其內容。

​ 對於目錄的執行權限來說,意味着能夠cd進該目錄中,如果沒有x權限,就cd不進去。

權限修改命令chmod

​ 使用chmod也可對目錄權限進行操作,操作方式與上述文件權限操作方式相同。不再一一例舉。

​ 以下有一些注意事項:

​ 要在某個目錄下建立子文件,該目錄必須要有w權限,否則不可能建立。

​ 如果對超父目錄並沒有w權限,那么是不影響在父目錄中建立刪除子文件的。

屬主屬組轉移

​ 我們既然可以創建一個文件,當然也可將其送給別人。

​ 具體命令就是chown

屬主屬組轉移命令chown

​ 查看test文件:

[root@localhost ~]# ll test
----r--r-x. 1 root root 0 Jan 30 05:19 test

​ 將其屬主變更為yunya,但是屬組不變,不加:

[root@localhost ~]# chown yunya test
[root@localhost ~]# ll test
----r--r-x. 1 yunya root 0 Jan 30 05:19 test

​ 將其屬組變更為NewUser用戶,加:,注意與上面的區別:

[root@localhost ~]# chown :NewUser test
[root@localhost ~]# ll test
----r--r-x. 1 yunya NewUser 0 Jan 30 05:19 test

chown 名字 是只改屬主

chown :名字是只改屬組

​ 如果想一次性遞歸修改目錄及其子文件/目錄的屬主數屬組,則命令如下:

chown -R 屬主名:屬組名 目錄名

​ 如下所示,在testDir文件夾下新建下循環新建了兩個子文件,對其進行批量轉移屬主:

# 循環創建文件
[root@localhost ~]# cd testDir
[root@localhost testDir]# touch {1..3}.txt
[root@localhost testDir]# touch {a..c}.txt
[root@localhost testDir]# cd ..
[root@localhost ~]# ll testDir/*
-rw-r--r--. 1 root root 0 Jan 30 06:17 testDir/1.txt
-rw-r--r--. 1 root root 0 Jan 30 06:17 testDir/2.txt
-rw-r--r--. 1 root root 0 Jan 30 06:17 testDir/3.txt
-rw-r--r--. 1 root root 0 Jan 30 06:17 testDir/a.txt
-rw-r--r--. 1 root root 0 Jan 30 06:17 testDir/b.txt
-rw-r--r--. 1 root root 0 Jan 30 06:17 testDir/c.txt

# 遞歸轉移屬主
[root@localhost ~]# chown yunya testDir/*
[root@localhost ~]# ll testDir/*
-rw-r--r--. 1 yunya root 0 Jan 30 06:17 testDir/1.txt
-rw-r--r--. 1 yunya root 0 Jan 30 06:17 testDir/2.txt
-rw-r--r--. 1 yunya root 0 Jan 30 06:17 testDir/3.txt
-rw-r--r--. 1 yunya root 0 Jan 30 06:17 testDir/a.txt
-rw-r--r--. 1 yunya root 0 Jan 30 06:17 testDir/b.txt
-rw-r--r--. 1 yunya root 0 Jan 30 06:17 testDir/c.txt
[root@localhost ~]# 

數字權限

​ 權限所對應的數字:

​ r -> 4

​ w -> 2

​ x -> 1

​ 如果一個文件的權限是754,則該文件權限代表信息如下:

​ 屬主:所有權限,4+2+1=1

​ 屬組:讀和執行權限:4+1=5

​ 其他用戶:僅有讀權限:4

​ 如下示例,直接使用數字權限對test文件進行權限修改:

[root@localhost ~]# chmod 754 test
[root@localhost ~]# ll test
-rwxr-xr--. 1 yunya NewUser 0 Jan 30 05:19 test

文件操作篇

文檔縱向合並

>覆寫的使用

>命令可以將一個打印的內容寫入到文件中,如果該文件不存在將自動創建,如果文件中已有內容,此操作將覆蓋原有內容。

​ 如下所示:

[root@localhost ~]# echo 'Hello,World;' > new_file.txt
[root@localhost ~]# cat new_file.txt
Hello,World;

>>追寫的使用

>>命令作用與>命令相同,但是如果原文件中已有內容,該操作不會覆蓋原文件內容而是進行追寫操作。

​ 如下所示:

[root@localhost ~]# echo 'Hello,Linux' >> new_file.txt
[root@localhost ~]# cat new_file.txt 
Hello,World;
Hello,Linux

​ 這兩種命令能合並出所有打印的內容,如lscat等。

​ 我們也可以一次性指定多個文件進行合並,如下所示:

[root@localhost ~]# cat /etc/passwd /etc/shadow > new_file.txt

​ 這樣的話我們合並文件里就有了兩個文件的內容了。

文檔行數統計

wc命令

​ 使用wc -l [文檔路徑]對文檔的行數進行統計:

[root@localhost ~]# wc -l new_file.txt 
88 new_file.txt

文件歸檔操作

​ 歸檔和壓縮還是有一部分區別的:

歸檔:相當於去超市買東西,最后拎了一大袋零食出來了

壓縮:相當於去超市買完東西,領着一大袋子零食還要把空氣擠了

tar命令之打包

​ 我們將對以下文件進行打包操作:

[root@localhost ~]# ls testDir/
1.txt  2.txt  3.txt  a.txt  b.txt  c.txt

​ 使用tar命令進行打包,命令格式如下:

tar -cvf [打包后的名字即存放地址] [被打包文件1] [被打包文件2] [被打包文件N]

​ 如下所示:

[root@localhost ~]# tar -cvf testDir.tar testDir/*
testDir/1.txt
testDir/2.txt
testDir/3.txt
testDir/a.txt
testDir/b.txt
testDir/c.txt

[root@localhost ~]# ll testDir.tar 
-rw-r--r--. 1 root root 10240 Jan 30 07:00 testDir.tar

​ 如果想查看一個打包后文件中所包含的內容文件,則使用以下命令:

tar -tf [tar包名]

​ 示例如下:

[root@localhost ~]# tar -tf testDir.tar 
testDir/1.txt
testDir/2.txt
testDir/3.txt
testDir/a.txt
testDir/b.txt
testDir/c.txt

tar命令之解包

​ 如果想解包一個tar文件,命令格式如下:

tar -xvf [tar包名] -C [解包的路徑(必須存在)]

​ 示例如下:

[root@localhost ~]# mkdir newDir
[root@localhost ~]# tar -xvf testDir.tar -C newDir
testDir/1.txt
testDir/2.txt
testDir/3.txt
testDir/a.txt
testDir/b.txt
testDir/c.txt
[root@localhost ~]# ls newDir/testDir/
1.txt  2.txt  3.txt  a.txt  b.txt  c.txt

文件壓縮操作

​ 文件壓縮必須依賴壓縮算法,讓其被壓縮后的占空間容量更小,但是原本內容還能提取出來。

​ 壓縮的好處有兩個,一是節省存儲空間,而是在網絡傳輸時能節省用戶帶寬。

​ 目前在Linux下有兩種算法,分別是gzipbzip2

gzip壓縮與解壓

​ 使用gzip進行壓縮的命令格式如下:

gzip [被壓縮文件]
# 注意:被壓縮后的文件都會自動帶上后綴.gz

​ 使用gunzip命令對gz類型文件進行解壓,命令格式如下:

gunzip [被解壓的gz類型文件]

​ 進行示例演示:

[root@localhost ~]# echo 'Hello,Linux' > newFile.txt
# 壓縮
[root@localhost ~]# gzip newFile.txt
# 解壓
[root@localhost ~]# gunzip newFile.txt.gz

bzip2壓縮與解壓

​ 使用bzip2進行壓縮的命令格式如下:

bzip2 [被壓縮文件]
# 注意:被壓縮后的文件都會自動帶上后綴.bz2

​ 使用bunzip2命令對bz2類型文件進行解壓,命令格式如下:

bunzip2 [被解壓的bz2類型文件]

​ 進行示例演示:

# 壓縮
[root@localhost ~]# bzip2 newFile.txt 
# 解壓
[root@localhost ~]# bunzip2 newFile.txt.bz2 

tar.gz安裝包

tar.gz是在Linux下常見的二進制安裝包,其實究其原理就是打包和壓縮的結合應用。

歸檔與壓縮以及如何壓縮目錄

​ 上面介紹的命令都不能壓縮目錄,同時源文件在單純的壓縮后也將被刪除,一般來說,我們壓縮目錄或文件之前都會先對其進行歸檔,但是如果按照先歸檔再壓縮的命令流程來執行其操作會十分繁瑣。

​ 所以這里提供一種非常便捷的壓縮目錄和文件的方式,並且源文件不會被刪除:

tar cvzf [歸檔並壓縮后的包名.tar.gz] [將要歸檔和壓縮的目錄/文件名]

​ 解壓縮和解包的命令如下:

tar xvf [被歸檔並壓縮后的報名.tar.gz] -C [解包后的存放路徑]

​ 示例如下:

# 打包並解壓
[root@localhost ~]# tar cvzf testDir.tar.gz ./testDir
./testDir/
./testDir/1.txt
./testDir/2.txt
./testDir/3.txt
./testDir/a.txt
./testDir/b.txt
./testDir/c.txt

# 解壓並解包
[root@localhost ~]# tar xvf testDir.tar.gz -C /usr/tmp/
./testDir/
./testDir/1.txt
./testDir/2.txt
./testDir/3.txt
./testDir/a.txt
./testDir/b.txt
./testDir/c.txt

VIM編輯器

vim編輯器作為Linux的自帶編輯器可以說十分強大,也被很多追捧的人譽為編輯器之神,它的操作方式非常具有特色但是學習難度較大,所以本章節只會介紹基礎操作,感興趣的小伙伴可以自行學習這一技能,絕對加分不少。

vim編輯器分為兩種,一種叫vi,一種叫vim(vi modify)

vimvi的基本用法相同,但是某些場景下更為強大。

​ 使用vim編輯器的基本語法:

vim [文件路徑]
# 文件不存在將創建

vim有三種模式,如圖所示:

image-20210131000711781

​ 以下是命令行模式或擴展模式中一些常用命令或快捷鍵:

命令/快捷鍵 描述
h 光標向左移動
l 光標向右移動
j 光標向上移動
k 光標向下移動
dd 刪除光標所在的行,一直摁住一直刪除
ndd 刪除光標所在行下的n行
u 撤銷上一步操作
yy 復制光標所在的行
P 粘貼內容到光標所在行的上一行
p 粘貼內容到光標所在行的下一行
gg 跳到文件第一行
G 跳到文件最后一行
nG 跳到文件的第n行
$ 跳到當前光標所在行的尾部
0 跳到當前光標所在行的首部
H 光標移動到當前屏幕展示內容區域第一行的第一個字符
M 光標移動到當前屏幕展示內容區域中間行的第一個字符
L 光標移動到當前屏幕展示內容區域最后一行的第一個字符
/ 進入搜索模式,支持正則表達式。N是上一個,n是下一個
set nu 顯示行號(擴展模式)
CART + R 重做操作

系統與進程篇

Linux啟動流程

1.加載BIOS硬件並進行自我測試,獲取第一個可啟動裝置

​ 由BIOS去加載COMS的配置項,配置項包括主機各項硬件信息。然后BIOS會進行自我測試,開始硬件初始化,定義可啟動裝置的順序,為下一步讀取MBR做准備。

2.讀取並運行第一個啟動裝置內MBR的boot loader程序(該程序也可能是grub,spfdisk等)

BIOS通過INT13讀取MBR

​ 硬盤中第一個扇區MBR中存儲啟動管理程序Boot Loader,該程序作用是處理並加載核心文件。

3.根據Boot Loader配置加載Kernal,Kernal開始檢測硬件並且加載驅動程序

Boot Loader管理讀取核心文件之后,Linux系統將會被壓縮至主內存中。

​ 此時Linux內核Kernal會再檢測一次硬件,但不一定會使用BIOS檢測硬件數據。

​ 檢測完畢之后,由內核開始接管工作,文件位於/boot/vmlinuz

4.硬件驅動加載成功后,Kernal主動呼叫init程序,而init程序會獲得Run Level資訊

​ 內核會主動呼叫的第一個執行程序就是/sbin/init

​ 該程序主要功能是准備軟件運行環境,包括系統主機名稱、網絡配置、語系處理、文件系統格式以及其他服務的啟動等。

​ 在該程序運行時,會去加載/etc/inittab文件中的項目,該文件主要用於設定Linux運行等級。

​ 默認加載等級為5級及以上:

id:5:initdefault

​ 關於等級划分如下所示:

0:關機,如init 0命令就是調用該等級

1:單用戶模式

2:無網絡支持的多用戶模式

3:有網絡支持的多用戶模式

4:保留,未使用(開發者模式)

5:有網絡支持,有X-Window支持的多用戶模式(圖形化界面,GUI)

6:重新引導系統,即重啟

5.init運行/etc/rc.d/rc.sysinit或init.d文件來准備軟件運行的作業環境

​ 在運行等級確定之后,Linux開始執行用戶級別的文件,其第一個執行的文件就是/etc/rc.d/rc.sysinit,該腳本程序所做的工作非常多,包括設定PATH,設定網絡配置(/etc/sysconfig/network)、啟動swap分區,設定/proc等等。

​ 當/etc/rc.d/rc.sysinit腳本執行完成之后,將會從/etc/modules.conf文件或者從/etc/modules.d文件讀取配置來裝載內核模塊。

6.init以Run Level來啟動各個服務(script方式)

​ 根據運行級別的不同,系統會在/etc/rc.d目錄下運行rc0.d

rc6.d中對應的腳本程序,來完成初始化工作和啟動相應的服務。

7.init運行/etc/rc.d/rc.local文件

​ 該文件加載完畢后,我們就可以對系統發出操作命令,進行用戶個性化設置等操作。

8.init運行終端機模擬程序mingetty來啟動login程序,等待用戶登錄后即可使用

​ 運行/sbin/mingetty文件,該文件就是啟動終端機的命令,最后將執行/bin/login程序。

擴展閱讀

CentOS7開始, /etc/inittab下的文件已停用。

https://blog.csdn.net/eaefahdbe/article/details/95739112

CentOs8忘記密碼怎么辦?查看下面教程:

https://it.baiked.com/linux/4895.html

如何進行MBR加密?保證系統安全?查看下面教程:

https://www.cnblogs.com/junjind/p/8993420.html MBR破解用戶密碼

https://www.cnblogs.com/kevingrace/p/8387827.html MBR加密

如何對BIOS進行加密?BIOS加密安全嗎?

https://baijiahao.baidu.com/s?id=1609967141725113371&wfr=spider&for=pc

任務&內存查看

​ 在Linux中一切皆文件,對於進程而言就是一些正在運行狀態中的文件。

​ 文件本身躺在硬盤中是死的,但是當被加載到內存中從而讓CPU進行調用的時候就活了過來,因此可以理解為當前正在被CPU調用的文件就是一個進程。

關閉進程知識

​ 什么是關閉進程?

​ 被關閉的進程實際上就是在內存中被釋放。這種釋放的時機可以是被動的,也可以是手動的,當進程被關閉后將不會占用CPU運算資源以及內存的存儲資源了。

Linux進程相關名詞

​ 父進程:當程序A運行過程中調用了程序B,程序A可稱為程序B的父進程

​ 子進程:當程序A運行過程中調用了程序B,程序B可稱為程序A的子進程

​ 守護進程:當程序A運行過程中調用了程序B,而當程序A運行完畢后程序B也被強制關閉,程序B可稱為守護進程

​ 僵屍進程:當程序A運行完畢后並未釋放所有資源,如進程編號等未被釋放,此時的程序A將可以被稱為僵屍進程

​ 中斷信息:中斷信息用於控制進程的運行

動態監控操作系統命令(任務管理器):top

​ 使用top命令可查看如下信息,節選:

top - 19:18:41 up 17:38,  5 users,  load average: 0.03, 0.04, 0.05
Tasks: 177 total,   1 running, 176 sleeping,   0 stopped,   0 zombie
%Cpu(s):  9.1 us,  2.4 sy,  0.0 ni, 88.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   999936 total,    83316 free,   692712 used,   223908 buff/cache
KiB Swap:  2097148 total,  2042268 free,    54880 used.    92496 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND    
  2861 yunya     20   0 1509200 366360  24612 S  9.0 36.6   2:36.44 gnome-shell
  2308 root      20   0  219124  25416   3876 S  4.3  2.5   0:50.00 Xorg       
 46695 yunya     20   0  551872  18888  11260 S  1.3  1.9   0:13.38 gnome-term+
     1 root      20   0  193628   4820   2816 S  0.0  0.5   0:04.68 systemd    
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.02 kthreadd   
     3 root      20   0       0      0      0 S  0.0  0.0   0:00.46 ksoftirqd/0
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0

​ 命令窗口描述如下所示:

top - 19:18:41:當前系統時間

up 17:38:本次開機時長

5 users:當前系統登錄用戶數量

load average: 0.03, 0.04, 0.05:CPU平均負載

Tasks: 177 total, 1 running, 176 sleeping, 0 stopped, 0 zombie:total任務總數,running正在運行,sleeping睡眠進程,stopped暫停的進程,zombie僵屍進程

%Cpu(s):當前展示多個CPU(百分比顯示),可按下數字1顯示每個CPU的詳細信息

​ us:用戶進程占比

​ sy:系統進程占比

​ ni:保存值占比

​ id:剩余占比

​ wa:輸入輸出操作占比

​ hi:硬件中斷占比

​ gi:軟件中斷占比

​ st:CPU被其他虛擬機所占用的百分比

KiB Mem:內存信息

​ total:總內存

​ free:剩余內存

​ used:被使用內存

​ buff/cache:內存緩沖區

KiB Swap:虛擬內存

​ total:總內存

​ free:剩余內存

​ used:被使用內存

​ avail Mem:可使用內存

PID:進程號

USER:用戶

PR:優先值

NI:排后值

VIRT:虛擬內存占用

RES:物理內存占用

SHR S:貢獻內存運行狀態,S代表停止,R代表運行

%CPU:進程占用CPU百分比

%MEM: 進程占用內存百分比

TIME+:進程運行時長

COMMAND: 進程描述信息

img

內存管理器:free

​ 使用free命令詳細查看內存使用情況,有以下三種格式:

free 		# 默認顯示
free -h 	# 以GB為單位
free -m 	# 以MB為單位

​ 實例演示:

[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            976         676          80           4         219          89
Swap:          2047          53        1994

​ 解釋如下:

total:總內存

used:以使用內存

free:剩余內存

shared:共享內存

buff/cache:高速緩沖區

Mem:物理內存

Swap:虛擬內存

進程管理相關

進程查看命令:ps

​ 使用ps aux命令查看當前操作系統中所有進程及進程詳細信息。

​ 使用ps aux | head [-條數]只查看頭部幾條進程信息。

​ 配合grep或者grep -v進行過濾查找進程。

# 查看頭5行
[root@localhost ~]# ps aux | head -5
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.4 193628  4820 ?        Ss   01:40   0:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root          2  0.0  0.0      0     0 ?        S    01:40   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    01:40   0:00 [ksoftirqd/0]
root          7  0.0  0.0      0     0 ?        S    01:40   0:00 [migration/0]

# 詳細過濾查找
[root@localhost ~]# ps aux | grep 'python' | grep 'yunya'
yunya     52461  0.0  0.4 130012  4988 pts/1    S+   20:20   0:00 python

​ 該命令內容描述如下:

USER:用戶名

PID:進程號

%CPU:該進程占CPU的百分比

%MEM:該進程占內存的百分比

VSZ:虛擬內存

RSS:物理內存

TTY:在那個終端(后台)上運行

STAT:當前狀態

START TIME:開始時間

COMMAND:產生進程的文件

打開進程

​ 運行一段腳本文件就是打開進程了,如下所示我將打開火狐瀏覽器。

​ 使用&符將其掛到后台中:

[root@localhost ~]# firefox &
[1] 52680
# 工作號 進程號

結束進程命令:kill與pkill

​ 使用kill -9 [進程號(單殺)]來強制結束進程。

​ 使用pkill -9 [進程名(廣殺)]來強制結束進程。

​ 下面我將關閉打開的火狐瀏覽器:

# 先查找
[root@localhost ~]# ps aux | grep 'firefox' | grep 'pts/0' 
root      52680  3.6 13.0 983172 130164 pts/0   Sl   20:30   0:05 /usr/lib64/firefox/firefox
root      52861  0.0  0.0 112648   960 pts/0    R+   20:33   0:00 grep --color=auto firefox

# 后關閉
[root@localhost ~]# kill -9 52680
[1]+  Killed                  firefox

子程序前后台操作

​ 當我們在終端以后台方式打開程序后,它將不會影響后續終端的命令輸入,並且該程序會有一個工作號和進程號。

​ 在打開任務的終端中,使用jobs可查看在該終端中打開的子程序。

​ 使用fg %[子進程工作號]將該終端下后台運行的子程序調用到前台執行。

​ 使用bg %[子進程工作號]將該終端下前台運行的子程序調用到后台執行。

​ 同時,我們也可使用kill %[子進程工作號]來將該終端下運行的子程序進行釋放。

​ 示例如下:

# 后台啟動火狐瀏覽器進程
[root@localhost ~]# firefox &
[1] 53095

# 查看該終端下子進程
[root@localhost ~]# jobs
[1]+  Running                 firefox &

# 跳轉前台運行
[root@localhost ~]# fg %1

進程樹

​ 使用pstree來查看進程樹。

​ 使用pstree | grep ['進程名']來實現廣殺。

系統服務

service命令是Redhat Linux兼容的發行版中用來控制系統服務的實用工具,它以啟動、停止、重新啟動和關閉系統服務,還可以顯示所有系統服務的當前狀態。

​ 查看運行系統服務運行狀態:

service [系統服務名稱] status

​ 停止某一系統服務的運行:

service [系統服務名稱] stop

​ 重啟某一系統服務:

service [系統服務名稱] restart

磁盤相關篇

扇區與block塊

​ 對於磁盤來說,一次能夠讀寫的大小操作操作系統規定最小要達到一個扇區的大小,即

512Bytes,而操作系統為了避免頻繁的同磁盤打交道往往會攢夠8個扇區的數據量再進行寫入或讀取操作,8個扇區因此也被稱之為block塊。

主分區流程

​ 我們在Vm16中對虛擬機新增一塊10GB的磁盤。

​ 此時我們可以立即看到新增的磁盤名為sdb

[root@localhost yunya]# ls /dev/ | grep '^sd'
sda
sda1
sda2
sda3
sdb

開始分區:fdisk

​ 通過fdisk -l /dev/sdb可以查看該硬盤詳細信息。

[root@localhost yunya]# fdisk -l /dev/sdb

磁盤 /dev/sdb:10.7 GB, 10737418240 字節,20971520 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節

​ 通過命令fdisk /dev/sdb來為該磁盤進行分區。

​ 主分區在MBR中最多存在4個。

​ 擴展分區最多15個,擴展分區無法直接使用,需要在擴展分區下創建邏輯分區。

​ 下面我們直接創建主分區,在命令中有以下一些常用選項:

命令 描述
n 下一步
p 查看詳情
d 刪除某個分區(按照編號刪除)
w 進行應用(fdisk所有操作先存儲在內存中,直至你輸入了w再進行應用)

​ 以下是分區的示例演示,創建了2個主分區。

[root@localhost yunya]# fdisk -l /dev/sda
歡迎使用 fdisk (util-linux 2.23.2)。

更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。

# 輸入n下一步
命令(輸入 m 獲取幫助):n 

# p主分區 e擴展分區
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p

# 4個主分區
分區號 (1-4,默認 1):1
起始 扇區 (2048-20971519,默認為 2048):2048
Last 扇區, +扇區 or +size{K,M,G} (2048-20971519,默認為 20971519):+5G
分區 1 已設置為 Linux 類型,大小設為 5 GiB

命令(輸入 m 獲取幫助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
分區號 (2-4,默認 2):2
起始 扇區 (10487808-20971519,默認為 10487808):
將使用默認值 10487808
Last 扇區, +扇區 or +size{K,M,G} (10487808-20971519,默認為 20971519):
將使用默認值 20971519
分區 2 已設置為 Linux 類型,大小設為 5 GiB

命令(輸入 m 獲取幫助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盤。

​ 現在,我們已經成功在sdb這塊硬盤上創建了兩個分區。

[root@localhost yunya]# fdisk /dev/sdb
歡迎使用 fdisk (util-linux 2.23.2)。

更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。


命令(輸入 m 獲取幫助):p

磁盤 /dev/sdb:10.7 GB, 10737418240 字節,20971520 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 字節 / 512 字節
I/O 大小(最小/最佳):512 字節 / 512 字節
磁盤標簽類型:dos
磁盤標識符:0xda09d20a

   設備 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   83  Linux
/dev/sdb2        10487808    20971519     5241856   83  Linux

​ 最后一步,進行更新,保存我們的分區內容:

[root@localhost yunya]# partprobe
[root@localhost yunya]# partprobe
[root@localhost yunya]# partprobe
[root@localhost yunya]# partprobe

​ 看一看目錄下的文件:

[root@localhost yunya]# ls /dev | grep 'sd'
sda
sda1
sda2
sda3
sdb
sdb1
sdb2

格式化流程

​ 磁盤分區完成后,需要對其進行格式化后才能正常使用。

​ 使用命令mkfs查看當前系統支持的文件系統。在我的Centos7.3中,該命令並未打印出我想要的效果。這里用Centos8的圖做個演示:

image-20210201105455970

​ 通常情況下,Linux系統中使用ext4居多,所以我這里就采用ext4進行格式化。

​ 如果能使用xfs,就使用xfs,它單次能支持寫入的文件更大。

開始格式化:mkfs

​ 命令如下:

[root@localhost /]# mkfs.ext4 /dev/sdb1
[root@localhost /]# mkfs.ext4 /dev/sdb2

​ 由於我們在上面的示例中創建了2個主分區,所以可以直接使用上述命令進行格式化。如果是擁有擴展分區則無法直接進行格式化,但是邏輯分區則可以。

掛載流程

​ 在分區和格式化完成之后,sdb1-sdb2目前都是屬於b類型文件,即硬件設備,並不能直接使用。

​ 因此需要對其進行一個映射操作,這個映射操作則被稱為掛載。

​ 說的通俗一點,1個目錄對應1個b文件,類似於Windows下的分區於盤符的關系。

開始掛載:mount

​ 第一步,創建兩個文件夾,對應sdb1sdb2

[root@localhost /]# mkdir /software  # 軟件
[root@localhost /]# mkdir /programming  # 程序設計

​ 第二步,使用mount [分區] [目錄]對其進行映射:

[root@localhost /]# mount /dev/sdb1 /software
[root@localhost /]# mount /dev/sdb2 /programming

​ 現在,已經掛載完成了,使用命令df查看分區的掛載情況(sr代表光盤):

[root@localhost /]# df
文件系統          1K-塊    已用     可用     已用% 	掛載點
/dev/sda3      18555904 3775092 14780812   21%      /
devtmpfs         485336       0   485336    0% 		/dev
tmpfs            499968     156   499812    1% 		/dev/shm
tmpfs            499968    7268   492700    2% 		/run
tmpfs            499968       0   499968    0% 		/sys/fs/cgroup
/dev/sda1        303780  154604   149176   51% 		/boot
tmpfs             99996       8    99988    1% 		/run/user/1000
tmpfs             99996       0    99996    0% 		/run/user/0
/dev/sdb1       5029504   20472  4730504    1% 		/software
/dev/sdb2       5028480   20472  4729532    1% 		/programming

文件系統

​ 目前我們掛載的文件夾是空的,但是上表中可以看到它有已使用的部分。

​ 在這里面其實存儲了文件系統,我們使用mount | tail -2來查看sdb1sdb2的詳細信息,可以看到其使用的文件系統格式是ext4

[root@localhost /]# mount | tail -2
/dev/sdb1 on /software type ext4 (rw,relatime,seclabel,data=ordered)
/dev/sdb2 on /programming type ext4 (rw,relatime,seclabel,data=ordered)

​ 對於一個文件來說,即使該文件是內容是空白的,它依然會占據一些空間。

​ 一個新建的文件,除開其本身存儲的內容之外還具有文件名 - 權限 - 硬鏈接數量 - 屬主 - 屬組 - 大小 - 創建時間 等信息,我們統一把這些信息稱為元數據。這些內容都是要占用空間的,那么元數據是存放在哪里的呢?

​ 前面講過bolck塊的概念,一個分區的bolck塊叫做數據bolck塊,專門存放文件的數據,還有一個inoode塊,就是專門來存放文件元數據的,存儲在innode中的元數據也被稱為i節點信息。

​ 硬盤只要格式化成文件系統之后都會被分成兩部分,如下圖所示:

image-20210201112715747

​ 使用命令,df -i可查看每個分區的i節點信息:

[root@localhost /]# df -i | tail -2
文件系統         Inode 	已用(I) 	可用(I) 		已用(I)% 		掛載點
/dev/sdb1       327680  11  	327669         1% 			/software
/dev/sdb2       327680  11  	327669         1% 			/programming

​ 其實,在硬盤中存放一個文件的時候,都會給這個文件提供i節點進行存儲元信息,如果是一個空文件,它雖然內容不占block大小但是還是占用innode大小。所以如果innode塊被占滿了那么磁盤也就被沾滿了。

​ 把磁盤比喻成一個考室,一個位置相當於一個innode編號,如果這個考室座位上沒有一個人,但是都有其專屬考生的編號,那么這個考室就無法安排其他考生入內了。

​ 這種情況映射到硬盤上就是說硬盤空間還有很多,但是innode號不夠用了,磁盤也就滿了。

​ 使用ll -i [名字]來查看一個文件和目錄的編號:

# 查看文件的innode編號
[root@localhost /]# ll -i /etc/passwd
18670796 -rw-r--r--. 1 root root 2296 1月  30 04:56 /etc/passwd

# 查看目錄的innode編號
[root@localhost /]# ll -i / | grep 'etc'
16777281 drwxr-xr-x. 138 root root 8192 2月   1 02:24 etc

​ 每個innode塊有兩部分。分為innode 編號和元信息,他們都指向同一個件。是用的指針來指的所以速度很快。

image-20210201114223916

directory block就是目錄塊,目錄的地址。當一個文件被存儲進block塊,會執行以下流程:

image-20210201114320659

軟硬鏈接

軟鏈接

​ 軟鏈接在Linux下非常常用,類似於Windows下的快捷方式。

​ 命令格式如下:

ln -s [被鏈接的源文件] [鏈接投放地點]

​ 軟鏈接特點如下:

1.軟鏈接或者源文件內容有任何改變,都會影響到對方

2.刪除源文件,軟鏈接將會失效,刪除軟鏈接,源文件不變

3.軟鏈接與源文件的innode號不一樣

4.軟鏈接指向源文件名詞

5.軟鏈接可以跨分區

硬鏈接

ln [被鏈接的源文件] [鏈接投放地點]

​ 硬鏈接特點如下:

1.硬鏈接或者源文件內容有任何改變,都不會影響到對方

2.刪除源文件,硬鏈接不會失效,刪除硬鏈接,源文件不會改變

3.硬鏈接是指向源文件的innode號的

4.硬鏈接無法跨分區

網絡管理

基本介紹

​ 根據TCP/IP協議。連接在Internet上的計算機每一個都要有一個IP地址,IP地址由八位二進制數構成,用十進制驗算則是四個0-255之間的數字。

IP地址分為網絡地址和主機地址兩部分,網絡地址就是用來標識采用此IP的計算機處於哪個子網,主機地址用來標識處於具體的那一個位置,單純的IP地址是看不出子網的,必須要通過掩碼。如后面加上/16,那么就表明這段IP的前16位代表網絡位,后16位代表主機位,如果要寫一個IP地址的網絡地址那么只需要將前面網絡位的數字寫出來就好,主機位全部置0,而主機地址就是本身。比如:

img

​ 將IP地址中的網絡位和主機位固定下來,IP地址被分成了不同的類集,被分成了A,B,C,D,E類:

​ 常見的三類:

A類地址:前8位都是網絡位,后面24位是主機位。1 - 126(掐頭去尾)

B類地址:前16位都是網絡位,后16位是主機位。128 - 191(掐頭去尾)

C類地址:前24位都是網絡位,后8位是主機位。192 - 223(掐頭去尾)

​ 不常見的兩類:

D類地址:通常用於廣播,多播。224 - 239

E類地址:保留地址,240 - 255

IP地址可以用子網掩碼來實現多層隔離,通過借位的方式可以讓一類地址細化分成更多的廣播域,用來阻止網絡風暴的發生。

​ 使用IP地址來算子網地址。比如:192.167.45.1/24

# 異或運算
b ‘11000000.10100111.00101101.00000001
b ’11111111.11111111.11111111.00000000
b ‘11000000.10100111.00101101.00000000 

這個就是子網划分出的地址。192.167.45.0 ,只有網絡地址一樣,才能進行內部廣播通信。

虛擬機網絡

​ 在Vm中,虛擬機擁有以下三種網絡:

image-20210201115952105

​ Bridged(橋接模式):通過虛擬網橋進行通信和聯網,不需要虛擬網卡來使虛擬機和物理機通信。使用橋接模式,虛擬機IP地址需和物理層面上的客戶機處於同一網段。通過物理交換機鏈接Internet

​ NAT(網絡地址轉換)模式:NAT模式的虛擬機和物理機的IP地址不能處於同一網段。因為要將虛擬機的IP地址轉換為物理機的網關所在IP地址然后再進行發包鏈接。NAT在計算機網絡中是很常見的一種模式.

​ Host-Only(僅主機模式):實驗用的,如果使用僅主機模式。那么虛擬機A與虛擬機B使用同一網段,將會實現通信發包。

鏈接網絡

​ 我們准備使用橋接模式來讓虛擬機獲取網絡服務,因此需要先查看物理機的IP地址,物理機是Windows所以打開CMD命令輸入ipconfig獲取物理機IP地址:

無線局域網適配器 WLAN:

   連接特定的 DNS 后綴 . . . . . . . :
   IPv6 地址 . . . . . . . . . . . . : 2409:8962:3405:2ae4:ed01:6743:4b9e:7b14
   臨時 IPv6 地址. . . . . . . . . . : 2409:8962:3405:2ae4:d810:fde0:ca6c:8c6e
   本地鏈接 IPv6 地址. . . . . . . . : fe80::ed01:6743:4b9e:7b14%8
   IPv4 地址 . . . . . . . . . . . . : 192.168.43.101
   子網掩碼  . . . . . . . . . . . . : 255.255.255.0
   默認網關. . . . . . . . . . . . . : fe80::6c61:6bff:fee6:c51e%8
                                       192.168.43.1

​ 可以看到網段是30,接下來我們需要為虛擬機增加網絡設備並將其配置為橋接模式。

image-20210201120822989

image-20210201171503015

​ 使用ifconfig獲得網卡信息:

ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.43.107  netmask 255.255.255.0  broadcast 192.168.43.255
        inet6 2409:8962:3405:2ae4:551b:c0bf:5b87:57a7  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::6a5b:c124:1637:48f8  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:d1:92:d3  txqueuelen 1000  (Ethernet)
        RX packets 104  bytes 14003 (13.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 136  bytes 14249 (13.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
       

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 4  bytes 340 (340.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4  bytes 340 (340.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:d8:0d:c4  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

​ 發現網卡ens36,自動配置的ip地址等都正確,嘗試ping百度。成功:

[root@localhost network-scripts]# ping www.baidu.com
PING www.a.shifen.com (39.156.66.14) 56(84) bytes of data.
64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=1 ttl=51 time=107 ms
64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=2 ttl=51 time=70.8 ms
64 bytes from 39.156.66.14 (39.156.66.14): icmp_seq=3 ttl=51 time=64.0 ms

網絡配置項

​ 羅列一些centos中常用的網絡配置項命令即配置文件。

​ 在Linux中,所有永久的操作都必須通過文件修改。

​ 通過命令修改只能是本次關機前生效,下次開機后失效。

​ 首先是網卡配置,它的配置文件放在:/etc/sysconfig/network-scripts/ifcfg-網卡名。如果你已經能聯網了,就不許要配置該文件了。

​ 網卡配置文件:

TYPE=Ethernet  		# 類型
BOOTPROTO=static 	# static  dhcp
DEFROUTE=yes	 	
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens36			# 網卡名稱
UUID=bf5337ab-c044-4af7-9143-12da0d493b89
DEVICE=ens36		# 和名稱相同
PEERDNS=yes
PEERROUTES=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
ONBOOT=yes 			 # 修改成 yes
IPADDR=192.168.43.238 # Linux的IP地址,與物理機相同網段
NETMASK=255.255.255.0   #  子網掩碼,與物理機相同
GATEWAY=192.168.43.1    #  默認網關,與物理機相同
DNS1=114.114.114	   

​ 想讓配置文件成功,就需要重啟網絡服務:

[root@localhost network-scripts] service network restart

# centos8采用新命令
nmcil c reload

​ 關於網絡服務的守護進行永久開啟與關閉:

[root@localhost network-scripts] chkconfig NetworkManager off  # 關閉
[root@localhost network-scripts] chkconfig NetworkManager on   # 打開

​ 關閉和開啟網卡:

ifup [網卡名]    # 立即啟用網卡
ifdown [網卡名]  # 立即關閉網卡

​ 查看網絡配置:

[root@localhost network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.43.1    0.0.0.0         UG    100    0        0 ens36
192.168.43.0    0.0.0.0         255.255.255.0   U     100    0        0 ens36
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

# 第一行為網絡出口配置
# 第二行和第三行為網絡入口配置

​ 查看修改主機名:

hostname [新名字]  # 如果不填名字則是查看主機名

​ 臨時添加網關:

route add gw [ip地址]
route add gw default [ip地址]  # 添加默認網關

​ 永久修改DNS服務器:

vim /etc/resolv.conf

​ 本地HOSTS文件:

vim /etc/hosts

​ 防火牆相關:

iptables -F # 清空防火牆規則
service iptables stop # 關閉防火牆

軟件服務

tar.gz與rpm

​ 在Linux操作系統中。有兩種安裝包,一種是tag.gz為后綴名的安裝包,還有一種是后綴名為rpm的安裝包。

tag.gz我們在前面已經學習過,其實內部就是一些軟件的源代碼歸檔壓縮而成,解壓后執行./ 即可安裝。這種被稱為編譯安裝。

​ 為什么叫編譯安裝呢? 因為在計算機的內部執行的都是1和0這兩個數字,所以所有的執行命令,其實都是在內存中經過字符編碼轉換為二進制數,在轉換過程中進行安裝即被稱為編譯安裝。

rpm安裝包最早由紅帽公司推出。與tag.gz安裝包最大的不同在於其本身已經是被編譯好了的二進制,所以安裝起來會省去字符編碼轉換的過程,CentOS官方已經幫忙編譯了很多tag.gz的安裝包為rpm格式。但是操作系統的開發商不會時時刻刻對這些軟件進行升級和更新,如果想使用最新的最全面的軟件體驗。那么請使用tag.gz后綴的安裝包。

tar.gz安裝

​ 上面其實已經說過了,它的內部原理是將多個項目先進行歸檔后再進行壓縮。

​ 一般來說我們只需要對其進行解包和解壓即可:

tar xvf [被歸檔並壓縮后的報名.tar.gz] -C [解包后的存放路徑]

rpm基礎介紹

​ 使用rpm時,會先從本地找以提供的安裝包。

​ 如果本地未找到,則會聯網進行查找。

​ 連接並自動掛載含有將本地rpm安裝包的光盤:

image-20210201191027471

​ 使用df命令查看該光盤的映射路徑:

[root@localhost yunya]# df | grep 'sr'
/dev/sr0             4276440 4276440        0  100% /run/media/yunya/CentOS 7 x86_64

# sr代表光盤

​ 查看該目錄下Packages子目錄下的項目:

[root@localhost Packages]# ls /run/media/yunya/CentOS\ 7\ x86_64/Packages/ | head -5

389-ds-base-1.3.5.10-11.el7.x86_64.rpm
389-ds-base-libs-1.3.5.10-11.el7.x86_64.rpm
abattis-cantarell-fonts-0.0.16-3.el7.noarch.rpm
abrt-2.1.11-45.el7.centos.x86_64.rpm
abrt-addon-ccpp-2.1.11-45.el7.centos.x86_64.rpm

​ 現在,我們就可以看到Centos7.3中內置的一些rpm安裝包,它的解讀格式如下:

​ 以 . 來分段,倒着看更清晰:

​ 第1段是軟件包的名稱

​ 第2段是軟件版本編號

​ 第3段軟件包的修正次數

​ 第4段代表支持的平台

​ 第5段代表CPU架構

​ 最后一部分就是文件擴展名

​ 軟件包版本號如果最后一位是奇數的話,那么就表明這個軟件還處於測試階段,可能有一些BUG等不確定因素,不具有穩定性,反之偶數就是穩定版。

rpm基本命令

​ 安裝:

rpm -ivh [rpm包名] 			# 可選項 -h哈希值 -v詳細信息
rpm -ivh [rpm包名] --force 	# 強制安裝(即使已存在)

​ 查看:

rpm -aq 		  # 查看所有已安裝,可配合`rep`濾
rpm -q [軟件名]	# 查看某個軟件是否以安裝
rpm -ql[軟件名]    # 查看某個軟件的安裝位置
rpm -qi[軟件名]	# 查看某個軟件的安裝詳情

​ 卸載:

rpm -e [軟件名] # 可能出問題
rpm -e [軟件名]  --nodeps # 強制卸載

​ 示例演示:

[root@localhost Packages]# rpm -ivh dnsmasq-2.66-21.el7.x86_64.rpm --force
警告:dnsmasq-2.66-21.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
准備中...                          ################################# [100%]
正在升級/安裝...
   1:dnsmasq-2.66-21.el7              ################################# [100%]
   
[root@localhost Packages]# rpm -aq | grep 'dnsmasq'
dnsmasq-2.66-21.el7.x86_64

[root@localhost Packages]# rpm -e dnsmasq --nodeps

[root@localhost Packages]# rpm -aq | grep 'dnsmasq'
[root@localhost Packages]# 

rpm在線自動安裝

在線自動安裝

​ 通過CentOS官網進行下載rpm安裝包。再手動安裝

​ 首先查看自身系統編號:

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

​ 進入官網mirror.centos.org

image-20210201193305569

復制出連接直接安裝就好:

rpm -ivh [鏈接]

wget手動下載安裝

​ 注意pwd位置一定要在你想要下載到的位置。

​ 使用wget跟上鏈接地址,這種方式非常常用!

wget [鏈接]

yum基本命令

​ 使用上面的rpm安裝方式會經常遇見一個問題。那就是依賴組件的問題,很多依賴組件莫名其妙不知道是什么東西去哪里下載,那么如何解決這個問題呢?可以使用yum來解決。

yum會自動安裝rpm軟件,並且會自動安裝其依賴軟件。

​ 基本命令:

yum install [軟件名]  	  # 安裝某個軟件, 使用 -y 來讓所有選項都確定,yum install [軟件名] -y
yum remove [軟件名]   	  # 卸載某個軟件
yum reinstall [軟件名]	  # 更新某個軟件
yum makecache 		 	# 創建緩存文件,有效提升網絡安裝的速度
yum clean all		 	# 清理緩存
yum groupulist			# 批量安裝成批工具,如yum groupulist '開發者工具'

yum與依賴環境

yum分為本地倉庫和遠程倉庫。

建立本地倉庫

​ 手動配置yum倉庫文件:

# 新建倉庫文件
[root@localhost /]# vim /etc/yum.repos.d/local.repo


# file路徑必須//開頭跟上路徑
[local]
name=local yum
baseurl=file:///run/media/yunya/CentOS\ 7\ x86_64/
enabled=1
gpgcheck=0

# 意思就是所使用yum命令時,從該路徑安裝rpm包

查看倉庫

​ 除開我們自己配置的倉庫外,其實他還有很多的自帶倉庫。可以查看/etc/yum.repos.d,這些文件都是網絡源。

[root@localhost /]# ls /etc/yum.repos.d/
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  local.repo

yum執行流程

​ 那么yum安裝的流程到底是怎么樣去執行的呢?怎么樣找到依賴關系並找到安裝包?可以看下面的這張圖。

image-20210201205455615

如果倉庫里給定的路徑沒有repodata這個目錄,那么必定安裝失敗。

以上這些都是yum的一個原理流程圖。我們可以查看一下在本地鏡像中的repodata/repomd.xls

[root@localhost /]# ls /run/media/yunya/CentOS\ 7\ x86_64/repodata/ | grep 'repomd.xml'
repomd.xml

​ 這個就是依賴環境的文件,通過這個文件可以找到Packages下的所有安裝包進行安裝,如果沒有就不會安裝,而是通過網絡的方式去查看repodata文件。

​ 在這里也可以看到基於網絡的倉庫信息。它的路徑是在/etc/yum.repos.d下面。

​ 我們打開了BASE這個網絡倉庫,節選代碼:

#released updates 
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

​ 我們隨便復制一個baseurl並對其進行訪問,來看一下有沒有repodataPackAges目錄:

baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
進行模板轉換:
baseurl=http://mirror.centos.org/centos/7/updates/x86_64/

# $contentdir --> 系統版本,如centos-7
# $releasever --> 詳細版本,如7
# $basearch   --> 平台架構,如x86_64

​ 可以看到是有的。

image-20210201204226631

配置yum下載目錄

​ 通過網路查找依賴關系:repodata/repomd.xml后就可以進入Packages進行安裝。那么網絡上rpm安裝包肯定是要下載到本地后在進行安裝的。可以通過/etc/yum.conf來配置它默認下載的路徑和完成安裝后是否清理安裝包的選項。

vim /etc/yum.conf

​ 打開文件的第一行,可以設置安裝包下載路徑,第二行如果設置成1就代表完成安裝后不清理安裝包而是保存。

SSH服務

基本介紹

​ 我們知道,對於服務器來說一般都是存在遠端。當服務器發生異常之后我們需要使用一款軟件對其服務器進行遠程操控排除異常,那么在Linux中都自帶了這樣的一款軟件,名為ssh

​ 這是一款C/S架構軟件,Linux系統擁有它的Client端和Server端,使用如下命令可查看到ssh服務依賴的安裝程序:

[yunya@localhost network-scripts]$ rpm -qa | grep 'openssh'
openssh-server-6.6.1p1-31.el7.x86_64
openssh-clients-6.6.1p1-31.el7.x86_64
openssh-6.6.1p1-31.el7.x86_64

​ 查看sshd(服務端)運行狀態:

[yunya@localhost network-scripts]$ service sshd status
Redirecting to /bin/systemctl status  sshd.service
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since 二 2021-02-09 20:44:32 CST; 42min ago
     Docs: man:sshd(8)
           man:sshd_config(5)
  Process: 1050 ExecStart=/usr/sbin/sshd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 1078 (sshd)
   CGroup: /system.slice/sshd.service
           └─1078 /usr/sbin/sshd
[yunya@localhost network-scripts]$

​ 使用ssh(客戶端命令)鏈接遠程服務器,推薦軟件:Xshell/putty/secureCRT/VNC等,這里我采用git的命令行工具,它也提供了ssh客戶端。

​ 以下示例中,我是物理機鏈接虛擬機Centos7.3

$ ssh 192.168.0.101

The authenticity of host '192.168.0.101 (192.168.0.101)' can't be established.
ECDSA key fingerprint is SHA256:LqrxiB4AbXC1dXX6Lew7kAjbihBXRh8MTu1y7Dl36+A.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.101' (ECDSA) to the list of known hosts.
yunya@192.168.0.101's password:
Last login: Tue Feb  9 20:45:03 2021
[yunya@localhost ~]$ su root
密碼:
[root@localhost yunya]# cd /
[root@localhost /]# ls
1    boot  etc   lib    media  opt   root  sbin  sys  usr
bin  dev   home  lib64  mnt    proc  run   srv   tmp  var
[root@localhost /]#

工作機制

​ 服務器啟動的時候自己產生一個密鑰(768bit公鑰),本地的ssh客戶端發送連接請求到ssh服務器,服務器檢查連接點客戶端發送的數據和IP地址,確認合法后發送密鑰(768bits)給客戶端,此時客戶端將本地私鑰(256bit)和服務器的公鑰(768bit)結合成密鑰對key(1024bit),發回給服務器端,建立連接通過key-pair數據傳輸。

img

客戶端主動聯機請求:

​ 若客戶端想要聯機到 ssh 服務器,則需要使用適當的客戶端程序來聯機,包括 ssh, putty 等客戶端程序連接。

服務器傳送公鑰給客戶端:

​ 接收到客戶端的要求后,服務器便將第一個步驟取得的公鑰傳送給客戶端使用 (此時應是明碼傳送,反正公鑰本來就是給大家使用的)。

客戶端記錄並比對服務器的公鑰數據及隨機計算自己的公私鑰:

​ 若客戶端第一次連接到此服務器,則會將服務器的公鑰記錄到客戶端的用戶家目錄內的 ~/.ssh/known_hosts 。若是已經記錄過該服務器的公鑰,則客戶端會去比對此次接收到的與之前的記錄是否有差異。若接受此公鑰, 則開始計算客戶端自己的公私鑰。

回傳客戶端的公鑰到服務器端:

​ 用戶將自己的公鑰傳送給服務器。此時服務器:具有服務器的私鑰與客戶端的公鑰,而客戶端則是: 具有服務器的公鑰以及客戶端自己的私鑰,你會看到,在此次聯機的服務器與客戶端的密鑰系統 (公鑰+私鑰) 並不一樣,所以才稱為非對稱加密系統。

開始雙向加解密:

​ (1)服務器到客戶端:服務器傳送數據時,拿用戶的公鑰加密后送出。客戶端接收后,用自己的私鑰解密

​ (2)客戶端到服務器:客戶端傳送數據時,拿服務器的公鑰加密后送出。服務器接收后,用服務器的私鑰解密,這樣就能保證通信安全。

客戶端連接

​ 最簡單的ssh命令只需要指定用戶名和主機名參數即可. 主機名可以是 IP 地址或者域名. 命令格式如下:

$ ssh [用戶名]@[地址]

​ 默認連接到目標主機的 22 端口上,但是由於各種原因你可能需要連接到其他端口.

$ ssh -p [端口號] [用戶名]@[地址]

服務端配置

​ 使用vim/etc/ssh/sshd_config文件進行配置,如你可以關閉UserDns選項使ssh鏈接更加迅速:

#UseDNS yes
UseDns no

scp文件傳輸

​ 使用scp命令可以將本地文件上傳到Linux服務端,命令如下:

scp -r [本地文件路徑] [用戶名]@[地址]:[上傳的路徑]

​ 示例如下:

# 本地上傳
yunya@DESKTOP-KRBGCGL MINGW64 ~/Desktop
$ scp -r ./Snipaste_2020-11-24_18-30-40.png root@192.168.0.101:/home/yunya
root@192.168.0.101's password:
Snipaste_2020-11-24_18-30-40.png              100% 1076KB  13.2MB/s   00:00

# ssh鏈接
yunya@DESKTOP-KRBGCGL MINGW64 ~/Desktop
$ ssh root@192.168.0.101
root@192.168.0.101's password:
Last login: Tue Feb  9 21:51:30 2021 from 192.168.0.102

# 查看已上傳的文件
[root@localhost ~]# ls /home/yunya
Snipaste_2020-11-24_18-30-40.png  模板  圖片  下載  桌面
公共                              視頻  文檔  音樂
[root@localhost ~]#

基本軟件安裝

環境變量

軟鏈接(推薦)

​ 當你的軟件安裝完成之后,每次都需要去安裝目錄里啟動它非常麻煩,我們可以在bin目錄下做一條軟連接:

ln -s [軟件啟動程序路徑] /bin/[軟鏈接名稱]

1574685929(1)

/etc/profile文件修改

​ 不常用,軟鏈接比較方便。

vim /etc/profile
# 按下大寫G,跳到最后一行
寫上PATH=軟件啟動程序路徑
換行寫上export PATH

開發者工具

​ 安裝開發者工具包與可能的依賴:

>: yum -y groupinstall "Development tools"
>: yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel

   檢測git是否安裝成功:

>: git

redis安裝

1)前往用戶根目錄
>: cd ~

2)下載redis-5.0.5
>: wget http://download.redis.io/releases/redis-5.0.5.tar.gz
# 如果本地有就上傳
>: scp -r C:\Users\dell\Desktop\pkg\redis-5.0.5.tar.gz root@39.99.192.127:~

3)解壓安裝包
>: tar -xf redis-5.0.5.tar.gz

4)進入目標文件
>: cd redis-5.0.5

5)編譯環境
>: make

6)復制環境到指定路徑完成安裝
>: cp -r ~/redis-5.0.5 /usr/local/redis


9)建立軟連接
>: ln -s /usr/local/redis/src/redis-server /usr/bin/redis-server
>: ln -s /usr/local/redis/src/redis-cli /usr/bin/redis-cli

10)后台運行redis
>: cd /usr/local/redis
>: redis-server &

ctrl + c 停止

11)測試redis環境
>: redis-cli
ctrl + c

12)關閉redis服務
>: pkill -f redis -9

mysql安裝

1)前往用戶根目錄
>: cd ~

2)下載mysql57
>: wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

也可以本地上傳,這條命令要在本地終端上執行
>: scp -r C:mysql57-community-release-el7-10.noarch.rpm root@39.99.192.127:~

3)安裝mysql57
>: yum -y install mysql57-community-release-el7-10.noarch.rpm
>: yum -y install mysql-community-server

4)啟動mysql57並查看啟動狀態
>: systemctl start mysqld.service
>: systemctl status mysqld.service

5)查看默認密碼並登錄
>: grep "password" /var/log/mysqld.log
>: mysql -uroot -p

6)修改密碼,密碼不能太簡單 我的密碼:'Csh980128%%%'
>: ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';

python安裝

1)前往用戶根目錄
>: cd ~

2)下載 或 上傳 Python3.6.7
# 服務器終端
>: wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tar.xz

# 本地終端,給服務器上傳
>: scp -r 本地Python-3.6.7.tar.xz ssh root@39.99.192.127:服務器路徑
>: scp -r C:\Users\dell\Desktop\pkg\Python-3.6.7.tar.xz ssh root@39.99.192.127~

3)解壓安裝包
>: tar -xf Python-3.6.7.tar.xz

4)進入目標文件
>: cd Python-3.6.7

5)配置安裝路徑:/usr/local/python3
>: ./configure --prefix=/usr/local/python3

6)編譯並安裝
>: make && sudo make install

7)建立軟連接:終端命令 python3,pip3
>: ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
>: ln -s /usr/local/python3/bin/pip3.6 /usr/bin/pip3

8)刪除安裝包與文件:
>: rm -rf Python-3.6.7
>: rm -rf Python-3.6.7.tar.xz

nginx安裝

1)前往用戶根目錄
>: cd ~

2)下載nginx1.13.7
>: wget http://nginx.org/download/nginx-1.13.7.tar.gz

3)解壓安裝包
>: tar -xf nginx-1.13.7.tar.gz

4)進入目標文件
>: cd nginx-1.13.7

5)配置安裝路徑:/usr/local/nginx
>: ./configure --prefix=/usr/local/nginx

6)編譯並安裝
>: make && sudo make install

7)建立軟連接:終端命令 nginx
>: ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

8)刪除安裝包與文件:
>: cd ~
>: rm -rf nginx-1.13.7
>: rm -rf nginx-1.13.7.tar.xz

9)測試Nginx環境,服務器運行nginx,本地訪問服務器ip
>: nginx
>: 服務器綁定的域名 或 ip:80


#Nginx命令
1)啟動
>: nginx

2)關閉nginx
>: nginx -s stop

3)重啟nginx
>: nginx -s reload

4)查看端口,強行關閉
>: ps -aux|grep nginx
>: kill <pid:進程編號>
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM