linux複習技能彙總
linux基礎命令
linux編譯python3與虛擬環境統一開發、線上環境
python web項目部署 uwsgi+nginx
nginx反向代理 多虛擬主機 負載均衡配置
crm用nginx反向代理部署,靜態文件處理
前後端分離項目部署 vue + drf + mysql + nginx + redis
redis基礎數據類型 主從賦值 哨兵 集羣 數據持久化
docker容器基礎 鏡像 倉庫 容器管理 dockerfile構建鏡像
消息隊列rabbitmq
運維自動化軟件
http://linux.51yip.com linux在線查詢
ls -a 顯示隱藏的文件
ll 等於 ls -l
date -f 格式化linux時間
shutdown 關機命令
cat 查看文件內容
pwd 查看當前所在工作目錄
mkdir 創建文件見 mkdir -p /s21/douyin/haohaio
echo 相當於print 能夠輸出變量的值 輸出PATH的值 echo $PATH $符號是取出linux變量值的符號
ifconfig 查看linux的網卡信息
free -m 查看linux內存信息
vim linux的文本編輯器
yum linux軟件包管理器 yum install nginx/redis
rm -rf rm是刪除命令 -r 遞歸刪除文件 -f 不提示強制刪除
rm -rf /* 刪庫到跑路,慎用!!!!
rm -rf /* 刪庫到跑路,慎用!!!!
rm -rf /* 刪庫到跑路,慎用!!!!
cd 切換文件夾
cp 複製文件 文件夾
source 加載 執行linux腳本內容 source test.sh
history 查看linux歷史命令
chgrp 修改文件的組信息 chgrp alex test.txt
wc 統計文件文本數據
tail 默認顯示文本後10行 tail -f file.txt 實時刷新文件
tr 切換刪除字符
tar
打包 /tmp下所有的內容 叫做 alltmp.tar
tar -cvf
-c 打包文件
-v 顯示打包過程
-f 必須寫在參數結尾,指定壓縮壓縮文件名字
tar -cvf alltmp.tar /tmp/*
tar 壓縮且打包,節省磁盤空間
tar -zcvf 壓縮文件名 你要壓縮的內容
lsattr 查看文件是否加鎖
取出文件的鎖
[root@wupeiqi tmp]#lsattr jiangyi/
-----a---------- jiangyi/a.txt
find 查找的命令
#找噹噹前目錄下 所有的 .py文件
#語法:find 從哪找 參數 你要找什麼
find . -type f -name "*.py"
-name 指定文件名字
-type 指定文件類型 f 是文本 d是文件夾
cut 切割輸出信息
touch 創建文本
man linux的幫助文檔
ln 創建鏈接
mv 移動文件,文件夾
stat 查看文件詳細信息
kill 殺死進程 kill -9 pid 進程id號
ps 查看linux進程信息
sort 排序
tree 以樹狀圖顯示文件目錄結構
gz 壓縮
grep 過濾字符信息的
#找到django的配置信息,是否允許所有主機訪問
settings.py
ALLOW_HOSTS=['*']
grep 你想要的內容 從哪給文件找
grep -i "allow" settings.py
-i忽略大小寫
chown 更改文件屬主,更改user
tr 刪除
ssh-key -gen 創建ssh密鑰
whoami 我是誰,查看當前登陸的用戶是誰
iptables -F 清空防火強規則
more 分頁顯示文本內容
which 顯示linux命令的絕對路徑
which python3 #which會去path變量中尋找,是否有python3
/opt/python36/bin/python3
wget 在線下載一個資源
wget http://pythonav.cn/xiaobo.jpg 在線下載一個圖片
#linux和windows互相傳遞文件的方式
- yum install lrzsz 這個工具
- sz (send 發送文件)
- rz (recive 接收文件)
- xftp
useradd 創建系統用戶 uid用戶id
#linux用戶信息存放文件是?
/etc/passwd #用戶信息在這
通過useradd創建的用戶id默認從1000開始
root的uid是0,代表他是超級用戶
id root #查看root的信息
/etc/ linux的默認配置文件目錄
通過yum安裝軟件,默認的配置文件都會放在這
/etc/my.cnf
/etc/nginx.conf
/etc/ 存放配置文件的
/opt/ 存放第三方自行安裝的軟件的目錄,約定俗稱
/root root的家目錄,皇宮,普通用戶無權訪問
/tmp linux的臨時文件夾,數據不重要
/usr 常見的命令放在/usr/bin/ls /usr/bin/cd
/home 普通用戶的統一管理家目錄
diff 比較文件區別
df 查看磁盤信息
uptime 顯示系統運行時間,負載情況
w 顯示登陸的所有用戶身份
mount 掛載磁盤目錄
rpm linux的軟件包管理命令,這個很low,很爛別用,用yum
sudo linux用戶的尚方寶劍 ,
pengpeng 普通用戶
sudo linux的提權命令,以root身份去執行命令,需要提前配置才能用
配置步驟
1.打開sudoers文件,添加配置信息
vim /etc/sudoers
2.添加用戶信息
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
xiaofeng ALL=(ALL) NOPASSWD: ALL
jy ALL=(ALL) NOPASSWD: ALL
3.此時 jy 和xiaofeng用戶已經可以使用sudo了
4. visudo 也是打開/etc/sudoers文件,但是它提供語法檢測功能
1.python3編譯安裝,通過虛擬環境管理django項目
1.python3在linux下的編譯過程
2.首先解決環境依賴問題,如gcc編譯工具等
得先保證yum源配置好
配置步驟
1.打開阿里雲開源鏡像站的官網https://opsx.alibaba.com/mirror
2.獲取cengtos的yum源
#yum源的工作目錄,/etc/yum.repos.d目錄下,只要在這個目錄下名字叫做repo的文件,都會被yum取讀取
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
3.獲取epel的yum源(第三方軟件倉庫,如nginx,redis等等)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2.解決編譯python3的基礎環境依賴
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
3.下載python3源碼包
wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tar.xz
4.解壓縮源代碼包,進入py源代碼包,開始編譯三部曲
1.第一曲 [執行configure腳本文件,指定安裝路徑] ,釋放makefile編譯文件 ,讓gcc工具去編譯的
[root@wupeiqi Python-3.6.7]#./configure --prefix=/opt/s21/python367/
2.第二曲 ,指定make指令,讀取makefile,開始編譯
3.第三曲,執行make install ,開始安裝python3,這一步會生成python3解釋器
make && make install
5.編譯完成之後,配置path環境變量,讓系統可以補全python3的命令
#獲取當前環境變量
[root@wupeiqi bin]#echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#添加python3的環境變量,注意,要添加到開頭
#添加python3的環境變量,注意,要添加到開頭
#添加python3的環境變量,注意,要添加到開頭
#添加python3的環境變量,注意,要添加到開頭
#添加python3的環境變量,注意,要添加到開頭
#添加python3的環境變量,注意,要添加到開頭
注意要寫入到全局變量配置文件中,每次開機都加載/etc/profile中
vim /etc/profile 到最低行,加入如下配置
PATH='/opt/s21/python367/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin'
注意,修改完畢/etc/profile 必須 source讀取一下
source /etc/profile
6.安裝虛擬環境,管理python的解釋器
1.安裝虛擬環境工具,裝在物理解釋器地下
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
2.通過命令創建虛擬環境
virtualenv --no-site-packages --python=python3 虛擬環境的名字
--no-site-packages 創建乾淨隔離的虛擬環境,沒有任何模塊
--python=python3 #指定以哪個解釋器去分身
virtualenv --no-site-packages --python=python3 s21Django1
3.激活虛擬環境,進入虛擬環境,無論是否激活python虛擬環境,影響的只是python相關的東西,和操作系統無關
3.激活虛擬環境,進入虛擬環境,無論是否激活python虛擬環境,影響的只是python相關的東西,和操作系統無關
3.激活虛擬環境,進入虛擬環境,無論是否激活python虛擬環境,影響的只是python相關的東西,和操作系統無關
3.激活虛擬環境,進入虛擬環境,無論是否激活python虛擬環境,影響的只是python相關的東西,和操作系統無關
source s21Django1/bin/activate
4.在虛擬環境下,啓動crm項目
-上傳crm代碼到linux服務器
5.激活虛擬環境,安裝django1.11.11
source s21Django1/bin/activate
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django==1.11.1
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pymysql
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django-multiselectfield
6.安裝mariadb
yum install mariadb-server mariadb -y
7.啓動mariad,通過yum安裝的軟件,都可以用systemctl管理
systemctl start maridab
8.解決完畢問題之後,啓動python項目,注意防火牆,ALLOW_HOSTS相關的修改
8.解決完畢問題之後,啓動python項目,注意防火牆,ALLOW_HOSTS相關的修改
8.解決完畢問題之後,啓動python項目,注意防火牆,ALLOW_HOSTS相關的修改
python3 manage.py runserver
9.可以退出虛擬環境了
deactivate
#python導出requirement.txt文件
#把你當前解釋器所有的模塊信息,導出到一個文件中
pip3 freeze > requirement.txt
#導出後發送此文件給服務器即可
#安裝安裝中的模塊
pip3 install -i https://pypi.douban.com/simple -r requirements.txt
nginx軟件學習
nginx是個web服務器,常用作靜態文件服務器,反向代理服務器,郵件代理服務器,負載均衡服務器
1.安裝淘寶nginx,編代碼編譯安裝,先解決模塊依賴
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
2.獲取淘寶nginx的源代碼
wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz
3.解壓縮源代碼包
tar -zxvf tengine-2.3.2.tar.gz
4.進入源代碼目錄開始編譯三部曲
1.指定安裝路徑
./configure --prefix=/opt/s21/tngx
2.編譯且安裝
make && make install
3.安裝完成之後,進入nginx的目錄,
[root@wupeiqi tngx]#pwd
/opt/s21/tngx
[root@wupeiqi tngx]#ls
conf html logs sbin
conf 存放配置文件 , 指定了這個軟件各種功能的一個文件而已
html 存放前端頁面
logs nginx的運行日誌
sbin nginx的可執行命令目錄
4.進入sbin目錄,啓動nginx
./nginx
./nginx -s stop 停止nginx
./nginx -t 檢查nginx.conf的語法是否正確
./nginx -s reload 不重啓nginx,重新加載nginx配置
nginx的核心學習方式,配置文件學習
1.找到nginx.conf,學習語法
#這裏的所有配置是nginx的核心功能
http {
....
}
2.nginx的訪問日誌功能
http {
include mime.types;
default_type application/octet-stream;
#日誌格式化
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
....
}
3.nginx的虛擬主機配置,核心功能再次
http {
#nginx支持多虛擬主機,只需要寫入多個server關鍵字即可
#虛擬主機1
server {
#基於端口的虛擬主機區分
listen 80;
#基於域名的虛擬主機區分
server_name www.old21.com;
#charset koi8-r;
#access_log logs/host.access.log main;
#access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main;
#這裏是nginx的url匹配,如同django的url規則一樣
#當我的請求時 http://192.168.182.130:81/chouhuo.jpg 這樣的時候,就進入如下location匹配
#這個是最低級的匹配,所有請求都會走到這裏
location / {
#root關鍵字定義虛擬主機的根目錄, 這裏是可以修改的
root /opt/alex/;
#必須保證首頁文件存在
index index.html index.htm;
}
}
#虛擬主機2
server {
listen 80;
server_name www.old22.com;
#charset koi8-r;
#access_log logs/host.access.log main;
#access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main;
#這裏是nginx的url匹配,如同django的url規則一樣
#當我的請求時 http://192.168.182.130/wupeiqi.jpg 這樣的時候,就進入如下location匹配
#這個是最低級的匹配,所有請求都會走到這裏
location / {
#root關鍵字定義虛擬主機的根目錄, 這裏是可以修改的
root /opt/wupeiqi/;
#index參數是定義首頁文件的名字的
index index.html index.htm;
}
}
}
4.nginx的錯誤頁面 404優化
server {
listen 80;
server_name www.old666.com;
#通過這個參數定義即可,
error_page 404 /404.html;
location / {
root /opt/wupeiqi;
index index.html;
}
}
5.nginx反向代理
代理:
用戶,客戶端 中介,代理服務器, 房東,資源服務器
租房的客戶 -> 中介,代理 -> 房東
瀏覽器 -> nginx -> django
環境如下
機器1 192.168.182.130 ,是代理服務器的角色,nginx提供的功能
機器2 192.168.182.131 是資源服務器的角色, nginx靜態資源服務器
反向代理服務器配置如下
1.打開192.168.182.130 機器的nginx.conf,修改爲如下
找到server{}虛擬主機,修改location如下
server {
listen 80;
server_name www.oldchouhuo.com;
#charset koi8-r;
#access_log logs/host.access.log main;
#access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main;
location / {
# root /opt/alex/;
# index index.html index.htm;
#實現反向代理的功能參數
#實現反向代理的功能參數
#實現反向代理的功能參數
proxy_pass http://192.168.182.131;
}
}
6.nginx負載均衡
環境準備
1臺負載均衡服務器,nginx而已 192.168.182.130 是負載均衡服務器
2臺資源服務器
192.168.182.131 資源服務器1 ,返回alex的頁面
192.168.182.132 資源服務器2 ,返回武大郎的頁面
1.準備好2臺資源服務器,本應該提供一樣的數據,進行負載均衡,實驗目的,看到不同的頁面,所以準備不同的頁面數據
192.168.182.131 資源服務器1 ,返回alex的頁面
192.168.182.132 資源服務器2 ,返回武大郎的頁面
2.準備負載均衡服務器,配置如下
在nginx配置文件中,添加如下配置,定義負載均衡池,寫入後端項目地址
默認輪詢方式
upstream mys21django {
server 192.168.182.131;
server 192.168.182.132;
}
#權重方式
upstream mys21django {
server 192.168.182.131 weight=4;
server 192.168.182.132 weight=1;
}
#ip哈希方式,根據用戶的來源ip計算出哈希值,永遠只指派給一個服務器去解析
#ip哈希不得與權重共同使用
#ip哈希不得與權重共同使用
upstream mys21django {
server 192.168.182.131 ;
server 192.168.182.132 ;
ip_hash;
}
#虛擬主機配置如下
server {
listen 80;
server_name www.oldchouhuo.com;
#charset koi8-r;
#access_log logs/host.access.log main;
#access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main;
location / {
# root /opt/alex/;
# index index.html index.htm;
#請求轉發給負載均衡池
proxy_pass http://mys21django;
}
}
項目部署
nginx + uwsgi + django + mysql
1.後端搞起
1.上傳crm項目到linux服務器
2.安裝uwsgi命令,這是python的一個模塊
激活一個虛擬環境去使用
virtualenv --no-site-packages --python=python3 s21uwsgi
pip3 install -i https://pypi.douban.com/simple uwsgi
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django==1.11.1
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pymysql
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django-multiselectfield
2.使用uwsgi的命令,參數形式啓動 crm項目
以往的python3 manage.py runserver 調用wsgiref去啓動django,性能很低,單進程web
使用uwsgi啓動django,可以支持併發,多進程,以及日誌設置,多種功能
#必須在django項目,第一層敲這個命令
uwsgi --http :8000 --module mysite.wsgi
--http 指定是http協議,去啓動項目
--module 指定django目錄下的wsgi文件
#uwsgi支持的熱加載命令
uwsgi --http :9000 --module Aida_crm.wsgi --py-autoreload=1
3.uwsgi以配置文件的形式啓動 ,就是把你的啓動參數,寫入到一個文件中,然後,執行這個文件即可
配置文件名字可以叫做 uwsgi.ini ,內容如下,這個文件是手動生成的
touch uwsgi.ini ,寫入如下內容
[uwsgi]
# Django-related settings
# the base directory (full path)
#填入項目的絕對路徑 ,項目的第一層路徑
chdir = /opt/s21/Aida_crm
# Django's wsgi file
#指定第二層項目下的wsgi文件
module = Aida_crm.wsgi
# the virtualenv (full path)
#找到虛擬環境的絕對路徑
home = /opt/s21/s21uwsgi
# process-related settings
# master
master = true
# 以cpu核數來填寫,uwsgi的工作進程數
processes = 2
# the socket (use the full path to be safe
#這是以uwsgi_socket協議啓動的項目,無法再去通過瀏覽器訪問,必須通過nginx以uwsgi協議去反向代理
#這是以uwsgi_socket協議啓動的項目,無法再去通過瀏覽器訪問,必須通過nginx以uwsgi協議去反向代理
#這是以uwsgi_socket協議啓動的項目,無法再去通過瀏覽器訪問,必須通過nginx以uwsgi協議去反向代理
socket = 0.0.0.0:8000
#也可以使用http協議去啓動(僅用作調試使用)
#也可以使用http協議去啓動(僅用作調試使用)
#也可以使用http協議去啓動(僅用作調試使用)
#http = 0.0.0.0:9000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
#後臺運行參數,將uwsgi運行在後臺,並且將django日誌輸出到uwsgi.log中
daemonize = uwsgi.log
4.指定配置文件啓動django
uwsgi --ini uwsgi.ini
nginx的配置,反向代理uwsgi
1.修改nginx.conf如下
server {
listen 80;
server_name www.oldchouhuo.com;
#charset koi8-r;
#access_log logs/host.access.log main;
#access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main;
location / {
#轉發請求的方式配置在這裏
#轉發請求的方式配置在這裏
#轉發請求的方式配置在這裏
include uwsgi_params;
uwsgi_pass 0.0.0.0:8000;
}
}
2.重新加載nginx,訪問nginx,查看是否反向代理
去瀏覽器訪問nginx的地址,查看能否訪問到crm的內容
3.收集crm的所有靜態文件,丟給nginx去解析
對django的settings.py配置修改如下
添加如下參數
STATIC_ROOT='/opt/s21static'
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
執行命令,收集django的所有靜態文件,系統會自動創建'/opt/s21static' 這個文件夾
python3 manage.py collectstatic
4,配置nginx,找到crm的這些靜態資源
location / {
include uwsgi_params;
uwsgi_pass 0.0.0.0:8000;
}
#添加一個location,針對nginx的url進行匹配處理
#當請求時 www.oldchouhuo.com/static/..... 這樣的url的時候,nginx進行別名修改,去/opt/s21static底下去尋找資源文件
#
location /static {
alias /opt/s21static;
}
5.此時再次訪問網站,查看是否處理了靜態資源
www.oldchouhuo.com
前後端分離的部署筆記
1.後端部署
uwsgi + drf + redis + mysql
2.準備後端代碼
wget https://files.cnblogs.com/files/pyyu/luffy_boy.zip
3.創建且激活新的虛擬環境
virtualenv --no-site-packages --python=python3 s21luffy
4.解決模塊依賴問題,嘗試調試啓動drf後臺
[root@web02 opt]# cat requirements.txt
certifi==2018.11.29
chardet==3.0.4
crypto==1.4.1
Django==2.1.4
django-redis==4.10.0
django-rest-framework==0.1.0
djangorestframework==3.9.0
idna==2.8
Naked==0.1.31
pycrypto==2.6.1
pytz==2018.7
PyYAML==3.13
redis==3.0.1
requests==2.21.0
shellescape==3.4.1
urllib3==1.24.1
uWSGI==2.0.17.1
pip3 -i install https://pypi.douban.com/simple -r requirements.txt
5.使用uwsgi,啓動drf後臺
touch uwsgi.ini
[uwsgi]
chdir = /opt/s21vue+drf/luffy_boy
module = luffy_boy.wsgi
home = /opt/s21vue+drf/s21luffy
master = true
processes = 2
socket = 0.0.0.0:8888
vacuum = true
daemonize = uwsgi.log
2.前端部署
下載前端vue代碼
wget https://files.cnblogs.com/files/pyyu/07-luffy_project_01.zip
vue+nginx的端口 81端口,這是第一個虛擬主機
nginx反向代理端口, 9500 , 這是第二個虛擬主機
drf的後臺端口 8888
訪問步驟:
第一步: 192.168.182.130:81 查看到路飛的首頁內容,是vue的靜態頁面
第二部: 當我點擊 課程列表的時候,vue向後臺發送請求了,發送的地址應該是 192.168.182.130:9500
第三部:此時 nginx的反向代理,轉發請求給了 drf的後臺 8888
3.修改vue的請求發送地址,重要!!!!
3.修改vue的請求發送地址,重要!!!!
3.修改vue的請求發送地址,重要!!!!
3.修改vue的請求發送地址,重要!!!!
修改vue請求地址,向服務器的ip地址發送請求
sed -i "s/127.0.0.1:8000/192.168.182.130:9500/g" src/restful/api.js
參數解釋:
-i 將替換結果寫入到文件
"s/你想替換的內容/替換之後的內容/g" s是替換模式 g是全局替換
4.配置nodejs的解釋器環境,打包編譯vue代碼,生成靜態文件夾dist
#這裏的node代碼包,是二進制包,已經編譯好了,可以直接使用
wget https://nodejs.org/download/release/v8.6.0/node-v8.6.0-linux-x64.tar.gz
#解壓縮node的代碼包
tar -zxvf node-v8.6.0-linux-x64.tar.gz
#配置PATH環境變量
PATH='/opt/s21/python367/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/s21/tngx/sbin:/opt/s21vue+drf/node-v8.6.0-linux-x64/bin'
#檢查node是否可用
[root@wupeiqi bin]#node -v
v8.6.0
[root@wupeiqi bin]#npm -v
5.3.0
5.進入vue代碼目錄,開始編譯代碼,生成dist靜態文件夾
cd /opt/s21vue+drf/07-luffy_project_01/
#開始安裝這個項目所有需要的node模塊,默認去讀取 package.json
npm install
#開始編譯vue代碼,生成dist靜態網頁文件夾,丟給nginx
npm run build
6.在正確生成dist之後,配置nginx
7.nginx配置如下
#這裏配置和luffy學成有關的代碼
#這個是nginx+vue的虛擬主機
server {
listen 81;
server_name localhost;
error_page 404 /404.html;
#請求來到這裏時,返回vue的頁面
location / {
root /opt/s21vue+drf/07-luffy_project_01/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
}
#這個是nginx反向代理,轉發vue請求給drf的虛擬主機
server {
listen 9500;
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass 0.0.0.0:8888;
}
}
8.此時訪問vue地址即可,看到路飛頁面,且可以看到課程列表的數據,可以添加linux,和python的課程,到購物車中,整個部署過程結束