python學習者的專屬linux教程

来源:https://www.cnblogs.com/Hebeian/archive/2023/03/27/17261189.html
-Advertisement-
Play Games

基本操作 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 編輯開機提示語

目錄結構:

linux目錄結構

命令:

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

              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • spring源碼環境搭建 組件 版本 jdk 1.8.0_192 spring-framework 5.3.x gradle 7.5.1 idea 2022.3.3 aspectJ 1.9 可根據spring-framwork項目說明靈活選擇 一、拉取spring-framework項目 1、spr ...
  • 向下轉型的使用 Java的多態性: 父類指向子類的聲明 Animal animal = new Dog()//Dog()重寫了父類Animal 有了對象的多態性以後,記憶體實際上載入的是==子類==的屬性和方法,但是由於變數聲明為==父類類型==,導致編譯時只能調用父類的屬性和方法,子類特有的屬性方法 ...
  • 紙殼CMS支持將評論、留言、表單提交、訂閱等通知,通過WebHook發送到第三方平臺,比如釘釘。 創建釘釘WebHook 需要在釘釘群中創建自定義機器人,具體方法可以參考釘釘的官方文檔: 自定義機器人接入 需要註意的是,在安全設置中不要使用加簽,使用自定義關鍵字即可。在發送的消息中,只要包含這個關鍵 ...
  • 在實際工作中,經常會有一些需要定時操作的業務,如:定時發郵件,定時統計信息等內容,那麼如何實現才能使得我們的項目整齊劃一呢?本文通過一些簡單的小例子,簡述在.Net6+Quartz實現定時任務的一些基本操作,及相關知識介紹,僅供學習分享使用,如有不足之處,還請指正。 ...
  • @ 先看一下導出的整體效果(如下圖),其中標註的區域都是通過後臺動態生成的: 一、先在Word中建立好表格模板 1.1、參數創建方法(Word和WPS) 1.1.1、Office中Word域的創建 1.1.1.1、選中指定的單元格 -> 點擊頭部工具欄中的”插入“ -> 選擇 ”文檔部件“ -> 選 ...
  • jdk dockere pull openjdk:11 docker run -d -t --name java-11 openjdk:11 MySQL 可以從docker hup中查找自己想要安裝的版本 docker pull mysql:5.7 拉取鏡像 創建容器 # 在/root目錄下創建my ...
  • 一:相關信息 FTP:(File Transfer Protocol )文件傳輸協議,是基於C/S架構的應用層協議。 FTP伺服器的埠監聽: 預設監聽21/tcp埠 FTP的工作模式: FTP根據伺服器是否自動連接來分為主動模式和被動模式。 主動模式:FTP伺服器主動連接客戶端,這個時候FTP服 ...
  • 前騰訊工程師,經歷過大廠,也經歷過創業! 我已奔四,但我還在持續學習,持續成長! 我非常樂意把我的經驗和心得分享給你! 我是阿銘,關註我,和我一起成長為大牛! 存儲分類 話不多說,直接上圖 至於封閉的以及內置的存儲不是今天要討論的對象,本文主要針對三個外掛存儲DAS、NAS和SAN展開討論。 DAS ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...