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
,它是為應用程序提供對計算機硬件安全訪問的一個軟件,負責所有的物理資源。包括:文件系統,內存管理,設備管理和進程管理。
因此我們一般將計算機分為三層:

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

所以說操作系統的調用接口是服務於應用層面的軟件的,但其本身屬於操作系統這一層。
在內核進行操縱硬件時,實際上會切換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
:
這里將不演示Vmware
的安裝,一路點擊下一步即可。
安裝Centos
鏡像:













Centos安裝



內存最低要求: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
基礎操作篇
目錄結構
在Linux
或Unix
操作系統中,所有的文件和目錄都被組織成一個以根/
節點開始的倒置的樹狀結構。
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
這兩種命令能合並出所有打印的內容,如ls
、cat
等。
我們也可以一次性指定多個文件進行合並,如下所示:
[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
下有兩種算法,分別是gzip
與bzip2
。
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)
。
vim
和vi
的基本用法相同,但是某些場景下更為強大。
使用vim
編輯器的基本語法:
vim [文件路徑]
# 文件不存在將創建
vim
有三種模式,如圖所示:
以下是命令行模式或擴展模式中一些常用命令或快捷鍵:
命令/快捷鍵 | 描述 |
---|---|
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: 進程描述信息

內存管理器: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
的圖做個演示:
通常情況下,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
第一步,創建兩個文件夾,對應sdb1
和sdb2
:
[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
來查看sdb1
和sdb2
的詳細信息,可以看到其使用的文件系統格式是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
節點信息。
硬盤只要格式化成文件系統之后都會被分成兩部分,如下圖所示:
使用命令,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
編號和元信息,他們都指向同一個件。是用的指針來指的所以速度很快。
directory block
就是目錄塊,目錄的地址。當一個文件被存儲進block
塊,會執行以下流程:
軟硬鏈接
軟鏈接
軟鏈接在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
,而主機地址就是本身。比如:
將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
中,虛擬機擁有以下三種網絡:
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
,接下來我們需要為虛擬機增加網絡設備並將其配置為橋接模式。

使用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
安裝包的光盤:
使用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

復制出連接直接安裝就好:
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
安裝的流程到底是怎么樣去執行的呢?怎么樣找到依賴關系並找到安裝包?可以看下面的這張圖。
如果倉庫里給定的路徑沒有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
並對其進行訪問,來看一下有沒有repodata
和PackAges
目錄:
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
可以看到是有的。
配置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數據傳輸。
客戶端主動聯機請求:
若客戶端想要聯機到 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/[軟鏈接名稱]
/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:進程編號>