整理一些常用的命令,免得每次都要在chatgpt那问问问了,根据右边的目录点击即可跳转到对应的命令啦

持续更新中哦~~

PC端食用更佳哦,手机也可以点击右变得悬浮栏查看目录

一、Git常用命令:

初始化与配置:

  • git init: 初始化一个新的Git仓库。

  • git clone <repository-url>: 克隆远程仓库到本地。

  • git config: 配置Git选项,如用户名和邮箱。

  • git config --global --get http/https.proxy :查看Git代理设置

  • git config --global --unset http/https.proxy :清除Git代理设置

  • git config --global http/https.proxy 127.0.0.1:7890 :Git代理设置

基本操作:

  • git add <file>: 将文件添加到暂存区。

  • git commit -m "commit message": 提交暂存区的更改到本地仓库。

  • git status: 查看工作区和暂存区的状态。

  • git log: 查看提交历史记录。

  • git diff: 查看工作区与暂存区的差异。

  • git diff <commit1> <commit2>: 查看两个提交之间的差异。

分支与合并:

  • git branch: 查看本地分支列表。

  • git checkout <branch-name>: 切换到指定分支。

  • git checkout -b <new-branch-name>: 创建并切换到新的分支。

  • git merge <branch-name>: 合并指定分支到当前分支。

远程仓库:

  • git remote -v: 查看远程仓库的URL。

  • git pull: 从远程仓库拉取最新的更改。

  • git push: 将本地更改推送到远程仓库。

  • git fetch: 从远程仓库获取最新的分支信息,但不合并。

撤销与恢复:

  • git reset <file>: 从暂存区中移除文件,但保留在工作区。

  • git reset --hard <commit>: 重置HEAD到指定提交,丢弃所有本地更改。

  • git stash: 将未提交的更改保存到一个临时区域,以便切换分支。

标签与版本:

  • git tag <tag-name> <commit>: 创建一个标签来标识特定的提交。

二、Docker常用命令:

容器管理:

  • docker run -d --name my_container \

    -p 8080:80 \

    -e MYSQL_ROOT_PASSWORD=secret \

    -v /path/on/host:/path/in/container \

    --network my_network \

    my_image:latest

    : 运行一个容器。

  • docker ps: 查看正在运行的容器。

  • docker ps -a: 查看所有容器,包括已停止的。

  • docker stop <container-id>: 停止一个运行中的容器。

  • docker start <container-id>: 启动一个已停止的容器。

  • docker restart <container-id>: 重启一个容器。

  • docker rm <container-id>: 删除一个容器。

  • docker logs <container-id>: 查看容器的日志输出。

  • docker exec -it <container-id> <command>: 在容器中执行命令。

例:docker exec -it rabbitmq /bin/bash

  • docker inspect <container-id>: 查看容器的详细信息。

镜像管理:

  • docker images: 查看本地镜像列表。

  • docker pull <image>: 下载一个镜像。

  • docker rmi <image>: 删除一个本地镜像。

  • docker build -t <image-name> <path-to-dockerfile>: 构建镜像。

创建一个SpringBoot项目的镜像示例:

# 使用官方的OpenJDK 11基础镜像
FROM openjdk:11-jre-slim

# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 设置工作目录为/app
WORKDIR /app

# 复制本地的target目录下的JAR文件到镜像中的/app目录
COPY target/your-spring-boot-app.jar /app/app.jar

# 设置环境变量
ENV SPRING_PROFILES_ACTIVE=default \
    SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/yourdatabase \
    SPRING_DATASOURCE_USERNAME=dbuser \
    SPRING_DATASOURCE_PASSWORD=dbpassword

# 暴露应用程序的端口(如果应用程序使用了其他端口,记得修改)
EXPOSE 8080

# 健康检查
HEALTHCHECK --interval=30s --timeout=10s CMD curl -f http://localhost:8080/actuator/health || exit 1

# 启动Spring Boot应用程序
CMD ["java", "-jar", "app.jar"]

网络管理:

  • docker network ls: 查看Docker网络列表。

  • docker network create <network-name>: 创建一个自定义网络。

  • docker network connect <network-name> <container-id>: 连接容器到指定网络。

  • docker network disconnect <network-name> <container-id>: 从网络断开容器连接。

数据卷管理:

  • docker volume ls: 查看数据卷列表。

  • docker volume create <volume-name>: 创建一个数据卷。

  • docker volume rm <volume-name>: 删除一个数据卷。

  • docker run -v <volume-name>:<container-path>: 运行容器并挂载数据卷。

其他命令:

  • docker info: 查看Docker系统信息。

  • docker version: 查看Docker版本信息。

  • docker-compose: 使用Docker Compose来管理多个容器应用。

编写一个Docker-Compose文件的示例:

# Docker Compose 文件版本
version: "3.8"

# 定义服务
services:
  # MySQL 服务配置
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai # 设置容器时区
      MYSQL_ROOT_PASSWORD: 123 # 设置MySQL root用户密码
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"  # 挂载自定义MySQL配置文件
      - "./mysql/data:/var/lib/mysql"  # 挂载MySQL数据目录
      - "./mysql/init:/docker-entrypoint-initdb.d"  # 挂载MySQL初始化脚本
    networks:
      - hm-net  # 连接到自定义网络

  # Spring Boot 应用程序服务配置
  hmall:
    build: 
      context: .  # 使用当前目录下的文件作为构建上下文
      dockerfile: Dockerfile  # 指定Dockerfile文件
    container_name: hmall
    ports:
      - "8080:8080"
    networks:
      - hm-net  # 连接到自定义网络
    depends_on:
      - mysql  # 表示 hmall 服务依赖于 mysql 服务,启动时将等待 mysql 服务可用

  # Nginx 服务配置
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "18080:18080"
      - "18081:18081"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"  # 挂载自定义Nginx配置文件
      - "./nginx/html:/usr/share/nginx/html"  # 挂载静态HTML文件目录
    depends_on:
      - hmall  # 表示 nginx 服务依赖于 hmall 服务,启动时将等待 hmall 服务可用
    networks:
      - hm-net  # 连接到自定义网络

# 定义自定义网络
networks:
  hm-net:
    name: hmall  # 设置网络名称为 "hmall"

三、Linux常用命令:

文件操作:

  • ls: 列出当前目录下的文件和子目录。

  • cd <directory>: 切换到指定目录。

  • pwd: 显示当前工作目录的路径。

  • mkdir <directory>: 创建新目录。

  • rm <file>: 删除文件。

  • rm -r <directory>: 递归删除目录及其内容。

  • cp <source> <destination>: 复制文件或目录。

  • mv <source> <destination>: 移动文件或目录,也可用于重命名。

  • touch <file>: 创建空文件或更新文件的访问时间戳。

文件查看与编辑:

  • cat <file>: 查看文件内容。

  • more <file>: 分页查看文件内容。

  • less <file>: 交互式查看文件内容。

  • head <file>: 查看文件头部内容。

  • tail <file>: 查看文件尾部内容。

  • nano <file>: 使用Nano文本编辑器编辑文件。

  • vi <file>: 使用Vi文本编辑器编辑文件。

VI编辑器常用命令

  1. 进入编辑模式

    • i:在当前光标位置之前插入文本。

    • a:在当前光标位置之后插入文本。

    • o:在当前行之后插入新行,并进入插入模式。

    • I:在当前行的开头插入文本。

    • A:在当前行的末尾插入文本。

    • O:在当前行之前插入新行,并进入插入模式。

  2. 退出编辑模式

    • Esc:退出插入模式,回到普通模式。

  3. 保存和退出

    • :w:保存文件但不退出Vi。

    • :w filename:将文件保存为指定的文件名。

    • :q:退出Vi。

    • :q!:强制退出Vi,不保存修改。

    • :wq:x:保存修改并退出Vi。

  4. 移动光标

    • h:向左移动一个字符。

    • j:向下移动一行。

    • k:向上移动一行。

    • l:向右移动一个字符。

    • w:向前移动一个单词。

    • b:向后移动一个单词。

    • 0:移动到行首。

    • $:移动到行尾。

    • G:移动到文件末尾。

    • gg:移动到文件开头。

    • Ctrl + f:向前翻页。

    • Ctrl + b:向后翻页。

  5. 删除和复制

    • x:删除光标所在位置的字符。

    • dd:删除当前行。

    • dw:删除一个单词。

    • yy:复制当前行。

    • yw:复制一个单词。

    • p:粘贴剪切板内容。

  6. 搜索和替换

    • /pattern:向前搜索指定的模式。

    • ?pattern:向后搜索指定的模式。

    • n:重复上一次搜索。

    • N:反向重复上一次搜索。

    • :s/pattern/replacement:将当前行中第一个匹配的模式替换为指定的字符串。

    • :s/pattern/replacement/g:将当前行中所有匹配的模式替换为指定的字符串。

    • :%s/pattern/replacement/g:将整个文件中所有匹配的模式替换为指定的字符串。

权限管理:

  • chmod <permissions> <file>: 修改文件或目录的权限。

  • chown <user>:<group> <file>: 更改文件或目录的所有者和所属组。

  • chgrp <group> <file>: 更改文件或目录的所属组。

文件搜索与查找:

  • find <directory> -name <filename>: 在指定目录下查找文件。

  • grep <pattern> <file>: 在文件中搜索指定模式。

  • locate <filename>: 使用文件数据库快速查找文件。

系统信息与进程管理:

  • uname -a: 显示系统信息。

  • top: 实时查看系统资源使用情况。

  • ps: 显示当前用户的进程。

  • kill <process-id>: 终止进程。

  • df -h: 查看磁盘空间使用情况。

  • free -m: 查看内存使用情况。

压缩与解压缩:

  • tar -czvf <archive-name.tar.gz> <directory>: 压缩目录为.tar.gz文件。

  • tar -xzvf <archive-name.tar.gz>: 解压.tar.gz文件。

  • zip <archive-name.zip> <file(s)>: 压缩文件为.zip格式。

  • unzip <archive-name.zip>: 解压.zip文件。

网络操作:

  • ping <hostname>: 测试与主机的网络连接。

  • ifconfig: 查看网络接口配置。

  • ssh <username>@<hostname>: 远程登录到另一台计算机。

  • wget <url>: 下载文件或网页。

  • curl <url>: 发送HTTP请求并获取响应。

四、Redis常用命令:

Redis 命令参考 — Redis 命令大全 (redis.com.cn)

连接和基本操作:

  • redis-server: 启动Redis服务器。

  • redis-cli: 进入Redis命令行客户端。

  • ping: 测试与Redis服务器的连接。

  • quitexit: 退出Redis命令行客户端。

  • DBSIZE: 获取当前数据库中键的数量。

  • INFO: 获取Redis服务器的信息。

  • SELECT <db-index>: 切换到指定的数据库。

数据操作:

  • SET <key> <value>: 设置键值对。

  • GET <key>: 获取键的值。

  • DEL <key>: 删除指定键。

  • EXISTS <key>: 检查键是否存在。

  • INCR <key>: 将键的值增加1。

  • DECR <key>: 将键的值减少1。

列表操作:

  • LPUSH <key> <value>: 将一个或多个值插入列表头部。

  • RPUSH <key> <value>: 将一个或多个值插入列表尾部。

  • LPOP <key>: 移除并返回列表头部的值。

  • RPOP <key>: 移除并返回列表尾部的值。

  • LRANGE <key> <start> <end>: 获取列表指定范围的值。

集合操作:

  • SADD <key> <member>: 向集合添加一个成员。

  • SREM <key> <member>: 从集合中移除一个成员。

  • SMEMBERS <key>: 获取集合中的所有成员。

  • SISMEMBER <key> <member>: 检查成员是否存在于集合中。

  • SCARD <key> :获取集合中的元素个数

有序集合操作:

  • ZADD <key> <score> <member>: 向有序集合添加一个成员,带有分数。

  • ZREM <key> <member>: 从有序集合中移除一个成员。

  • ZSCORE <key> <member>: 获取有序集合中成员的分数。

  • ZRANGE <key> <start> <end>: 获取有序集合中指定范围的成员。

哈希操作:

  • HSET <key> <field> <value>: 设置哈希表中的字段值。

  • HGET <key> <field>: 获取哈希表中指定字段的值。

  • HDEL <key> <field>: 删除哈希表中的字段。

  • HGETALL <key>: 获取哈希表中的所有字段和值。

过期时间操作:

  • EXPIRE <key> <seconds>: 设置键的过期时间(秒)。

  • TTL <key>: 获取键的剩余过期时间。

五、MySQL常用命令:

连接和退出:

  • mysql -u <username> -p: 以指定的用户名连接到MySQL服务器,并要求输入密码。

  • mysql -h <host> -u <username> -p: 连接到远程MySQL服务器。

  • exitquit: 退出MySQL命令行客户端。

数据库操作:

  • SHOW DATABASES;: 显示所有可用的数据库。

  • CREATE DATABASE <database-name>;: 创建一个新的数据库。

  • USE <database-name>;: 切换到指定数据库。

  • DROP DATABASE <database-name>;: 删除数据库(谨慎使用)。

表操作:

  • SHOW TABLES;: 显示当前数据库中的所有表。

  • DESCRIBE <table-name>;DESC <table-name>;: 显示表的结构。

  • CREATE TABLE <table-name> (<columns>);: 创建新表。

  • ALTER TABLE <table-name> <alter-command>;: 修改表结构。

  • DROP TABLE <table-name>;: 删除表(谨慎使用)。

数据操作:

  • INSERT INTO <table-name> (<columns>) VALUES (<values>);: 插入数据。

  • SELECT <columns> FROM <table-name> WHERE <condition>;: 查询数据。

  • UPDATE <table-name> SET <column=value> WHERE <condition>;: 更新数据。

  • DELETE FROM <table-name> WHERE <condition>;: 删除数据。

用户和权限管理:

  • CREATE USER '<username>'@'<host>' IDENTIFIED BY '<password>';: 创建新用户。

  • GRANT <privileges> ON <database-name>.<table-name> TO '<username>'@'<host>';: 授予用户权限。

  • ALTER USER '<username>'@'<host>' IDENTIFIED BY '<new-password>';: 修改用户密码。

  • REVOKE <privileges> ON <database-name>.<table-name> FROM '<username>'@'<host>';: 撤销用户权限。

  • DROP USER '<username>'@'<host>';: 删除用户。

备份和恢复:

  • mysqldump -u <username> -p <database-name> > <backup-file.sql>: 备份数据库。

  • mysql -u <username> -p <database-name> < <backup-file.sql>: 恢复数据库。

其他命令:

  • SHOW VARIABLES LIKE '<variable-name>';: 显示MySQL变量的值。

  • SHOW STATUS LIKE '<status-name>';: 显示MySQL服务器的状态信息。

  • FLUSH PRIVILEGES;: 重新加载授权表,使更改生效。

  • ALTER TABLE <table-name> AUTO_INCREMENT = <value>;: 重置表的自增长计数器。

六、Java集合常用方法

数组Array:

长度固定不可改变

  • int length = myArray.length;:获取数组的长度。

  • indexOf():返回第一次匹配的下标

  • Arrays.asList(arrays):转换为List集合

  • Arrays.sort(myArray);:对数组进行排序。

  • boolean contains = Arrays.asList(myArray).contains(3);:检查数组中是否包含值为3的元素。

  • Arrays.binarySearch(myArray, 4);:在已排序数组中二分查找值为4的元素的索引。

  • Arrays.copyOf(myArray, myArray.length);:复制数组。

字符串String:

  • int length = myString.length();:获取字符串的长度。

  • char charAtIndex = myString.charAt(7);:获取字符串索引为7的字符。

  • boolean isEmpty = myString.isEmpty();:检查字符串是否为空。

  • String upperCase = myString.toUpperCase();:将字符串转换为大写。

  • boolean startsWith = myString.startsWith("Hello");:检查字符串是否以"Hello"开头。

  • boolean endsWith = myString.endsWith("World!");:检查字符串是否以"World!"结尾。

  • int indexOf = myString.indexOf("World");:返回第一次匹配"World"的索引。

  • boolean contains = myString.contains("lo,");:检查字符串是否包含"lo,"。

  • String substring = myString.substring(7);:获取从索引7开始到末尾的子字符串。

  • String replaced = myString.replace("Hello", "Hi");:替换字符串中的"Hello"为"Hi"。

  • String[] s = str.split(",");:切割字符串为数组

ArrayList:

  • ArrayList<String> myList = new ArrayList<>();:创建一个 ArrayList 实例。

  • boolean added = myList.add("Element1");:将元素"Element1"添加到列表末尾。

  • void addAtIndex = myList.add(1, "Element2");:在索引1处插入元素"Element2"。

  • boolean removed = myList.remove("Element1");:移除元素"Element1"。返回值为 true 表示移除成功。

  • String elementAtIndex = myList.get(0);:获取索引0处的元素值。返回值为该元素的值。

  • String removedElement = myList.remove(1);:移除索引1处的元素。返回值为被移除的元素的值。

  • boolean contains = myList.contains("Element2");:检查列表是否包含元素"Element2"。

  • int indexOf = myList.indexOf("Element2");:获取元素"Element2"的第一次出现的索引。

  • int size = myList.size();:获取列表的大小(元素的数量)。

  • boolean isEmpty = myList.isEmpty();:检查列表是否为空。返回值为 true 表示为空。

  • String[] array = myList.toArray(new String[myList.size()]);:将列表转换为数组。

  • myList.clear();:清空列表中的所有元素。无返回值。

LinkedList:

  • LinkedList<String> myLinkedList = new LinkedList<>();:创建一个 LinkedList 实例。

  • boolean added = myLinkedList.add("Element1");:将元素"Element1"添加到列表末尾。返回值为 true

  • void addAtIndex = myLinkedList.add(1, "Element2");:在索引1处插入元素"Element2"。

  • boolean addedFirst = myLinkedList.addFirst("FirstElement");:在列表头部插入元素"FirstElement"。

  • boolean addedLast = myLinkedList.addLast("LastElement");:在列表尾部插入元素"LastElement"。

  • boolean removed = myLinkedList.remove("Element1");:移除元素"Element1"。返回值为 true 表示移除成功,false 表示元素不存在。

  • String elementAtIndex = myLinkedList.get(0);:获取索引0处的元素值。返回值为该元素的值。

  • String removedFirst = myLinkedList.removeFirst();:移除列表头部的元素。返回值为被移除的元素的值。

  • String removedLast = myLinkedList.removeLast();:移除列表尾部的元素。返回值为被移除的元素的值。

  • boolean contains = myLinkedList.contains("Element2");:检查列表是否包含元素"Element2"。

  • int indexOf = myLinkedList.indexOf("Element2");:获取元素"Element2"的第一次出现的索引。

  • int size = myLinkedList.size();:获取列表的大小(元素的数量)。

  • boolean isEmpty = myLinkedList.isEmpty();:检查列表是否为空。

  • Object[] array = myLinkedList.toArray();:将列表转换为数组。返回一个包含列表元素的数组。

  • myLinkedList.clear();:清空列表中的所有元素。无返回值。

队列Queue:

  • Queue<String> myQueue = new LinkedList<>();:创建一个 Queue 实例,通常使用 LinkedList 作为实现。

  • boolean added = myQueue.add("Element1");:将元素"Element1"添加到队列末尾。返回值为 true

  • boolean offer = myQueue.offer("Element2");:将元素"Element2"添加到队列末尾。false 表示队列已满。

  • String removed = myQueue.remove();:移除并返回队列头部的元素。返回值为被移除的元素的值。

  • String poll = myQueue.poll();:移除并返回队列头部的元素。返回值为被移除的元素的值,如果队列为空则返回 null

  • String element = myQueue.element();:返回队列头部的元素值,但不移除。

  • String peek = myQueue.peek();:返回队列头部的元素值,但不移除。如果队列为空,返回 null

  • int size = myQueue.size();:获取队列的大小(元素的数量)。

  • boolean isEmpty = myQueue.isEmpty();:检查队列是否为空。为 true 表示为空。

  • boolean contains = myQueue.contains("Element2");:检查队列是否包含元素"Element2"。

  • Object[] array = myQueue.toArray();:将队列转换为数组。返回一个包含队列元素的数组。

  • myQueue.clear();:清空队列中的所有元素。无返回值。

双端队列Deque:

Deque的创建和初始化:

  • Deque<String> myDeque = new LinkedList<>();:创建一个 Deque 实例,通常使用 LinkedList 作为实现。

在队列末尾添加元素:

  • boolean addedLast = myDeque.offerLast("LastElement");:在末尾添加元素。返回值为 false 表示队列已满。

  • myDeque.addLast("LastElement");:在末尾添加元素,如果队列已满则抛出 IllegalStateException 异常。

在队列头部添加元素:

  • boolean addedFirst = myDeque.offerFirst("FirstElement");:在头部添加元素。返回值为false 表示队列已满。

  • myDeque.addFirst("FirstElement");:在头部添加元素,如果队列已满则抛出 IllegalStateException 异常。

移除队列末尾的元素:

  • String removedLast = myDeque.pollLast();:移除并返回末尾元素。返回值为被移除的元素的值,如果队列为空则返回 null

  • String last = myDeque.removeLast();:移除并返回末尾元素。返回值为被移除的元素的值,如果队列为空则抛出 NoSuchElementException 异常。

移除队列头部的元素:

  • String removedFirst = myDeque.pollFirst();:移除并返回头部元素。同上。

  • String first = myDeque.removeFirst();:移除并返回头部元素。同上

获取队列末尾和头部的元素值,但不移除:

  • String peekLast = myDeque.peekLast();:返回末尾元素值,但不移除。如果队列为空,返回 null

  • String peekFirst = myDeque.peekFirst();:返回头部元素值,但不移除。同上。

获取队列大小和判空:

  • int size = myDeque.size();:获取双端队列的大小(元素的数量)。

  • boolean isEmpty = myDeque.isEmpty();:检查双端队列是否为空。

其他操作:

  • boolean contains = myDeque.contains("Element2");:检查是否包含元素"Element2"。

  • Object[] array = myDeque.toArray();:将双端队列转换为数组。返回一个包含队列元素的数组。

  • myDeque.clear();:清空双端队列中的所有元素。无返回值。

哈希表HashMap:

  • Object preValue = myMap.put("Key1", 10);:将键值对插入到Map中,并返回先前的值。

  • int value = myMap.get("Key1");:获取键为"Key1"的值。

  • boolean containsKey = myMap.containsKey("Key2");:检查Map中是否包含键"Key2"。

  • boolean containsValue = myMap.containsValue(10);:检查Map中是否包含值为10的键。

  • myMap.remove("Key1");:移除键为"Key1"的键值对。

  • int size = myMap.size();:获取Map的大小(键值对的数量)。

  • boolean isEmpty = myMap.isEmpty();:检查Map是否为空。

  • Set<String> keys = myMap.keySet();:获取所有键的集合。

  • Collection<Integer> values = myMap.values();:获取所有值的集合。

  • Set<Map.Entry<String, Integer>> entries = myMap.entrySet();:获取所有键值对的集合。

  • myMap.clear();:清空Map中的所有键值对。

集合HashSet:

  • HashSet<String> mySet = new HashSet<>();:创建一个 HashSet 实例。

  • boolean added = mySet.add("Element1");:将元素"Element1"添加到集合中。false 表示元素已存在。

  • boolean removed = mySet.remove("Element1");:从集合中移除元素"Element1"。false 表示元素不存在。

  • boolean contains = mySet.contains("Element2");:检查集合是否包含元素"Element2"。

  • int size = mySet.size();:获取集合的大小(元素的数量)。

  • boolean isEmpty = mySet.isEmpty();:检查集合是否为空。返回值为 true 表示为空,false 表示不为空。

  • Set<String> cloneSet = (Set<String>) mySet.clone();:克隆集合。返回一个与原集合相同的副本。

  • mySet.clear();:清空集合中的所有元素。

其他命令

  • nginx -s reload: nginx重载配置文件