![cover](https://my-blog-pwd.oss-cn-shenzhen.aliyuncs.com/Snipaste_2023-11-27_12-27-08.jpg)
常用命令整理
整理一些常用的命令,免得每次都要在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编辑器常用命令
进入编辑模式:
i
:在当前光标位置之前插入文本。a
:在当前光标位置之后插入文本。o
:在当前行之后插入新行,并进入插入模式。I
:在当前行的开头插入文本。A
:在当前行的末尾插入文本。O
:在当前行之前插入新行,并进入插入模式。
退出编辑模式:
Esc
:退出插入模式,回到普通模式。
保存和退出:
:w
:保存文件但不退出Vi。:w filename
:将文件保存为指定的文件名。:q
:退出Vi。:q!
:强制退出Vi,不保存修改。:wq
或:x
:保存修改并退出Vi。
移动光标:
h
:向左移动一个字符。j
:向下移动一行。k
:向上移动一行。l
:向右移动一个字符。w
:向前移动一个单词。b
:向后移动一个单词。0
:移动到行首。$
:移动到行尾。G
:移动到文件末尾。gg
:移动到文件开头。Ctrl + f
:向前翻页。Ctrl + b
:向后翻页。
删除和复制:
x
:删除光标所在位置的字符。dd
:删除当前行。dw
:删除一个单词。yy
:复制当前行。yw
:复制一个单词。p
:粘贴剪切板内容。
搜索和替换:
/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服务器的连接。quit
或exit
: 退出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服务器。exit
或quit
: 退出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重载配置文件