基本操作 pwd命令 作用:顯示當前工作目錄 用法:pwd cd命令 作用:改變目錄位置 用法:cd [option] [dir] cd 目錄路徑 -進入指定目錄 cd .. -返回父目錄 cd / -進入根目錄 cd或cd ~ -進入用戶主目錄 ls命令 用法:ls [option] [file] ...
Linux
絕對和相對路徑
絕對路徑: 以根目錄為起點的路徑
相對路徑: 不是以/這個根目錄為源頭劃分的
xshell快捷鍵:
-
ctrl + l 清屏
-
ctrl + d 退出登錄
-
ctrl + shift + r 快速重新連接
-
win + 空格 切換輸入法
用戶篇:
# 更改用戶名
hostnamectl set-hostname <新的用戶名>
# 登出
logout
零碎Note:
linux的變數賦值不得有空格, 有空格就識別為參數了, example:
name = "zzy"#錯誤
name="zzy"#正確
更改主機名的命令
hostnamectl set-hostname 你想要的主機名
#重新登陸永久生效
動態鏈接庫
LD_LIBRARY_PATH是Linux環境變數名,該環境變數主要用於指定查找共用庫(動態鏈接庫)時除了預設路徑之外的其他路徑
尋找最近的命令
#自下而上尋找最近的命令執行
!ps 代表執行時間最近的一條ps命令
poweroff 關機
reboot 重啟
vim /etc/motd 編輯開機提示語
目錄結構:
命令:
change directory
cd命令:更改目錄的意思
. 當前工作的目錄
.. 上一級工作的目錄
-上一次工作的目錄
~ 當前系統登錄的用戶家目錄
list
ls命令:列出文件對象
-a:顯示出所有內容以及隱藏的文件(ALL)
-l:列出文件詳細信息
-h:與人類可閱讀的方式輸出文件大小
--full-time:以完整的時間格式輸出
-t:根據最後修改時間排序文件
-F:在不同文件結尾,輸出不同的特殊符號
以/結尾的就是文件夾
以*結尾的就是可執行文件
以@結尾的就是軟連接,快捷方式
普通文件類型,結尾什麼都沒有
-d:顯示文件夾本身信息,不輸出其中的內容
-r:reverse 逆向排序
-S:針對文件大小進行排序
-i:顯示文件的inode信息(文件身份證號碼,存儲了文件的元信息[文件的大小,位置,許可權...])
擴展:
ll == ls -l
linux隱藏文件, 以.開頭例如:
.secret
pwd命令: print word directory 列印工作目錄的意思,會輸出當前所處的一個絕對路徑
su:用戶切換命令
語法
su - 用戶名 # 完全的環境變數用戶切換
logout: # 退出當前用戶
新建目錄
makedir
make directory # 創建文件夾
語法:
mkdir 文件夾名
參數用法:
-p:遞歸創建文件夾
例如:mkdir - p /zzy/zzys/zzyss
移動目錄
'move
mv zzy ym # 表示把zzy重命名為ym
mv ./zzy/ym ./ # 表示把當前目錄下zzy裡面的ym移動到當前目錄(./)
新建文件
touch命令
touch zzy.txt zzy.exe
touch alex{1..100} 創建多個文件方式
-t:修改文件的時間 示例:[touch -t zzy.txt 20220606]
man 手冊,解釋linux的命令如何使用
man
ls man
1.複製普通文件
cp zzy.txt
'示例:
cp mjj.txt ./oldboy/ #複製放入其他文件夾,保留源文件名
cp mjj.txt ./oldboy/mjj2.txt #複製文件並放入其他文件夾,且改名
cp mjj.exe mjj.png ./mjj/ #複製多個文件到指定文件夾中
cp -r mjj mjj2 #複製整個文件夾(遞歸賦值)
2.linux查看ip的方式
ifconfig # 查看網卡信息
ip addr show # 顯示出ip網卡的信息
3.linux登錄之後的命令提示符
[root@localhost ~]#
當前系統登陸的用戶名 root
@ 占位符
localhost 當前主機名
~ 當前你所在的路徑
# 超級用戶的身份提示符
$ 普通用戶的身份提示符
4.創建linux普通用戶
useradd zzy <enter>
# 創建的用戶信息會放在 /etc/passwd這個文件下
passwd zzy #修改用戶密碼
5.vim編輯器, 文本編輯器
vi #如同win的記事本
vim #如同notepad++ 支持編程的編輯器
6.vim使用流程:
1.vim file_name // 此時進入了一個命令模式, 等待你輸入相關的命令
2.如果你要編輯,就輸入字母 i , 代表插入, 編輯(insert)
3.寫完代碼後, 退出編輯模式, 按
4.此時回到了命令名, 輸入冒號 : 進入底線命令模式, 輸入 :wq (w:寫入)(q:退出)
:wq! 強制寫入文本且退出vim
:q 不寫入直接強制退出
:w! 只保存寫入, 不退出
echo "zzy" # 向命令行輸出一條消息
7.linux命令語法格式
linux命令 空格 參數(可有可無) 空格 你要操作的對象
linux參數的作用, 就是更好的服務於開發人員, 顯示的更友好
ls -a #顯示全部文件, 包括隱藏文件
ls -la #以列表形式詳細輸出文件信息
8.遞歸創建文件夾信息
mkdir --help
man mkdir
中文man手冊: 'http://linux.51yip.com'
mkdir -p
--------需求:創建s19文件夾, 下級有男同學, 女同學, 且女同學有個girl
mkdir -p /tmp/s19/{nantongxue,nvtongxue/girl}
9.linux安裝tree命令
yum install terr # linux-包管理器
10.linux特殊符號的含義
~ 用戶家目錄
- 上一次的工作目錄
. 當前目錄
.. 上一級目錄
./ 當前工作目錄
> 重定向覆蓋輸出符號 w-模式
--example: echo "zzy" > zzy.txt
--解釋:等於寫入zzy這句話到zzy.txt文件中, 如果zzy不存在則創建這個文件, 等同於py中的w模式
>> 重定向追加輸出符號 a-模式
--example: echo "zzy" >> zzy.txt
--解釋:等於追加zzy這句話到zzy.txt文件中, 不會覆蓋之前的內容
<< 重定向追加寫入符號(EOF->End Of File)
--example: cat >>shi.txt<<EOF
>#!coding:utf-8
>print('hello world')
>EOF
--解釋:EOF一般會配合cat能夠多行文本輸出, 第一行為命令, 2,3行為輸入的文本, 最後EOF代表結束.
cat命令-文本
cat -n /etc/passwd # 查看文本並顯示行號
11.more less
用於查看很大的文本, cat讀取文件, 是一次性讀取, 非常占記憶體, 用於讀取小文本
more zzy.txt # 分頁形式查看文本文件, 每次按下<enter>相當於下一頁
12.linux下的搜索命令
`語法:
find 從哪找 -name 你要找的文件名
`參數:
-name 指定文件名字
-type 自定文件類型 f 文本類型 d 文件夾類型
`example:
find / -name heeh.txt # 全局搜索
find /zzy1997 heeh.txt # 局部搜索
`解釋:
可以從根目錄尋找, 也可以從目標文件的上面的任何一級目錄尋找
`進階1:
找出zzy1997目錄下的所有txt文件
find /zzy1997 -name *.txt # 通配符
`進階2:
找出zzy1997目錄下的所有python相關的文件信息
find /zzy1997 -name
`進階3:
找出zzy1997目錄下的與python相關的文件, 目錄
find ./ python -type d -name python* #找目錄
find ./ python -type f -name python* #找文件
`查看命令的歷史記錄:
history
13.linux管道符的用法
`語法:
第一條命令 | 第二條命令
`用於:
常用於查看linux進程信息
查看linux埠信息
`查看進程信息:
ps -ef | grep python
`查看linux埠信息:
netstat -tunlp | grep 3306 #確認mysql是否啟動了3306埠
netstat -tunlp | grep 8000 #驗證django是否正常啟動
`ip:
表示電腦在網路中地址的號碼 0~255 ip範圍 192.168.16.37 192.168.16.xx 這是大家的windows地址
`port:
表示應用服務的埠
80 http web服務埠
443 https 加密的http
3306 mysql
8000 django
22 ssh協議用的埠
...
#STDOUT:標準輸出
#STDIN:標準輸入
14.過濾字元串命令, 過濾文本信息
語法:
grep 參數 你要過濾的字元串 你要操作的文件
參數:
-i 忽略大小寫
-v 是反轉搜索結果
題目:
過濾調settings.py中無用的信息(空白行, 註釋行)
grep -v "^#" settings.py | grep -v "^$"
註意: $是null的意思
15.從文件的起始和結尾閱覽內容
語法:
head -5 <file_name> # 看文件的前5行
tail -5 <file_name> # 看文件的後5行
攜帶參數:
tail -f <file_name> # 實時監測文件信息(flush)
16.運維開發的職責
後端開發, crm開發, 面向的是誰, 你的產品, 面向人類
運維開發做什麼事? 運維+開發, 面向的是機器
監控平臺開發, 主流監控軟體 zabbix, nagios, 監控軟體, 監控伺服器狀態
cmdb資產平臺開發
運維堡壘機開發, 保護伺服器安全
容器管理平臺, 如: docker容器技術
17.別名alias
前言:
如何做到當你輸入rm, 就提示用戶, 你個大傻x, 求你別用rm了.
語法:
alias # 顯示各種命令的詳情
alias rm="remove" # 把rm命令的名字變為remove
alias rm="echo 哈哈哈" #把rm命令的-i提示語變成->哈哈哈
取消別名:
unalias rm # 取消rm的別名設置
alias rm="rm -i" #或者重新賦值回之前預設的名稱
18.遠程傳輸命令
可以在兩台linux之間互相傳遞文件
語法:
scp <你想傳輸的內容> <你想傳到的地方> # 上傳
scp <你想要的內容> <存放的目錄> # 下載
可選參數:
scp <arg>
-r 遞歸複製整個目錄
-v 詳細方式輸出
-q 不顯示傳輸進度條
-c 允許壓縮
example:
scp word.txt [email protected]:/tmp #上傳
scp [email protected]:/tmp/word.txt /opt #下載
19.如何統計/var/log文件夾大小(查看文件夾大小)
方式1:
ls -lh #詳實的顯示當前文件信息,和大小單位
方式2:
du 命令
-h 顯示 kb mg gb 單位
-s 顯示合計大小
example:
du -sh /var/log # 顯示var/log文件夾合計大小並帶單位顯示
20.linux的任務管理器
top
21.給文件加鎖 解鎖
chattr +a 文件名 #給文件加鎖
lsattr 文件 # 查看文件隱藏屬性
22.linux的時間同步
date #查看當前系統時間
ntpdate -u ntp.aliyun.com #和阿裡雲的時間伺服器同步(-u: update)
23.wget命令
```web get線上下載一個資源
wget url #下載資源到本地
'遞歸深層
wget -r -p http:luffycity.com # 遞歸, url遞歸深層爬取
24.linux和windows互傳文件的軟體 lrzsz
yum install lrzsz -y
命令:
rz #接收文件(從win中接收文件)
sz # =發送給文件(發送linux文件給win)
example:
sz csdn.png
可以從win中拖文件到shell命令行直接發送文件到linux端
25.linux下如何安裝python3
1.yum安裝
2.rpm包安裝,需要手動解決依賴關係,很噁心
3.源代碼編譯安裝(公司都用這種方式), 可以自定義軟體版本, 以及功能擴展
編譯安裝python3的步驟:
1.下載python3的源代碼
wget https://www.python.org/ftp/python/3.10.7/Python-3.10.7.tgz
2.解壓縮源代碼
tar -xf Python-3.10.7.tgz
# tar是解壓縮的命令
# -x是解壓參數
# -f指定一個解壓縮文件的名字
3.必須解決編譯安裝所需的軟體依賴,比如OS的gcc等
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
4.解決了軟體依賴關係, 就可以編譯安裝了
1.釋放makefile,釋放編譯文件
cd Python-3.10.7/
./configure --prefix=/opt/python310/#告訴編譯器,python3安裝到哪裡(prefix: 指定安裝路徑)
2.執行make指令,開始編譯,編譯完成後進行安裝
make && make install
3.配置python310環境變數
echo $PATH #顯示系統環境變數
pwd #獲取當前python.exe位置 -> /opt/python310/bin
PATH="/opt/python310/bin://usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin" #添加python環境變數
# 但以上方式都是臨時生效(臨時賦值), 一旦重啟linux就會銷毀, 永久生效需要寫入到linux 全局變數配置文件中/etc/profile
vim /etc/profile
#在最底行寫入以下配置即可(相當於簽訂協議)
PATH="/opt/python310/bin://usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
# 然後讀取配置文件生效(給協議蓋章生效)
source /etc/profile
Tips: [
PATH:
每個command其實都存在一個目錄里如/usr/local/bin...
可以用 which ls來查看->
alias ls='ls --color=auto'
/usr/bin/ls
在Linux下很多命令是用python2寫的,請不要擅自更改python為python3, 這樣會導致很多命令無法使用, 必須使用python3或python3.x來運行你想要的版本
]
26.linux切換用戶
su <user_name>
su root
su zzy
在python中一個文件夾下有__init__.py文件, 那麼這個目錄我們稱之為包
linux下進行django開發
1.創建django項目
django-admin startproject my_site
2.修改django配置
127.0.0.1 #本機迴環地址, 只能自己訪問到自己, 每台機器都有
0.0.0.0 #代表綁定這台機器所有的網卡,所有人均可訪問(因為一臺機器有不同的ip地址)
192.168.44.148 vlan0
vlan1
...
'關閉linux防火牆'
iptables -F #清空防火牆規則
systemctl stop firewalld #禁用防火牆
systemctl disable firewalld #禁用防火牆永久
修改settings.py 參數allowed_host允許為 -> "*"
3.運行django項目
python3 manage.py runserver 0.0.0.0:8000 #如果項目啟動在這個地址上, 綁定了這個機器的所有ip, 自己可以通過 127.0.0.1:8000
4.編寫一個下課試圖, 返回一個大家51快樂, 玩的嗨皮
27.網路
1.管理網路的命令
如果發現自己沒有ip地址
1.保證vmware的網路小電腦亮著,如同插上了網線
2.管理網路的文件夾路徑:
/etc/sysconfig/network-scripts/
3.查看管理網路的文件內容
ifcfg-ens33 這個就是網卡的配置文件了
4.確保一個參數是yes
ONBOOT="yes" #代表機器啟動時,就載入ip地址
5.通過命令重啟網卡
systemctl restart network
系統服務管理命令 重啟 網路服務
2.啟停網卡的快捷命令
ifup
ifdown
3.linux的用戶限權篇
qq群角色分配
超級用戶: 群主 root
擁有超級用戶許可權的人: 管理員 sudo 加上你的命令 (臨時提權)
渣渣用戶: 普通成員
許可權的目的:便於管理
創建用戶
useradd
更改用戶密碼
passwd <用戶名>
root用戶就是皇帝, 他的皇宮就在/root
普通用戶,只有一個小破房子, 還是統一管理的地方/home
普通用戶信息都存放到了/etc/passwd
4.查看linux用戶的身份id信息
語法:
id <用戶名> #查看用戶身份id
效果:
[root@localhost etc] id zzy
uid=1000(zzy) gid=1000(zzy) 組=1000(zzy),10(wheel)
解析:
uid 用戶id號碼
gid group id 用戶組 id
groups 組id好碼
系統超級用戶uid預設是0
系統常用服務的用戶 系統more會創建mysql用戶,去執行mysql這個軟體,他的id是從1-999之間
root創建的普通用戶, 預設id是從1000開始的
用戶組:一組同樣身份信息的用戶
用戶, 普通用戶
5.root可以隨便更改別人的密碼, 普通用戶不行
6.用戶切換
root可以隨意切換普通用戶
普通用戶切換必須輸入密碼
su - zzy #切換用戶(全切換,包括環境變數信息......)
7.臨時提權的命令
1.修改sudoers配置文件, 把你想提權的用戶寫入進去
vim /etc/sudoers
2.寫入如下信息, 可以定位到那一行
## Allow root to run any commands anywhere
zzy ALL=(ALL) ALL #允許zzy在任何地方, 執行任何命令
8.刪除用戶
userdel刪除用戶
參數:
-f 強制刪除用戶
-r 同時刪除用戶及家目錄
userdel -r pyyu
tips:
如果直接 userdel zzy ,只會刪除zzy用戶在/etc/passwd存放的用戶信息, 而用戶的家目錄會保留
9.linux的文件許可權
'文件擁有者分為三類
屬主 users
屬組 group
其他人 other
'許可權主要分三重身份:
* user/owner 文件使用者,文件屬於哪個用戶
* group 屬組,文件屬於哪個組
* others既不是user, 也不是group, 就是other, 其他人
-rw-r--r--. 1 root root 0 1月 11 16:55 haha.txt
限權 文件鏈接數 屬主 屬組 文件大小 修改日期時間 文件名
'什麼是限權:
在Linux中每個文件都有所屬的所有者,和所有組,並且規定了文件的所有者,所有組以及其他人對文件的, 可讀, 可寫, 可執行等許可權.
對於目錄的許可權來說,可讀是讀取目錄文件列表,可寫是表示在目錄內新增,修改,刪除文件,可執行表示可以進入目錄
'文件讀寫執行命令:
cat 讀
vim echo 寫
./文件 直接運行可執行文件, 以絕對路徑和相對路徑
sh first.sh #用linux自帶的shell腳本執行
'文件夾的讀寫執行:
ls 讀
touch 寫入文件到文件夾
cd 允許進入文件夾, 代表可執行
'linux的文件分類:
- 普通文本
d 文件夾/目錄
l 軟連接
'文件/文件夾的許可權:
r read可讀,可以用cat命令查看
w write寫入,可以編輯或刪除這個文件
x executable 可以執行
'實例解釋->
-rw-r--r--. 1 root root 0 1月 11 16:55 haha.txt
#-表示文本文件, rw指這個文件的屬主root用戶是可讀可寫但不可執行, 中間的r--表示只讀(屬組)root這個組的成員都可以讀,後面兩個--表示沒許可權,後面r--指的是其他人對這個文件的許可權是只讀.
10.更改文件許可權
chmod 許可權 文件/文件夾許可權
-rw-r--rw-. 1 rrot root 79 May 5 09:58 nihao.txt
'解析:
- 普通文本
rw- 指的是root用戶 可讀可寫不可執行(因為這是個文本文件無法執行)
r-- 指的是root組裡的成員, 只讀
rw- 指的是其他人 可讀可寫 不可執行
'實例:
`如何取消所有人對此文件(nihao.txt)的許可權:
chmod u-r,u-w,u-x nihao.txt #改屬主的許可權
chmod g-r,g-w,g-x nihao.txt #改屬組的許可權
chmod o-r,o-w,o-x nihao.txt #改其他人的許可權
`讓文件:nihao.txt 所有角色擁有全部許可權
chmod 777 nihao.txt
限權分為:
r 4
w 2
x 1
限權計算最高是4+2+1=7 最底是0
`練習chmod, 實現如下效果:
---xr---wx. 1 root root 79 May 5 09:58 nihao.txt
chmod 143 nihao.txt
-r--r---wx. 1 root root 79 May 5 09:58 nihao.txt
chmod 443 nihao.txt
tips:
許可權分配 | 文件所有者 | 文件所屬組 | 其他用戶 |
---|---|---|---|
許可權項 | 讀|寫|執行 | 讀|寫|執行 | 讀|寫|執行 |
字元表示 | r|w|x | r|w|x | r|w|x |
數字表示 | 4|2|1 | 4|2|1 | 4|2|1 |
11.更改文件的屬主/屬組
chown <用戶名> <要操作的文件> #更改文件屬主
chgrp <用戶組> <要操作的文件> #更改文件屬組
12.軟連接
語法:
ln -s 目標文件 快捷方式(絕對路徑)
13.linux的命令提示符
PS1變數
echo $PS1 #顯示命令提示符
PS1="[\u@\h \w \t]\$" #修改命令提示符
pyyu:
可以自行調整全局變數/etc/profile文件用於永久生效 PS1='[\u@\h \W\t]\$'
\d 日期
\H 完整主機名
\h 主機名第一個名字
\t 時間24小時制HHMMSS
\T 時間12小時制
\A 時間24小時制HHMM
\u 當前用戶賬號名
\v BASH的版本
\w 完整工作目錄
\W 利用basename取得工作目錄名
\# 下達的第幾個命令
\$ 提示字元,root為#,普通用戶為$
PS1 > 變數名
$PS1 > 查看變數內容
PS1=新內容 重新賦值
變數賦值,查看
name='chaoge'
echo $name
PS1顯示ip地址
export PS1="[\u@\h `/sbin/ifconfig ens33 | sed -nr 's/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'` \w]\$"
14.linux的打包,解壓的命令
tar命令:
'參數:
-A或-catenate 新增文件已存在的備份文件
-B 設置區塊大小
-c或--create 建立新的備份文件
-C <目錄> 這個選項用在解壓縮,若要在特定的目錄解壓縮, 可以使用這個選項
-d:記錄文件的差別;
-x或--extract或--get:從備份文件中還原文件;
-t或--list:列出備份文件的內容;
-z或--gzip或--ungzip:通過gzip指令處理備份文件;
-Z或--compress或--uncompress:通過compress指令處理備份文件;
-f<備份文件>或--file=<備份文件>:指定備份文件;
-v或--verbose:顯示指令執行過程;
-r:添加文件到已經壓縮的文件;
-u:添加改變了和現有的文件到已經存在的壓縮文件;
-j:支持bzip2解壓文件;
-v:顯示操作過程;
-l:文件系統邊界設置;
-k:保留原有文件不覆蓋;
-m:保留文件不被覆蓋;
-w:確認壓縮文件的正確性;
-p或--same-permissions:用原來的文件許可權還原文件;
-P或--absolute-names:文件名使用絕對名稱,不移除文件名稱前的“/”號;
-N <日期格式> 或 --newer=<日期時間>:只將較指定日期更新的文件保存到備份文件里;
--exclude=<範本樣式>:排除符合範本樣式的文件。
'重要:
-c 打包
-x 解包
-z 調用gzip目錄取壓縮文件,節省磁碟空間
-v 顯示打包過程
'實例:
壓縮當前的所有內容到alltmp.atr這個文件中, 這裡不節省磁碟空間
tar -cvf alltmp ./*
壓縮tmp下的zzy文件夾為zzy.tar.gz
tar -zcvf zzy.tar.gz zzy
解壓的方式
tar -zxvf 壓縮文件的名字.tar.gz
打包文件,並且壓縮文件大小的用法
tar -zcvf 壓縮文件的名字.tar.gz
15.django程式起來,如何檢測呢?
1.去瀏覽器檢測是否可以訪問, 127.0.0.1:8000
2.確認django的埠是否啟動
netstat -tunlp | grep 8000
2.確認django的進程是否存在
ps -ef | grep python
16.殺死進程的命令
kill 進程id
kill -9 進程id #強制殺死進程
17.支持正則的kill命令(慎用)
pkill 進程的名字
pkill -9 進程名字 #強制殺死
18.顯示磁碟空間大小
df
df -h 以單位顯示
19.什麼是DNS(功能變數名稱解析系統),其實就是一個超大的網路電話簿
dns就是功能變數名稱解析到ip的一個過程,
大型公司,用的dns服務名叫做bind軟體
提供dns服務的公司有:
119.29.29.29 騰訊
223.5.5.5 阿裡
223.6.6.6 阿裡
8.8.8.8 谷歌的
114.114.114.114 114公司的
linux的dns配置文件如下:
vim /etc/resolv.conf 裡面定義了dns伺服器地址
linux解析dns功能變數名稱
nslookup 功能變數名稱
20.dns解析流程,當你在瀏覽器輸入一個url,有了那些解析
pythonav.cn:80/index.html
解析流程:
1.瀏覽器首先在本地機器操作dns緩存中查找是否有功能變數名稱-ip的對應記錄
2.去/etc/hosts文件中尋找是否寫死了功能變數名稱解析記錄
3.如果hosts沒寫,就取/etc/resolv.conf配置文件中尋找dns伺服器地址
4.如果找到了對應的解析記錄,就混存到本dns緩存中
/etc/hosts 本地強制dns的文件
21.linux的定時任務
語法:
分 時 日 月 周
* * * * * 命令的絕對路徑
實例:
#每分鐘執行一次命令
* * * * * 命令的絕對路徑
#每小時的3,15分組執行命令
3,15 * * * * 命令的絕對路徑
#晚上的8-11點的第3和第15分鐘執行
3,15 20-23 * * * 命令的絕對路徑
#每晚的21:30執行命令
30 21 * * * 命令的絕對路徑
#每周六,周日的1:30執行命令.(7或0都可以代表周日)
30 1 * * 6,7 命令的絕對路徑
#某周一到周五的林晨一點,清空/tmp目錄的所有文件
00 1 * * 1-5 /usr/bin/rm -rf /tmp/*
#每晚的21:30重啟nginx
30 21 * * * /usr/bin/systemctl restart nginx
#每月的1,10,22日的4:45重啟nginx
45 16 1,10,22 * * /usr/bin/systemctl restart nginx
#每個星期一的上午8點到11點的第3和第15分鐘執行命令
3,15 8-11 * * 1
22.linux的軟體包管理
軟體包的格式(瞭解即可):
win: exe
mac: dmg
linux: rpm
安裝軟體的方式:
1.yum安裝(自動搜索你想要的軟體包,以及他的依賴關係,自動解決下載)
2.源代碼編譯安裝
3.手動安裝rpm包(手動解決依賴關係)
rpm命令的使用方式:
安裝 rpm -ivh xxx.rpm #i安裝,v顯示詳細過程,h進度條顯示
升級 rpm -Uvh xxx.rpm
卸載 rpm -e xxx.rpm
linux配置阿裡雲的yum源, 配置步驟如下
1.找到阿裡的鏡像站:
https://opsx.alibaba.com/mirror
2.通過命令線上下載yum源(-)
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
下載epel,選擇epel(RHEL 7)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 線上下載repo倉庫文件,並且重命名,放到/etc/yum.repos.d/這個目錄
下-O就是改名,且下載到指定位置
3.備份預設的yum倉庫
Linux的yum倉庫地址說 -> /etc/yum.repos.d
在這個目錄的第一層文件夾下,名字以*.repo結尾的都會被識別為yum倉庫
例如 -> /etc/yum.repos.d/xxx.repo
配置:
cd /etc/yum.repos.d
mkdir backrepo
mv * ./backrepo
4.測試安裝mariadb資料庫(其實就是MySQL)
yum install mariadb-server mariadb -y
5.啟動資料庫
systemctl start mariadb
6.可以測試訪問mysql資料庫了
mysql -uroot -p
7.更新yum緩存
yum clean all && yum makecache
系統服務管理命令(只有通過yum安裝的軟體,才可以用系統服務管理命令)
1.如果是centos6就是
service nginx start
3.如果是centos7就是
systemctl start/stop/restart nginx
230130
作業
作業
1.配置好阿裡雲yum源
生成yum緩存
下載nginx,並啟動nginx服務,使用瀏覽器訪問nginx頁面
2.備份原來的yum源,原本是centos.repo國外的數據緩存
3.下載阿裡雲的yum源文件,兩條wget命令下載repo倉庫文件
4.清空原本的yum緩存, yum clean all
5. yum makecache生成yum緩存
6. yum install nginx -y
yum源的工作目錄是?
/etc/yum.repos.d/ 在這個目錄下所有名字是*.repo的文件,就會背識別為倉庫文件
2.下載lrzsz工具,方便win和linux互傳文件
yum install lrzsz -y
3.如何手動啟動網卡?(如果發現自己沒有ip地址)
語法:
ifup 網卡名
實例:
ifup ens33
ifup eth0
systemctl start network
4.linux的超級用戶是什麼?如何查看用戶身份信息?
root
id root
5.簡述linux的用戶管理
useradd zzy 添加用戶
userdel zzy 刪除用戶
passwd zzy 更改用戶密碼
1.用戶角色有 usergroup other
2.超級root 普通用戶是root創建的
3.root超級用戶uid是0,普通用戶uid從1000開始
普通用戶執行命令許可權不足時可以配置sudo命令即可
6.如何使用普通用戶登錄
ssh
7.在linux下如何切換用戶
su -用戶名
8.如何使用root身份執行普通用戶的命令?請詳細說明配置步驟
1.修改/etc/sudoers文件
2.找到:
root ALL=(ALL) ALL
zzy ALL=(ALL) ALL
3.保存退出即可
4.sudo ls /root
5.可以使用visudo命令提供語法檢測,更正規
9.簡述linux的文件許可權有哪些?
r w x
4 2 1
777
10.linux文件許可權的755,700是什麼意思?
-rwxr-xr-x
-rwx------
11.如何修改test.py文件許可權為700
chmod 700 test.py
12.如何修改test.py屬組是oldboy?
chgrp oldboy test.py
13.已知test.py文件許可權是rwxr--r--,如何修改許可權為rw-rw-rw
chmod 666 test.py
14.linux如何建立軟連接?
ln -s opt/python3/bin /usr/local/python3
ln -s 目標絕對路徑 快捷方式絕對路徑
15.linux的PS1變數是什麼?如何修改
PS1是控制命令提示符的
PS1='{\u@\h \w\t}\$' (變數賦值臨時生效)
系統全局環境配置文件, 針對每一個用戶 /etc/profile
16.centos7用什麼命令管理服務?
systemctl
centos6: service
17.linux解析dns的命令是什麼?
nslookup www.oldboydu.com
cat /etc/resolv.conf
18.將/tmp/下所有內容壓縮成all_log.tar.gz並且放到/home下
tar -zcvf /home/All.log.taar.gz /tmp/*
-z調用gzip壓縮指令
-c進行打包
-v顯示過程
-f指定一個文件,這個參數必須寫在最後
19.解壓縮Python源碼包Python-3.7.0b3.tgz
tar -zxvf Python-3.7.0b3.tgz
20.查看mysql埠狀態
netstat -tunlp | grep 3306 #查到記錄了,說明機器開放了3306埠,mysql啟動了
21.如何查看nginx的進程
ps -ef | grep "nginx"
22.如何殺死nginx進程
kill nginx的pid
pkill nginx
23.如何修改linux中文
1.保證linux的編碼是utf-8
2.保證你登陸的xshell也是utf-8
3.中文統一對應
24.如何統計/var/log大小
du -sh /var/log
25.tree是什麼作用?
以樹狀圖顯示文件夾內容\
26.如何給linux添加一個dns伺服器記錄
dns伺服器記錄在 /etc/resolv.conf 文件里
可以用echo追加,也可以vim編輯添加
但註意只能添加最多兩條記錄
27.每月,5,15,25天的晚上5點50重啟nginx
* * * * *
50 17 5,15,25 * * /usr/bin/systemctl restart nginx
28.每周3到周5的深夜11點備份/var/log/放到/tmp目錄下
00 23 * * 3-5 /usr/bin/cp -r /var/log/ /tmp
29.每天早上6.30清空/tmp內容
* * * * *
30 6 * * * /usr/bin/rm -rf /tmp/*
30.每個周三下午6點到8點的第5,15分鐘執行命令 command
5,15 18-20 * * 3 command
31.編譯安裝軟體有哪些步驟?
註意要解決軟體依賴關係
1.下載軟體源碼
2.解壓縮源碼包
3.進入源碼包目錄
4.編譯三部曲
釋放makefile, 執行configure腳本, 並且指定安裝路徑
開始編譯, 執行make指令
編譯安裝 make install
32.如何修改python3環境變數, 以及軟連接
#軟連接方式:
ln -s /opt/python310/bin/python3.10.7 /usr/bin/python3
#配置PATH變數
33.請在linux上啟動ob_crm, windows上進行訪問,進行登錄
1.如何代碼在碼雲上可以git clone
2.如果在win上可以通過lrzsz發送到linux
3.如果是壓縮文件,進行解壓縮,生成代碼文件
4.修改配置文件,allow_hosts=["*"]
5.如果用的是mysql, 還得提前啟動mysql,並且註意settings.py資料庫連接配置
6.遷移資料庫
7.解決所有crm依賴的模塊, 如django, pymysql
8.啟動,註意ip地址和埠的問題
9.pip裝的包,發給到解釋器的site-packages目錄下
10.yum安裝的軟體,是自動安裝的路徑, 可以通過rpm -ql查詢安裝路徑
11.如果向指定路徑安裝用源碼包編譯安裝
34.一月一日的4點重啟nginx
00 4 1 1 * /usr/bin/systemctl restart nginx
35.每月4號與每周一到周三的11點重啟nginx
00 11 4 * 1-3 /usr/bin/systemctl restart nginx
36.每小時重啟一次nginx?
0 * * * * /usr/bin/systemctl restart nginx
37.每天10:00,16:00重啟nginx
00 10,16 * * * /usr/bin/systemctl restart nginx
38.如何查看系統發行版信息?
cat /etc/os-release
39.系統全局環境變數的配置文件?
/etc/profile
40.系統用戶的環境變數配置文件是?
修改~/.bash_profile(首選),將影響當前用戶.
在~/.bash_profile文件中添加
41.如何查看記憶體大小信息?
cat /proc/meminfo | grep MemTotal
free -m
42.如何查看cpu核數?
cat /etc/proc/cpuinfo
top <鍵入1>
lscpu
43.如何停止centos7防火牆服務,並且禁止防火牆開機自啟?
#防火牆作用: 保護伺服器的流量網路安全, 允許/禁止 ip地址段和埠的出入流量
systemctl stop firwalld.service #關閉防火牆服務
systemctl disable firwalld.service #緊張防火牆開機自啟
iptables -f #清空防火牆規則
vim
移動游標:
w(e) 移動游標到下一個單詞
b 移動到游標上一個單詞
數字0 移動到本行開頭
$ 移動游標到本行結尾
H 移動游標到屏幕首行
M 移動到游標到屏幕中間一行
L 移動游標到屏幕的尾行
gg 移動游標到文檔的首行
G 移動游標到文檔尾行
ctrl+f 下一頁
ctrl+b 上一頁
`. 移動游標到上一次的修改行
查找:
/change 在整篇文檔中搜索change字元串,向下查找
?change 在整篇文檔中搜索change字元串,向上查找
*查找整個文檔,匹配游標1所在的單詞,按下n查找下一處,N上一處
# 查找整個文檔,匹配游標所在的所有單詞,按下n查找下一處,N上一處
gd 找到游標所在單詞匹配的單詞,並停留在非註釋的第一個匹配上
% 找到括弧的另一半!!
略...
------------------------------------------------------------
設置vim的tab鍵為4個空格
vim /etc/vimrc
底部寫入以下內容:
set ts=4
-----------------------------------------------------------
vim替換
# Vim替換字元串命令的語法
# Vim替換字元串命令的基本語法是 :[range]s/目標字元串/替換字元串/[option],其中range和option欄位都可以預設不填。
# 下麵介紹VIM替換字元串各個變數的含義:
range:表示搜索範圍,預設表示當前行;
range欄位值1,10表示從第1到第10行;
%表示整個文件(相當於1,$);
而.,$代表從當前行到本文件的末尾
s:substitute的簡寫,表示執行替換字元串操作;
option:表示操作類型,預設只對第一個匹配的字元進行替換;
option欄位值g(global)表示全局替換;
c(comfirm)表示操作時需要確認;
i(ignorecase)表示不區分大小寫;
vim替換字元串的這些選項可以組合使用
命令行補充:
在命令行中tab代表補全 雙tab代表顯示提示
方向上 補全上一條指令
方向下 回到下一條指令
ctrl + c 強制結束進程
ctrl + insert 複製
shift+ insert 粘貼
常用退出應用程式命令行:
exit
quit
q
deactive
python虛擬環境
1.python虛擬環境, 用於解決python的環境依賴衝突的問題,僅僅是多個解釋器的分身,多個解釋器的複製,和操作系統無關
2.python虛擬環境的工具有很多:virtualenv, pipenv, pyenv
3.virtualenv可以在系統中建立多個不同並且相互不幹擾的虛擬環境
註意: 確保python3成功的安裝,並且PATh配置在第一天路勁
virtualenv的學習安裝使用
1.下載安裝
pip3 install virtualenv
2.安裝完畢,就可以使用命令創建虛擬環境使用了
#這個命令在哪敲,就會在那生成
virtualenv --no-site-packages --python=python3 venv
#參數解釋
--no-site-packages #沒有任何的第三方包,用於構建乾凈的環境
--python=python3 #指定python虛擬環境的本體,是py的哪個版本
venv 就是一個虛擬環境的文件夾,是虛擬python解釋器
3.創建完畢venv虛擬環境,就可以激活使用了
進入venv/bin目錄下
source activate #source是讀取指令,讀取這個activate腳本中的內容,激活虛擬環境
4.驗證虛擬環境是否正確
which pip3
which python3 都來自與venv路徑,就是對了
5,使用虛擬環境,分別構建django1和django2的平臺
註意, 開啟2個linux視窗
步驟1:分別下載兩個venv1 venv2, 用於運行不同的django
virthualenv --python=python3 venv1
virthualenv --python=python3 venv2
步驟2:這兩個虛擬環境,都得單獨激活去使用
source venv1/bin/activate #激活虛擬環境
source venv2/bin/activate #激活虛擬環境
deactivate #退出虛擬環境
保證本地開發環境和線上一致性的步驟
1.導出本地python的環境的所有模塊
pip3 freeze > requirements.txt
2.將這個依賴文件發送給伺服器linux
requiements.txt
3.伺服器linux上,構建虛擬環境,安裝這個文件,即可
pip3 install -r requirements.txt
virtualenvwrapper的學習使用
1.安裝
pip3 install virtualenvwrapper
2.配置環境變數,每次開機都載入這個工具,註意的是配置的是個人環境配置變數配置文件
export WORKON_HOME=~/Envs # 設置virtualenv的統一管理目錄
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' #添加virtualenv的參數,生成乾凈隔絕的環境
export VIRTUALENVWRAPPER_PYTHON=/usr/local/python3/bin/python3 #指定python解釋器,虛擬環境以誰去分身
export /usr/local/python3/bin/virtualenvwrapper.sh #執行virtualenvwrapper安裝腳本
3.此時退出linux終端回話,重新登錄,rangvirtualenvwrapper工具生效
4.學習virtualenvwrapper命令,管理虛擬環境
mkvirtualenv 虛擬環境的名字 #創建虛擬環境, 存放目錄是統一管理的
workon 虛擬環境的名字 #可以在任意目錄直接激活虛擬環境(切換)
例如從venv1, 切換到venv2
deactivate #退出虛擬環境
rmvirtualenv 虛擬環境的名字 #刪除虛擬環境
lsvirtualenv #列出所有虛擬環境
cdvirtualenv #進入虛擬環境的目錄
cdsitepackages #進入虛擬環境的第三方包
mkvirtualenv -p /opt/python3.6.4/binpython3.6 #指定python版本安裝
nginx
nginx web server
1.靜態網站,靜態虛擬主機的作用
就是不變化的網頁,靜態的html,css,js的頁面, 以及各種圖片視頻的資源
有一些草根站長,放一些小說, 圖片等等...
2.動態網站
指的是,可用於資料庫打交道,數據交互的網頁,網頁內容根據資料庫的數據變化
登錄功能,有註冊功能的...
並且有編程語言支持的
3.nginx的併發非常強悍
輕鬆支持10w+併發連接數
tnginx
4.常見web伺服器有哪些?
win下 -> IIS伺服器
linux下 -> nginx apache lighthttp
apache採用多進程方式非常吃系統資源
nginx採用非同步非阻塞, 輕量級, 穩定豐富的功能, 系統資源消耗低且高併發
5.web伺服器
nginx 這樣的軟體
web伺服器它自己不支持變成, 僅僅是頁面返回, nginx + lua
web框架的概念
django flask tornado web邏輯框架
支持程式員自己寫代碼,進行邏輯處理
6.nginx是web伺服器, 反向代理伺服器, 郵件代理伺服器, 反向代理,負載均衡, 支持高併發的一款web伺服器
7.nginx安裝方式
1.yum
2.rpm手動
3.源代碼編譯安裝,選擇這個,支持自定義的第三方功能擴展,比如自定義安裝路勁,支持https,支持gzip資源壓縮
8.選擇源碼編譯安裝
1.下載淘寶nginx(tengine)的源碼包
wget http://tengine.taobao.org/download/tengine-2.3.0.tar.gz
2.解壓縮源碼包
tar -zxvf tengine-2.2.0.tar.gz
3.進入源碼目錄開始編譯安裝
./configure
make&&make install
4.配置淘寶nginx的開發環境
PATH="/usr/local/python3/bin://usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/tngx230/sbin"
讀取/etc/profile
source profile
5.啟動nginx,不得再啟動第二次
nginx #啟動
nginx -s reload #平滑重啟nginx,重新讀取nginx配置文件
nginx -s stop #停止nginx進程
nginx -t #對配置文件信息進行語法檢測
6.學習nginx的目錄配置文件信息
client_body_temp html sbin conf logs scgi_temp fastcgi_temp proxy_temp uwsgi_temp
#解釋目錄
conf 存放nginx配置文件的
html 存放前端文件目錄, 首頁文件就在這裡
logs 存放nginx運行日誌,錯誤日誌的
sbin 存放nginx執行腳本的
7.部署一個web站點
修改index.html文件, 即可查看新頁面內容
8.nginx配置文件學習
見下一個nginx代碼塊
9.nginx的錯誤頁面優化
打開nginx.conf裡面的如下參數
error_page 404 /404.html;
10.nginx的訪問日誌功能
打開如下功能參數
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;
11.nginx限制訪問功能
就是nginx.conf中 找到location參數,寫入如下信息
location / {
deny 192.168.44.189; #禁用某個用戶的ip地址
deny 192.168.16.0/24; /24子網掩碼地址 255.255.255.0
root html; #定義網頁根目錄的,是nginx目錄下的html
index index.html index.htm; #指定首頁文件的名字
}
12.nginx的狀態信息功能, 檢測當前有多少個鏈接數
再nginx.conf下打開一個參數即可
#當你的請求來自於 192.168.16.37/
location /status {
#開啟nginx狀態功能
stub_status on;
}
使用linux的壓測命令,給nginx發送大量的請求
ab命令
安裝方式
yum install httpd-tools
-n requetst #執行的請求數,即一共發起多少請求.
-c concurrency #請求併發數.
-k #啟用HTTP KeepAlive功能, 即在一個http會話中執行多個請求
url格式必須如下
ab -kc 1000 -n 100000 http:/192.168.44.160/
13.多虛擬主機,在一臺伺服器上運行多個網路頁面
基於多功能變數名稱的虛擬主機實現, 其實就是讀個server標簽
環境準備, 1個linux伺服器, 192.168.44.160
2個功能變數名稱, 寫入hosts文件,強制
www.s19dnf.com
www.hanju.com
修改nginx.conf, 也就是寫兩個平級的server, 並且更改server_name
14.nginx的反向代理功能
1.見過生活中的代理
客戶端(請求資源) -> 代理(轉發資源) -> 服務端(提供資源)
客戶端和nginx
`示例:
nginx與django聯合, nginx負責靜態頁面, 當請求為動態需要涉及到資料庫操作, nginx將轉發請求給django, 由django負責.
正向代理:
多人連接到proxy,由proxy去訪問再提供給用戶
反向代理:
配置nginx實現反向代理的步驟:
環境準備兩台機器
192.168.43.156 充當資源伺服器, 提供一個頁面
192.168.43.6 充當代理伺服器的角色(轉發請求, 反向代理的功能也是nginx提供的)
--修改如下配置(nginx.conf)
#當你的請求來自於192.168.43.156/這樣的url時就進入如下路徑
匹配
location / {
#當請求進來這個路徑匹配,這個nginx代理角色,直接轉發給>資源伺服器
proxy_pass 192.168.43.156;
}
3.測試訪問反向代理的頁面
nginx反向代理原理圖
client端訪問 --> ng2(代理伺服器) --> 找ng1拿取資源 --> 回饋給用戶
nginx配置文件內容如下:
#全局變數寫在最外層
#user nobody;
worker_processes 4;
events {
worker_connections 1024;
}
#定義nginx核心功能的參數
http {
include mime.types;
default_type application/octet-stream;
#定義nginx訪問日誌格式的
#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;
#access_log "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G" main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
圖片壓縮資源壓縮
#gzip on;
nginx主頁面功能都是server參數提供的
server被稱作是虛擬主機
server {
#nginx監聽的埠
listen 80;
#填寫伺服器的功能變數名稱, 或者ip, 或者localhost
server_name localhost;
#路徑匹配, 當你的請求來自於192.168.16.37/就進入以下的location路勁匹配
location / {
root html; #定義網頁根目錄的,是nginx目錄下的html
index index.html index.htm; #指定首頁文件的名字
}
#錯誤頁面
#當請求返回404錯誤碼的時候, 就給用戶看到一個頁面
#這個404.html放在網頁根目錄下
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
nginx知識點
支持高併發,能支持幾萬併發連接
資源消耗少,在3w併發連接下開啟10個nginx線程消耗記憶體不到200m
可以做http反向代理和負載均衡
支持非同步網路i/o事件模型epoll
tengine
由淘寶網發起的web伺服器項目,在nginx基礎上,針對大量訪問網站的請求,添加了很多高級功能和特性.tengine的性能和穩定性已經在大型網站如淘寶天貓商城得到很好的驗證.他的最終目的是打造一個高效,穩定,安全,易用的web平臺
nginx參數篇
worker_processes 4; # 設置工作進程數
內容小結
1.編譯安裝tengine服務
編譯三部曲
1.解決軟體編譯安裝所需的依賴
2.下載軟體源代碼包, 並且解壓縮出源碼包內容
3.進入源碼包目錄, 執行./configure --prefix=安裝絕對路徑, 釋放編譯文件, makefile
4.調用linux的編譯器 make && make install 開始安裝軟體
2.nginx的核心工作目錄
conf 存放nginx.conf的目錄, 功能配置都在這
logs 存放err.log access.log
html (網頁根目錄) 存放index.html 404.html
3.nginx提供web伺服器頁面的功能參數就是server{ }虛擬主機標簽
#server虛擬主機,nginx會自上而下的載入, 因為可能有多個虛擬主機
#虛擬主機定義了網站的埠, 功能變數名稱, 網頁內容存放路徑
server {
listen 80;
server_name www.s19dnf.com;
location / {
root /opt/dnf/;
index index.html index.html;
}
}
#nginx支持多虛擬主機,也就是通過多個server標簽實現的
server {
listen 80;
server_name www.s19dnf.com;
location / {
root /opt/dnf/;
index index.html index.html;
}
}
#nginx會根據用戶訪問的url功能變數名稱進行server_name功能變數名稱匹配,然後選擇返回不同的 虛擬主機內容
4.還有剩餘的功能配置
404頁面
在虛擬主機server{}標簽中定義error_log參數
error_page 404 /404.html;
訪問日誌功能, 放在http{}標簽中, 代表全局作用域, 對所有虛擬主機生效,寫在單獨的虛擬主機中, 就是局部變數
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;
5.反向代理功能參數
在虛擬主機中,找到location{}標簽,然後寫入
proxy_pass 你想代理的伺服器ip地址;
Nginx實現負載均衡, 動靜分離的效果
1.環境準備
192.168.43.157 資源伺服器 提供dnf頁面
192.168.43.6 資源伺服器 (講道理,應該是192.168.xx.xx一樣的代碼配置,一樣的頁面)
192.168.43.186 充當代理伺服器,以及負載均衡的作用
2.分別配置三台機器
192.168.43.157 資源伺服器, 提供dnf頁面
192.168.43.6 資源伺服器,提供小貓咪頁面
192.168.43.187 負載均衡的配置
3.nginx.conf修改為如下配置
1.添加負載均衡池, 寫入web伺服器地址:
upstream mydjango {
#負載均衡的方式預設是輪詢, 1s一次
server 192.168.43.157;
server 192.168.43.6;
}
-----------------------------------
upstream mydjango {
#帶weight加權
server 192.168.43.157 weight=2;
server 192.168.43.6 weight=7;
}
-----------------------------------
upstream mydjango {
#按ip_hash分配
ip_hash;
server 192.168.43.157;
server 192.168.43.6;
}
4.負載均衡的配置方式
location / {
proxy_pass http://mydjango;
}
5.動靜分離的配置
1.配置動態請求的伺服器
192.168.43.6 充當靜態伺服器,返回小貓咪的頁面,以及一些圖片資源
需要安裝nginx即可
#nginx.conf 配置如下
#當請求來自於192.168.43.6/時,就進入如下路徑匹配,返回日劇頁面
location / {
root html;
index index.html index.htm;
}
#當請求時192.168.43..140/xx.jpg這樣的媒體資源,就進入如下location返回/opt/nginx1223/html/images
location ~* .*\.(png|jpg|gif|jpeg)$ {
root /opt/nginx1223/html/images;
}
2.配置靜態請求的伺服器
192.168.43.157 運行django頁面
1.先後臺運行django頁面
python3 manage.py runserver 0.0.0.0:8000 &
2.修改nginx配置, 可以轉發, 動靜的請求
upstream mydjango {
server 192.168.43.157:8000;
}
upstream mystatic {
server 192.168.43.6;
}
server {
listen 80;
server_name 192.168.43.157;
#當外部請求,是192.168.43.157時就進入如下location,返回django頁面反向代理
#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 / {
proxy_pass http://mydjango;
}
#當外部請求時, 192.168.43.157:80/xx/jpg
#就轉發給那台靜態資源伺服器去處理
location ~ .*\.(png|jpg|gif|jpeg)$ {
proxy_pass http://mystatic;
}
3.在負載均衡器上,配置請求轉發
192.168.43.187 配置負載均衡動靜分離的配置
1.定義一個upstream地址池,進行請求分發
upsrteam地址池,進行請求分發
upstream myserver {
server 192.168.43.157;
server 192.168.43.6;
}
2.通過location進行請求分發的工作
location / {
proxy_pass http://myserver;
}
負載均衡的規則
### 調度演算法 概述
* 輪詢 |按時間順序逐一分配到不同的後端伺服器(預設)
* weight |加權輪詢, weight值越大,分配到的訪問幾率越高
* ip_hash |每個請求按訪問的hash結果分配,這樣來自同一ip的固定訪問一個後端伺服器
* least_conn |最少鏈接數,那個機器鏈接數少就分發
-----------------------------------------------------------
註意輪詢,是假設1s內有兩個人請求, 那麼則均衡配分.
前兩種方式最常用
ob_crm項目部署
django自帶了socket服務端嗎?wsgiref這個是python自帶的socket模塊,django預設用的是wsgiref的單機socket模塊
Python manage.py runserver 這是調試命令,測試django是否有問題的
最終上線是uwsgi + django的方式
為什麼要用nginx結合uwsgi
1.nginx支持靜態文件處理性能更好
2.nginx的埃軍和特性,讓網站併發更高
3.並且反向代理特性,用戶訪問80,即可訪問到8000的應用
4.uwsgi支持多進程的方式,啟動django,性能更高
5.nginx轉發請求給uwsgi,應該用uwsgi_pass,實現了uwsgi協議的請求轉發
如果出現錯誤: pytho app application not found
就是你的uwsgi沒找到uwsgi.py這個文件對象 application = get_wsgi_application()
wsgiref:
python自帶的web伺服器
gunicorn:
用戶linux的python wsgi Http伺服器,常用於各種django,flask結合部署伺服器
mode_wsgi:
實現了apache與wsgi應用程式的結合
uWsig:
c語言開發,快速,自我修複,開發人員友好的WSGI伺服器,用於python web應用程式的專業部署和開發
配置步驟
## 1.nginx+uwsgi+虛擬環境+mysq+supervisor
環境準備, 一臺linux(192.168.43.157)
### 第一步,先準備後端代碼 ob_crm
### 第二部:安裝py2解釋器,以及虛擬環境工具virtualenvwrapper
### 第三部,學習uwsgi命令, 通過uwsgi啟動ob_crm
## 1.激活虛擬環境,在虛擬環境下安裝所需的模塊
安裝如下內容即可
Django==1.11.20
django-multiselectfield==0.1.12
PyMySQL==1.0.2
pytz==2022.7.1
## 2.安裝這個文件
[linux] pip3 install -i https://pypi.douban.com/simple -r requirements.txt
## 3.安裝uwsgi命令
pip3.6 install uwsgi
## 4.學習uwsgi啟動django的命令
uwsgi --http :8000 --module mysite.wsgi --py--autoreload=1
--http 指定http協議
:8000 指定啟動埠
### --module 指定django的wsgi.py的文件地址
指定你的django項目第二層目錄名,下麵的wsgi.py
--py-autoreload=1 開啟uwsgi的熱載入功能 1代表ture開啟的意思
所以咱們用的命令應該是如下:
1.必須進入項目目錄
/opt/teaching_plan/ob_crm
2.使用命令啟動ob_crm(uwsgi不解析django的靜態文件)
uwsgi --http :8000 --module ob_crm.wsgi
用ob_crm這個目錄去查找wsgi這個腳本文件
3.讓你的項目支持熱載入
由於uwsgi的啟動參數過多,我們會選則配置文件的方式,啟動項目
uwsgi.ini 這個文件的名字,可以手動創建的
1.創建uwsgi.ini寫入如下參數
# mysite_uwsgi.ini file
[uwsgi]
# Django-related settings
# the base directory (full path)
# 填寫你項目的絕對路徑,第一層
chdir = /opt/teaching_plan/ob_crm/
# Django's wsgi file
# 找到django的那個我wsgi.py文件
# 根據上面一條參數,的相對路徑來寫
module = ob_crm.wsgi
# the virtualenv (full path)
# 虛擬環境的絕對路徑
home = /root/Envs/ob_crm
# process-related settings
# master 主進程
master = true
# maximum numver of worker processes
# 根據你的cpu核數來定義
processes = 4
# the socket (use the full path to be safe
# 指定你的django啟動在什麼地址上並且是什麼協議
# 如果你用了nginx反向代理, 請用socket參數
socket =0.0.0.0:8000
# 如果未使用nginx反向代理, 想要直接使用django, 用這個參數:
# http = 0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum =true
#開啟熱載入
py_autoreload = 1
2.通過配置文件啟動項目
uwsgi --ini uwsgi.ini
3.收集django的所有靜態文件統一管理,丟給nginx解析
1.設置django項目的settings.py文件
STATIC_ROOT = '/opt/s19static' # 收集到任意一個目錄里
STATIC_URL='/static/'
STATICFILES_DIRS=[
os.path.join(BASE_DIR, 'static'),
]
上述的參數STATIC_ROOT用在哪?
2.執行命令收集文件
#### 通過$ python3 manage.py collectstatic 收集所有你使用的靜態文件保存到STATIC_ROOT!
STATIC_ROOT 文件夾 是用來將所有STATICFILES_DIR中所有的文件夾中的文件, 以及app中static的文件都複製過來
# 把這些文件放到一起是為了用nginx等部署的時候更方便
nginx配置來了!!!
1.nginx的反向代理
2.nginx解析靜態文件的功能
location / {
uwsgi_pass 127.0.0.1:8000;
include uwsgi_params;
}
location /static {
#給靜態文件目錄設置別名,可以讓其源目錄訪問到真實的靜態目錄
alias /opt/s19static;
}
進程管理工具supervisor的使用
supervisor其實就是在幫咱們去執行命令
1.安裝supervisor,通過pip直接按照
pip3 install supervisor
2.生成supervisor的配置文件
echo_supervisord_conf > /etc/supervisor.conf
3.修改配置, 寫入你管理ob_crm的命令參數
vim /etc/supervisor.conf #直接進入最低行, 寫任務
[program:s19_ob_crm]
command=/root/Evns/ob_crm/bin/uwsgi --ini /opt/teaching_plan/ob_crm/uwsgi.i
ni
stopasgroup=true ;預設為flase,進程被殺死時, 是否這個進程組發送stop信號,
包括子進程
killasgroup=true ;預設為false, 向進程發送kill信號,包括子進程
4.通過命令啟動supervisor 同時啟用ob_crm
supervisorctl #管理命令
supervisord #服務端命令
啟動服務端的命令
supervisor -c /etc/supervisor.conf
通過客戶端命令管理ob_crm
[root@localhost conf]# supervisorctl -c /etc/supervisor.conf
s19_ob_crm FATAL can't find command '/root/Evns/ob_crm/bin/uwsgi'
任務名 狀態
[program:s19_ob_crm]
command=/opt/python3.6.4/bin/uwsgi --ini /opt/teaching_plan/ob_crm/uwsgi.ini
stopasgroup=true
killasgroup=true
訪問成功如下:
[root@localhost ob_crm]# supervisorctl -c /etc/supervisor.conf
s19_ob_crm RUNNING pid 57569, uptime 0:01:37
supervisor>
#此結果我足足等了一天了多,不知是什麼bug,如果我寫虛擬環境的目錄,他總是找不到命令,於是我只能寫上物理環境中的命令uwsgi來啟動.哎哎哎
supervisor命令行操作
1.停止任務
supervisor> stop s19_ob_crm
s19_ob_crm: stopped
2.查看任務狀態
supervisor> status
s19_ob_crm STOPPED Feb 16 10:31 PM
3.啟動/停止所有的任務
supervisor> start all #開啟所有任務
s19_ob_crm: started
---------------------------------------------------------
supervisor> stop all #關閉所有任務
s19_ob_crm: stopped
部署內容回顧
整篇埠設計:
vue(靜態文件夾dist) 也就是nginx返回vue頁面,埠為80,也是nginx.conf提供的 server{}虛擬主機提供的 | 反向代理埠 8500 ,是通過nginx實現的,nginx.conf中編寫一些參數,介面速率限制,爬蟲驗證,封停ip地址 | django後臺地址 9000