笔记
一、Python的requirements.txt文件
# 自动生成requirements.txt文件
pip freeze > requirements.txt
# 安装requirements.txt依赖
pip install -r requirements.txt
二、vim编辑器中文乱码问题
# 执行(打开vi编辑器新建.vimrc文件)
$: vi ~/.vimrc
---------------------------------
# 文件内容
set encoding=utf-8 # 显示的编码
set fileencoding=utf-8 # 写入文件的编码
三、Nginx配置
# 配置静态文件
server {
location ^~/static { # 静态文件路由
alias /usr/project/static; # 静态文件所在目录
}
}
# 配置项目相关
server {
location /api {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Protocol https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-USERTOKEN $http_x_usertoken;
proxy_connect_timeout xxx;
proxy_read_timeout xxx;
proxy_send_timeout xxx;
}
}
四、pymysql
import pymysql
db = pymysql.connect(user='用户名', password='密码', host='主机ip', database='要连接的库名') # 连接数据库
sql = 'sql语句'
'''使用with,调用完自动close()'''
with db:
print(db.open) # 连接成功,返回True
cur = db.cursor() # 创建游标
cur.execute(sql) # 执行sql语句
cur.description # 显示每列的详细信息
print(db.open) # with结束以后自动关闭,返回False
'''使用try'''
cur = db.cursor() # 创建游标
try:
cur.execute(sql) # 执行sql语句
except Exception as e:
print(e) # 捕获异常
finally:
cur.close() # 关掉游标
db.close() # 断开连接
五、sqlite3
import sqlite3
con = sqlite3.connect('sqlite3文件所在位置') # 创建连接
cur = con.cursor() # 创建游标
sql = 'sql语句'
try:
cur.execute(sql) # 执行sql语句
except Exception as e:
print(e) # 捕获异常
finally:
cur.close() # 关掉游标
con.close() # 断开连接
-- lua 操作sqlite3
local sqlite3 = require("sqlite3")
local env = sqlite3.sqlite3()
local sql = env:connect("db文件路径")
local cursor, errorString = sql:execute("SQL语句")
local row = {} -- 定义空table获取cursor中的数据
while true do
row = cursor:fetch(row, "a")
if row ~= nil then
break
end
end
# 其他操作
# 开启表头:.header on
# 列 对 齐:.mode column
六、scp远程拷贝
scp 连接名@连接地址:文件位置 要放到的位置
七、find查找文件
find -name '文件名'
八、MySQL基本查询语句
SELECT * FROM 表名 WHERE 条件; # 查询
UPDATE 表名 SET 要修改的内容 WHERE 条件; # 修改
INSERT INTO 表名 (字段名) VALUES (字段对应内容); # 添加数据
DELETE FROM 表名 WHERE 条件; # 删除字段
DROP TABLE {表名} # 删除表
九、es相关功能
curl 'localhost:9200/_cat/indices?v' # 查看所有索引
curl 'localhost:9200/_cat/indices?v&s={列名}' # 查看所有索引,根据某一列进行排序
curl -XPOST 'http://localhost:9200/{索引名称}/_unfreeze' # 索引解冻
curl -XGET 'http://localhost:9200/_mapping?pretty' # 查看所有type
curl -XGET 'http://localhost:9200/_cat/templates/?v' # 查看所有模板
curl -XGET 'http://localhost:9200/{索引名称}/_search?pretty' # 查看索引数据
curl -XGET 'http://localhost:9200/{索引名称}/_mapping?pretty' # 查看索引结构
curl -XGET 'http://localhost:9200/{索引名称}/_mapping/field/{字段名}?pretty' # 查看索引下字段的映射
curl -XGET 'http://localhost:9200/_index_template/{索引模板名称}' # 查看索引模板名称
curl -XGET 'http://localhost:9200/_component_template/{组件模板名称}' # 查看组件模板
# es的cat命令
EsIp="http://localhost:9200/"
curl -XGET ${EsIp}_cat/master?help # help 查看帮助
curl -XGET ${EsIp}_cat/master?v # verbose 显示列名,查看master节点
curl -XGET ${EsIp}_cat/master?v&h=host,ip,node # Headers 只显示特定列
curl -XGET ${EsIp}_cat/indices?v&h=index,docs.count,store.size&bytes=kb # Bytes 数字格式化展示
curl -XGET ${EsIp}_cat/indices?v&h=index,docs.count,store.size&bytes=kb&format=json&pretty # json格式输出
curl -XGET ${EsIp}_cat/indices?v&h=index,docs.count,store.size&bytes=kb&format=yaml&pretty # yaml格式输出
curl -XGET ${EsIp}_cat/indices?v&h=index,docs.count,store.size&bytes=kb&pretty&s=index,docs.count:desc # Sort排序,根据index升序,docs.count降序
curl -XGET ${EsIp}_cat/health?v&h=cluster,status # 查看集群健康状态
curl -XGET ${EsIp}_cat/nodes?v # 查看集群节点
curl -XGET ${EsIp}_cat/nodes?v&h=ip,node.role,name,disk.avail # 磁盘剩余
curl -XGET ${EsIp}_cat/allocation?v # 查看每个数据节点上的分片数(shards),以及每个数据节点磁盘剩余
curl -XGET ${EsIp}_cat/pending_tasks?v # 查看被挂起的任务
curl -XGET ${EsIp}_cat/plugins?v # 查看每个节点正在运行的插件
curl -XGET ${EsIp}_cat/nodeattrs?v # 查看每个节点的自定义属性
curl -XGET ${EsIp}_cat/recovery/.kibana?v&format=json&pretty # 查看索引分片的恢复视图
curl -XGET ${EsIp}_cat/fielddata?v&h=node,field,size # 查看每个数据节点上fielddate当前占用的堆栈内存
curl -XGET ${EsIp}_cat/recovery/.kibana?v&format=json&pretty # 对某一字段进行查看
curl -XGET ${EsIp}_cat/repositories?v # 查看注册的快照仓库
curl -XGET ${EsIp}_cat/snapshots/repo1?v # 查看快照仓库下的快照
curl -XGET ${EsIp}_cat/thread_pool/bulk?v&format=json&pretty # 查看每个节点线程池的统计信息
curl -XGET ${EsIp}_cat/indices/.monitoring*?v&h=index,health # 查看索引
curl -XGET ${EsIp}_cat/aliases?v&h=alias,index # 查看别名
curl -XGET ${EsIp}_cat/templates?v&format=json&pretty # 查看索引模板
curl -XGET ${EsIp}_cat/count?v # 整个集群文档数
curl -XGET ${EsIp}_cat/count/.monitoring*?v # 某一类索引文档数
curl -XGET ${EsIp}_cat/shards?v&format=json&pretty&s=index # 查看每个索引的分片
curl -XGET ${EsIp}_cat/segments/.kibana?v&format=json&pretty # 查看每个索引的segment
十、字符串转换为字典
str = '{"name": "Justin Bieber", "age": 44, "gender": "男"}'
import json
user_dict = json.loads(str)
print(str)
>>> {"name": "Justin Bieber", "age": 44, "gender": "男"}
----------------------------------------------------------------------------
import ast
user_dict = ast.lateral_eval(str)
print(user_dict)
>>> {"name": "Justin Bieber", "age": 44, "gender": "男"}
十一、IP转换、判断是否合法
# 端口范围 [0, 65535]
import socket, struct
socket.inet_ntoa(struct.pack("!I", ip)) # 整型转换为字符型 int -> str
--判断ip是否合法
function JudgeIPString(ipStr)
if type(ipStr) ~= "string" then
return false;
end
--判断长度
local len = string.len(ipStr);
if len < 7 or len > 15 then --长度不对
return false;
end
--判断出现的非数字字符
local point = string.find(ipStr, "%p", 1); --字符"."出现的位置
local pointNum = 0; --字符"."出现的次数 正常ip有3个"."
while point ~= nil do
if string.sub(ipStr, point, point) ~= "." then --得到非数字符号不是字符"."
return false;
end
pointNum = pointNum + 1;
point = string.find(ipStr, "%p", point + 1);
if pointNum > 3 then
return false;
end
end
if pointNum ~= 3 then --不是正确的ip格式
return false;
end
--判断数字对不对
local num = {};
for w in string.gmatch(ipStr, "%d+") do
num[#num + 1] = w;
local kk = tonumber(w);
if kk == nil or kk > 255 then --不是数字或超过ip正常取值范围了
return false;
end
end
if #num ~= 4 then --不是4段数字
return false;
end
return ipStr;
end
十二、Redis查询key
$ redis-cli
$ keys * # 查询所有的键
$ dbsize # 获取键的总数
$ exists key [key] # 查看键是否存在
$ del [key] [key] # 删除键,可以删除一个或多个
$ type [key] # 查看键的类型
$ get [key] # 查看键中的值
$ set [key] [value] # 存放键值
$ mset [key] [value] [key] [value] # 批量存放键值
$ append [key] [value] # 追加内容
$
十三、celery相关
'''启动相关'''
# celery启动worker命令
celery -A {包含celery文件的文件夹名称}.{celery启动文件} worker -l info
celery app {包含celery文件的文件夹名称}.{celery启动文件} worker -l info
# 上面两条命令作用相同
# celery启动beat的命令
celery beat -A {包含celery文件的文件夹名称}.{celery启动文件} -l info # Linux
celery beat app {包含celery文件的文件夹名称}.{celery启动文件} -l info
celery -A {包含celery文件的文件夹名称}.{celery启动文件} beat -l info # Windows
# 以上两条命令作用相同
'''停止相关'''
# 杀死所有celery进程
ps auxww | grep 'celery' | awk '{print $2}' | xargs kill -9
十四、Python操作
'''判断某键是否在字典中'''
{字典变量}.__contains__('{键}')
十五、MongoDB查询语法(大多数不能使用符号的都可以)
$gt: 大于
$lt: 小于
$gte: 大于等于
$lte: 小于等于
$ne: 不等于
$mod: 取模运算
db.things.find("this.a % 10 == 1") == db.things.find({a: {$mod: [10, 1]}})
$all 和 $in: 匹配条件内所有的值
{a: [ 1, 2, 3 ]}
这个:`db.things.find({a: {$all: [ 2, 3 ]}});`可以匹配;
这个:`db.things.find({a: {$all: [ 2, 3, 4 ]}});`无法匹配。
十六、设备一分钟内允许返回的重启思路
python实现:
># 格式化获取现在时间(时:分) >now_time = time.strftime("%H:%M", time.localtime()) ># 分隔 >now_time = now_time.split(":") ># 给`分`位数字加一 >dis_time = str(int(now_time[1]) + 1) ># 再将时间进行替换拼接 >now_time = ":".join([dis_time if now_time.index[i] == 1 else i for i in now_time]) ># 执行定时关机 >os.system(f"shutdown -r {now_time}")
node.js实现:
>// 导入moment模块 >const moment = require('moment'); >var execSync = require("child_process").execSync; >// var now_time = moment().format('YYYY-MM-DD HH:mm:ss'); >// 获取现在时间(时:分) >var now_time = moment().format('HH:mm').toString().split(":"); >// 给`分`位数字加一 >var dis_time = Number(now_time[1]) + 1; >// 转换成字符串 >var dis_time = dis_time.toString(); >// 定义一个空数组 >var new_time = new Array(); >// 将需要的数(时、分)加入数组 >new_time.push(now_time[0]); >new_time.push(dis_time); >// 将数组转换为字符串 >var new_time = new_time.join(":"); >execSync("shutdown -r " + new_time);
十七、node.js时间模块
var moment = require('moment')
var now_time = moment().format('YYYY-MM-DD HH:mm:ss')
十八、tar命令
# tar打包命令
打包:tar -cvf 打包以后的文件名 要打包的文件名
例子:tar -cvf flask.tar flask/
打包:tar -zcvf 压缩以后的文件名 要压缩的文件名
例子:tar -zcvf flask.tar.gz flask/
# tar解压命令
解包:tar -xvf(-zxvf) 压缩包名
指定位置解包:tar -xvf(-zxvf) 压缩包名 -C 要解压的位置
十九、websocket
# 报错是需要可证的,直接取消验证许可
import ssl
from websocket import create_connection
url = 'wss://127.0.0.1/...'
ws = create_connection(url, sslopt={'cert_reqs': ssl.CERT_NONE})
# 报错是没有'http、https、ws、wss'协议的,url的前缀不对
url = '`wss`://localhost/...'
二十、ip相关命令
ifconfig eth0 | grep 'inet addr' | awk '{ print $2}' | awk -F: '{print $2}' # 获取eth0的ip
二十一、Linux一些命令说明
~/ #是指 [/home/使用的用户/]
二十二、systemctl 服务命令无法启动
# 因环境变量无法启动
# 场景:python使用的sqlite3与系统中的sqlite3版本不一致导致项目无法启动
# 解决:
# 创建文件:/etc/systemd/system/[服务].service.d/[任意名称].conf
# **注**:服务名称必须与.service文件的相同
# /etc/systemd/system/*.service.d/*.conf
[Server]
Environment="环境变量"
Environment="环境变量"
...
# 重启服务
systemctl daemon-reload
二十三、无法加载文件 WindowsPowerShell\profile.ps1,因为在此系统上禁止 运行脚本
# 解决方案:
# 使用管理员身份打开,Power Shell(Windows终端)
Set-ExecutionPolicy RemoteSigned
# --如果弹出选项就输入: Y
Get-ExecutionPolicy
# --输出:RemoteSigned
二十四、命令行里面使用python导入报错
# 解决方法
>>> from django.conf import settings
>>> settings.configure()
二十五、Vue 打包命令
npm run build
二十六、Navicat 远程连接数据库
# 查询被连接主机MySQL用户状态
USE mysql;
SELECT host,user FROM user WHERE user="root";
>>> host user
>>> localhost root
# 修改状态
UPDATE user SET host="%" WHERE user="root";
# 这样,任意机器都可以使用Navicat连接该设备的数据库了
二十七、MySQL初始化
MySQL 报错MySQL.sock,不存在
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)
service mysqld stop # 停止MySQL服务
rm -rf /var/lib/mysql/* # 删除 /var/lib/mysql/ 下的所有文件
# 下面的操作看情况进行
rm /var/lock/subsys/mysqld # 删除锁定文件
killall mysqld # 杀死所有MySQL进程
# 上面的操作看情况进行
mysqld --initialize # 初始化MySQL
service mysql start # 启动MySQL服务
免密启动
vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
skip-grant-table
# 退出
service mysql restart
清空 authentication_string 字段
mysql -uroot # 进入MySQL
USE mysql; # 使用mysql数据库
UPDATE `user`
SET authentication_string=""
WHERE user="root"; # 修改root用户密码为空
exit # 退出数据库
# 关闭免密,并重启服务
修改密码
mysql -uroot
SET password='自己的密码';
FLUSH PRIVILEGES;
二十八、Vue自适应
<el-col
:lg="{ span: 3, offset: 0 }"
:md="{ span: 8, offset: 0 }"
:sm="{ span: 8, offset: 0 }"
:xl="{ span: 6, offset: 0 }"
:xs="{ span: 8, offset: 0 }"
>
</el-col>
<!--
栅栏一共24个
lg: 大屏显示器,办公使用
md:中屏显示器,笔记本 span 栅格占据的列数 offset 栅格左侧的间隔数
sm:小屏显示器,平板
xs:超小屏显示器,手机
xl:2k屏幕。
-->
二十九、nvm node管理器
注:nvm安装前删除计算机中的node.js
第一步:下载nvm
第二步:安装
安装步骤
第一步:同意协议、下一步;(没什么说的,就不加图了)
第二步:选择nvm本地安装目录;(最好不要有空格)
第三步:设置nodejs快捷方式路径;(需要手动创建名为nodejs的快捷方式)
第四部:install -> finish
第三步:查看
命令窗口键入:nvm (查看是否安装成功)
参数 | 说明 |
---|---|
–help | 显示命令行帮助信息 |
–version | 打印当前nvm版本号 |
deactivate | 取消当前nvm命令行效果 |
install [-s] |
从源下载一个版本为 |
uninstall |
卸载一个版本为 |
use |
使用 |
current | 查看当前使用的node版本 |
ls | 查看所有本地可用的node版本 |
ls |
查看指定版本 |
ls-remote | 查看所有可用的远程版本(Linux与Mac) |
list available | 同上(windows) |
三十、搭梯子
购买远程代理:X寄场
登录用户名:lyt_sy@sina.com
密 码:设置好的密码
安装包路径:v2rayN
使用
双击运行;
- 如果没有将程序放到桌面,找不到程序可以双击右下角
登录x-寄场:复制v2ray订阅地址;
填写备注等信息,注意:勾选备用,然后保存;
更新当前订阅;
测试-启用节点(选择一个右键即可)。
三十一、PostgreSQL设置自增长
-- PostgreSQL 与 MySQL 不同,MySQL设置自增长直接用autoincrement设置,PostgreSQL需要先设置序列对象,并在创建字段时使用该序列对象作为缺省值,需要设置该字段不为空
/* 设置序列对象 */
[CREATE | ALTER | DROP] SEQUENCE IF NOT EXISTS <序列对象名>_seq
INCREMENT 1 -- 序列每次自增多少
START 1 -- 从1开始
MINVALUE 1 -- 序列最小值
MAXVALUE 2147483647 -- 序列最大值
CACHE 1 -- 缓存序列(服务器重启之后缓存会丢失)
NO CYCLE; -- 是否循环(NO CYCLE | CYCLE: 序列增长到最大值之后是否从新开始)
/* 创建表时引用 */
CREATE TABLE <表名> (
"id" int4 NOT NULL DEFAULT NEXTVAL('<序列对象名>_seq::regclass'),
......
)
三十二、VSCode 远程免密连接
VSCode没有保存密码功能,只能通过ssh秘钥的方式进行自动登录,下面是使用RSA秘钥方式自动登录开发服务器。
默认每次连接,打开文件都得输入密码,当密码很复杂的时候这是一件很痛苦的是。
1.生成秘钥对
默认电脑上安装了git,没有的话就先安装;打开终端或者git-bash输入以下命令(邮箱使用自己的)。
$ ssh-keygen -t rsa -C "<邮箱>"
然后一路回车直到完成;秘钥文件存放在:C:\User\<用户名>\.ssh
2.将公钥上传到服务器
- 将id_rsa.pub重命名为authorized_keys;
- 然后上传到服务器的/root/.ssh目录下(没有则新建.ssh);
- 修改VSCode的ssh_config文件。
3.配置VSCode远程ssh文件
以下是配置文件的栗子
Host <服务IP>
HostName <服务名称>
User <ssh用户名>
Port <ssh连接端口>
PreferredAuthentications publickey
IdentityFile <本地key文件>
# 举例
Host 10.10.0.189
HostName 10.10.0.189
User root
Port 10022
PreferredAuthentications LGGawZI4EhMyjgvlcrTVYQMwZfe2c19cHzxABL3IUPA
IdentityFile "C:\Users\22759\.ssh\id_rsa"
4.常见问题解决方法
文件权限不对
$ chmod 700 /root $ chmod 700 /root/.ssh $ chmod 644 /root/.ssh/authorized_keys
sshd配置问题
编辑/etc/ssh/sshd_config文件;找到对应配置取消前面注释。
# 开启秘钥登录 PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 # 将下面的配置注释掉 # RSAAuthentication no # 退出并执行重启sshd service sshd restart