我的常用命令
=== docker相关 start ===
1、版本 \ 信息
docker version
docker info
2、启动docker服务 (启动 、停止)
systemctl start docker
systemctl stop docker
3、查看image文件
docker images
docker image ls
4、删除 image 文件
docker image rm [imagename]
docker rmi [imagename]
5、从仓库抓取image到本地
docker image pull library/hello-world
docker image pull hello-world
6、运行image 文件
docker container run hello-world
7、终止容器
docker container kill [containID]
8、停用全部运行中的容器
docker stop $(docker ps -q)
9、列出容器
列出本机正在运行的容器
docker container ls
列出本机所有容器,包括终止运行的容器
docker container ls --all
10、删除容器文件
docker container rm [containerID]
删除全部容器
docker rm $(docker ps -aq)
11、docker 获取镜像
docker pull mysql:5.7
12、docker 启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m : 设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--volume , -v: 绑定一个卷
docker run -p 39100:3306 --name mysql -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
docker run -p 9527:3306 --name mysql -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
-p 3306:3306: 将容器的3306端口映射到主机的3306端口
-v $PWD/conf/my.cnf:/etc/mysql/my.cnf: 将主机当前目录下的conf/my.cnf挂载到容器的/etc/mysql/my.cnf
-v $PWD/logs:/logs: 将主机当前目录下的logs目录挂载到容器的/logs
-v $PWD/data:/mysql_data: 将主机当前目录下的data目录挂载到容器的/mysql_data
-e MYSQL_ROOT_PASSWORD=123456: 初始化root用户的密码
13、进入容器
docker exec -it mysql bash
mysql -uroot -proot
show databases;
14 拷贝文件到docker容器的命令
docker cp /xxxxx.sql mysqldb1:/root/
15 查看容器详情
docker inspect 容器名
16 打包、导出、导入
```
对镜像进行导出导入
将镜像导出为一个镜像img文件
docker save redis -o redis.img
将img镜像文件导入,复制出一个完全一样镜像
docker load --input redis.img
```
```
对容器进行导入导出
将容器导出为一个镜像tar文件
docker export lwjubuntu > lwjubuntu.tar
将镜像tar文件导入,生成一个新镜像
导入后是生成一个新镜像而不是直接生成容器。
docker import - lwjubuntu_new < lwjubuntu.tar
```
=== docker相关 end ===
======== docker-compose 常用命令 ========
1 后台启动容器,保持运行
docker-compose up -d
2 查看容器的启动日志
docker-compose logs -f
```
docker-compose up -d : 构建构建当前目录下的docker-compose
docker-compose exec 容器名 bash : 登录到容器中
docker-compose down : 删除所有容器, 镜像
docker-compose ps : 显示所有容器
docker-compose restart : 重新启动当前目录下的docker-compose容器
docker-compose run --no-deps --rm php-fpm php -v: 在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器
docker-compose build : 构建当前目录下的docker-compose
docker-compose build --no-cache nginx : 不带缓存的构建。
docker-compose logs nginx : 查看nginx的日志
docker-compose logs -f nginx : 查看nginx的实时日志
docker-compose config -q : 验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。
docker-compose events --json nginx : 以json的形式输出nginx的docker日志
docker-compose pause nginx : 暂停nignx容器
docker-compose unpause nginx : 恢复ningx容器
docker-compose rm nginx : 删除容器(删除前必须关闭容器)
docker-compose stop nginx : 停止nignx容器
docker-compose start nginx : 启动nignx容器
-d : 指定在后台以守护进程方式运行服务容器
-no-color : 设置不使用颜色来区分不同的服务器的控制输出
-no-deps : 设置不启动服务所链接的容器
-force-recreate : 设置强制重新创建容器,不能与--no-recreate选项同时使用。
--no-create : 若容器已经存在则不再重新创建,不能与--force-recreate选项同时使用。
--no-build : 设置不自动构建缺失的服务镜像
--build : 设置在启动容器前构建服务镜像
--abort-on-container-exit: 若任何一个容器被停止则停止所有容器,不能与选项-d同时使用。
-t,--timeout TIMEOUT : 设置停止容器时的超时秒数,默认为10秒。
--remove-orphans : 设置删除服务中没有在compose文件中定义的容器
--scale SERVICE=NUM : 设置服务运行容器的个数,此选项将会负载在compose中通过scale指定的参数。
```
======== linux相关 ========
linux 常用命令归纳大全
=== 一、系统信息处理 ===
arch 显示机器的处理器架构
uname -m 显示机器的处理器架构
uname -r 显示正在使用的内核版本
dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)
hdparm -i /dev/hda 罗列一个磁盘的架构特性
hdparm -tT /dev/sda 在磁盘上执行测试性读取操作
cat /proc/cpuinfo 显示CPU的信息
cat /proc/interrupts 显示中断
cat /proc/meminfo 校验内存使用
cat /proc/swaps 显示哪些swap被使用
cat /proc/version 显示内核的版本
cat /proc/net/dev 显示网络适配器及统计信息
cat /proc/mounts 显示已加载的文件系统
lspci -tv 罗列出所有的 PCI 设备
lsusb -tv 显示 USB 设备
date 显示系统日期
cal 2020 显示2020年的日历表
date 显示系统当前时间
clock -w 将时间修改保存到 BIOS
=== 二、文件操作相关 ===
cd /home 进入 '/ home' 目录'
cd .. 返回上一级目录
cd ../.. 返回上两级目录
cd 进入个人的主目录
cd ~user1 进入个人的主目录
cd - 返回上次所在的目录
pwd 显示当前工作路径
ls 查看目录中的文件
ls -F 查看目录中的文件
ls -l 显示文件和目录的详细资料
ls -a 显示隐藏文件
ls *[0-9]* 显示包含数字的文件名和目录名
tree 显示文件和目录由根目录开始的树形结构
du 参数 目录
-h : 单位以用户友好方式展示
-c : 统计目录文件大小
-a : 显示目录下所有的文件
--time : 显示目录文件修改的最后时间
--exclude: 排除某个目录
-s : 直接显示目录的使用大小
-BK : 以KB为单位显示目录大小
-BM : 以MB为单位显示目录大小
-BG : 以GB为单位显示目录大小
mkdir dir1 创建一个叫做 'dir1' 的目录
mkdir dir1 dir2 同时创建两个目录
mkdir -p /tmp/dir1/dir2 创建一个目录树
mkdir 2023091{0..4} -p 创建连续的目录
touch 2023091{0..4}.dat 创建连续的文件
rm -f file1 删除一个叫做 'file1' 的文件'
rmdir dir1 删除一个叫做 'dir1' 的目录'
rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容
rm -rf dir1 dir2 同时删除两个目录及它们的内容
mv dir1 new_dir 重命名/移动 一个目录
cp file1 file2 复制一个文件
cp dir/* . 复制一个目录下的所有文件到当前工作目录
cp -a /tmp/dir1 . 复制一个目录到当前工作目录
cp -a dir1 dir2 复制一个目录
ln -s file1 lnk1 创建一个指向文件或目录的软链接
ln file1 lnk1 创建一个指向文件或目录的物理链接
touch -t YYMMDDhhmm file1 修改一个文件或目录的时间戳
iconv -l 列出已知的编码
=== 三、以太网和WIFI无线相关命令 ===
ifconfig eth0 显示一个以太网卡的配置
ifup eth0 启用一个 'eth0' 网络设备
ifdown eth0 禁用一个 'eth0' 网络设备
ifconfig eth0 192.168.1.1 netmask 255.255.255.0 控制IP地址
ifconfig eth0 promisc 设置 'eth0' 成混杂模式以嗅探数据包 (sniffing)
dhclient eth0 以dhcp模式启用 'eth0'
route -n show routing table
route add -net 0/0 gw IP_Gateway configura default gateway
route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 configure static route to reach network '192.168.0.0/16'
=== 四、 APT 软件工具 ===
apt-get install package_name 安装/更新一个 deb 包
apt-cdrom install package_name 从光盘安装/更新一个 deb 包
apt-get update 升级列表中的软件包
apt-get upgrade 升级所有已安装的软件
apt-get remove package_name 从系统删除一个deb包
apt-get check 确认依赖的软件仓库正确
apt-get clean 从下载的软件包中清理缓存
apt-cache search searched-package 返回包含所要搜索字符串的软件包名称
=== 五、 备份操作 ===
dump -0aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的完整备份
dump -1aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的交互式备份
restore -if /tmp/home0.bak 还原一个交互式备份
rsync -rogpav --delete /home /tmp 同步两边的目录
rsync -rogpav -e ssh --delete /home ip_address:/tmp 通过SSH通道rsync
rsync -az -e ssh --delete ip_addr:/home/public /home/local 通过ssh和压缩将一个远程目录同步到本地目录
rsync -az -e ssh --delete /home/local ip_addr:/home/public 通过ssh和压缩将本地目录同步到远程目录
dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz' 通过ssh在远程主机上执行一次备份本地磁盘的操作
dd if=/dev/sda of=/tmp/file1 备份磁盘内容到一个文件
tar -Puf backup.tar /home/user 执行一次对 '/home/user' 目录的交互式备份操作
( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr 'cd /home/share/ && tar x -p' 通过ssh在远程目录中复制一个目录内容
( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home && tar x -p' 通过ssh在远程目录中复制一个本地目录
tar cf - . | (cd /tmp/backup ; tar xf - ) 本地将一个目录复制到另一个地方,保留原有权限及链接
find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents 从一个目录查找并复制所有以 '.txt' 结尾的文件到另一个目录
find /var/log -name '*.log' | tar cv --files-from=- | bzip2 > log.tar.bz2 查找所有以 '.log' 结尾的文件并做成一个bzip包
dd if=/dev/hda of=/dev/fd0 bs=512 count=1 做一个将 MBR (Master Boot Record)内容复制到软盘的动作
dd if=/dev/fd0 of=/dev/hda bs=512 count=1 从已经保存到软盘的备份中恢复MBR内容
=== 六、YUM 软件包升级器 ===
yum install package_name 下载并安装一个rpm包
yum localinstall package_name.rpm 将安装一个rpm包,使用你自己的软件仓库为你解决所有依赖关系
yum update package_name.rpm 更新当前系统中所有安装的rpm包
yum update package_name 更新一个rpm包
yum remove package_name 删除一个rpm包
yum list 列出当前系统中安装的所有包
yum search package_name 在rpm仓库中搜寻软件包
yum clean packages 清理rpm缓存删除下载的包
yum clean headers 删除所有头文件
yum clean all 删除所有缓存的包和头文件
=== 七、用户与群组相关命令 ===
groupadd group_name 创建一个新用户组
groupdel group_name 删除一个用户组
groupmod -n new_group_name old_group_name 重命名一个用户组
useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 创建一个属于 "admin" 用户组的用户
useradd user1 创建一个新用户
userdel -r user1 删除一个用户 ( '-r' 排除主目录)
usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 修改用户属性
passwd 修改口令
passwd user1 修改一个用户的口令 (只允许root执行)
chage -E 2005-12-31 user1 设置用户口令的失效期限
pwck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的用户
grpck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的群组
newgrp group_name 登陆进一个新的群组以改变新创建文件的预设群组
=== 八、磁盘空间相关 ===
df -h 显示已经挂载的分区列表
ls -lSr |more 以尺寸大小排列文件和目录
du -sh dir1 估算目录 'dir1' 已经使用的磁盘空间'
du -sk * | sort -rn 以容量大小为依据依次显示文件和目录的大小
rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n 以大小为依据依次显示已安装的rpm包所使用的空间 (fedora, redhat类系统)
dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n 以大小为依据显示已安装的deb包所使用的空间 (ubuntu, debian类系统)
=== 九、压缩解压 ===
bunzip2 file1.bz2 解压一个叫做 'file1.bz2'的文件
bzip2 file1 压缩一个叫做 'file1' 的文件
gunzip file1.gz 解压一个叫做 'file1.gz'的文件
gzip file1 压缩一个叫做 'file1'的文件
gzip -9 file1 最大程度压缩
rar a file1.rar test_file 创建一个叫做 'file1.rar' 的包
rar a file1.rar file1 file2 dir1 同时压缩 'file1', 'file2' 以及目录 'dir1'
unrar x file1.rar 解压rar包
tar -cvf archive.tar file1 : 创建一个非压缩的 tarball
tar -cvf archive.tar file1 file2 dir1: 创建一个包含了 'file1', 'file2' 以及 'dir1'的档案文件
tar -tf archive.tar : 显示一个包中的内容
tar -xvf archive.tar : 释放一个包
tar -xvf archive.tar -C /tmp : 将压缩包释放到 /tmp目录下
tar -cvfj archive.tar.bz2 dir1 : 创建一个bzip2格式的压缩包
tar -jxvf archive.tar.bz2 : 解压一个bzip2格式的压缩包
tar -zcvf archive.tar.gz dir1 : 创建一个gzip格式的压缩包
tar -zxvf archive.tar.gz : 解压一个gzip格式的压缩包
zip file1.zip file1 : 创建一个zip格式的压缩包
zip -r file1.zip file1 file2 dir1: 将几个文件和目录同时压缩成一个zip格式的压缩包
unzip file1.zip : 解压一个zip格式压缩包
=== 十、 文件权限操作 ===
ls -lh 显示权限
ls /tmp | pr -T5 -W$COLUMNS 将终端划分成5栏显示
chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r )、写(w)和执行(x)的权限
chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限
chown user1 file1 改变一个文件的所有人属性
chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性
chgrp group1 file1 改变文件的群组
chown user1:group1 file1 改变一个文件的所有人和群组属性
find / -perm -u+s 罗列一个系统中所有使用了SUID控制的文件
chmod u+s /bin/file1 设置一个二进制文件的 SUID 位 - 运行该文件的用户也被赋予和所有者同样的权限
chmod u-s /bin/file1 禁用一个二进制文件的 SUID位
chmod g+s /home/public 设置一个目录的SGID 位 - 类似SUID ,不过这是针对目录的
chmod g-s /home/public 禁用一个目录的 SGID 位
chmod o+t /home/public 设置一个文件的 STIKY 位 - 只允许合法所有人删除文件
chmod o-t /home/public 禁用一个目录的 STIKY 位
=== 十一、文件搜索相关 ===
find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录
find / -user user1 搜索属于用户 'user1' 的文件和目录
find /home/user1 -name \*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件
find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件
find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件
find / -name \*.rpm -exec chmod 755 '{}' \; 搜索以 '.rpm' 结尾的文件并定义其权限
find / -xdev -name \*.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备
locate \*.ps 寻找以'.ps'结尾的文件
whereis halt 显示一个二进制文件、源码或man的位置
which halt 显示一个二进制文件或可执行文件的完整路径
=== 十二、 系统重启及关机 ===
shutdown -h now : 关闭系统
init 0 : 关闭系统
telinit 0 : 关闭系统
shutdown -h hours: minutes &: 按预定时间关闭系统
shutdown -c : 取消按预定时间关闭系统
shutdown -r now : 重启
reboot : 重启
logout : 注销
=== 十三、 防火墙相关 ===
systemctl start firewalld : 启动
systemctl status firewalld : 查看状态
systemctl stop firewalld : 停止
systemctl disable firewalld : 禁用
systemctl start firewalld.service : 启动一个服务
systemctl stop firewalld.service : 关闭一个服务
systemctl restart firewalld.service : 重启一个服务
systemctl status firewalld.service : 显示一个服务的状态
systemctl enable firewalld.service : 在开机时启用一个服务
systemctl disable firewalld.service : 在开机时禁用一个服务
systemctl is-enabled firewalld.service: 查看服务是否开机启动
systemctl list-unit-files|grep enabled: 查看已启动的服务列表
systemctl --failed : 查看启动失败的服务列表
firewall-cmd --version : 查看版本
firewall-cmd --help : 查看帮助
firewall-cmd --state : 显示状态
firewall-cmd --get-active-zones : 查看区域信息
firewall-cmd --get-zone-of-interface=eth0: 查看指定接口所属区域
firewall-cmd --panic-on : 拒绝所有包
firewall-cmd --panic-off : 取消拒绝状态
firewall-cmd --query-panic : 查看是否拒绝
firewall-cmd --zone=public --list-ports : 查看所有打开的端口
firewall-cmd --reload : 更新防火墙规则
firewall-cmd --zone=public --add-port=80/tcp --permanent : 添加端口 ( --permanent永久生效,没有此参数重启后失效)
firewall-cmd --zone= public --remove-port=80/tcp --permanent: 删除端口
=== 十四、nginx 命令 ===
查看进程号
ps -ef|grep nginx 找到nginx 安装目录和配置文件目录
1、验证nginx配置文件是否正确
...nginx/sbin 目录下
./nginx -t
2、启动nginx
/www/server/nginx/sbin/nginx -c /www/server/nginx/conf/nginx.conf
/www/server/nginx/sbin/nginx -t -c /www/server/nginx/conf/nginx.conf
3、重启nginx
...nginx/sbin 目录下
./nginx -s reload
nginx 操作
cd /usr/local/nginx
sudo ./nginx -t
sudo ./nginx -s reload
ps:
nginx -s reload :修改配置后重新加载生效
nginx -s reopen :重新打开日志文件
nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否正确
#启动操作 -c参数指定了要加载的nginx配置文件路径
nginx -c /usr/local/nginx/conf/nginx.conf
4、停止nginx
./nginx -s stop : 快速停止nginx
./nginx -s quit :完整有序的停止nginx
=== 挂载一个文件系统 ===
mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘 - 确定目录 '/ mnt/hda2' 已经存在
umount /dev/hda2 卸载一个叫做hda2的盘 - 先从挂载点 '/ mnt/hda2' 退出
fuser -km /mnt/hda2 当设备繁忙时强制卸载
umount -n /mnt/hda2 运行卸载操作而不写入 /etc/mtab 文件- 当文件为只读或当磁盘写满时非常有用
mount /dev/fd0 /mnt/floppy 挂载一个软盘
mount /dev/cdrom /mnt/cdrom 挂载一个cdrom或dvdrom
mount /dev/hdc /mnt/cdrecorder 挂载一个cdrw或dvdrom
mount /dev/hdb /mnt/cdrecorder 挂载一个cdrw或dvdrom
mount -o loop file.iso /mnt/cdrom 挂载一个文件或ISO镜像文件
mount -t vfat /dev/hda5 /mnt/hda5 挂载一个Windows FAT32文件系统
mount /dev/sda1 /mnt/usbdisk 挂载一个usb 捷盘或闪存设备
mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 挂载一个windows网络共享
=== vim 相关 ===
:u 撤销
:%d 清空内容
:wq 保存退出
:set number 显示行号
=== 杂项 ===
热键
Tab 一键补全命令
Ctrl + c 停止正在运行的程序
Ctrl + d 相当于exit 退出
Ctrl + l 清屏
shutdown 关机 (服务器一般不关机,正常情况下很少很少用, 所以慎用)
reboot 重启命令
--help 帮助命令
man 命令说明书
创建连续的目录、文件
mkdir 2023091{0..4} -p
touch 2023091{0..4}.dat
linux 查看可疑IP登陆
last -f /var/log/wtmp
linux 清除记录
echo > /var/log/wtmp : 清除用户登录记录
echo > /var/log/lastlog: 清除最近登录信息
echo > /var/log/secure : 登录信息
echo > .bash_history : 清除保存的用户操作历史记录·
history -cw : 清除所有历史
查看占用端口
lsof -i
lsof -i:9002
24 linux文件传输
【优点】简单方便,安全可靠;支持限速参数
【缺点】不支持排除目录
【用法】
scp就是secure copy,是用来进行远程文件拷贝的。数据传输使用 ssh,并且和ssh 使用相同的认证方式,提供相同的安全保证 。
命令格式:
scp [参数] <源地址(用户名@IP地址或主机名)>:<文件路径> <目的地址(用户名 @IP 地址或主机名)>:<文件路径>
把本地的source.txt文件拷贝到192.168.43.52机器上的/home/admin目录下
scp /var/www/html/drupal/door.php admin@192.168.43.52:/home/admin
scp nginx.img root@192.168.33.35:/root
把192.168.43.52机器上的daye.txt文件拷贝到本地的/home/james目录下
scp admin@192.168.43.52:/home/admin/daye.txt /home/james
把192.168.43.52机器上的door.php文件拷贝到192.168.43.226机器的/home/james目录下
scp admin@192.168.43.52:/home/admin/door.php root@192.168.43.226:/home/james
---------------------数据库 mysql----------------------
1、Mysql 连接
mysql -u【用户名】 -p 【密码】 -P 【端口】 -h 【主机】
mysql -uroot -proot -P3306
2、退出
exit
3、MySQL 创建数据库
create database 【数据库名】
4、删除数据库
drop database 【数据库名】
5、选择数据库
use 【数据库名】
6、创建表
CREATE TABLE table_name (column_name column_type);
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL COMMENT '用户账号',
`nickname` varchar(255) DEFAULT NULL COMMENT '用户昵称',
`realname` varchar(255) DEFAULT NULL COMMENT '真实姓名',
`avatar` varchar(30) DEFAULT '' COMMENT '用户头像',
`password` varchar(255) DEFAULT NULL COMMENT '账户密码',
`ori_password` varchar(255) DEFAULT NULL COMMENT '初始密码',
`mobile` varchar(255) DEFAULT NULL COMMENT '手机号码',
`headimg` varchar(255) DEFAULT NULL COMMENT '用户头像',
`login_date` datetime DEFAULT NULL COMMENT '登录时间',
`login_ip` varchar(255) DEFAULT NULL COMMENT '登录IP',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`status` int(11) DEFAULT '1' COMMENT '状态(0-禁用 1-启用)',
`id_card_top` varchar(255) DEFAULT NULL COMMENT '身份证正面',
`id_card_back` varchar(255) DEFAULT NULL COMMENT '身份证背面',
`mail` varchar(255) DEFAULT NULL COMMENT '邮箱',
`cloud_id` varchar(32) DEFAULT NULL COMMENT 'timid',
`role_id` smallint(1) DEFAULT NULL COMMENT '角色id',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
create table 新表 like 旧表
create table 新表 as select 列,列,。。。from 旧表
7 mysql 创建管理用户 yonghu
create user 用户 identified by '密码';
create user yonghu identified by 'mima';
8 赋予 yonghu 数据库权限
grant all privileges on 数据库.* to '用户'@'%';
grant all privileges on www_lyjblog_com.* to 'yonghu'@'%';
-- 刷新数据库
flush privileges;
9 查看用户权限
show grants for 'yonghu';
10 再次验证 需要root用户
select User,Db,host,Select_priv,Insert_priv,Update_priv,Delete_priv from mysql.db where User='yonghu';
11 导出数据
mysqldump -h主机名 -P端口 -u用户名 -p密码 参数1,参数2.... > 备份文件.sql
-- 导出全部数据库
mysqldump -uroot -p1234 --all-databases > /root/db_back/all.sql
mysqldump -uroot -p1234 -A > /root/db_back/all.sql
mysqldump -P33061 -uroot -p -A > E:/资料下载/all_datebase_33061.sql
12 删除表
drop table 表名
13 显示表的属性信息
desc 表名
14 增加列
alter table 表名 add 列名 类型
15 删除列
alter table 表名 drop 列名
16 修改一个列名
alter table 表名 change 列名 新列名 类型
17 修改类型
alter table 表名 modify 列名 新类型
18 增加、删除主键
alter table 表名 add primary key 列名
alter table 表名 drop primary key 列名
19 查询语句
关键字:
1.or: 或
2.and: 和
3.having: 分组后的附加条件
4.group by:分组
5.order by:排序:asc:正序,desc:倒序
6.in: 存在于某个值中
7.not in: 不存在与某个值中
8.inner join … on: 链接多表
9.left join … on: 左外连接
10.right join … on:右外连接
11.left(right,inner) out join … on: 去重
12.count: 计数
13.AVG: 平均值
14.sum: 求和
15.max: 最大值
16.min: 最小值
17.like ‘关键字%’: 取含有关键字的值
18.distinct: 去重
19.round: 四舍五入
20.where 1=1: 全选
21.where 1=2: 全不选
22.limit 1,5: 从第二行开始显示5条数据
23.top 10:select top 10 * from 表名:显示前十条数据
24.newid(): 随机
1.选择查询:
select * from 表名 where 范围
2.完全查询:
select * from 表名
3.模糊查询:
select * from 表名 where 列名 like ‘%value%’(查询包含value的值)
4.排序查询(倒序,默认为正序):
select * from 表名 order by 列名 desc
5.计数查询:
select count as 别名 from 表名
6.求和查询:
select sum(field) as 别名 from 表名
7.平均值查询:
select avg(filed) as 别名 from 表名
8.最大值查询:
select max(filed) as 别名 from 表名
9.最小值查询:
select min(filed) as 别名 from 表名
10.四舍五入查询:
select round(min(filed),要保留的小数位数) as 别名 from 表名
11.去重查询:
select distinct 列名 from 表名
12.分组查询:
select * from 表名 group by 列名
13.多条件查询:
select * from 表名 where 列名=‘范围’ and 列名=‘范围’
14.不确定条件查询:
select * from 表名 where 列名=‘范围’ or 列名=‘范围’
15.多条件分组求值查询:
select 列名,min(filed)from 表名 where 列名=‘范围’ group by 列名 having sum(列名)
16.子查询(子查询的结果作为主查询的条件):
select * from 表名 where=(select id from 表名 where 列名=‘范围’)
17.连表查询(内连接):
select * from 表名 inner join 表名 on 主键=外键(必须有主外键)
18.连表查询(内连接)(去重):
select * from 表名 inner out join 表名 on 主键=外键(必须有主外键)
注:内连接只显示相关联的数据
19.连表查询(左外连接)(显示左表的全部信息和右表相关联的信息):
select * from 表名 left join 表名 on 主键=外键(必须有主外键)
20.连表查询(右外连接)(显示右表的全部信息和左表相关联的信息):
select * from 表名 right join 表名 on 主键=外键(必须有主外键)
21.连表查询(全外连接)(显示两个表中的所有记录):
select * from 表名 full/cross join 表名 on 主键=外键(必须有主外键)
22.说明:几个高级查询运算词
A:union(结合两个结果表并消除其中的重复行而派生出另一个表)
例:select name from 表名1 union select name from 表名2(去除name的重复行)
B:except(通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表)
C:intersect(通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表)
注:当这三个运算符与all一起使用时不消除重复行
20 数据操作语句:插入、修改、删除
1.数据插入
完全插入:insert into 表名 values(值1,值2,值3,…)
选择插入:insert into 表名(列名1,列名2,列名,3…) values(值1,值2,值3,…)
批量插入:insert into 表名 values(值1,值2,值3,…),(值1,值2,值3,…),(值1,值2,值3,…)…
注1:完全插入可以省略列名,但是值必须包含所有字段,批量插入类同
注2:选择插入必须选择需要插入的字段,选择对应字段的值,批量插入类同
2.修改语句
update 表名 set 列名=‘值’ where 列名=‘范围’
where 1=1(全选)
where 1=2(全不选)
注:不加where条件为修改所有指定列的值
3.删除语句
delete from 表名 where 列名=‘范围’
注:不加where条件为删除所有的值
======== git 相关 ========
1 创建版本库
git clone url: 克隆远程版本库
git init : 初始化当前目录为本地版本库
2 提交 修改
git status : 查看状态
git diff : 查看变更内容
git diff 8218a37ef 6a4c8b786a1 : 两个commit_id 的差异
git diff 8218a37ef 6a4c8b786a1 >> commit.diff: 两个commit_id 的差异 导出到文件 commit.diff
git add . : 跟踪所有改动文件
git add filename : 跟踪指定文件
git mv oldfile newfile : 文件改名
git rm filename : 删除文件
git rm --cached filename : 停止跟踪文件, 但不删除
git commit -m "信息" : 提交所有更新过的文件, 并注释
git commit --amend : 修改最后一次提交
3 查看提交历史
git log 查看提交历史
git log -p <file> 查看指定文件的提交历史
git blame <file> 以列表的方式查看指定文件的提交历史
4 撤销
git reset --hard HEAD 撤销工作目录中所有未提交
git checkout HEAD <file> 撤销指定未提交文件的修改内容
git revert <commit> 撤销指定的提交
5 分支和标签
git branch 显示本地所有分支
git checkout <branch/tag> 切换指定分支或者标签
git branch <新分支> 创建新分支
git branch -d <分支> 删除本地分支
git tag 显示本地所有标签
git tag <标签> 基于最新提交创建新标签
git tag -d <标签> 删除标签
6 合并与衍合
git merge <分支> 合并指定分支到当前分支
git rebase <分支> 衍合指定分支到当前分支
7 远程操作
git remote -v 查看远程本部库信息
git remote show <remote> 查看指定远程版本库信息
git remote add <remote> <url> 添加远程版本库
git fetch <remote> 从远程获取代码
git pull <remote> <branch> 下载代码及快速合并
git push <remote> <branch> 上传代码及快速合并
git push --tags 上传所有标签
git push <remote> :<分支或者标签> 删除远程分支或标签
======== nodepad++ 快捷键 ========
nodepad++常用快捷键
Ctrl+C : 复制
Ctrl+X : 剪切
Ctrl+V : 粘贴
Ctrl+Z : 撤消
Ctrl+Y : 恢复
Ctrl+A : 全选
Ctrl+F : 键查找对话框启动
Ctrl+H : 查找/替换对话框
Ctrl+D : 复制并粘贴当行
Ctrl+L : 删除当前行
Ctrl+T : 当行向上移动一行
Ctrl+S : 保存文件
Ctrl+Alt+S : 另存为
Ctrl+Shift+S : 保存所有文件
Ctrl+B : 转至匹配的括号
Ctrl+O : 打开文件
Ctrl+N : 新建立文件
CTRL+G : 定位换行, 偏移量
Ctrl+W : 关闭当前文档
Ctrl+Tab : 下一个文档
Ctrl+Shift+Tab : 上一个文档
Ctrl+鼠标滚轮钮 : 放大缩小
Ctrl+BackSpace : 删除开始词
Ctrl+Delete : 删除结束词
CTRL+U : 转换为小写
Ctrl+Shift+U : 转换为大写
Ctrl+Shift+BackSpace: 删除至行首
Ctrl+Shift+Delete : 删除至行尾
Ctrl+P : 打印
Ctrl+I : 选择当前行
Ctrl+Alt+R : 从右边阅读
Ctrl+Alt+L : 从左边阅读
Ctrl+Q : 块注释/消除注释
Ctrl+Shift+T : 打开最近关闭Ctrl+C 复制
Ctrl+X : 剪切
Ctrl+V : 粘贴
Ctrl+Z : 撤消
Ctrl+Y : 恢复
Ctrl+A : 全选
Ctrl+F : 键查找对话框启动
Ctrl+H : 查找/替换对话框
Ctrl+D : 复制并粘贴当行
Ctrl+L : 删除当前行
Ctrl+T : 当行向上移动一行
Ctrl+S : 保存文件
Ctrl+Alt+S : 另存为
Ctrl+Shift+S : 保存所有文件
Ctrl+B : 转至匹配的括号
Ctrl+O : 打开文件
Ctrl+N : 新建立文件
CTRL+G : 定位换行, 偏移量
Ctrl+W : 关闭当前文档
Ctrl+Tab : 下一个文档
Ctrl+Shift+Tab : 上一个文档
Ctrl+鼠标滚轮钮 : 放大缩小
Ctrl+BackSpace : 删除开始词
Ctrl+Delete : 删除结束词
CTRL+U : 转换为小写
Ctrl+Shift+U : 转换为大写
Ctrl+Shift+BackSpace: 删除至行首
Ctrl+Shift+Delete : 删除至行尾
Ctrl+P : 打印
Ctrl+I : 选择当前行
Ctrl+Alt+R : 从右边阅读
Ctrl+Alt+L : 从左边阅读
Ctrl+Q : 块注释/消除注释
Ctrl+Shift+T : 打开最近关闭
F5 :启动运行对话框
Tab :插入缩进
Shift+Tab :删除缩进
=== nodepad++常用快捷键 end ===
=== mongo 语法 start ===
=== 创建数据库
use 数据库
show dbs
ps:插入数据才会显示,集合插入数据才会真的创建
db.lyj.insert({"name":"mongo教程"})
=== 删除数据库
db.dropDatabase()
use 数据库
db.dropDatabase()
=== 创建集合 增
db.数据表.insert({"name":"数据表"})
// 插入一行
db.users.insert({
name: "John Doe",
email: "john.doe@example.com",
age: 30
})
// 插入多行
db.users.insertMany([{
name: "John Doe",
email: "john.doe@example.com",
age: 31
}, {
name: "张三",
email: "john.doe@example.com",
age: 23
}, {
name: "lisi",
email: "john.doe@example.com",
age: 33
}])
=== 删除集合\数据 删
db.数据表.drop()
db.collection.remove(<query>)
db.users.remove({ "name": "John" })
db.users.remove([{ "age": 25 }, { "age": 30 }])
需要注意的是,remove命令在默认情况下会永久删除匹配的文档,而且无法撤销。在执行remove命令之前,请确保你已经备份了重要的数据,并且要谨慎使用该命令。
=== 更新文档 改
// 更新数据 语法
db.collection.update(
<query>,
{
$set: {
<field1>: <value1>,
<field2>: <value2>,
...
}
}
)
// 更新数据
db.users.update(
{
name: "John Doe9"
},
{
$set: {
age: 44,
email: "john@example.com"
}
},
false,
true
)
// 替换整个文档
db.users.replaceOne({
_id: "123457",
}, {
name: "John Doe9",
email: "john.doe@example.com",
age: 30
})
// 允许更新字段
db.users.updateOne({
_id: "123457",
}, {
$set: {
age: 22
}
})
update操作适用于仅更新部分字段的情况,可以按需对文档进行修改,不需要提供一个完整的新文档。update操作更加灵活,可以通过不同的操作符进行精准地字段级别的更新。然而,由于update操作是在原始文档的基础上进行修改,因此可能会引入一些潜在的风险,例如并发更新可能导致数据不一致问题。
replace操作适用于需要一次性完全替换整个文档的情况,确保文档的结构和内容都完全满足新的需求。replace操作相对来说更加安全,一次更新操作可以保证数据的一致性。然而,替换整个文档可能需要提供完整的数据,可能会引起一些额外的开销。
要选择合适的操作来更新或替换文档,需要考虑到具体的需求和业务场景。
// 与insert命令不同的是,如果插入的文档已有唯一索引,save方法将更新该文档,而不会抛出重复键错误。
db.collection.save(document)
db.users.save({name: "John", age: 25})
=== 查询文档(数据) 查
db.collection.find(<query>)
// 查询所有
db.collection.find({})
// 查询特定字段
db.collection.find({ field: <value> })
// 查询多个字段
db.collection.find({ field1: <value1>, field2: <value2> })
// 查询特定字段的 不等于 !=
db.collection.find({ field: { $ne: <value> } })
// 查询特定字段的 等于 ==
db.collection.find({ field: { $eq: <value> } })
// 查询特定字段的 大于或等于 >=
db.collection.find({ field: { $gte: <value> } })
// 查询特定字段的 小于或等于 <=
db.collection.find({ field: { $lte: <value> } })
// 查询特定字段的值 包含 in
db.collection.find({ field: { $in: [<value1>, <value2>, ...] } })
// 查询特定字段的值 不包含 not in
db.collection.find({ field: { $nin: [<value1>, <value2>, ...] } })
// 查询符合 多个条件 and or
db.collection.find({ $and: [ {field1: <value1>}, {field2: <value2>} ] })
db.collection.find({ $or: [ {key1: value1}, {key2: value2} ] })
// or 和 and 组合使用
db.users.find({
$or: [
{
$and: [
{ age: { $gt: 25 } },
{ gender: "male", country: "USA" }
]
},
{
$and: [
{ age: { $gt: 30 } },
{ gender: "female", country: "UK" }
]
}
]
})
// 查询特定字段匹配正则
db.collection.find({ field: /regex/ })
=== 操作符 ===
MongoDB是一种流行的NoSQL数据库,它使用查询语言来操作文档集合。MongoDB支持多种操作符来执行查询和操作数据。下面是一些常用的MongoDB操作符:
$match: 用于筛选文档。它相当于SQL中的WHERE子句。
db.collection.find({ $match: { field: value } })
$eq: 等于操作符,用于比较字段的值是否相等。
db.collection.find({ field: { $eq: value } })
$ne: 不等于操作符,用于比较字段的值是否不相等。
db.collection.find({ field: { $ne: value } })
$gt、$lt: 大于、小于操作符,用于比较字段的值。
db.collection.find({ field: { $gt: value } })
db.collection.find({ field: { $lt: value } })
$gte: 大于等于操作符,用于比较字段的值是否大于或等于给定值。
db.collection.find({ field: { $gte: value } })
$lte: 小于等于操作符,用于比较字段的值是否小于或等于给定值。
db.collection.find({ field: { $lte: value } })
$in: 用于判断字段的值是否在给定值列表中。
db.collection.find({ field: { $in: [value1, value2, ...] } })
$nin: 用于判断字段的值是否不在给定值列表中。
db.collection.find({ field: { $nin: [value1, value2, ...] } })
$regex: 正则表达式操作符,用于匹配字段的值与正则表达式。
db.collection.find({ field: { $regex: /pattern/ } })
$all: 用于判断字段的值是否包含所有给定值。
db.collection.find({ field: { $all: [value1, value2, ...] } })
$elemMatch: 用于在一个数组字段中匹配多个条件。
db.collection.find({ arrayField: { $elemMatch: { field1: value1, field2: value2 } } })
$or: 或操作符,用于组合多个查询条件,只要有一个条件满足即可返回文档。
db.collection.find({ $or: [query1, query2, ...] })
$and: 与操作符,用于组合多个查询条件,只有当所有条件都满足时才返回文档。
db.collection.find({ $and: [query1, query2, ...] })
$not: 非操作符,用于对查询条件取反。
db.collection.find({ field: { $not: query } })
$set: 用于更新文档中的字段值。
db.collection.updateOne({ field: value }, { $set: { field: newValue } })
$unset: 用于删除文档中的字段。
db.collection.updateOne({ field: value }, { $unset: { field: true } })
$inc: 用于增加或减少文档中的字段值。
db.collection.updateOne({ field: value }, { $inc: { field: increment } })
$push: 用于向数组字段中添加一个元素。
db.collection.updateOne({ field: value }, { $push: { field: newValue } })
$pop: 用于从数组字段中删除最后一个元素。
db.collection.updateOne({ field: value }, { $pop: { field: true } })
$slice: 用于截取数组字段的子集。
db.collection.updateOne({ field: value }, { $slice: { field: start, end } })
$sort: 用于对数组字段进行排序。
db.collection.updateOne({ field: value }, { $sort: { field: 1 } }) // 升序
db.collection.updateOne({ field: value }, { $sort: { field: -1 } }) // 降序
$bitwise: 用于执行位运算操作。
db.collection.updateOne({ field: value }, { $bitwise: { op: "AND", operand: mask } })
$regex: 用于在一个字符串字段中执行正则表达式匹配。
db.collection.find({ field: { $regex: /pattern/ } })
$elemMatch: 用于在一个数组字段中匹配多个条件。
db.collection.find({ arrayField: { $elemMatch: { field1: value1, field2: value2 } } })
$all: 用于在一个数组字段中匹配多个值。
db.collection.find({ field: { $all: [value1, value2, ...] } })
$in: 用于在一个字段中匹配多个值。
db.collection.find({ field: { $in: [value1, value2, ...] } })
$or: 用于组合多个查询条件,只要有一个条件满足即可返回文档。
db.collection.find({ $or: [query1, query2, ...] })
$and: 用于组合多个查询条件,只有当所有条件都满足时才返回文档。
db.collection.find({ $and: [query1, query2, ...] })
$nor: 用于组合多个查询条件,只有当所有条件都不满足时才返回文档。
db.collection.find({ $nor: [query1, query2, ...] })
1. `$eq` : 匹配字段值等于指定值的文档。
2. `$ne` : 匹配字段值不等于指定值的文档。
3. `$gt` : 匹配字段值大于指定值的文档。
4. `$lt` : 匹配字段值小于指定值的文档。
5. `$gte` : 匹配字段值大于等于指定值的文档。
6. `$lte` : 匹配字段值小于等于指定值的文档。
7. `$in` : 匹配字段值等于指定数组中的任何值的文档。
8. `$nin` : 匹配字段值不包含在指定数组中的文档。
9. `$or` : 多个查询条件中至少满足一个的文档。
10. `$and` : 多个查询条件必须同时满足的文档。
11. `$not` : 排除满足指定查询条件的文档。
12. `$nor` : 排除满足所有指定查询条件的文档。
13. `$where` : 通过JavaScript代码自定义查询条件的文档。
14. `$exists` : 匹配字段存在(包括字段值为null)的文档。
15. `$type` : 匹配字段值为指定数据类型的文档。
16. `$mod` : 匹配字段值被除有指定余数的文档。
17. `$regex` : 正则表达式可以匹配到的文档。
18. `$text` : 针对创建了全文索引的字段进行文本搜索。
19. `.`(点号) : 用于访问嵌套的文档字段。
20. `$elemMatch` : 在数组字段中匹配多个查询条件的文档。
21. `$size` : 匹配具有指定长度的数组的文档。
22. `$all` : 匹配包含所有指定值的数组字段的文档。
23. `$with` : 在聚合管道操作符中启用聚合框架的文档。
24. `$group` : 在聚合管道操作符中对输入文档进行分组的文档。
25. `$sum` : 在聚合管道操作符中计算指定字段的总和的文档。
26. `$avg` : 在聚合管道操作符中计算指定字段的平均值的文档。
27. `$min` : 在聚合管道操作符中找出指定字段的最小值的文档。
28. `$max` : 在聚合管道操作符中找出指定字段的最大值的文档。
29. `$limit` : 在聚合管道操作符中限制返回的文档数量的文档。
30. `$skip` : 在聚合管道操作符中跳过指定数量的文档的文档。
31. `$notequal` : 匹配不等于指定值的文档,与`$ne`相反。
32. `$gt_unsigned` : 匹配无符号类型字段大于指定值的文档。
33. `$lt_unsigned` : 匹配无符号类型字段小于指定值的文档。
34. `$gte_unsigned` : 匹配无符号类型字段大于等于指定值的文档。
35. `$lte_unsigned` : 匹配无符号类型字段小于等于指定值的文档。
36. `$regex_match` : 用于在字段上执行正则表达式匹配的操作符。
37. `$regex_test` : 用于测试正则表达式是否匹配文档的操作符。
38. `$regex_contains` : 用于判断一个字段的值是否包含指定正则表达式的操作符。
39. `$regex_search` : 用于在文本字段上执行正则表达式搜索的操作符。
40. `$text_search` : 用于在文本字段上执行文本搜索的操作符。
41. `$text_match` : 用于在文本字段上执行匹配文本搜索的操作符。
42. `$text_contains` : 用于判断一个文本字段是否包含指定关键词的操作符。
43. `$text_search_contains`: 用于判断一个文本字段是否包含指定搜索条件的结果的操作符。
44. `$near` : 用于在地理位置字段上搜索附近的文档的操作符。
45. `$geoWithin` : 用于在地理位置字段上搜索多边形区域内的文档的操作符。
46. `$geoIntersects` : 用于在地理位置字段上搜索与多边形区域交集的文档的操作符。
47. `$all_with` : 用于在数组字段上匹配所有数组元素的操作符。
48. `$all_elemMatch` : 用于在数组字段上匹配满足指定条件的所有元素的操作符。
49. `$all_size` : 用于获取数组字段长度等于指定值的文档的操作符。
50. `$all_eq` : 用于获取数组字段包含指定值的文档的操作符。
51. `$elemMatch` : 在数组字段中匹配多个查询条件的文档。
52. `$all` : 匹配包含所有指定值的数组字段的文档。
53. `$some` : 匹配至少包含指定条件的数组字段的文档。
54. `$none` : 匹配不包含指定条件的数组字段的文档。
55. `$in` : 匹配字段值在指定数组中的文档。
56. `$nin` : 匹配字段值不在指定数组中的文档。
57. `$or` : 多个查询条件中至少满足一个的文档。
58. `$and` : 多个查询条件必须同时满足的文档。
59. `$not` : 排除满足指定查询条件的文档。
60. `$nor` : 排除满足所有指定查询条件的文档。
61. `$mod` : 匹配字段值被除有指定余数的文档。
62. `$regex` : 正则表达式可以匹配到的文档。
63. `$text` : 针对创建了全文索引的字段进行文本搜索。
64. `.`(点号) : 用于访问嵌套的文档字段。
65. `$elemMatch` : 在数组字段中匹配多个查询条件的文档。
66. `$size` : 匹配具有指定长度的数组的文档。
67. `$all` : 匹配包含所有指定值的数组字段的文档。
68. `$with` : 在聚合管道操作符中启用聚合框架的文档。
69. `$group` : 在聚合管道操作符中对输入文档进行分组的文档。
70. `$sum` : 在聚合管道操作符中计算指定字段的总和的文档。
71. `$avg` : 在聚合管道操作符中计算指定字段的平均值的文档。
72. `$min` : 在聚合管道操作符中找出指定字段的最小值的文档。
73. `$max` : 在聚合管道操作符中找出指定字段的最大值的文档。
74. `$limit` : 在聚合管道操作符中限制返回的文档数量的文档。
75. `$skip` : 在聚合管道操作符中跳过指定数量的文档的文档。
76. `$sort` : 在聚合管道操作符中对输入文档进行排序的文档。
77. `$project` : 在聚合管道操作符中修改输入文档结构的文档。
78. `$group` : 在聚合管道操作符中根据指定字段对输入文档进行分组的文档。
79. `$sum` : 在聚合管道操作符中计算指定字段的总和的文档。
80. `$avg` : 在聚合管道操作符中计算指定字段的平均值的文档。
81. `$push` : 在聚合管道操作符中将指定字段的值添加到数组中的文档。
82. `$addtoset` : 在聚合管道操作符中将指定字段的值添加到数组中,但不会重复的文档。
83. `$pull` : 在聚合管道操作符中从数组中移除指定字段的值。
84. `$pullAll` : 在聚合管道操作符中从数组中移除多个指定的值。
85. `$each` : 在聚合管道操作符中迭代输入文档多次,并将每次迭代的结果输出为一个数组的文档。
86. `$set` : 在聚合管道操作符中设置输入文档的指定字段的值。
87. `$unset` : 在聚合管道操作符中删除输入文档的指定字段。
88. `$rename` : 在聚合管道操作符中重命名输入文档的指定字段。
89. `$bit` : 在聚合管道操作符中执行位运算操作。
90. `$split` : 在聚合管道操作符中拆分字符串并返回一个数组。
91. `$lower` : 在聚合管道操作符中将字符串转换为小写。
92. `$upper` : 在聚合管道操作符中将字符串转换为大写。
93. `$concat` : 在聚合管道操作符中连接字符串。
94. `$expr` : 在聚合管道操作符中执行复杂的表达式。
=== 聚合 基本语法 ===
db.collection.aggregate(pipeline, options)
=== project ===
1表示展示某字段
0表示不展示某字段
db.book.aggregate({
$project: {
"_id": 0,
"book_name": 1,
"borrowerIds": "$borrowers.id",
"borrowerNames": "$borrowers.name"
}
})
=== limit ===
只展示一个投影结果
db.book.aggregate([
{
$project: {
"_id": 0,
"book_name": 1,
"borrowerIds": "$borrowers.id",
"borrowerNames": "$borrowers.name"
}
},
{
$limit: 1
}
])
=== skip ===
跳过一个且只展示一个投影结果
db.book.aggregate([
{
$project: {
"_id": 0,
"book_name": 1,
"borrowerIds": "$borrowers.id",
"borrowerNames": "$borrowers.name"
}
},
{
$skip: 1
},
{
$limit: 1
}
])
=== sort ===
排序
db.book.aggregate([
{
$project: {
"_id": 1,
"book_name": 1,
"library_id": 1
}
},
{
$sort: {
"library_id": - 1, // 降序
"_id": 1 // 升序
}
}
])
MongoDB内存排序有100M限制,如果排序数据过多需要设置选项allowDiskUse=true,表示数据可以写入临时文件进行排序
db.book.aggregate([
{
$project: {
"_id": 1,
"book_name": 1,
"library_id": 1
}
},
{
$sort: {
"library_id": - 1,
"_id": 1
}
}
], {
allowDiskUse: true
})
=== out ===
投影结果输出到新集合
db.book.aggregate([
{
$project: {
"_id": 0,
"book_name": 1,
"borrowerIds": "$borrowers.id",
"borrowerNames": "$borrowers.name"
}
},
{
$out: "newCollection"
}
])
db.newCollection.find()
=== match ===
匹配
db.book.aggregate([
{
$match: {
$and: [
{
"library_id": 2
},
{
"book_price": {
$gt: 25
}
}
]
}
},
{
$project: {
"_id": 1,
"book_name": 1,
"library_id": 1,
"book_price": 1
}
}
])
=== unwind ===
文档按照借阅人数铺平
db.book.aggregate([
{
$unwind: {
path: "$borrowers",
includeArrayIndex: "idx"
}
}
])
=== lookup ===
实现连表查询
MongoDB 3.4之前聚合语法:
from:待关联集合【book】
localField: 本集合关联键【library】
foreignField:待关联键【book】
as:待关联集合数据【book】
db.library.aggregate([
{
$lookup:
{
from: "book",
localField: "_id",
foreignField: "library_id",
as: "books_info"
}
}
])
MongoDB 3.4之后聚合语法:
from:待关联集合【book】
let:声明本集合字段在管道使用
pipeline:操作管道
db.library.aggregate([
{
$lookup:
{
from: "book",
let: {
"lid": "$_id"
},
pipeline: [
{
$match: {
$expr: {
$and: [
{
$eq: ["$$lid", "$library_id"]
}
]
}
}
}
],
as: "books_info"
}
}
])
=== group ===
分组统计
db.book.aggregate([
{
$group: {
_id: "$book_type",
count: {
$sum: 1
}
}
}
])
db.book.aggregate([
{
$group: {
_id: "$book_type",
type_count: {
$sum: 1
},
type_book_count: {
$sum: "$book_count"
},
minTotalPrice: {
$min: {
$multiply: ["$book_price", "$book_count"]
}
},
maxTotalPrice: {
$max: {
$multiply: ["$book_price", "$book_count"]
}
},
totalPrice: {
$sum: {
$multiply: ["$book_price", "$book_count"]
}
},
avgPrice: {
$avg: "$book_price"
}
}
}
])
// 空分组键 _id:空分组键表示统计全量数据
db.book.aggregate([
{
$group: {
_id: null,
type_count: {
$sum: 1
},
type_book_count: {
$sum: "$book_count"
},
minTotalPrice: {
$min: {
$multiply: ["$book_price", "$book_count"]
}
},
maxTotalPrice: {
$max: {
$multiply: ["$book_price", "$book_count"]
}
},
totalPrice: {
$sum: {
$multiply: ["$book_price", "$book_count"]
}
},
avgPrice: {
$avg: "$book_price"
}
}
}
])
=== 聚合语法 end ===
=== mongo foreach ===
// 每个文档执行指定的操作
db.users.find({}).forEach(function(doc) {
// 年龄加1
doc.age = doc.age + 1;
db.users.save(doc);
})
=== 创建数据库,用户,并授权 ===
=== 管理员登录授权
use admin
db.auth('root','root')
=== 使用新数据库
use newdb
=== 授权用户
db.createUser({
user: "voyager",
pwd: "welcome1",
roles: [
{
role: "readWrite",
db: "newdb"
}
]
})
=== 插入测试数据
db.test.insert({"test":123})
=== 用户权限
## 1、创建管理员用户
use admin
// 管理员用户 root 角色
db.createUser({
user: "root",
pwd: "root",
roles: [{
role: 'root',
db: 'admin'
}]
})
// 管理员用户 userAdminAnyDatabase 角色
db.createUser({
user: "root",
pwd: "root",
roles: [
{
role: "userAdminAnyDatabase",
db: "admin"
}
]
})
## 2、查看所有用户
db.system.users.find().pretty()
## 3、创建普通用户
// 普通用户 角色 读写用户
db.createUser({
user: "voyager",
pwd: "welcome1",
roles: [
{
role: "readWrite",
db: "guilin_puhui"
}
]
})
## 4、授权登录root
use admin
db.auth('root','root')
## 5、普通用户
use lyj
db.createUser({
user: "lyj",
pwd: "lyj",
roles: [{
role: 'readWrite',
db: 'lyj'
}]
})
db.auth('lyj','lyj')
## 6、查看所有用户
db.system.users.find().pretty()
## 7、修改用户密码
db.changeUserPassword('lyj','lyj')
## 8、删除用户
db.system.users.remove({user:"用户名"})
db.system.users.remove({_id:"用户id"})
## 9、远程连接
mongo IP:端口/库名 -u 用户名 -p 密码
-- (带数据库 用户 密码)
mongo 127.0.0.1:27017/lyj -u lyj -p lyj
-- (带数据库)
mongo 127.0.0.1:27017/lyj
## 10、数据库创建授权流程
// 登录 admin 数据库
use admin
// 管理员授权
db.auth('root','root')
// 登录 新数据库
use 新的数据库名
// 创建 普通用户 授权读写角色 赋予数据库
db.createUser({
user:"lyj",
pwd:"lyj",
roles:[
{
role:"readWrite",
db:"新的数据库名"
}
]
})
// 授权普通用户
db.auth('lyj','lyj')
// 测试插入数据
db.test.insert({'test':1234})
=== 导入、导出 ===
导出 全量
mongodump -h dbhost -d dbname -o dbdirectory
参数说明:
-h: mongodb所在服务器地址,例如:127.0.0.1 , 当然也可以指定端口号127.0.0.1:27017
-d: 需要备份的数据库实例,例如:test
-o: 备份的数据存放位置,例如:C:\home\mongodb,该目录需要提前建立
导入 全量
mongorestore -h dbhost -d dbname dbdirectory
/*
参数说明:
-h: mongodb所在服务器地址,例如:127.0.0.1 , 当然也可以指定端口号127.0.0.1:27017
-d: 需要恢复的数据库实例,例如:test
-drop: 恢复的时候先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的 数据都会被删除,慎用
*/
//导出
mongodump -h dbhost -d dbname -u user -p password -o dbdirectory
//导入
mongorestore -h dbhost -d dbname -c order --dir d:\home -u user -p password
// 例子
mongoimport -u lyj -p lyj --collection test0601 --db lyj --file E:\mongodata\test0601.json
mongoimport -u lyj -p lyj --collection error0601 --db lyj --file E:\mongodata\error0601.json
mongoimport -u lyj -p lyj --collection paopi0601 --db lyj --file E:\mongodata\paopi0601.json
单表 操作
指定表
--host :要导出数据库 ip
--port :要导出的实例节点端口号
--username :数据库用户名
--password :数据库用户密码
--collection :要导出的表名
--db :要导出的表所在数据库名
--out :要导出的文件路径(默认为当前文件夹)
mongoexport --collection ai_session_conversa --db ai_xbot --out ai_session_conversa.json
mongoexport --collection ai_session_message --db ai_xbot --out ai_session_message.json
--host :要导入的数据库 ip
--port :要导入的实例节点端口号
--username :数据库用户名
--password :数据库用户密码
--collection :要导入的表名
--db :要导入的表所在数据库名
--file :要导入的源文件路径(默认为当前文件夹)
mongoimport --collection ai_session_conversa --db ai_xbot --file ai_session_conversa.json
单表导出
mongoexport -u lyj -p lyj --collection digital_control_index_data --db lyj --out E:\mongodata\digital_control_index_data.json
单表导入
mongoimport -u lyj -p lyj --collection digital_control_index_data1 --db lyj --file E:\mongodata\digital_control_index_data.json
=== mongo 语法 end ===
== bat 语法 ==
=== echo :显示命令后的字符
echo 你好
=== pause : 用于暂停,用户输入任意键关闭
pause
=== echo off :命令后所有命令不显示本身,但是会显示echo off 与@ 配合使用 则都不显示
@echo off
echo 你好啊
=== rem :注释
rem 我是一个注释
=== :: : 也是注释
:: 这也是一个注释
=== % :参数标识 %0 命令本身,之后的为参数 %1 %2 ... %9
type %1
type %2
E:\test a.txt b.txt
注:test是我们写入内容的bat文件,a.txt和b.txt分别是当前目录下的两个txt,内容分别为“我是a”和“我是b”。
=== 非for语句 引用变量 等号两边不能加空格,会导致echo处于关闭状态
set a=你好
echo %a%
=== for语句要用 '%%'
for %%i in (1 2 3 4 5) do echo %%i
=== call :调用另一个bat 文件
@echo off
echo 调用另一个bat文件:
call another
pause
=== if 用于判断, 字符串判断,数值判断,文件判断,判断是否赋值,
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
if not "%1" == "a" (echo 参数不是 a) else (echo 参数是a)
if exist e:\b.txt (echo e盘下有b.txt) else (echo e盘下没有b.txt)
set nihao=nihaoaaa
if defined nihao (echo 遍历nihao的值为:%nihao%) else (echo 变量没有被赋值)
xcopy e:\b.txt f:\
if errorlevel 1 echo 文件拷贝失败
if errorlevel 0 echo 文件拷贝成功
几个常用命令的返回值及其代表的意义:
diskcomp
0 盘比较相同
1 盘比较不同
2 用户通过ctrl-c中止比较操作
3 由于致命的错误使比较操作中止
4 预置错误中止比较
diskcopy
0 盘拷贝操作成功
1 非致命盘读/写错
2 用户通过ctrl-c结束拷贝操作
3 因致命的处理错误使盘拷贝中止
4 预置错误阻止拷贝操作
format
0 格式化成功
3 用户通过ctrl-c中止格式化处理
4 因致命的处理错误使格式化中止
5 在提示"proceed with format(y/n)?"下用户键入n结束
xcopy
0 成功拷贝文件
1 未找到拷贝文件
2 用户通过ctrl-c中止拷贝操作
4 预置错误阻止文件拷贝操作
5 拷贝过程中写盘错误
=== goto :调到指定的标签位置
goto end
echo 这里能显示吗
:end
echo 这是end标签后的输出
=== for 循环
:: /f 解析文件内容
for /f %%i in (歌曲列表.txt) do echo %%i
:: delims 分隔符使用,只会保留分隔符之前的内容。
for /f "delims=-" %%i in (歌曲列表.txt) do echo %%i
rem 显示所有 .txt 后缀的文件名
for %%i in (*.txt) do echo %%i
rem tokens 选定分割之后的内容。
for /f "tokens=1,2 delims=、." %%i in (歌曲列表.txt) do echo %%i %%j
tokens=有时表示提取全部。
tokens=m表示提取第m列。
tokens=m,n表示提取第m列和第n列。
tokens=m-n表示提取第m列至第n列。
Tokens=*表示删除每行前面的空格。忽略行首的所有空格。
tokens=m*提取第m列以后的所有字符,星号表示剩余的字符。
tokens=m,*提取第m列以后的所有字符,星号表示剩余的字符。
“%%i %%j”对应于“token”后面的列数。有多少列就要有多少个输出变量,并且各变量中的字母存在先后顺序。
=== pip 常用命令 ===
1、导出依赖txt文件
pip37 freeze > packages.txt
2、根据依赖txt文件下载包
pip37 download -r packages1.txt -d packages
3、导入到离线环境
pip install --no-index --find-links=packages -r packages.txt
根据packages.txt 下载离线包
1、导出依赖txt文件
pip freeze > packages.txt
2、根据依赖txt文件下载包
pip download -r packages.txt -d packages
3、导入到离线环境
pip install --no-index --find-links=packages -r packages.txt
pip37 download -r packages.txt -d packages
pip download -r packages.txt -d packages
根据packages.txt 导入离线包
pip37 install --no-index --find-links=packages -r packages.txt
=== pip 常用命令 end ===
=== 常用正则 ==
1. 匹配整数:^[0-9]+$
2. 匹配浮点数:^[0-9]+\.[0-9]+$
3. 匹配手机号码(简化版):^\d{11}$
4. 匹配邮政编码:^\d{6}$
5. 匹配用户名(包含字母、数字和下划线,长度为 4-16):^[a-zA-Z0-9_]{4,16}$
6. 匹配密码(包含字母、数字和下划线,长度为 6-16):^[a-zA-Z0-9_]{6,16}$
7. 匹配 IP 地址:^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
8. 匹配 URL:^(http|https): \/\/[^\s/$.?#].[^\s]*$
9. 匹配日期(YYYY-MM-DD):^\d{4}-\d{2}-\d{2}$
10. 匹配电子邮件地址:^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
11. 匹配 HTML 标签:^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$
12. 匹配 HTML 属性:^[a-zA-Z0-9_-] += [\"\']{0,1}([^\"\'>]+)[\"\']{0,1}$
13. 匹配 HTML 注释:<!--(.*?)-->
14. 匹配整数(不包含负数):^[1-9]\d*$
15. 匹配非零整数:^([1-9]\d*|0)$
16. 匹配正整数:^[1-9]\d+$
17. 匹配非正整数:^(0|[1-9]\d*)$
18. 匹配小数(包含整数部分):^[0-9]*\.[0-9]+$
19. 匹配有符号整数(正负均可):^-?[1-9]\d*$
20. 匹配有符号整数(正数或零):^[1-9]\d*|0$
21. 匹配有符号整数(负数):^-[1-9]\d*$
22. 匹配非零非负整数:^(0|[1-9]\d*)$
23. 匹配非零非正整数:^(0|[1-9]\d*|[0-9]-\d*)$
24. 匹配年月日完整格式(YYYY-MM-DD):^\d{4}-\d{2}-\d{2}$
25. 匹配中文汉字:[\u4e00-\u9fa5]、[\u3400-\u4db5]
26. 匹配中文字符:[\u4E00-\u9FA5]
27. 检查是否含有中文字符:[^\x00-\xff]、[\uff00-\uffff]、[\ufeff-\ufffe]、[\u3400-\u4db5][\u4e00-\u9fa5]*、[\u3400-\u4db5][\u4e00-\u9fa5][\u3400-\u4db5][\u4e00-\u9fa5]*...
28. 去除字符串中的中文字符及标点符号:[^[:punct:]]和[^[:chinese:]]...
29. 检查是否含有非中文字符:[^\x00-\xff][\x21-\x7e]*、[^ -~]*、[^ -~]*...
30. 检查是否含有英文及数字:[A-Za-z\d]*、[A-Za-z\d]*...
37. 检查是否含有英文大写:[A-Z]*、[A-Z]*...
44. 检查是否含有英文小写:[a-z]*、[a-z]*...
50. 检查是否含有数字和大写字母:[A-Za-z\d]*、[A-Za-z\d]*...
以下是一些常用的正则表达式示例:
1. 匹配电子邮件地址:^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
2. 匹配 URL:^(http|https):\/\/[^\s/$.?#].[^\s]*$
3. 匹配日期(YYYY-MM-DD):^\d{4}-\d{2}-\d{2}$
4. 匹配 IP 地址:^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
5. 匹配整数:^[0-9]+$
6. 匹配浮点数:^[0-9]+\.[0-9]+$
7. 匹配手机号码(简化版):^1[3-9]\d{9}$
8. 匹配邮政编码:^[1-9]\d{5}$
9. 匹配用户名(包含字母、数字、下划线,长度为 4-16):^[a-zA-Z0-9_]{4,16}$
10. 匹配密码(包含字母、数字、特殊字符,长度为 6-16):^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{6,16}$
11. 匹配 HTML 标签:^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$
12. 匹配国内身份证号码(18 位):^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}(\d|X|x)$
13. 匹配国内身份证号码(15 位):^[1-9]\d{5}\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{2}$
14. 匹配 QQ 号码:^[1-9]\d{4,10}$
15. 匹配微博账号:^[a-zA-Z0-9_]{4,20}$
16. 匹配微信号:^[a-zA-Z0-9_]{6,20}$
17. 匹配 UUID:^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$
18. 匹配 MAC 地址:^([a-fA-F0-9]{2}[:-]){5}([a-fA-F0-9]{2})$
19. 匹配 XML 格式:^<\?xml\s+version=[\'\"]\d+\.\d+[\'\"]\s*encoding=[\'\"]\w+[\'\"]\s*\?>.*<\/\w+>$
20. 匹配 JSON 格式:^{.*}$
21. 匹配 Base64 格式:^[A-Za-z0-9+/]{4}*(={0,2})$
22. 匹配 HTML 实体字符:^ |<|>|&|"|'|&#\d+;|&#x[\da-fA-F]+;$
23. 匹配 HTML 转义字符:^ |<|>|&|"|'|&#\d+;|&#x[\da-fA-F]+;$
24. 匹配 HTML 转义字符(简化版):&[lg]t;|&#\d+;|&#x[\da-fA-F]+;
25. 匹配 ASCII 字符:^[\x00-\x7F]+$
26. 匹配非 ASCII 字符:[^\x00-\x7F]+$
27. 匹配双字节字符:[^\x00-\xff]+$
28. 匹配空白字符:^\s*$
29. 匹配非空白字符:^\S*$
30. 匹配汉字:^[\u4e00-\u9fa5]+$
31. 匹配非汉字:^[^\u4e00-\u9fa5]+$
32. 匹配中文标点符号:^[\u3002\uff1f\uff0c\uff1b\
好的,以下是继续提供的正则表达式示例:
33. 匹配 URL 中的查询参数:^[a-zA-Z0-9_]+=[^&]*$
34. 匹配 HTML 中的标签名:^<[a-zA-Z0-9]+>$
35. 匹配 HTML 中的属性名:^[a-zA-Z0-9_]+$
36. 匹配 HTML 中的属性值:^[\'\"][^\'\"]*[\'\"]$
37. 匹配 HTML 中的注释:^<!--.*-->$
38. 匹配 HTML 中的脚本标签:^<script.*?>.*?</script>$
39. 匹配 HTML 中的样式标签:^<style.*?>.*?</style>$
40. 匹配 HTML 中的标签内容:^<[^>]*>$
41. 匹配 HTML 中的文本内容:^<[^>]*>$
42. 匹配 HTML 中的注释内容:^<!--[^>]*-->$
43. 匹配 HTML 中的脚本内容:^<script[^>]*>[^>]*</script>$
44. 匹配 HTML 中的样式内容:^<style[^>]*>[^>]*</style>$
45. 匹配 HTML 中的标签属性:^[a-zA-Z0-9_]+=[\'\"][^\'\"]*[\'\"]$
46. 匹配 HTML 中的事件处理程序:^on[a-zA-Z0-9]+$
47. 匹配 HTML 中的 CSS 类名:^[\w-]+$
48. 匹配 HTML 中的 ID 名:^[\w-]+$
49. 匹配 HTML 中的 CSS 选择器:^[\w-]+(\.[\w-]+)*(#[\w-]+)?(:\w+)?(\[[^\]]+\])?$
50. 匹配 HTML 中的 CSS 属性名:^[a-zA-Z0-9-]+$
51. 匹配 HTML 中的 CSS 属性值:^[\'\"][^\'\"]*[\'\"]$
52. 匹配 HTML 中的 CSS 颜色值:#?[\da-fA-F]{3,6}|[rgb]{1,3}\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*\)|[a-zA-Z]+
53. 匹配 HTML 中的 CSS 单位:^[a-zA-Z0-9-]+$
54. 匹配 HTML 中的 CSS 函数名:^[a-zA-Z0-9-]+$
55. 匹配 HTML 中的 CSS 函数参数:^[^)]*$
56. 匹配 HTML 中的 CSS 选择器分组符号:^,|:|\(|\)|\[|\]|{|}|$
57. 匹配 HTML 中的 CSS 选择器组合符号:^&|\||\+|\>*$
=== vim 常用 ===
":d": 删除当前行。
":d$": 删除当前行到文件末尾的所有内容。
":1,$d": 删除从第一行到最后一行的所有内容。