Linux基础指令
基础指令:
- 安装网络工具,终端输入:sudo apt install net-tools,可以输入ifconfig查看虚拟机Ip
2. 适配客户机分配率,终端输入:sudo apt install open-vm-tools
3. 指令格式:指令名 选项 参数
4. ls -a 显示所有的文件信息(包含隐藏文件)
5. ls -l 以列表形式展示信息
6. ls -h 以可读性更强的形式显示
7. ls -alh 以列表形式和更强的的形式显示所有的文件信息(最常用)
8. pwd 当前文件路径
9. cd 切换路径 cd ~ 回到家目录 cd - 回到上次所在目录 cd ..回到父级路径
10. mkdir 创建文件夹 mkdir -p 创建多级文件夹
11. rmdir 删除文件夹
12. touch 创建文件
13. rm 删除文件 rm -r 递归删除 rm -f 忽略错误
14. 重定向 > 写入 >> 追加
15. cat 连接多个文件,将内容输出到屏幕
16. head -n 查看文件前n行 tail -n 查看文件后n行
17. more 文件 显示文件内容,每次显示一屏幕 空格,显示下一屏幕 q 退出
18. wc 文件统计 wc -l 行数 wc -w 单词数 wc -m 字符数 wc -c 字节数
19. cp 复制粘贴 (1) cp 源文件 目标路径
(2) cp 源文件 目标路径 新文件名字
20. mv 剪切粘贴 (1) mv 源文件 目标路径
(2) mv 源文件 目标路径 新文件名字
21. tar 归档 tar -c 创建tar包 tar -x 解开tar包 tar -f 文件(必须放在末尾) tar -v 文件详细信息 tar -t 列表显示归档内容
22. *.tar.gz 压缩解压 gzip -r 压缩 gzip -d 解压
23. | 管道 左边输入 右边输出 grep 以行为单位过滤
24. ps -e 所有进程 ps -f 进程详细信息
25. kill 杀死进程 kill -9 清理信息 常用的例子:ps -ef | grep bash kill -9 进程号
26. top 查看占用cpu内存最多的进程
27. ln -s源文件 连接文件 软连接:相当于创建了快捷方式,源文件删除 链接文件废弃
28. ln 源文件 链接文件 硬链接:改一个,其他链接同步更改,源文件删除,硬链接文件正常使用,相当于创建了一个新的文件,该文件和源文件保持同步
用户指令:
- sudo useradd 用户名 添加用户 sudo useradd -m 自动创建家目录
- sudo userdel 用户名 删除用户 sudo userdel -r 删除家目录以及邮件池
- sudo groupadd 组名 添加组
- sudo groupdel 组名 删除组
- sudo passwd (用户名) 更改root(用户)密码
- su (用户名) 切换到管理员(指定用户)
- whoami 查看当前用户名
- exit 退出当前用户,返回上个用户,直至退出系统
- ls -l 第一个字符是l 代表软连接 d 代表文件夹 - 代表文件
- 权限:r:可读(4) w:可写,可以修改(2) x:可执行,可以cd, 可以运行(1) -:无权限(0)
案例:777:rwxrwxrwx 750:rwxr-x--- 000:---------
前三个字符:当前用户权限,中间三个字符:当前用户组的其他用户,后面三个字符:非当前用户组的用户
远程连接(ssh)
- 安装 sudo apt install openssh-server
- 虚拟机远程连接需要修改配置文件 终端输入:cd /etc/ssh/sshd_config 把”PermitRootLogin ”,修改为”PermitRootLogin yes”
- 远程拷贝工具 scp
本地拷贝到远程:scp 本地文件 用户名@ip地址:新文件名
(1) scp abc.txt ‘qyc’@’192.168.13.31’: cba.txt 拷贝地址默认为家目录
- scp -r abc.txt qyc’@’192.168.13.31’:\home\用户家目录\Desktop
远程拷贝到本地:scp 用户名@ip地址:新文件名 本地文件
- scp ‘qyc’@’192.168.13.31’: cba.txt abc.txt
- scp -r ‘qyc’@’192.168.13.31’:\home\用户家目录\Desktop\456本地文件夹
服务操作
- systemctl status ssh 查看服务状态
- systemctl start ssh 启动服务
- systemctl restart ssh 重启服务
- systemctl stop ssh 停止服务
文本编辑
- 安装文本编辑器 sudo apt install vim
- 摁下 i,I,o,O,a,A 进入插入模式
i 光标前插入 I 行首插入
a 光标后插入 A 行末插入
o 下方另起一行 O 上方另起一行
- gg 移动光标到一行第一句 M 移动到中间 G 移动到最后一行最后一句
h 向左 j 向下 k 向上 l 向右
- dd 删除整行 n dd 删除n行 D 删除光标之后 d0 删除光标之前
- yy 复制 n yy 复制n行 p 粘贴
- /??? ???是搜索的字 输入后摁下回车 n 下一个 N上一个
- 摁下esc 退出编辑模式
- 摁下 : 进入命令模式
- :wq 保存并退出 :!q 不保存强制退出
mysql基础指令
关系型数据库:
- 登录 mysql -u root -p 123456
- -u 用户名 -p 密码 -h 主机ip地址 -P 主机ip端口
- 虚拟机安装指令: sudo apt install mysql-server
- 远程连接需要更改配置文件: /etc/mysql/mysql.conf.d/mysqld.conf 将”bind_address” 改为虚拟机的ip,修改完之后要重启服务:systemctl restart mysql
- show databases; 展示所有的数据库
- create database 数据库名 charest=utf8; 创建数据库
- drop database 数据库名; 删除数据库
- select database() ; 查看当前使用的数据库
- user 数据库名; 使用数据库
- show tables; 显示所有的表
- create table 表名( 列名 类型 约束1 约束2 约束3, 列名 类型 约束1 约束2, 列名 类型 约束1 ); 创建数据表
- desc 表名; 查看表结构
- drop table 表名; 删除数据表
- (1) alter table 表名 drop 列名; 删除数据表
(2)alter table 表名 add 列名 类型 约束1 约束2 ...; 添加数据表
(3)alter table change 原列名 新列名 类型 约束1 约束2 ...; 修改数据表
15. primary key 主键,可以确定唯一的一行
16. not null 非空,不能为空
17. auto_increment 自增长,每次+1
18. unique 唯一,列中内容不重复
19. default 默认值
20. foreign 外键,与其他表关联 是其他表的左键
21. check 检查(mysql8才能用), alter table user add constraint check_age check(age > 0);
CURD 增删改查
查
- select * from 表名;非常耗时,谨慎使用
- select 列 , 列,... from 表;
- select 列 as 别名,列as 别名 from 表名;
- 条件: (1) 比较运算符: = > >= < <= != <>
(2) 逻辑运算符:and or not
(3) 判空:is null; is not null
(4) in[a,b,c] 精确比较
(5) between 1 and 5 范围比较
(6) like 像 like % 多个字符 like - 一个字符
5. 关联查询:表与表之间存在关联关系
(1) 嵌套查询:第一次查询的结果作为第二次查询的条件
(2) 表连接:
- 笛卡尔链接:一个表中每一行都和另外一个表中所有行连接
- 内连接:inner join 举例: select user.id as 用户id, user.username as 用户名, role.nick as 昵称, role.level as 等级 from user inner join role on user.id = role.user_id;
- 外连接:左外连接:left join,以左表为主,左表条件满足 正常显示 不满足 右侧补null。举例:select * from user left join role on user.id = role.user_id;
- 外连接:右外连接:right join ,以右表为主,右表条件满足,正常显示,不满足补null。举例:select * from role right join user on user.id = role.user_id;
- 全连接:full join mysql不支持关键字 full join,left join union right join
举例: select * from user right join role on user.id = role.user_id union select * from user left join role on user.id = role.user_id;
6.分组,分页,排序,去重
(1) distinct 去重,单独列展示 并对列去重。举例: select distinct user_id from role;
(2) group by 分组, 一般会结合count (*)进行统计, select info as '组信息', count(*) as 个数 from role group by info;
(3) order by 排序,asc 升序,desc 降序,select * from role order by user_id desc , id desc ;
(4) limit 一个数字n 表示前n个,两个数字表示start,count 比如 (1,3),每页显示count个 第n页公式 (n-1) * count,count
增
- insert into 表名 values (列1, 列2,列n),(列1, 列2, 列n); 列的个数要与值得个数一致
- insert into 表名 (列1, 列2) values (值1, 值2), (值1, 值2); (比较经常使用) 可以指定插入哪些列,有默认值和可以为空的列可以不插入,没有默认值且非空的列必须添值
- insert into 表名 set 列1=值1,列2=值2; 插入指定的一行的列与值
改
update 表名 set 列1 = 值1 where 条件; 如果没有条件就修改整个表
删
delete from 表名 where 条件; 如果没有条件就清空表、
用户指令
- create user ‘qyc’@’%’ identified by ‘123456’; 创建用户qyc,密码为123456
- grant 权限列举 to ‘qyc’@‘%’ on 数据名.表名 分配权限 all 代表所有权限 *.*代表数据库中所有表
- flush privileges; 刷新权限
- drop user 'qyc'@'%'; 删除用户
- alter user ‘qyc’@‘%’ identified by ‘12345678’;修改密码
外键
- 概念:MySQL中的外键(Foreign Key)是数据库表中的一个字段,它指向另一个表的主键(Primary Key)。外键用于在两个表之间建立链接,保证数据的参照完整性。
- constraint 外键名 foreign key(列名)references表名(列名)on update cascade on delete cascade; 添加外键
- alter table 表名 drop foreign key 外键名; 删除外键
函数
- select database(); 查看当前使用数据库
- select user(); 查看当前用户
- select version(); 查看当前版本
- select now(); 查看现在时间,包括年、月、日、小时、分钟和秒
- select curdate(); 查看当前日期
- select curtime(); 查看当前时间,只包括小时、分钟和秒
- select unix_timestamp(); 获取当前时间的时间戳
特殊数据类型
- int 整型
- varchar char 字符型
- datetime default current_timestamp 在插入新记录时自动设置时间戳字段的值为当前的 日期和时间
default current_timestamp on update current_timestamp 插入时或更新时把该列的值设置为当前的日期和时间
- enum 枚举 enum("男“,”女“, ”保密“) default "保密" 默认保密
使用python操作mysql
- 导入模块 import pymysql
- 构建连接 con = pymysql.content(user=”root”,password=”123456” datebase=”python2407”)
- 构建游标 cur = con.cursour()
通过游标执行sql cur.excute(“sql语句”) sql语句:select * from students; insert into students valuaes %s, 小明
- cur.fetchall() 获取所有数据,返回元组
- cur.fetchone() 获取一个数据,返回元组
- cur.fetchmany(size=n) 获取n个数据,返回大元组,默认一个小元组
- cur.scroll(mode=relative) 移动游标 relative相对位置 负值倒退 正值前进
absolute 绝对位置 0是初始位置 一直到len-1 可以随意定位
- cur.close() 关闭游标
- con.close() 关闭连接
索引
- 索引类型:主键索引、唯一索引、普通索引
- 索引不是越多越好,数据修改概率比较小,适合建索引,反之不适合
事物
- 四大特性ACIP:
原子性:事务不可在分割,要么全部执行要不全部放弃
一致性:事务执行前后都要保持数据一致性
隔离性:多个事务相互不干扰
持续性:事务一旦提交永久更改
- 关键字:begin 开始事物
rollback 回滚事务(出现异常时)
commit 提交事务
- 隔离级别,隔离处理高并发情况
- 读未提交,读已提交,可重复度,串行化
sqlite文件数据库
概念:一个文件就是一个数据库,数据库下可以有表
mongodb基础指令
- 特点:结构不是固定的,没有关系表
- ubuntu安装:网站 https://www.mongodb.com/zh-cn/docs/manual/tutorial/install-mongodb-on-ubuntu/
- 终端输入:cat /etc/lsb-release
- sudo apt-get install gnupg curl
- curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg \ --dearmor
- echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
- sudo apt-get update
- sudo apt-get install -y mongodb-org
- echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-database hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-mongosh hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections
- 启动服务:sudo systemctl start mongod
- 查看服务状态:sudo systemctl status mongod
pymongo:
- 导入模块 import pymongo
- 构建客户端 client = pymongo.MongoClient()
- db = client.create_database(“python2407”) 创建数据库
- db = client.get_database(“python2407”) 使用数据库,没有就创建
- db = client.drop_database(“数据库名”) 删除数据库
- db.list_database_names 列出所有的数据库名
- student = client.create_collection(“student”) 创建集合
- student = db.get_collection(“student”) 使用集合,没有就创建
- db.list_collection_names 列出所有集合名
- db.drop_collection(“集合名”) 删除集合
db = client.get_database(“python2407a”) 以下举例均在此数据库下
collection = db.get_collection(“student”)
- client.insert_one({“name”:”101”}) 插入单个数据
- client.insert_many([{“name”:”101”},{“name”:”张三”}]) 插入多个数据
- collection.delete_one({“age”:25}) 删除第一个age=25的元素
- collection.delete_many({“name”:”张三”}) 删除所有name=”张三”的数据
- collection.update_one({“name”:”101},{“$set”:{“name”:”1011”,”age”:18}}, upsert=True) 更改第一个name=101的数据
- collection.update_many({“name”:”张三”},{“$set”:{“name”:”张珊珊”}},upsert=True) 更改所有name=张三的数据
- collection.find_one({“name”:”张三”}) 查找第一个name=张三
- collection.find({“name”:”张三”}) 查找全部name=张三
- 关闭连接 client.close()
redis基础指令
- 内存数据库,内存键值对,操作内存中的数据效率要远远高于操作磁盘数据效率
- 启动服务:在Redis目录下输入cmd打开命令窗口,输入redis-server.exe redis.windows.conf,运行指定配置文件
- 启动客户端:上方打开的启动服务器不要关闭,重新打开一个cmd命令窗口,输入:redis-cli -h 192.168.13.20 -a 123456 -h是本机主机ip -a是密码 进入后使用auth跟密码
- config get * 获取所有配置
- config get requirepass 获取密码配置
以下是配置文件的个别内容
- config set loglevel warning 设置配置文件(临时配置,服务器重启会失效)
- dbfilename 数据库文件名 会不断的把内存中的数据与磁盘文件数据同步
- save 同步条件 save 900 1 如果在900s(15m)中至少改变了一个,执行保存
save 300 10 如果在300s(5m)中至少改变了十个,执行保存
save 60 10000 如果在60s(1m)中至少改变了一万个,执行保存
- requirepass 获取密码
- dir 获取文件
- bind 服务器绑定的ip
- slaveof <masterip> <masterport> 主从关系中 从的是哪个主机ip 端口
- masterauth <master-password> 主机密码
- 命令窗口输入 info replication 查看主从信息
- ubuntu 安装redis 终端输入 sudo apt install redis-server
redis五种数据类型
import redis
# 构建连接
client = redis.Redis(db=1)
# 关闭连接
client.close()
- 键的操作
- print(client.type("id")) 打印 id 的类型(假设已经存在)
- client.expire("id", 100) 设置id存活时间
- print(client.ttl("id")) 打印剩余存活时间
- client.persist("id") 设置为永久存在
- 字符串
- client.set("id",101) 创建字符串的键
- print(client.get("id").decode()) 获取键
- client.mset({"name": "张三", "age": 23}) 获取键的值
- print(client.mget(["name", "age"])) 获取键的多个值
- client.incr("id", amount=2) id 自增,步长为2
- client.decr("id", amount=2) id自减,步长为1(默认)
- 列表
- client.lpush("key_list", 1, 2, 3) 创建列表并向上添加(左)
- client.rpush("key_list", 0) 向下添加(右)
- print(client.llen("key_list")) 打印列表长度
- client.lpop("key_list") 删除上(左)
- client.rpop("key_list") 删除下(右)
- print(client.lindex("key_list",1)) 返回索引对应的元素
- print(client.lrange("key_list",1,3)) 返回索引范围内的元素
- print(client.ltrim("key_list",2,3)) 切割
- 哈希
- client.hset("key_hash", "key2", "value2") 创建hash表,添加键值对
- print(client.hget("key_hash", "key2")) 获取表中键对应的值
- print(client.hlen("key_hash")) 获取长度
- client.hdel("key_hash", "key1") 删除对应的键值对
- print(client.hkeys("key_hash")) 获取所有的键
- print(client.hvals("key_hash")) 获取所有的值
- print(client.hgetall("key_hash")) 获取所有的键值对
- 集合
- client.sadd("key_set", 1, 2, 3, 4, 5)
client.sadd("key_set2", 1, 3, 5, 7) 创建表并添加数据
- client.srem("key_set", 1,6) 删除对应的数据
- print(client.sismember("key_set","3")) 判断是否是成员
- print(client.scard("key_set")) 打印成员个数
- print(client.smembers("key_set")) 打印所有成员
- print(client.sinter(["key_set", "key_set2"])) 求两列表的交集
- print(client.sunion(["key_set", "key_set2"])) 求两列表的并集
- print(client.sdiff(["key_set", "key_set2"])) 求两列表的差集
- 有序集合
- client.zadd("key_zset", {"q": 5, "y": 2, "c": 6}) 创建表并添加权重
- client.zrem("key_zset","q") 删除值和对应的权重
- print(client.zrange("key_zset", 1, 10)) 查找范围内满足条件的权重
- print(client.zcount("key_zset",1,7)) 查找范围内满足条件的权重的个数
print(client.zscore("key_zset","c")) 根据值查看权重