【046】Python全栈日记-Linux(四)

2023-10-29 02:40
文章标签 python linux 全栈 日记 046

本文主要是介绍【046】Python全栈日记-Linux(四),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

本次为linux最后一次日记,下一阶段将要进行django的学习,也是python最重要的一个部分,django将要串通我之前学习的所有内容,本次在结尾也会做一个小的引入。

 

今天使用root用户进行编程,这样就不会提示权限不够了,切换方法

sudo su root,然后输入密码

如果忘记密码可以使用sudo passwd root来修改密码

 

一、Shell编程理论和运用

1、程序的编程风格和执行模式

过程式:以指令为中心,来进行写程序,数据服务于指令。(bash shell)   C  

对象式:以数据为中心,考虑先如何组织数据,指令服务于数据。  C#     C++   JAVA   PYTHON ……

 

2、shell程序(调用二进制程序,解释执行)

程序的执行方式

计算机:二进制指令

计算机是无法识别我们敲的代码的,需要变为二进制指令计算机才能使用。

而shell就是一个解释我们所写代码变为二级制代码给计算机执行的程序

   

3、编程语言:

低级:汇编语言

高级:

编译:高级语言-->编译器-->目标代码    c    java

解释:高级语言-->解释器-->机器代码    shell   php   ruby   python

解释语言的效率会低于编译,编译就相当于对整本书进行翻译,而解释就相当于同声翻译。

 

4、shell编程的执行模式(和python一致)

顺序执行

循环执行

选择执行

 

5、shell编程的结构   

我们常的shell为bash shell

bash shell核心中心就是调用指令(堆命令,严重依赖当前环境)

写一个简单的shell脚本理解一下何为堆命令,用vim编写一个脚本名为:text.sh。

保存退出,然后通过sh text.sh执行

这样一个简单的脚本就完成了。

 

严重依赖环境的意思就是,你写的脚本为数据库管理,如果你的linux没有建数据库,脚本就失效了。

 

 

6、脚本应用场景和格式

(1)应用场景

重复、批量事务处理、自动化运维、定期任务执行、服务器运行监控

(2)格式

shell脚本:是一个文本文件,约定俗成要以.sh为结尾

脚本结构:脚本声明+注释(解释信息)+可执行语句

#!/bin/bash:脚本声明

编写人(选写)

编写日期(选写)

脚本声明的意思就是,我要使用bash来解释本脚本

如果是python的脚本,就要使用#!usr/bin/python3来声明

 

 

7、脚本的概念

将要执行的命令按照顺序保存到一个文本中

给文件相应的权限即可执行

chmod  a=x  /xxxx.sh

结合控制语句可以完成复杂操作

 

 

8、Shell程序的执行和Python程序的执行

(1)Shell程序的执行

【1】当前路径  ./  

【2】绝对路径  /    (所有解释型语言通用,以上两种需要有执行权)

修改权限:

编写脚本内容vim text.sh

echo就是print()

执行文件:

【3】命令bash、sh :不需要执行权

sh是使用默认shell执行脚本

bash是使用bash shell执行脚本

 

(2)执行python文件

先创建python文件,直接vim一个不存在的文件就是新建并编辑。

执行:

 

(3)bash的单步执行:

bash -x /path/to/script :相当于dubug,检查每一步如何运行    

bash -n  /path/to/script     检查语法是否错误

没有错误不会有返回。

 

 

二、变量的概念和运用

1、变量:是一段内存空间

变量不用声明,直接赋值即可

在shell中使用变量一定要加上$,例如$a、$i

 

2、Shell引用

(1)‘ ’:强引用,变量替换不会进行

(2)“ ”:弱引用,能够执行变量替换,就是正常使用变量

(3)``:命令替换,引用命令的执行结果,另外一种方式$(),反引号在1键的左边。

第一个ls我们查看有什么文件。

第二个`ls`是执行ls的结果也就是执行fstab,因为不存在这个命令,所以显示未找到。

第三个是打印`ls`代表什么,也就是打印ls命令后的结果,就是fstab

 

(4)变量替换:${变量名}

通常情况下大括号可以省略  如果变量名后面要跟如下内容:非小写字符串(包括大小字符串)、数字或下划线,那么变量名就一定要用大括号包起来 

例如我们存一部分dns

这样非常明显能看出来是10.10.16.101,如果不用大括号框住dns就很不美观。

 

3、echo

和其他编程语言一样echo 代表打印print

 

4、shell中的变量赋值   

变量名=值(中间不要间隔空格)

注意:变量在赋值时不能在前面带$

 

变量名只能包含字母、数字和下划线,并且不能以数字开头

变量名区分大小写

尽量能见名知义

 

5、定义变量

(1)本地变量:只对当前shell进程有效,对其子shell以及其他shell都无效

定义变量:Var_Name="Value"

引用变量:${Var_Name}通常情况下大括号可以省略

撤销变量:unset Var_Name

 

(2)局部变量:只对某一部分有效

定义变量:local Var_Name="Value"

 

(3)环境变量:对其shell进程及其子shell有效

系统内置的环境变量可以env命令查看

 

 

6、位置变量  (shell特殊的变量)

$1,......$n   (需要传递参数)

直接写在脚本里,然后使用脚本的时候写入参数,例如

 

脚本内容:对传入的文件显示其中空行(^$:正则表达式)

结果:bash test.sh /etc/passwd /etc/fstab

 

 

7、特殊变量:

(1)$0:脚本名称自身

(2)$#所有参数的总和数

(3)$*所有参数列举出来

执行脚本:

 

 

(4)程序执行状态返回值

$?:上一条命令的执行状态,

状态用数字表示:0-255

0:表示成功

1-255:失败,1.2.127.255预留

当执行命令成功,正确、true就会返回0

错误就会返回非0的数。

 

 

 

 

三、变量运算

在bash shell中,不支持浮点型,不支持字符算术运算。

因为shell会把算术当作命令执行。

 

1、运算符

(1)操作符:+,—,*,/,%(余数)

(2)复合赋值符

【1】+=,-=,*=,/=,%=

a+=b 等于a=a+b,剩下同理

【2】id++,id—

Id++等于Id = id + 1

Id—等于Id = id - 1

 

2、可以通过以下方式进行运算:

(1)let:

let varName=算术表达式

echo打印的时候变量一定要加$

(2)varName=$[算术表达式]

以下为骨灰级程序员才会使用,效率较低

(3)varName=$((算术表达式))

(4)varName=`expr 变量1 + 变量2 `

 

3、除法运算有余数被省略(圆整)

即使是0.99也是0

 

 

注意:如果在函数中用let写运算,用sh执行时显示let no found的

或者在函数中使用$[1+2]做计算,用sh执行显示1+2字符串的

造成这个问题的原因是ubantu默认使用的shell为dash,dash只有bash一部分的功能。

两种方法解决:

1、不使用sh执行脚本sh是使用默认shell,使用bash或者./

2、修改默认shell

Sudo dpkg-reconfigure dash

选择No,使用bash作为默认shell

 

 

 

四、脚本循环控制语句

for  while  until

 

1、先学习一个类似python中range的东西

Seq遍历元素

语法:seq 起点 步长 终点

当我们使用的时候seq的时候因该加上反引号,因为我们需要的是seq的结果。

 

2、for循环

例如写一个脚本,创建10个文档,名字为text1-text10

执行bash mingming.sh、结果:

 

 

bash -n 脚本文件 检查脚本文件语法是否错误

 

练习:

(1)创建10个用户,并显示其uid

结果

 

(2)1加到100的和数

 

 

3、输入命令(变量的赋值以交互式来进行)

read -p 交互文字 变量

就是python中的input,输入命令

 

 

五、条件判断

1、测试方法:

(1)test 条件表达式

(2)[ 条件表达式 ] 或者  [[ 条件表达式 ]](注意两边至少有一个空格)

文件或目录测试   格式   [ 操作符  文件或目录 ]

 

-d:测试是否为目录

-f:测试是否为文件

-e:测试文件是否存在

-r:测试文件是否有读权

Test例子:

条件表达式

 

 

2、数值比较测试  

格式 :[ 数值1  操作符  数值2 ]

操作符

-eq : 等于

-gt : 大于

-ge : 大于等于

-lt : 小于

-le : 小于等于

              

 

 

3、逻辑测试

布尔值(真:0  假)

(1)与运算:&&

真 && 真 = 真(0)

真 && 假 = 假

假 && 真 = 假

假 && 假 = 假

如果第一个为假就不往后看了,输出假

 

(2)或运算:

真 || 真 = 真(0)

真 || 假 = 真

假 || 真 = 真

假 || 假 = 假

如果第一个为真,就不往后看了,输出为真

 

(3)非运算:

!真 = 假

!假 = 真

 

练习题,统计用户数(etc/passwd),如果大于30个用户,输出总共多少用户。

一定要在给指令加上反引号``,因为我们给sum赋值的是指令的结果,而不是把指令赋值给sum

 

 

 

 

4、if语句判断(单分支  双分支  多分支)

(1)If单分支格式

例子:字符串可以用==表示的等于,但是数字比值只能使用-eq表示等于。

(2)if双分支结构  

例子:

(3)if多分支结构

例子1:输入名字判断是谁

例子2:成绩分类60以下不及格,60-80及格,80-99满意,100满分

例子3:成绩分类折半优化60以下不及格,60-80及格,80-99满意,100满分

 

 

 

 

5、case语句

格式  :

例子1:名字判断

例子2.成绩分类,由于case的条件不能添加多个条件选择所以使用[0-9][0-9]的方法来拼凑数字。

 

 

 

6、Wille循环 

格式

while循环:条件测试成功,则循环;失败,则退出

 

必须有时刻条件测试不成功,要不就会造成死循环,在linux下死循环很致命。所以需要在循环体中改变测试条件中用于控制循环次数的变量的值。

 

例1:1到100之和,数学运算时一定要加上let,一定别忘步长

 

 

例2:用while循环写一个脚本

Ping 10.10.16这个网段的主机,打印出可以ping通的和不能ping通主机的数量,要求10.10.16.50-10.10.16.100这个区间

结果为:

ping通主机的数量

不能ping通主机的数量

(这个题看看方法就行,因为我们在一个局域网中,10.10.16这个网段有我们很多的机器,自己练习应该是一个都无法ping通的)

 

 

例3:100以内素数

 

例4.斐波那契数列

 

7、until循环  (条件测试不成功则循环)

条件不满足循环,直到满足就退出循环,和while是反的

 

 

六、shell函数

和python基本一致,甚至更简单,连def都不用加了。

 

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。

代码重用可以用函数代替

 

1、shell函数格式 (老师上课一笔带过,我这摘自菜鸟联盟)

说明:

(1)可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。

(2)参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

 

事例:

结果:

 

 

2、下面定义一个带有return语句的函数:

脚本内容:

结果:

函数返回值在调用该函数后通过 $? 来获得。

 

注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。

 

 

3、函数参数

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...

 

带参数的函数示例:

结果:

注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

 

 

 

 

七、web网站架构和Nginx(概述)

1、网站架构原理

客户端通过http协议(tcp)连接httpd服务器,python使用的httpd服务器为nginx,nginx处理静态资源没有问题,但是处理动态资源(.py)非常差,所以需要wsgi来实现动态资源。

 

2、LNMP(基于python的web架构)

LNMP=Linux+nginx+mysql+python

静态资源:客户端从服务器获得的资源表现形式与原文件相同(前端内容为静态)

动态资源:通常是程序文件,需要服务器执行后,将执行结果返回给客户端。

注意:httpd服务器是纯静态的web服务器。

这里就和当初前端的静态动态不同了,前端中html+css为静态,js为动态。

 

3、主流httpd服务器:Apache   Nginx

 

4、WSGI:Web服务器网关接口(Python Web Server Gateway Interface)

(1)Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。WSGI是作为Web服务器与Web应用程序或应用框架之间的一种低级别的接口,以提升可移植Web应用开发的共同点。WSGI是基于现存的CGI标准而设计的。

 

(2)uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。

 

(3)要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。

WSGI是一种通信协议。

uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。

而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。

 

 

 

5、Nginx介绍

是一款开源的轻量级的高性能的静态资源web服务器、同时也是非常优秀反向代理服务器、缓存服务器、邮件代理服务器。

最早由俄罗斯程序员伊戈尔·赛索耶夫开发,官方主页http://nginx.org

理念和apache不一样,占用内存少、并发能力强、在中国大陆绝大部分的网站服务器都在使用。

属于web服务器解决方案领域的新贵,市场份额一路飙升。

 

(1)安装方法:

【1】源码:编译安装

【2】官方的rpm包:在linux下输入命令

sudo apt-get -y install nginx

 

安装后就会生成配置文件目录

配置文件目录:/etc/nginx

主配置文件:  /etc/nginx/nginx.conf

uwsgi参数配置文件:/etc/nginx/uwsgi_params

被主配置文件包含的配置文件:/etc/nginx/sites-available/default

网页根路径:/var/www/html

 

 

(2)使用nginx

【1】开启nginx

sudo nginx

【2】查询自己的ip

Ip a

在自己家一般是192开头的,然后在浏览器输入ip

【3】修改网页静态资源

在/var/www/html下有个index.nginx-debian.html

这就是刚才那个网页的html文件,删除这个文件,把在前端阶段做的京东页面整个挪进来。

再次在浏览器中输入ip并加上/京东,因为京东是个文件夹,如果是把文件夹中内容直接放在html目录下,就不用加/京东

当然我们还可以修改ip,通过我们指定的ip进入我们做的网页。

 

这是使用nginx实现静态资源,那像python写的动态文件能否实现呢?在html目录下写一个py文件,内容为print(“hello world”)。

在chorme浏览器中输入ip/py.py,你会发现,py文件被下载,而不是执行(不同浏览器表现不同,但是都不会执行),这就是最开始提到的,nginx处理动态资源(.py)非常差。这时候就需要wsgi来协助了。

 

 

 

6、wsgi的web实现(通过linux服务器实现网页页面)

(1)进入临时文件目录下,方便后来修改

cd /tmp

(2)安装所需环境

sudo apt-get -y install build-essential python3-dev python3-pip python-pip curl

如果出现依赖问题,请使用sudo apt-get autoremove 文件名 删除依赖文件

 

(3)安装uwsgi

对python来说,uWSGI的安装方式很多:

【1】通过pip

pip3 install uwsgi

【2】通过网络安装

sudo curl http://uwsgi.it/install | bash -s default /tmp/uwsgi

这种方式会在/tmp/uwsgi路径下安装二进制版本,并且可以随意改变它。

 

推荐两个都执行一次,避免出问题

 

(4)创建目录,创建py文件

sudo mkdir /myweb

cd /myweb

sudo vim test.py

 

py文件内容为:

def application(env,start_response):

    body = 'hello ujiuye.'

    status = '200 OK'

    headers = [('content-type', 'text/html'), ('content-length',str(len(body))) ]

    start_response(status,headers)

return [body.encode()]

 

(5)启动wsgi

默认情况下uWSGI只会开启一个进程和一个线程。

你可以用--processes选项和--threads选项添加更多的进程和线程。

 

sudo uwsgi --http :9090 --wsgi-file /myweb/test.py --master --processes 4 --threads 2

 

以上命令将会产生一个主进程,4个工作进程,和http路由。主进程会控制4个工作进程结束时再重新生成新的进程。每个工作进程下有2个线程。端口为9090。执行完别关闭。结束进程可使用ctrl+c

开启uwsgi后,在浏览器中输入ip:9090,因为我们设置了9090端口,就能实现py文件的内容:

 

 

7、Nginx反向代理uwsgi,实现静态页面和动态页面的分离

就是直接使用ip+py文件执行,而不需要端口。

Nginx实现反向代理,需要基于proxy模块,语法如下

 

(1)实现这个功能,需要修改nginx的、被主配置文件包含的配置文件:

/etc/nginx/sites-available/default

 

通过vim打开/etc/nginx/sites-available/default配置文件,然后在图中位置处:

(2)添加下图代码:

添加后如图:

保存退出

 

(3)检查语法是否有误:sudo nginx -t

(4)重启nginx服务:sudo service nginx restart

 

(5)最后启动wsgi

sudo uwsgi --http :9090 --wsgi-file /myweb/test.py --master --processes 4 --threads 2

 

在浏览器中输入ip/text.py

这样就实现静态页面和动态页面的分离nginx实现静态,wsgi实现动态。

 

 

 

 

 

 

 

 

 

这篇关于【046】Python全栈日记-Linux(四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/297728

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import