1. 程式人生 > 實用技巧 >leetcode刷題-59螺旋矩陣2

leetcode刷題-59螺旋矩陣2

LInux:一切皆檔案(檔案:讀寫執行(檢視,建立,刪除,移動,複製,編輯),許可權(使用者,使用者組)系統:(程序,磁碟));

linux目錄檔案

絕對路徑和相對路徑

絕對路徑

由根目錄/寫起,例如:/use/shaere/doc

絕對路徑

不由/寫起,例如cd ../home

處理目錄常用命令

/ 根目錄

ls 列出目錄

ls -a 列出所有目錄(包含隱藏目錄)

ls -l 列出所有目錄屬性和許可權等資料

ls -al列出所有目錄(包含屬性和隱藏目錄)

cd 切換目錄(絕對路徑和相對路徑)

cd .. 返回上一級

cd /回到根目錄

cd 或者 cd ~ 回到家目錄(剛進伺服器時的目錄)

pwd顯示當前目錄

pwd 顯示當前目錄

pwd -P 顯示具體目錄路徑(如是連線,要顯示真實地址,可使用-P引數)

mkdir(建立新目錄)

mkdir -p 建立多層目錄

mkdir -m 711 test 建立rwx--x--x許可權的目錄

rmdir(刪除空目錄)

rmdir -p test1/test2/test3 yi\依次刪除掉

cp(複製檔案或者目錄)

cp /root/aa.txt/home複製root目錄下的aa.txt1檔案到home目錄下

cp -i/root/aa.txt/home加上-i引數,增加覆蓋詢問,y覆蓋,n不覆蓋

選項與引數:

  • -a:相當於 -pdr 的意思,至於 pdr 請參考下列說明;(常用)

  • -p:連同檔案的屬性一起復制過去,而非使用預設屬性(備份常用);

  • -d:若來源檔為連結檔的屬性(link file),則複製連結檔屬性而非檔案本身;

  • -r:遞迴持續複製,用於目錄的複製行為;(常用)

  • -f:為強制(force)的意思,若目標檔案已經存在且無法開啟,則移除後再嘗試一次;

  • -i:若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用)

  • -l:進行硬式連結(hard link)的連結檔建立,而非複製檔案本身。

  • -s:複製成為符號連結檔 (symbolic link),亦即『捷徑』檔案;

  • -u:若 destination 比 source 舊才升級 destination !

rm(移除檔案或者目錄)

rm -i 主動詢問是否刪除,避免刪除錯誤的檔案

rm -rf /勿用,刪庫跑路

選項與引數:

  • -f :就是 force 的意思,忽略不存在的檔案,不會出現警告資訊;

  • -i :互動模式,在刪除前會詢問使用者是否動作

  • -r :遞迴刪除啊!最常用在目錄的刪除了!這是非常危險的選項!!!

mv(移動檔案或目錄,修改名稱)

mv aa.txt test 將某目錄中的aa.txt檔案移動到test目錄下

  • -f :force 強制的意思,如果目標檔案已經存在,不會詢問而直接覆蓋;

  • -i :若目標檔案 (destination) 已經存在時,就會詢問是否覆蓋!

  • -u :若目標檔案已經存在,且 source 比較新,才會升級 (update)

基本屬性

檔案屬性

第一個屬性

  • 當為[ d ]則是目錄

  • 當為[ - ]則是檔案;

  • 若是[ l ]則表示為連結文件 ( link file );

  • 若是[ b ]則表示為裝置檔案裡面的可供儲存的介面裝置 ( 可隨機存取裝置 );

  • 若是[ c ]則表示為裝置檔案裡面的串列埠裝置,例如鍵盤、滑鼠 ( 一次性讀取裝置 )。

第0位確定檔案型別,第1-3位確定屬主(該檔案的所有者)擁有該檔案的許可權。第4-6位確定屬組(所有者的同組使用者)擁有該檔案的許可權,第7-9位確定其他使用者擁有該檔案的許可權。

接下來的字元中,以三個為一組,且均為『rwx』 的三個引數的組合。

其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(execute),-表示沒有許可權。

要注意的是,這三個許可權的位置不會改變,如果沒有許可權,就會出現減號[ - ]而已。

更改檔案屬組屬主屬性

chgrp:更改檔案屬組

chgrp [-R] 屬組名 檔名

chown:更改檔案屬主,也可以同時更改檔案屬組

chown [–R] 屬主名 檔名
chown [-R] 屬主名:屬組名 檔名

chmod:更改檔案9個屬性

chmod [-R] xyz 檔案或目錄
chmod 777 檔案或目錄(可讀可寫可操作)

Linux檔案屬性有兩種設定方法,一種是數字,一種是符號。

Linux檔案的基本許可權就有九個,分別是owner/group/others三種身份各有自己的read/write/execute許可權。

先複習一下剛剛上面提到的資料:檔案的許可權字元為:『-rwxrwxrwx』, 這九個許可權是三個三個一組的!其中,我們可以使用數字來代表各個許可權,各許可權的分數對照表如下:

r:4   w:2     x:1

每種身份(owner/group/others)各自的三個許可權(r/w/x)分數是需要累加的,例如當權限為:[-rwxrwx---] 分數則是:

  • owner = rwx = 4+2+1 = 7

  • group = rwx = 4+2+1 = 7

  • others= --- = 0+0+0 = 0

chmod 770 filename

檔案內容檢視

cat 由第一行開始顯示檔案內容

tac 從最後一行開始顯示,可以看出 tac 是 cat 的倒著寫!

nl 顯示的時候,順道輸出行號!

more 一頁一頁的顯示檔案內容(空格翻頁,回車下一行,:f行號)

less 與 more 類似,但是比 more 更好的是,他可以往前翻頁!(空格翻頁,上下鍵翻動頁面,q退出),less中的/字串,查詢檔案中的所有這個字串,向上查詢用?要查詢字串,n向上尋找,N向下尋找

head 只看頭幾行,通過-n顯示行數

tail 只看尾巴幾行

網路配置檔案

cd /etc/sysconfig/network-scripts ( CentOS7)

ifconfig 檢視網路配置

連結

Linux 連結分兩種,一種被稱為硬連結(Hard Link),另一種被稱為符號連結(Symbolic Link)。

情況下,ln 命令產生硬連結。

硬連線

硬連線指通過索引節點來進行連線。在 Linux 的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配一個編號,稱為索引節點號(Inode Index)。在 Linux 中,多個檔名指向同一索引節點是存在的。比如:A 是 B 的硬連結(A 和 B 都是檔名),則 A 的目錄項中的 inode 節點號與 B 的目錄項中的 inode 節點號相同,即一個 inode 節點對應兩個不同的檔名,兩個檔名指向同一個檔案,A 和 B 對檔案系統來說是完全平等的。刪除其中任何一個都不會影響另外一個的訪問。

硬連線的作用是允許一個檔案擁有多個有效路徑名,這樣使用者就可以建立硬連線到重要檔案,以防止“誤刪”的功能。其原因如上所述,因為對應該目錄的索引節點有一個以上的連線。只刪除一個連線並不影響索引節點本身和其它的連線,只有當最後一個連線被刪除後,檔案的資料塊及目錄的連線才會被釋放。也就是說,檔案真正刪除的條件是與之相關的所有硬連線檔案均被刪除。

軟連線

另外一種連線稱之為符號連線(Symbolic Link),也叫軟連線。軟連結檔案有類似於 Windows 的快捷方式。它實際上是一個特殊的檔案。在符號連線中,檔案實際上是一個文字檔案,其中包含的有另一檔案的位置資訊。比如:A 是 B 的軟連結(A 和 B 都是檔名),A 的目錄項中的 inode 節點號與 B 的目錄項中的 inode 節點號不相同,A 和 B 指向的是兩個不同的 inode,繼而指向兩塊不同的資料塊。但是 A 的資料塊中存放的只是 B 的路徑名(可以根據這個找到 B 的目錄項)。A 和 B 之間是“主從”關係,如果 B 被刪除了,A 仍然存在(因為兩個是不同的檔案),但指向的是一個無效的連結。

測試:

[root@kuangshen /]# cd /home
[root@kuangshen home]# touch f1 # 建立一個測試檔案f1
[root@kuangshen home]# ls
f1
[root@kuangshen home]# ln f1 f2 # 建立f1的一個硬連線檔案f2
[root@kuangshen home]# ln -s f1 f3 # 建立f1的一個符號連線檔案f3
[root@kuangshen home]# ls -li # -i引數顯示檔案的inode節點資訊
397247 -rw-r--r-- 2 root root 0 Mar 13 00:50 f1
397247 -rw-r--r-- 2 root root 0 Mar 13 00:50 f2
397248 lrwxrwxrwx 1 root root 2 Mar 13 00:50 f3 -> f1

從上面的結果中可以看出,硬連線檔案 f2 與原檔案 f1 的 inode 節點相同,均為 397247,然而符號連線檔案的 inode 節點不同。

# echo 字串輸出 >> f1 輸出到 f1檔案
[root@kuangshen home]# echo "I am f1 file" >>f1
[root@kuangshen home]# cat f1
I am f1 file
[root@kuangshen home]# cat f2
I am f1 file
[root@kuangshen home]# cat f3
I am f1 file
[root@kuangshen home]# rm -f f1
[root@kuangshen home]# cat f2
I am f1 file
[root@kuangshen home]# cat f3
cat: f3: No such file or directory

通過上面的測試可以看出:當刪除原始檔案 f1 後,硬連線 f2 不受影響,但是符號連線 f1 檔案無效;

依此您可以做一些相關的測試,可以得到以下全部結論:

刪除符號連線f3,對f1,f2無影響;

刪除硬連線f2,對f1,f3也無影響;

刪除原檔案f1,對硬連線f2沒有影響,導致符號連線f3失效;

同時刪除原檔案f1,硬連線f2,整個檔案會真正的被刪除。

vim編輯器

vim基本命令

vim三種 模式命令 模式編輯模式 底線命令模式

vim aa.txt 建立檔案進入vim(命令模式),aa.txt如果存在就編輯,不存在就建立

i(編輯模式)ESC (退出編輯模式)

:(底線命令模式)

q退出程式 w儲存檔案 :wq 儲存並退出

cat檢視檔案

x刪除游標所在的字元

vim詳細命令

第一部分:一般模式可用的游標移動、複製貼上、搜尋替換等

移動游標的方法
h 或 向左箭頭鍵(←) 游標向左移動一個字元
j 或 向下箭頭鍵(↓) 游標向下移動一個字元
k 或 向上箭頭鍵(↑) 游標向上移動一個字元
l 或 向右箭頭鍵(→) 游標向右移動一個字元
[Ctrl] + [f] 螢幕『向下』移動一頁,相當於 [Page Down]按鍵 (常用)
[Ctrl] + [b] 螢幕『向上』移動一頁,相當於 [Page Up] 按鍵 (常用)
[Ctrl] + [d] 螢幕『向下』移動半頁
[Ctrl] + [u] 螢幕『向上』移動半頁
+ 游標移動到非空格符的下一行
- 游標移動到非空格符的上一行
n< space> 那個 n 表示『數字』,例如 20 。按下數字後再按空格鍵,游標會向右移動這一行的 n 個字元。
0 或功能鍵[Home] 這是數字『 0 』:移動到這一行的最前面字元處 (常用)
$ 或功能鍵[End] 移動到這一行的最後面字元處(常用)
H 游標移動到這個螢幕的最上方那一行的第一個字元
M 游標移動到這個螢幕的中央那一行的第一個字元
L 游標移動到這個螢幕的最下方那一行的第一個字元
G 移動到這個檔案的最後一行(常用)
nG n 為數字。移動到這個檔案的第 n 行。例如 20G 則會移動到這個檔案的第 20 行(可配合 :set nu)
gg 移動到這個檔案的第一行,相當於 1G 啊!(常用)
n< Enter> n 為數字。游標向下移動 n 行(常用)
搜尋替換
/word 向光標之下尋找一個名稱為 word 的字串。例如要在檔案內搜尋 vbird 這個字串,就輸入 /vbird 即可!(常用)
?word 向光標之上尋找一個字串名稱為 word 的字串。
n 這個 n 是英文按鍵。代表重複前一個搜尋的動作。舉例來說, 如果剛剛我們執行 /vbird 去向下搜尋 vbird 這個字串,則按下 n 後,會向下繼續搜尋下一個名稱為 vbird 的字串。如果是執行 ?vbird 的話,那麼按下 n 則會向上繼續搜尋名稱為 vbird 的字串!
N 這個 N 是英文按鍵。與 n 剛好相反,為『反向』進行前一個搜尋動作。例如 /vbird 後,按下 N 則表示『向上』搜尋 vbird 。
刪除、複製與貼上
x, X 在一行字當中,x 為向後刪除一個字元 (相當於 [del] 按鍵), X 為向前刪除一個字元(相當於 [backspace] 亦即是退格鍵) (常用)
nx n 為數字,連續向後刪除 n 個字元。舉例來說,我要連續刪除 10 個字元, 『10x』。
dd 刪除遊標所在的那一整行(常用)
ndd n 為數字。刪除游標所在的向下 n 行,例如 20dd 則是刪除 20 行 (常用)
d1G 刪除游標所在到第一行的所有資料
dG 刪除游標所在到最後一行的所有資料
d$ 刪除遊標所在處,到該行的最後一個字元
d0 那個是數字的 0 ,刪除遊標所在處,到該行的最前面一個字元
yy 複製遊標所在的那一行(常用)
nyy n 為數字。複製游標所在的向下 n 行,例如 20yy 則是複製 20 行(常用)
y1G 複製遊標所在行到第一行的所有資料
yG 複製遊標所在行到最後一行的所有資料
y0 複製游標所在的那個字元到該行行首的所有資料
y$ 複製游標所在的那個字元到該行行尾的所有資料
p, P p 為將已複製的資料在游標下一行貼上,P 則為貼在遊標上一行!舉例來說,我目前游標在第 20 行,且已經複製了 10 行資料。則按下 p 後, 那 10 行資料會貼在原本的 20 行之後,亦即由 21 行開始貼。但如果是按下 P 呢?那麼原本的第 20 行會被推到變成 30 行。(常用)
J 將游標所在行與下一行的資料結合成同一行
c 重複刪除多個數據,例如向下刪除 10 行,[ 10cj ]
u 復原前一個動作。(常用)
[Ctrl]+r 重做上一個動作。(常用)

第二部分:一般模式切換到編輯模式的可用的按鈕說明

進入輸入或取代的編輯模式
i, I 進入輸入模式(Insert mode):i 為『從目前游標所在處輸入』, I 為『在目前所在行的第一個非空格符處開始輸入』。(常用)
a, A 進入輸入模式(Insert mode):a 為『從目前游標所在的下一個字元處開始輸入』, A 為『從游標所在行的最後一個字元處開始輸入』。(常用)
o, O 進入輸入模式(Insert mode):這是英文字母 o 的大小寫。o 為『在目前游標所在的下一行處輸入新的一行』;O 為在目前游標所在處的上一行輸入新的一行!(常用)
r, R 進入取代模式(Replace mode):r 只會取代游標所在的那一個字元一次;R會一直取代游標所在的文字,直到按下 ESC 為止;(常用)
[Esc] 退出編輯模式,回到一般模式中(常用)

第三部分:一般模式切換到指令行模式的可用的按鈕說明

指令行的儲存、離開等指令
:w 將編輯的資料寫入硬碟檔案中(常用)
:w! 若檔案屬性為『只讀』時,強制寫入該檔案。不過,到底能不能寫入, 還是跟你對該檔案的檔案許可權有關啊!
:q 離開 vi (常用)
:q! 若曾修改過檔案,又不想儲存,使用 ! 為強制離開不儲存檔案。
注意一下啊,那個驚歎號 (!) 在 vi 當中,常常具有『強制』的意思~
:wq 儲存後離開,若為 :wq! 則為強制儲存後離開 (常用)
ZZ 這是大寫的 Z 喔!若檔案沒有更動,則不儲存離開,若檔案已經被更動過,則儲存後離開!
:w [filename] 將編輯的資料儲存成另一個檔案(類似另存新檔)
:r [filename] 在編輯的資料中,讀入另一個檔案的資料。亦即將 『filename』 這個檔案內容加到遊標所在行後面
:n1,n2 w [filename] 將 n1 到 n2 的內容儲存成 filename 這個檔案。
:! command 暫時離開 vi 到指令行模式下執行 command 的顯示結果!例如 『:! ls /home』即可在 vi 當中看 /home 底下以 ls 輸出的檔案資訊!
:set nu 顯示行號,設定之後,會在每一行的字首顯示該行的行號
:set nonu 與 set nu 相反,為取消行號!

使用者組管理

/etc/group

組的增刪改就是對/etc/group檔案的更新

groupadd建立使用者組

-g 指定使用者組id

groupmod

-g 520 修改指定使用者組id

group -n 修改使用者組名稱

groupdel刪除使用者組

切換使用者組
$ newgrp root
/etc/passwd
使用者名稱:口令(密碼):使用者標識號:組標識號:註釋性描述:主目錄:登入Shell

/etc/shadow

把加密後的口令存放到裡面,保證安全性!

賬號管理

useradd -m新增使用者
  • -c comment 指定一段註釋性描述。

  • -d 目錄 指定使用者主目錄,如果此目錄不存在,則同時使用-m選項,可以建立主目錄。

  • -g 使用者組 指定使用者所屬的使用者組。

  • -G 使用者組,使用者組 指定使用者所屬的附加組。

  • -m 使用者目錄如不存在則自動建立。

  • -s Shell檔案 指定使用者的登入Shell。

  • -u 使用者號 指定使用者的使用者號,如果同時有-o選項,則可以重複使用其他使用者的標識號。

userdel -r刪除使用者

usermod修改使用者

引數和useradd一樣

切換使用者

exit 回到root使用者

hostname 檢視或者修改主機名,修改完重新連線就行

使用者口令的管理(黑客原理)

使用者管理的一項重要內容是使用者口令的管理。使用者賬號剛建立時沒有口令,但是被系統鎖定,無法使用,必須為其指定口令後才可以使用,即使是指定空口令。

指定和修改使用者口令的Shell命令是passwd。超級使用者可以為自己和其他使用者指定口令,普通使用者只能用它修改自己的口令。

命令的格式為:

passwd 選項 使用者名稱

可使用的選項:

  • -l 鎖定口令,即禁用賬號。

  • -u 口令解鎖。

  • -d 使賬號無口令。

  • -f 強迫使用者下次登入時修改口令。

如果預設使用者名稱,則修改當前使用者的口令。

例如,假設當前使用者是kuangshen,則下面的命令修改該使用者自己的口令:

$ passwd 
Old password:******
New password:*******
Re-enter new password:*******

如果是超級使用者,可以用下列形式指定任何使用者的口令:

# passwd kuangshen
New password:*******
Re-enter new password:*******

普通使用者修改自己的口令時,passwd命令會先詢問原口令,驗證後再要求使用者輸入兩遍新口令,如果兩次輸入的口令一致,則將這個口令指定給使用者;而超級使用者為使用者指定口令時,就不需要知道原口令。

為了系統安全起見,使用者應該選擇比較複雜的口令,例如最好使用8位長的口令,口令中包含有大寫、小寫字母和數字,並且應該與姓名、生日等不相同。

為使用者指定空口令時,執行下列形式的命令:

# passwd -d kuangshen

此命令將使用者 kuangshen的口令刪除,這樣使用者 kuangshen下一次登入時,系統就不再允許該使用者登入了。

passwd 命令還可以用 -l(lock) 選項鎖定某一使用者,使其不能登入,例如:

# passwd -l kuangshen

磁碟管理

df,du

df 列出檔案系統的整體磁碟使用量

df -h 按照M或者G檢視容量

du 檢查單個目錄使用量

du -a 檢查單個目錄使用量包含子目錄

du -sm /*檢查根目錄下每個目錄所佔用的容量

掛載解除安裝

mount掛載

將外部裝置yang掛載到mnt目錄下

umount解除安裝

引數

-f :強制卸除!可用在類似網路檔案系統 (NFS) 無法讀取到的情況下;

-n :不升級 /etc/mtab 情況下卸除。

程序管理

ps -aux|grep 檢視所有程序

|管道符

ps -aux|grep 名稱 檢視指定名稱程序(重點)

ps -aux檢視所有程序

ps -a檢視當前程序

ps -u以使用者資訊檢視程序

ps -x顯示後臺程序引數

ps -ef 檢視父程序

ps -ef |grep 名稱 檢視指定父程序資訊

pstree -pu樹形顯示

檢視程序清晰易懂,推薦使用

-p顯示父id

-x顯示使用者組

kill -9 結束程序

kill -9 程序id 結束程序

例如java死迴圈

jdk安裝(rpm安裝)

1、rpm下載地址http://www.oracle.com/technetwork/java/javase/downloads/index.html

2、如果有安裝openjdk 則解除安裝

[root@kuangshen ~]# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
# 檢查
[root@kuangshen ~]# rpm -qa|grep jdk
jdk1.8.0_121-1.8.0_121-fcs.x86_64
# 解除安裝 -e --nodeps 強制刪除
[root@kuangshen ~]# rpm -e --nodeps jdk1.8.0_121-1.8.0_121-fcs.x86_64
[root@kuangshen ~]# java -version
-bash: /usr/bin/java: No such file or directory # OK

3、安裝JDK

# 安裝java rpm
[root@kuangshen kuangshen]# rpm -ivh jdk-8u221-linux-x64.rpm

# 安裝完成後配置環境變數 檔案:/etc/profile
JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME
# 儲存退出

# 讓新增的環境變數生效!
source /etc/profile

# 測試 java -version
[root@kuangshen java]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

Tomcat安裝(解壓縮安裝)

1、安裝好了Java環境後我們可以測試下Tomcat!準備好Tomcat的安裝包!

2、將檔案移動到/usr/tomcat/下,並解壓!

[root@kuangshen kuangshen]# mv apache-tomcat-9.0.22.tar.gz /usr
[root@kuangshen kuangshen]# cd /usr
[root@kuangshen usr]# ls
apache-tomcat-9.0.22.tar.gz
[root@kuangshen usr]# tar -zxvf apache-tomcat-9.0.22.tar.gz # 解壓

3、執行Tomcat,進入bin目錄,和我們以前在Windows下看的都是一樣的

# 執行:startup.sh -->啟動tomcat
# 執行:shutdown.sh -->關閉tomcat
./startup.sh
./shutdown.sh

4、確保Linux的防火牆埠是開啟的,如果是阿里雲,需要保證阿里雲的安全組策略是開放的!

# 檢視firewall服務狀態
systemctl status firewalld

# 開啟、重啟、關閉、firewalld.service服務
# 開啟
service firewalld start
# 重啟
service firewalld restart
# 關閉
service firewalld stop

# 檢視防火牆規則
firewall-cmd --list-all # 檢視全部資訊
firewall-cmd --list-ports # 只看埠資訊

# 開啟埠
開埠命令:firewall-cmd --zone=public --add-port=80/tcp --permanent
重啟防火牆:systemctl restart firewalld.service

命令含義:
--zone #作用域
--add-port=80/tcp #新增埠,格式為:埠/通訊協議
--permanent #永久生效,沒有此引數重啟後失效

安裝Docker(yum安裝)

基於 CentOS 7 安裝

  1. 官網安裝參考手冊:https://docs.docker.com/install/linux/docker-ce/centos/

  2. 確定你是CentOS7及以上版本

    [root@192 Desktop]# cat /etc/redhat-release
    CentOS Linux release 7.2.1511 (Core)
  3. yum安裝gcc相關(需要確保 虛擬機器可以上外網 )

    yum -y install gcc
    yum -y install gcc-c++
  4. 解除安裝舊版本

    yum -y remove docker docker-common docker-selinux docker-engine
    # 官網版本
    yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine
  5. 安裝需要的軟體包

    yum install -y yum-utils device-mapper-persistent-data lvm2
  6. 設定stable映象倉庫

    # 錯誤
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    ## 報錯
    [Errno 14] curl#35 - TCP connection reset by peer
    [Errno 12] curl#35 - Timeout

    # 正確推薦使用國內的
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  7. 更新yum軟體包索引

    yum makecache fast
  8. 安裝Docker CE

    yum -y install docker-ce docker-ce-cli containerd.io
  9. 啟動docker

    systemctl start docker
  10. 測試

    docker version

    docker run hello-world

    docker images

寶塔面板安裝

https://www.bilibili.com/video/av91821322