笔记


笔记

一、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

路径:Releases · coreybutler/nvm-windows (github.com)

第二步:安装

安装步骤

第一步:同意协议、下一步;(没什么说的,就不加图了)

第二步:选择nvm本地安装目录;(最好不要有空格)

第三步:设置nodejs快捷方式路径;(需要手动创建名为nodejs的快捷方式)

第四部:install -> finish

第三步:查看

命令窗口键入:nvm (查看是否安装成功)

参数 说明
–help 显示命令行帮助信息
–version 打印当前nvm版本号
deactivate 取消当前nvm命令行效果
install [-s] 从源下载一个版本为的node.js
uninstall 卸载一个版本为的node.js
use 使用版本的node
current 查看当前使用的node版本
ls 查看所有本地可用的node版本
ls 查看指定版本
ls-remote 查看所有可用的远程版本(Linux与Mac)
list available 同上(windows)

三十、搭梯子

购买远程代理:X寄场

登录用户名:lyt_sy@sina.com

密 码:设置好的密码

安装包路径:v2rayN

使用

  1. 双击运行;

    • 如果没有将程序放到桌面,找不到程序可以双击右下角
  2. 登录x-寄场:复制v2ray订阅地址;

  3. 填写备注等信息,注意:勾选备用,然后保存;

  4. 更新当前订阅;

  5. 测试-启用节点(选择一个右键即可)。

三十一、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.将公钥上传到服务器

  1. 将id_rsa.pub重命名为authorized_keys;
  2. 然后上传到服务器的/root/.ssh目录下(没有则新建.ssh);
  3. 修改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.常见问题解决方法

  1. 文件权限不对

    $ chmod 700 /root
    $ chmod 700 /root/.ssh
    $ chmod 644 /root/.ssh/authorized_keys
  2. sshd配置问题

    编辑/etc/ssh/sshd_config文件;找到对应配置取消前面注释。

    # 开启秘钥登录
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
    # 将下面的配置注释掉
    # RSAAuthentication no
    # 退出并执行重启sshd
    service sshd restart

文章作者: 刘宇亭
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 刘宇亭 !
评论
  目录