阅读视图

发现新文章,点击刷新页面。

私有知识库 Wiki.js 部署安装教程

1 前言

Wiki.js 是一个功能强大且现代化的开源 Wiki 平台,基于 Node.js 开发,拥有丰富的功能和简洁的界面。本教程将指导你完成 Wiki.js 的部署安装,帮助你快速搭建属于自己的知识库。

特点

  1. 现代化界面:采用直观、简洁的现代化用户界面设计,操作方便,用户可以轻松上手,快速找到所需功能,提升使用体验。
  2. 多语言支持:支持多种语言,能够满足不同地区、不同语言背景用户的需求,方便全球范围内的团队协作和知识共享。
  3. 插件系统丰富:拥有丰富的插件生态系统,用户可以根据自身需求轻松扩展功能,如添加代码高亮、数学公式支持、图表绘制等插件,增强维基的实用性。
  4. 用户管理灵活:提供灵活的用户管理和权限设置功能,可针对不同用户角色或用户组精细设置访问权限、编辑权限等,确保知识的安全性和保密性。
  5. Markdown 支持:支持 Markdown 语法,用户可以使用简洁的 Markdown 语言进行内容编辑,方便快捷地创建格式丰富的文档,提高编辑效率。
  6. 实时协作:支持实时协作编辑,团队成员可以同时对同一篇文档进行编辑,实时看到彼此的修改,提高协作效率,促进知识的快速沉淀和更新。
  7. 易于部署:安装和部署过程相对简单,可轻松部署在各种服务器环境中,无论是本地服务器还是云服务器,都能快速搭建起属于自己的维基系统。

2 准备工作

在正式安装之前,你需要准备一台至少为 2C1G 的服务器。

根据官方文档的描述,你可以在任意一台支持 Node.js 的系统上安装,推荐使用 Linux 系统,本文使用 Ubuntu 演示。

2.1 购买服务器

我们需要准备一台云服务器用于部署,如果你没有云服务器,这里推荐使用腾讯云轻量应用服务器,新用户购买低至 68 元/年,点击 https://curl.qcloud.com/wltDVjMI 立即选购。

image-20250130172932203

除了特惠产品外,特别推荐腾讯云新推出拥有高峰值带宽的锐驰型套餐,峰值带宽高达 200Mbps。

2.2 选择安装方式

Wiki.js 安装方式多样,常见的有通过宝塔面板、通过 Docker、通过 1Panel 面板及通过命令行,你可以根据个人情况任选其一。

宝塔面板图形化界面操作,适合新手快速部署,无需记忆命令,但部分高级配置需要通过手动修改文件实现;Docker 容器步骤简单,维护方便,适合环境隔离和快速迁移,但对容器相关知识有一定要求;1Panel 面板操作简单,现代化图形界面操作便捷,无需复杂配置,但可控制性较低;命令行是直接操作服务器,无需安装额外面板或服务,节省服务器资源,但问题排查更依赖人工,容易出错,门槛较高。

如果你选择面板或者 Docker 的方式安装,建议阅读下方文章完成前置条件:

3 通过宝塔面板

3.1 安装 Node.js

在宝塔面板侧边栏软件商店中搜索 nodejs,找到 Node.js版本管理器 进行安装。

image-20250130193749007

安装完成后,点击设置按钮,选择任意 LTS 版本 Node.js 进行安装。

image-20250130194208508

3.2 安装 PostgreSQL

在宝塔面板侧边栏软件商店中搜索 postgresql,找到 PostgreSQL管理器 进行安装。

image-20250130195021210

安装完成后,点击设置按钮,选择任意 postgresql 版本(建议版本号小于 15)进行安装。此安装过程较慢,等待的时间可以先去完成下一步。

image-20250130195115049

3.3 获取源代码

在宝塔面板侧边栏文件中的 /www/wwwroot 目录下新建一个文件夹,名称自定义,这里取为 wikijs

新建完成后进入该文件夹内,将光标放在上传/下载按钮上点击 URL 链接下载,URL 地址填写官方提供的最新压缩包链接。

1
2
3
4
https://github.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz

下载较慢可使用国内镜像站:
https://kkgithub.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz

image-20250130200546195

下载完成后点击该压缩包后方的更多,选择解压,无误后确认解压。

image-20250130201301058

解压完成后,将示例配置文件 config.sample.yml 重命名为 config.yml。

image-20250130201809532

3.4 服务配置

前面安装的 PostgreSQL 现在应该安装完成了,点击侧边栏数据库,选择 PgSQL 添加数据库,自定义填写数据库名、用户名及密码,建议数据库名与用户名一致,并且具有标识性。

image-20250130202458663

记住用户名及密码,回到侧边栏文件中在前面源代码存放的目录中,双击打开 config.yml 配置文件,可参考下图修改。

image-20250130211415569

在侧边栏网站中选择 Node 项目中添加站点,项目目录选择前面源代码存放的目录,其它的内容将自动填充。

image-20250130212321475

创建完成后项目将自动开启,在浏览器访问 IP:3000 即可进入 Wiki.js 配置页。

问题汇总

一、项目启动失败

  1. 项目根目录下的压缩包未解压
  2. 示例配置文件未重命名为 config.yml
  3. 数据库版本大于 15

二、网页无法打开

  1. 未在云服务商处放行项目端口
  2. 未在宝塔面板防火墙处放行端口

4 通过 Docker

使用 Docker 部署是极为简单的,你的设备上只要安装有 Docker 和 Docker Compose,就可以使用简单的几行命令快速部署。

创建部署目录,新建并编写 docker-compose.yml 文件。

1
2
mkdir ~/wikijs && cd ~/wikijs
vim docker-compose.yml

在编辑模式(i)下使用以下配置内容,根据实际情况修改无误后,按 <ESC> 并输入 :wq 保存并退出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
services:
db:
image: postgres:15-alpine
container_name: wikijs-db
volumes:
- wikijs-db-data:/var/lib/postgresql/data
environment:
POSTGRES_DB: wikijs # 数据库名
POSTGRES_USER: wikijs # 数据库用户名
POSTGRES_PASSWORD: your_db_password # 数据库密码
restart: unless-stopped

wiki:
image: ghcr.io/requarks/wiki:latest
container_name: wikijs
depends_on:
- db
ports:
- "3000:3000"
volumes:
- wikijs-data:/var/wiki/data
environment:
DB_TYPE: postgres
DB_HOST: db
DB_PORT: 5432
DB_USER: wikijs # 数据库用户名
DB_PASS: your_db_password # 数据库密码
DB_NAME: wikijs # 数据库名
restart: unless-stopped

volumes:
wikijs-db-data:
wikijs-data:

启动容器,命令需在 docker-compose.yml 文件同级目录下执行。

1
sudo docker-compose up -d

验证容器状态,看到 wikijswikijs-db 容器状态为 Up,则部署成功。

1
sudo docker ps -a

最后在浏览器访问 IP:3000 即可进入 Wiki.js 配置页。

问题汇总

  1. 在启动容器时出现 net/http: request canceled while waiting for connection 错误,是由于网络问题导致,需要更换国内镜像源
  2. 网页无法打开,需要检查云服务商处是否放行项目端口

5 通过 1Panel 面板

5.1 安装 PostgreSQL

在 1Panel 面板侧边栏应用商店中搜索 postgre 找到 PostgreSQL 进行安装。

image-20250131125745188

用户名及密码自定义,版本需要选择 15 版本号之前的

image-20250131140553082

5.1 安装 Wiki.js

在 1Panel 面板侧边栏应用商店中搜索 wiki 找到 Wiki.js 进行安装。

image-20250131140703208

数据库选择 PostgreSQL,数据库名、用户名、密码自定义,端口自定义,需要在云服务商处放行端口,最后在高级设置中开启端口外部访问。

image-20250131141256785

最后在浏览器访问 IP:3000 即可进入 Wiki.js 配置页。

问题汇总

  1. 网站无法打开,检查云服务商及 1Panel 面板端口外部访问是否放行开启
  2. Wiki.js 启动失败,检查 PostgreSQL 版本号是否小于 15

6 通过命令行

6.1 安装 Node.js

更新系统的软件包列表。

1
sudo apt update

快速安装 nodejsnpm

1
sudo apt install nodejs npm -y

安装完成后,通过版本检查命令验证 Node.js 和 npm 是否安装成功。

1
2
node -v
npm -v

6.2 安装 PostgreSQL

安装 postgresqlpostgresql-contrib,前者是 PostgreSQL 数据库的核心软件包,后者包含了一些额外的工具和扩展,能增强 PostgreSQL 的功能。

1
sudo apt install postgresql postgresql-contrib -y

安装完成后,PostgreSQL 服务通常会自动启动,但为减少不必要的麻烦,可以先检查服务的运行状态,当输入内容中出现 Active: active 即正常。

1
sudo systemctl status postgresql

如果服务没有启动,可以使用以下命令启动 postgresql 服务。

1
sudo systemctl start postgresql

若希望 PostgreSQL 在系统启动时自动启动,避免因重启导致的服务暂停,可以使用以下命令。

1
sudo systemctl enable postgresql

PostgreSQL 安装完成后会创建一个名为 postgres 的操作系统用户和同名的数据库用户。你可以通过切换到 postgres 用户来管理数据库。

1
sudo -u postgres psql

进入 psql 环境后,使用 SQL 命令创建一个用户名为 wikijs、密码为 P@ssw0rd 的新数据库用户。

1
CREATE USER wikijs WITH PASSWORD 'P@ssw0rd';

然后创建一个名为 wiki 的新数据库,并将其所有权赋予给新用户 wikijs,完成操作后,输入 \q 退出 psql 环境。

1
CREATE DATABASE wiki OWNER wikijs;

6.3 安装 Wiki.js

创建并进入一个用于存放 Wiki.js 文件的目录,这里命名为 wikijs

1
mkdir ~/wikijs && cd ~/wikijs

下载 Wiki.js 的最新版本压缩包,并将其解压到当前目录,此处下载地址使用 Github 国内镜像站。

1
2
wget https://kkgithub.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz
tar xzf wiki-js.tar.gz

将示例配置文件 config.sample.yml 重命名为 config.yml

1
mv config.sample.yml config.yml

编辑配置文件并填写数据库和端口设置。

1
vim config.yml

根据实际情况和前面的数据库设置,在配置文件中修改部分内容,这里的端口需要在云服务商处放行。

image-20250203230219139

当无误的完成以上操作后,就可以尝试启动 Wiki.js 了。

1
node server

当控制台打印输出内容有类似 HTTP Server: [ RUNNING ] 表明启动成功,在浏览器访问 IP:3000 即可进入 Wiki.js 配置页。

6.4 进程守护

如果是使用命令行部署,服务进程将会因终端关闭而停止,所以需要进程守护来保证服务稳定运行,官方推荐使用 systemd。

首先在 /etc/systemd/system 目录下创建并编辑一个名称为 wiki.service 的新文件。

1
sudo vim /etc/systemd/system/wiki.service

将以下内容粘贴到 wikijs.service 这个新文件中,WorkingDirectory 的值需要根据实际安装位置来修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=Wiki.js
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/node server
Restart=always
User=root
Environment=NODE_ENV=production
WorkingDirectory=/home/ubuntu/wikijs

[Install]
WantedBy=multi-user.target

随后依次进行重新加载 systemd、运行服务并在系统启动时启用该服务等操作。

1
2
3
sudo systemctl daemon-reload
sudo systemctl start wikijs
sudo systemctl enable wikijs

还可以使用 sudo systemctl status wikijs.service 命令查看服务状态,当打印输出内容中出现 Active: active (running) 即成功,然后再次在浏览器访问 IP:3000 即可进入 Wiki.js。

问题汇总

  1. 网页无法打开,需要检查云服务商处是否放行项目端口
  2. 使用进程守护前访问正常,使用后无法访问,请仔细检查 wikijs.service 文件内容,尤其是 WorkingDirectory 设置的目录值

7 配置 Wiki.js

7.1 初始化

首次打开站点后,自动进入程序配置页,需要设置管理员电子邮箱、密码及站点地址,选择是否开启官方收集程序相关数据权限。

image-20250201115522816

配置完成后程序进入登录页,填写前面设置的管理员电子邮箱及密码进行登录。

image-20250201115831806

登录完成后进入 Wiki.js 主页,主页展示了两个按钮,CREATE HOME PAGE 用于新建主页面,CREATE HOME PAGE 用于进入管理面板。

image-20250201120559425

7.2 切换语言

在管理面板中,进入 Site 分类下的 Locale 设置页,在右侧 Download Locale 中找到 Chinese Simplified 并下载,右侧状态变为绿色对号后再左侧 Locale Settings 中将 Site Locale 配置项切换为中文,最后点击 APPLY 按钮应用设置。

image-20250201122140470

7.3 特色功能

7.3.1 多用户

在后台身份验证设置中,可以添加不同的登录方式,目前几乎集成了市面上各种常见的登录方式,选择某一种登录方式,通过给予开放注册权限,允许他人通过此种方式进行登录。

image-20250201214810860

如果选择 Local Database 方式开放注册,则需要在后台邮件设置中配置发件人信息,主机为 SMTP 服务器,端口根据邮箱厂商设置,用户名为邮箱地址,密码为登录密码或者授权密码,根据邮箱厂商设置,如有疑问可参考这篇文章:https://talen.top/posts/caffd8d6/

image-20250201220800123

Wiki.js 还拥有强大的权限系统,在后台用户组设置中添加新的用户组,并且可以设置权限和页面规则等配置。

image-20250201221438288

7.3.2 评论

Wiki.js 拥有一套内置的评论系统和多套第三方评论系统,在后台评论设置中可进行相关配置,根据喜好自行选择。

image-20250201222302715

7.3.3 搜索

在后台搜索引擎设置中,可以选择使用不同类型的搜索引擎,可以选择基于本地数据库或者其它第三方搜索引擎,推荐使用 Algolia。

image-20250201222527072

7.3.4 存储

Wiki.js 支持第三方存储库,特别适合大型的 Wiki 站点,减轻服务器负载压力。在后台存储设置中选择需要的第三方存储库,根据官方教程来进一步配置。

image-20250201223045909

7.4 主题修改

7.4.1 导航栏

在后台导航设置中,有四种导航模式可选,分别是站点地图、静态导航、自定义导航(站点地图 + 静态导航)和禁用导航栏,可根据喜欢的样式进行选择展示,标签为展示名称,图标根据在后台主题设置中选择的图标集在相应网站里查找图标名称。

image-20250201233252662

7.4.2 登录背景

登录界面背景图可更换自己想要的图片,在后台安全设置中找到登录配置板块,在登录页处填写背景图片链接或者点击右侧的按钮上传新图像。

image-20250201234734893

7.4.3 网站常规

在后台常规设置中,可对站点图标、站点名称和页脚版权说明等信息进行修改。

image-20250202000043119

7.4.4 目录位置

在后台主题设置中,找到主题设置配置板块,修改目录展示位置,建议设置右侧(Right)。

image-20250202000531566

8 创建首页

在初始化 Wiki.js 并完成登录后的主页面,点击“创建首页(CREATE HOME PAGE)”按钮,选择想要使用的编辑器。

image-20250203192623913

这里选择 Markdown 编辑器,然后编辑页面属性,这里需要重点配置页面标题及路径,完成后点击弹窗右上角“OK”按钮,编辑页面内容。

image-20250203193529576

页面内容编辑完成后,点击“创建”按钮来保存,此后 Wiki.js 站点首页成为默认页面。

image-20250203200526656

9 写在最后

通过本教程,相信你已经掌握了在不同环境下部署 Wiki.js 的核心方法。作为一款集开源、轻量、可扩展于一体的知识管理工具,Wiki.js 凭借其现代化的架构设计和丰富的功能特性,能够完美适配个人知识沉淀、团队协作共享乃至企业级文档中心等场景。无论是通过可视化面板的便捷部署,还是 Docker 容器化的一键启停,亦或是命令行操作的灵活掌控,Wiki.js 都为用户提供了多样化的选择。

在完成基础部署后,建议进一步探索其多语言内容管理、细粒度权限体系、第三方存储集成等进阶功能。通过合理配置用户组规则、评论模块、搜索引擎优化等特性,可打造出高度定制化的知识协作平台。若在部署过程中遇到问题,可参考各章节的"问题汇总"排查,或前往官方文档与社区获取支持。现在就行动起来,构建属于你的智能化知识库吧!

全面详解开箱即用的 AI 工具 Cursor

1 前言

Cursor 是一款智能化的编程辅助工具,旨在帮助开发者提高编码效率和质量。它利用先进的机器学习算法和自然语言处理技术,能够理解用户的编程意图,并提供实时的代码建议、自动补全、错误检测等功能。无论是初学者还是经验丰富的开发者,Cursor 都可以成为开发过程中的得力助手。

值得一提的是,Cursor 不是完全免费的,新用户可以享受 14 天的专业版试用,而试用过期后的免费版功能受限,很难完成日常开发需求,那就免不了需要去付费订阅了。但办法总比困难多,文末提供永久免费使用教程。

2 安装 Cursor

Cursor 的安装非常简单,直接前往官网下载并运行安装程序,完成后将自动运行 Cursor。

image-20250114114319397

首次进入 Cursor 需要进行相关设置,这里依次为键盘映射、AI 语言、问题嵌入范围是否整库和添加命令行启动,这里一般只需要修改前两项,可以根据平时的软件习惯和个人语言支持来选择。

image-20250114114452403

然后根据引导不断下一步来到登录步骤并完成注册登录,这一步是必须的,否则将无法使用任何 AI 功能。你可以选择邮箱、谷歌或 GitHub 任一方式注册。注册完成后将自动登录,回到 Cursor 中页面如下即完成登录并且可以开始使用了。

image-20250114120526270

3 简单配置

3.1 切换中文

程序本身是英文的,而对于很多人可能是需要一个中文界面环境的。

Cursor 设置中文的方法和 VS Code 相同,只需要在拓展中搜索 chinese(simplified) 安装并重启 Cursor 后启用。

image-20250114213731951

3.2 迁移 VS Code

Cursor 是一款基于 VS Code 技术构建的编辑器,从切换中文配置方法中也不难看出它们的共通性。如果你也是 VS Code 用户,那么你可以直接将 VS Code 的配置无缝迁移到 Cursor。

首先在软件中导航到 Settings > General > Account,找到 VS Code Import 项,点击导入按钮耐心等待些许时间。等待右下角出现提醒,重新启动软件完成,此时拓展、主题、设置和键绑定等配置均迁移到 Cursor。

image-20250114215125754

3.3 垂直活动栏

默认情况下,活动栏是水平的,以便为聊天留出空间,但如果更喜欢传统的垂直活动栏,可以进入设置中搜索 workbench.activityBar.orientation 并将其值修改为 vertical 后重启软件。

image-20250114224841637

4 基本使用

4.1 常用快捷键

在 Cursor 中常用的快捷键有四个,分别是 TabCtrl + KCtrl + LCtrl + I,它们从不同方面为用户提供最大的便捷。

4.1.1 Tab 代码补全

不同的 AI 编辑器都实现了 Tab 功能,但实际体验却天差地别,最简单直接的形式就是根据当前的代码上下文,自动生成代码补全的建议,用户直接通过Tab键就可以完成代码的修改与补全。而 Cursor 的 Tab 功能,不仅可以插入代码,而且可以对现有的代码进行修改,这正是它的独特之处。

代码生成补全是最基础的 Tab 功能,直接根据当前光标所在的位置,生成代码补全建议。你可能只需要输入部分内容,Cursor 就会根据已知信息智能补全剩余代码。

image-20250115181307613

除了剩余代码补全,还支持多行代码修改建议。

image-20250115181915358

当代码出现一些错误时,Cursor 会显示出所有问题处,你可以一键 Tab 来修复所有问题。

image-20250115182615369

需要注意的是,Tab 在进行任何补全或修改建议时,代码会以灰色斜体显示。

4.1.2 Ctrl + K 提示栏

该快捷键可以打开提示栏,提示栏功能是引导 AI 编程最快速方式,不同于聊天功能的是,提示栏更加聚焦局部代码处理,是对代码进行精细化处理的最佳工具,弥补了 AI 不能完全理解用户意图的缺陷。

image-20250116175343235

没有选中任何代码时按下 Ctrl + K 时,Cursor会根据在提示栏中输入的内容生成新代码

image-20250116180212680

选中某段代码时按下 Ctrl + K 时,Cursor会根据在提示栏中输入的内容修改选中的代码

image-20250116180336788

在内置终端中也可以按下 Ctrl + K 快捷键打开终端底部的提示栏,Cursor 会根据描述自动帮助写出一个终端命令。

image-20250116180914680

提示栏还有一个优雅的功能,当你对第一次生成的结果不满意,你可以在 Follow-up instructions... 处使用新描述来修改代码。

4.1.3 Ctrl + L 对话框

该快捷键可以打开对话框,它和大部分 AI 工具相同,以最直接的对话方式获取解释和建议,另外还有 Apply 功能可以将对话中给出的代码建议直接应用到项目中。

image-20250116183927186

将对话中生成的代码应用到项目中后,编辑器会将原内容以红色标注,新内容以绿色标注,点击 Accept 按钮(Ctrl + Shift + Y)确认应用修改,点击 Reject 按钮(Ctrl + N)取消应用修改。

image-20250116184238422

4.1.4 Ctrl + I 对话框 Composer

该快捷键用来打开对话框中的一个特殊功能 Composer,它是专为整个项目设计的,可以通过和模型对话来开发整个项目,过程就和聊天差不多,在会话中可以帮助你创建文件、删除文件、同时编辑多个文件等功能。

比如我创建了一个空白项目,开启 Composer 对话框,发生要求内容消息,AI 自动创建所需要的文件并且编写其内容。

image-20250116213326309

4.2 @注记

为了更方便地向大语言模型提供上下文信息,Cursor 内设了不同的 @ 注记,使用 @ 注记能够方便地注入不同类型的上下文信息到你的对话里。

一般的注记是通用的,适用于所有对话窗口,如提示栏(Ctrl + K)、对话框(Ctrl + L)等。

4.2.1 @files 导入特定文件内容

当在对话框输入 @files 注记时,Cursor 会自动弹出对代码仓库的检索列表,输入想要导入上下文的文件名,按下确认键,相应文件里的内容便会自动注入到上下文中,可帮助模型更好地理解与特定文件相关的代码逻辑和需求。

image-20250116221540710

4.2.2 @folders 提供文件目录

能够提供文件目录的相关信息,在遇到路径问题或需要模型了解特定目录结构及其中文件的情况时使用,可以向大模型寻求解决方法。

image-20250116221703721

4.2.3 @code 精确代码片段

提供更精确的代码片段上下文。使用时会弹出相应检索框,输入关键词后在索引列表中选择相应的代码块即可,适用于需要聚焦特定代码块进行分析、修改或生成的场景。

image-20250116222115835

4.2.4 @docs 函数或库官方文档

能够从函数或库的官方文档里获取上下文,但只能从可访问的在线文档里获取,有助于在编写代码时快速获取相关函数或库的详细说明和使用方法。

4.2.5 @git 仓库 commit 历史

只能在对话框里使用,能够将当前的 git 仓库的 commit 历史作为上下文传递给大模型,方便在代码开发过程中结合版本历史进行分析和决策。

image-20250116222408987

4.2.6 @codebase 高级代码库搜索

只能在对话框里使用,用于在代码仓里扫描相应的文件传入,可帮助模型全面了解代码仓库的整体结构和内容,从而提供更准确和全面的代码建议和解决方案。

image-20250116223001950

4.2.7 @web 网络搜索结果

会默认将提问先向搜索引擎进行搜索,然后提取搜索结果作为上下文。当遇到问题不想再打开网页搜索报错信息时,可直接使用此注记获取网络上的相关信息和解决方案。

image-20250116223618025

4.2.8 @definitions 注记

只能在提示栏里使用,会将光标停留的那一行代码里涉及到的变量、类型的相关定义作为上下文传递给大模型,类似于 @code 注记,但更侧重于变量和类型定义的提取。

image-20250116224152595

4.3 模型选择

在提示栏和对话框里,均有一个按钮来选择语言模型。

image-20250116224901228

当前可选的模型仅为部分已开启模型,如果需要更多的可以在 Cursor Settings > Models > Model Names 中选择要启用的模型。

image-20250116225510880

目前官网中支持的主要模型提供商有:OpenAI、Anthropic、Google 和 Azure。

5 解决限制

本文提供的解决限制方法不确保长期有效。

5.1 方法一:更换账户

普通用户注册后,可以免费体验 14 天的 Pro 版本,相当于拥有多少邮箱,就拥有了多少个免费体验,这里推荐 2925 无限邮,1 个邮箱当无限邮箱用。

但同一台设备免费试用次数过多,就会有以下类似错误:

1
Too many free trial accounts used on this machine. Please upgrade to pro. We have this limit in place to prevent abuse. Please let us know if you believe this is a mistake.

这是因为当前设备使用太多次免费试用账号,原理是 Cursor 客户端会在你的电脑上生成一个唯一识别的机器 ID,所有我们只需要修改这个 ID 就可以解决这个问题。

由网络一位大神开发了一个可以自动完成这一步骤的工具,在 GitHub 上开源项目叫做 go-cursor-help,我们可以通过简单一行命令来使用它。

关闭 Cursor 软件,使用管理员身份打开 Windows PowerShell 执行以下命令。

1
irm https://raw.githubusercontent.com/yuaotian/go-cursor-help/master/scripts/install.ps1 | iex

5.2 方法二:绕过会员检查机制

这是又一位大神制作的开源工具 Cursor Free VIP,它可以帮助用户自动绕过 Cursor 的会员检查机制,并免费升级为 Pro 会员。

请特别注意,此种方法使用有风险!!!

登出 Cursor 账户并关闭软件,使用管理员身份打开 Windows PowerShell 执行以下命令。

1
irm https://raw.githubusercontent.com/yeongpin/cursor-free-vip/main/scripts/install.ps1 | iex

6 写在最后

Cursor AI 是一个强大的编程辅助工具,通过提供智能的代码建议和自动化功能,大大提高了开发者的工作效率。无论是新手还是专家,使用 Cursor AI 都能帮助你更好地完成编码任务,节省时间并减少错误。如果你希望提升自己的编码能力,不妨尝试一下 Cursor AI。

2024 年度总结

转眼之间 2024 年已经过去了,对我而言这一年可谓是充满挑战、收获满满。“爱吃猫的鱼BLOG”平台自 2024 年元旦成立,到现在已经一周年了,现在正在变得越来越好,而我也在年中结束了大学生涯,进入工作单位开始了实习。

黑历史?来时路!

我的创作路起始于2020年。当时刚踏入高中不久的我,恰逢新冠肺炎疫情爆发,只能在家上网课,而这也意外地成为了我创作路的开端。

刚开始时我满心迷茫,不知道该写些什么,仅仅有一个“想创作”的想法。于是我不断拜读各路大神的优质佳作,希望能给我的创作指明一个方向,经过多日阅读,我学到了不少知识,可创作方向还是毫无头绪,直到一天我读到一位学习搭子的文章,他是将自己的学习笔记整理成文章发布出来,于是我也模仿他的做法,从 Linux 到 Python 再到前端,虽然文章质量不高,但也算是实现了 0 到 1 的突破。

学习笔记类的文章似乎不存在创作瓶颈,只要还在学习就会有笔记产生,可惜文章后台数据是不理想的,慢慢就失去了对创作的大半兴趣,最后不到半年时间,运营的多个创作平台就陆续停止了更新,那时的我是极其浮躁的,几乎已经放弃创作这条路了。现在回想起来分析,数据不好的主要原因是文章质量欠佳,学习笔记类的文章主要受众群体局限于自己,很难吸引广大网友阅读。

之后来到了 2022 年,我进入了大学,有了更加充足的时间和精力,机缘巧合下我加入了校媒,专注于学校官方微信公众号推文的制作与运营,借助学校这个平台我学到了很多创作技巧并且获得了一定的成就,于是在 2023 年我也注册了一个自己的微信公众号,从此开启了我第二段创作之路。

这一次的道路是较为顺利的,我不再局限于自己的学习笔记,而是尝试自己比较擅长的领域,结合自己的知识储备和 AI 加持进行创作,靠着坚持不懈,我终于收获了第一批读者,部分文章也获得了读者的一致好评。

但随着时间的推移,公众号后台数据日益下降,原因在于我对平台规则的不了解,部分文章涉及违规等问题,导致了平台对我的内容限流或者封禁,这使得我的作品难以获得应有的曝光度,最终我选择关停公众号。

经历第二次失败之后,我没有再像第一次那样放弃,而是短暂调整后决定搭建个人博客平台,后取名“爱吃猫的鱼BLOG”运营至今。

新起点

“爱吃猫的鱼BLOG”博客平台是我创作路上的又一个新起点,它在 2024 年元旦正式成立运营,这是一个我可以根据自己的想法和风格自由打造的平台,在这里我能够更全面地展示自己的创作成果。这一年来,我在这个平台上发布了各种类型的文章,涵盖知识积累、经验分享等多个方面,我精心编写每一篇文章,力求带来最好的阅读体验。

除此之外,我花费大量时间研究各个创作平台,认真分析特点及差异,最终选择了一个最为适合我的平台,腾讯云开发者社区,并且通过一段时间的努力,我成功加入到了创作之星社群,让我极大开阔了眼界。

随着时间的推移,我的创作水平逐渐提高,文章的阅读量和评论数也开始稳步上升。在这个过程中,我积累了一定数量的读者,并且认识了一群志同道合的朋友,他们的期待和鼓励成为了我持续创作的压力与动力。

年初的时候,“爱吃猫的鱼 BLOG” 平台刚起步,我当时满心壮志,想着一定要在这个新平台好好写文章,闯出点名堂来。我兴致勃勃地打开新建草稿,准备写一篇关于新起点的文章,可刚坐下,脑子就一片空白,完全不知道该怎么写,心情也变得复杂起来。

其实我心里清楚,虽然来到了新平台,像是重新出发了,但以前写文章遇到的那些糟心事,比如文章没人看、数据不好看,这些失败的感觉就像影子一样跟着我,让我对这个新平台也有点打怵。我不停地问自己,这一回真的能行么?以前没成功过,现在在这个新地方,真的能打破之前的局面吗?想来想去,心里还是没底,最后干脆先不写那篇关于新起点的文章了,决定先埋头写文章,看看后面会怎么样。

日子一天天过去,这一年里我在平台上持续创作。慢慢地,一篇篇文章发出去,有读者看了,还会有人评论、分享,每次看到这些,我心里都特别高兴。以前那些担心、害怕,也随着这些互动一点点消失了。和读者们交流,让我觉得写文章更有劲儿了,也让我越来越坚定要一直在这平台上写下去。

现在到了年底,我还是想把这新起点的事儿写下来。想想这一年,刚开始的时候那么迷茫,不知道该怎么办,到现在能踏踏实实地写下去,这一路的经历对我来说太重要了。以后怎么样不知道,但我觉得有希望,新的起点就在脚下,我就带着对写作的喜欢,继续往前走,相信以后肯定能写出更多好文章,在这个平台上留下自己的脚印。

成长,蜕变

已经说了很多关于平台和创作的事情了,接下来就该来聊一聊我自己了。

2024 年对我来说也是一个新起点,在七月,我结束了大学校园生活,开启了为期八个月的实习,初入职场我的内心满是紧张与期待交织的复杂情绪,面对复杂的工作我时常感到手忙脚乱,甚至会因一些失误而陷入自我怀疑。但随着实习时间的增加,我也慢慢找到了适合自己的节奏,逐渐掌握了工作的技巧和规律,处理事情也愈发得心应手。

今年除了实习之外并没有其他重大的事情,更多的是一些生活中的琐碎,前几日与一大学舍友电话聊天,谈起一年前在一块各种难忘的趣事,我很是感叹,相比于那时来说,今年感觉过的很平淡,可后来转念一想,那时的我是不是也觉得当下平淡,或许在未来的某一天,回忆起 2024 年的生活琐碎,又使我很是感叹呢?

当然,想太多只会引起自我焦虑,我要做的是:把握好当下,让过往值得追忆,让未来值得妄想。

年度报告

流量数据

在过去一年中,博客的总访客数达到了 2084,访问量达到了 4353 次。

流量最高的月份是六月,访问量达到了 785 次,主要是因为当时发布了一篇关于服务器面板的选择与部署的文章,吸引了大量读者。而流量最低的月份是二月,仅有 101 次访问,可能与当时平台初成立曝光途径较少有关。

文章数据

全年共发布 38 篇文章,平均每月 3 篇。这些文章涵盖多种类型,包括建站项目、知识积累、实用技巧软件分享等多个方面。

最热门文章为《Uptime Kuma的部署与简单使用》,阅读量达 112 次,为网站带来了大量访客。从分类角度来看,建站项目类文章整体阅读量较高,这也是我个人毕竟擅长的领域。

互动数据

全年收到评论 56 条,平均每篇文章 1.5 条评论。回复率达到了95%,其中90%的回复在24小时内完成,通过积极回复评论,不仅解决了读者的疑问,还增强了与读者之间的联系。

展望未来

内容创作:计划在未来继续深入挖掘建站项目的内容,同时尝试拓展新的主题方向,初步计划新增日常生活分类。另外提高文章的质量和深度,注重内容的实用性,让每篇文章尽可能地帮到读者。

流量提升:进一步优化搜索引擎优化(SEO)策略,提高在搜索引擎中的排名,解决各种收录问题。加强在社交媒体平台上的推广力度,增多博客曝光途径,吸引更多的潜在读者。

读者互动:继续保持高回复率,积极解答读者疑问,认真与读者讨论问题,增强与读者的联系。

最后

2024 再见,期待 2025 更好,怀揣理想,继续出发!

image-20241231221603840

使用 Hexo 多种部署方法搭建个人网站

1 前言

Hexo 是一个快速、简洁且高效的静态博客生成器。它借助 Node.js 进行开发,能够将我们用 Markdown 所撰写的文章内容,在短短几秒内转化为静态 HTML 页面。这意味着我们只需专注于文章本身的创作,利用简单易懂的标记语言书写内容,而无需深入掌握复杂的网页开发知识,Hexo 就能帮我们快速生成可以展示的网页,为搭建个人网站提供了极大的便利。

前几日有一好友向我求助,想搭建一个博客网站但不想有太多的资金投入,我将之前写过的一篇使用云服务器 + 宝塔面板部署 Hexo 的教程文章发给了他,但他说也不太想购买服务器,这下就有点难到我了,后来突然回想起我开始接触个人博客时,网上很多 免费零成本 等字眼的博客搭建教程,当时我对此类文章是将信将疑的,没想到现在让我不得不翻出此类文章,而经过阅读学习后发现免费不仅是真的,有的还特别有意思,于是我协助好友使用 Hexo + GitHub + CloudFlare 成功搭建出了零成本博客,通过对此过程的总结学习,我将一些 Hexo 的部署方法归纳整理并且实操验证写下了这篇文章。

本文将使用 GitHub Pages、Cloudflare、Vercel 和 Netlify 四种方式部署 Hexo 项目,下面是对四种方式的简单比较:

  • GitHub Pages:部署流程相对简单,依赖本地构建部署,需要一个公开仓库。
  • Cloudflare:网络性能强大,每月 500 次构建使网站不得频繁更新。
  • Vercel:有快速的构建和部署速度,默认域名在国内无法直接访问需额外自定义域名。
  • Netlify:部署流程简单直观,免费账户功能限制较多。

2 准备工作

如果你的设备上已经安装过 Node.js 和 Git,并且拥有 GitHub 账户,那么你可以跳过本节。

2.1 安装 Node.js

Node.js 是 Hexo 运行的基础依赖,我们首先要进行安装。可以前往 官网 根据自己的操作系统选择合适的版本进行下载安装。这里推荐选择支持更稳定的 LTS 版本。

在选择自定义安装程序时,建议选择 Add to PATH,这样就免去了手动配置环境变量的麻烦。

image-20231213204028814

分别执行 node -vnpm -v 来检查是否被正确安装或是否可用。

image-20231213204347624

2.2 安装 Git

Git 在 Hexo 部署过程中起着重要作用,前往 官网 下载最新版本 Git 并按照指引进行安装。

使用 git -v 命令检查 Git 是否安装成功。

image-20231213203205991

2.3 注册 GitHub(部分方式需使用)

GitHub 是部分部署方式的过程所必需的,进入 官网,点击 “sign up” 来到注册页面,按照提示填写有效信息。请慎重设置用户名,因为它可能成为你的域名内容。

3 安装 Hexo

如果你已经拥有了一个 Hexo 项目,那么可以跳过本节。

在确保已经安装好 Node.js 和 npm 的前提下,在本地打开 CMD 命令提示符,输入并执行 hexo-cli 的全局安装命令。

1
npm install -g hexo-cli

初始化 Hexo 项目,在想要创建项目的目录下打开 CMD 命令提示符,使用 hexo init 命令使当前目录作为根目录创建项目,若想新建一个文件夹作为项目根目录,只需在 hexo init 命令后添加项目名称。

1
2
hexo init  # 当前目录为根目录
hexo init myblog # 新建文件夹为根目录

初始化完成后,会在该目录下生成一系列的文件夹和文件。

  • _config.yml:Hexo 项目的核心配置文件。配置网站信息、部署设置等各种参数都需要这个文件。
  • package.json:记录项目所依赖的各种模块以及项目的一些基本信息。当需要分享项目或者在其他环境重新安装依赖时使用。
  • scaffolds\:文章和页面初始结构模板。当创建文章或者页面时,会根据该文件夹下的对应模板来新建文件。
  • source\:用于存放文章文件、页面文件和图片等资源,其中文章就存放在该文件夹下的 _posts 子文件夹中。

当一切准备就绪后,在 Hexo 项目根目录下使用 hexo ghexo s 命令构建并预览该博客。

1
hexo g && hexo s

若出现疑似端口问题的报错,可以尝试重启 winnat 服务,具体方法请自行搜索。

通过预览你可能会感觉默认的主题并不好看,那么你可以通过官网主题库或者其他途径找寻感兴趣的主题,这里推荐本站同款。

1
git clone -b main https://github.com/talen8/hexo-theme-flecui.git themes/flecui

以上完成后你可以通过 Hexo 文档和相应主题文档来进行网站配置,你可以随时通过 hexo cl && hexo g && hexo s 命令预览博客。

4 部署到 GitHub Pages

目前版本的 GitHub Pages 仅支持公开仓库使用,页面文件将会被直接暴露在网络上。

4.1 创建仓库

在浏览器打开 GitHub 并登录你的账户,点击新建仓库。仓库名称为 用户名.github.io,这里用户名必须是你的 GitHub 用户名,另外需要注意,这个仓库需是公开的,不然无法使用 GitHub Pages。

image-20241219230542403

4.2 配置本地与 Github 关联

在本地博客根目录打开命令行工具安装 hexo-deployer-git 部署插件。

1
npm install hexo-deployer-git --save

在本地博客根目录使用文本编辑器打开 _config.yml 核心配置文件,找到 deploy 部分进行配置。

1
2
3
4
deploy:
type: git
repo: https://github.com/你的GitHub用户名/你的GitHub用户名.github.io.git
branch: main

这里的 repo 就是你创建的 Github 仓库的地址,可以根据上方示例填写,也可以进入仓库查看。

image-20241220211154447

确保 hexo-deployer-git 插件和 deploy 配置正确后,就可以通过一系列 Hexo 命令将生成的文章部署到 Github 上了。

1
2
3
hexo clean
hexo generate
hexo deploy

4.3 GitHub Pages 配置

部署完成后打开 GitHub 仓库可以发现 main 分支下不再为空,GitHub Pages 也默认开启,如果需要更改,点击 Settings 设置选项卡,在页面左侧找到 Pages 页面选项,在这里可以配置来源、分支、自定义域名等内容,然后点击 Save 保存按钮。

image-20241220215330536

最后就可以通过 你的GitHub用户名.github.io(仓库名)访问你的博客了。

5 部署到 CloudFlare

静态页面部署需要使用 Cloudflare Pages,他是一个用于构建和部署网站的平台。

5.1 注册 Cloudflare

前往官网注册一个 Cloudflare 账号,需要使用一个邮箱,官网为 https://cloudflare.com,注册地址为 https://dash.cloudflare.com/sign-up

image-20241220224507915

我们需要使用 Cloudflare Pages 功能,它的免费版本的功能有一些限制,但对于一个初步的个人博客网站来说绰绰有余。

  • 并发构建数为 1(同一时刻只能进行一个 pages 的构建)
  • 每月构建次数上限为 500 次
  • 一个 pages 项目最多可绑定 100 个自定义域名
  • 单个 pages 站点最多包含 20000 个文件,单个文件最大为 25MB
  • 每日限制函数请求数为 100000 次,超出后请求会失败
  • 不限制静态文件请求次数

5.2 创建 GitHub 仓库

在浏览器打开 GitHub 并登录你的账户,点击新建仓库。仓库名称自定义,可见性建议设置为私有,避免 Hexo 项目中某些可能的密钥直接暴露在网络。

image-20241221181056018

在本地博客根目录打开命令行工具将项目提交到仓库中。(注意:在提交之前请删除根目录下的 yarn.lock 文件,否则后续会出现构建失败问题)

1
2
3
4
5
6
git init
git add .
git commit -m "myblog"
git branch -M main
git remote add origin https://github.com/你的GitHub用户名/你的GitHub仓库名称.git # git remote add origin [仓库URL]
git push -u origin main

后续本地 Hexo 项目有修改只需要使用 Git 工作流程提交命令

1
2
3
git add .
git commit -m "提交信息"
git push

以上完成后你的本地 Hexo 项目就成功提交到 GitHub 仓库里了,建议使用 VSCode Git 工具或者 GitHub Desktop 简化流程。

5.3 Cloudflare Pages 配置

在控制台点击侧边栏的 Workers 和 Pages,然后点击页面上的 Pages,最后点击连接到 Git

image-20241221175423340

连接绑定你的 GitHub 账户来获取你的仓库,账号授权后你可以在应用程序集成中设置仓库访问权限。

image-20241221200427582

设置完成后自动跳转回 Cloudflare 控制台部署站点引导的选择存储库步骤,选择你将要部署站点的仓库,确认账户和数据库无误后点击开始设置。

image-20241221200726941

在设置构建和部署步骤中完成相关设置:

  • 项目名称:自定义,将作为域名内容
  • 生产分支:结合实际情况,若完全按照本教程进行就是 main
  • 框架预设:这里没有 Hexo,所以设置为无
  • 构建命令:npm run build
  • 构建输出目录:public

image-20241221201840578

在部署站点步骤中耐心等待一会,出现域名表示部署完成,访问链接能够打开页面表明部署成功,如果页面无法访问请再耐心等待一会,可能是网络问题导致。

image-20241221202624018

操作进行到这里就基本完成了,此后你的 Hexo 项目每次提交至 GitHub 都会自动再次构建部署。

6 部署到 Vercel

Vercel 提供了一个云平台,并且能够识别仓库为 Hexo 项目,简化了操作流程,降低了出错风险。

6.1 注册 Vercel

前往 Vercel 官网注册一个账户,可以直接连接你的 GitHub 账户。

image-20241221205138455

6.2 创建 GitHub 仓库

同本文 5.2 章节。

6.3 导入仓库

首先连接你的 GitHub 账户,你可以在应用程序集成中设置仓库访问权限,在构建引导页面中导入 Git 仓库,首先找到正确的 GitHub 账户和仓库,点击 Import 按钮。

image-20241221210315110

在新建项目中完成相关设置,Project Name 可自定义,Framework Preset 选择 Hexo,其它项保持默认即可,点击 Deploy 按钮部署。

image-20241221211310245

耐心等待一会出现预览页面即完成导入和部署。

image-20241221211859656

6.4 配置域名

部署完成后打开仪表盘,网站自动绑定三条默认域名,但由于在国内域名被污染,所以需要绑定其它域名。

image-20241221212750834

点击右上角 Domains 按钮进入项目域名配置页,添加一个域名,并按照要求在域名提供商处添加 CNAME 记录。

image-20241221213242642

最后通过绑定的自定义域名成功访问到个人博客。

7 部署到 Netlify

Netlify 是一个提供静态网站托管的服务,使用 Hexo+GitHub+Netlify 可以以最快的速度部署一个网站。

7.1 注册 Netlify

Netlify 官网注册一个账号,可以使用你的 GitHub 账户授权注册,然后根据提示进行账户配置。

image-20241221214801510

7.2 创建 GitHub 仓库

同本文 5.2 章节。

7.3 开始部署

在引导中选择 GitHub 来导入你的 GitHub 仓库,你可以在应用程序集成中设置仓库访问权限。

image-20241221215625407

选择正确的 GitHub 账户和仓库开始部署。

image-20241221220034766

然后耐心等待一会,平台会自动识别仓库为 Hexo 项目并按照预设开始部署,部署完成后就可以通过平台分配的默认域名访问网站了。

image-20241221220422886

8 写在最后

通过以上多种部署方法的介绍,我们可以看到利用 Hexo 搭建个人博客方法众多,不仅操作过程十分简单,还基本实现了零成本搭建,降低了技术门槛和资金门槛,选择一个适合自己的部署方式,搭建一个有趣的个人博客吧。

利用 Termux 让安卓手机成为专属家庭服务器

1 前言

电子产品更新速度快,旧手机往往容易被闲置,不想挂闲鱼就只能放在抽屉落灰,与其这样不如资源再利用,将旧手机制作成为家庭服务器,实现文件存储与共享、个人博客、媒体服务等多种功能,对于喜欢折腾技术的用户来说这无疑是一个充满挑战与乐趣的项目。

Termux 是一个适用于 Android 的终端模拟器,其环境类似于 Linux 环境,无需Root或设置即可使用。

注意

本文演示中使用的安卓设备为Redmi K30 8+128 MIUI 13.0.6

2 Termux 准备

通过 GitHub 或者 APKFab 应用商店安装 Termux,下载地址可在官网查看。

image-20241128203928646

为避免后续下载操作网络缓慢,建议切换国内镜像源。

1
termux-change-repo

在唤出的图形化界面中,第一步选择 Mirror group 并点击 OK 确定,第二步选择 Chinese Mainlan 并点击 OK 确定。

image-20241128232348569

更新包管理器索引并将已安装的包升级到最新版本。

1
pkg update && pkg upgrade -y

安装 vim、wget、unzip 等必备工具。

1
pkg install vim wget unzip -y

在 Termux 中使用 ifconfig 命令查看 Termux 主机 IP 地址,这里可以看到当前为 192.168.0.21,记录备用。

image-20241130140031969

3 环境准备

本节涉及的环境准备仅为本文有所需要的,但也不需要全部进行安装,而是根据实际情况有所选择的安装。

3.1 MySQL

MariaDB 是 MySQL 的一个分支,是一个开源的关系型数据库管理系统。

3.1.1 安装

在 Termux 中使用一条命令就可以快速安装 MariaDB。

1
pkg install mariadb -y

查看版本信息,若出现版本号即安装完成。

1
mariadb --version

3.1.2 启动服务

不建议直接使用 mysqld 命令启动 MySQL 服务,这样会话将一直存活无法进行其它操作,所以可以使用 nohup 命令来后台启动。

1
nohup mysqld &

然而这个方法当服务意外终止将无法实现自启动,所以可以将 mysqld_safe 脚本与 root 用户一起运行实现自启动防止意外终止,mysqld_safe 脚本是用于监控 MySQL 运行情况并在其终止时重新启动,相当于多了一个守护进程。

1
mysqld_safe -u root &

3.1.3 停止服务

MySQL 没有很好的终止命令,只能强制杀掉进程实现停止服务。

1
kill -9 `pgrep mysql`

3.1.4 设置 root 密码

设置密码前使用 root 用户登录密码为空,回车确认即可直接进入数据库。

1
2
mariadb -u root -p
# Enter password: # 无需输入

然后使用 SQL 语句修改 root 密码,最后刷新权限并退出当前用户。

1
2
3
4
5
use mysql;
set password for 'root'@'localhost' = password('你设置的密码');

flush privileges;
quit;

这时 root 用户就需要使用密码进行登录了,密码为前面设置的密码。

1
2
mariadb -u root -p
# Enter password: # 输入设置的密码

image-20241130223708315

3.2 Nginx

Nginx 是一款轻量级和高性能的 Web 服务器和反向代理服务器,凭借其高效的处理能力和稳定性而闻名,广泛应用于各种 Web 场景中。

3.2.1 安装

在 Termux 中使用一条命令就可以快速安装 Nginx。

1
pkg install nginx -y

查看版本信息,若出现版本号即安装完成。

1
nginx -v

3.2.2 基本命令

测试 Nginx

测试检查 Nginx 配置文件来判断 Nginx 是否正常。

1
nginx -t

image-20241129211803355

启动 Nginx

1
nginx

Nginx 的默认运行端口为 8080,启动完成后在浏览器访问 127.0.0.1:8080 进入 Nginx 欢迎页。

image-20241129212356591

重启 Nginx

当修改 Nginx 配置文件时需要重启 Nginx 生效。

1
nginx -s reload

停止 Nginx

Nginx 内置了两种停止命令。

1
2
nginx -s quit# 在退出前完成已经接受的连接请求
nginx -s stop# 快速关闭,不管有没有正在处理的请求

3.2.3 解析 PHP

3.2.3.1 安装 php-fpm

1
pkg install php-fpm -y

3.2.3.2 配置 php-fpm

编辑 php-fpm 配置文件 www.conf

1
vim $PREFIX/etc/php-fpm.d/www.conf

搜索 listen = 找到:

1
listen = /data/data/com.termux/files/usr/var/run/php-fpm.sock`

修改为:

1
listen = 127.0.0.1:9000

3.2.3.3 配置 Nginx

编辑 Nginx 的配置文件 nginx.conf

1
vim $PREFIX/etc/nginx/nginx.conf

对该文件作出以下修改:

  1. 添加 index.php 到默认首页的规则
  2. 取消 location ~ \.php$ 注释,修改 fastcgi_param 内容

image-20241129221030613

3.2.3.4 测试 PHP 解析

新建有内容的 info.php 文件

1
echo '<?php phpinfo(); ?>' > $PREFIX/share/nginx/html/info.php

重启 Nginx 服务使配置生效

1
nginx -s reload

启动 php-fpm 服务

1
php-fpm

若解析成功,浏览器访问 127.0.0.1:8080/info.php 出现 PHP 信息页。

image-20241129222153438

3.3 Nodejs

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让 JavaScript 能够在服务器端运行,而不仅仅局限于浏览器环境。

3.3.1 安装

在 Termux 中使用一条命令就可以快速安装 Nodejs。

1
pkg install nodejs -y

查看版本信息,若出现两个版本号即安装完成。

1
node -V && npm -V

3.3.2 测试使用

使用 Node.js 运行 js 脚本输出 Hello World,首先使用 vim hello.js 命令新建文件并添加脚本内容。

1
console.log('Hello World');

使用 node 命令尝试运行,正确输出 Hello World 即为成功。

1
node hello.js

3.3.3 静态 HTTP 服务器

http-server 是一个简单、零配置的命令行静态 HTTP 服务器。使用 npm 命令可以快速安装 http-server。

1
npm install -g http-server

等待安装完成后,运行 http-server 可查看访问地址,在浏览器中访问可查看根目录下全部文件。

image-20241201181642979

4 使用 KodBox 搭建云盘

Kodbox 是一款功能强大的私有云存储与协同办公平台。

安装前需准备 Nginx 环境,并确保已经可以解析 PHP,可查看本文 3.2 内容。

4.1 下载安装

前往官网下载页面查看最新版本,复制下载链接后使用 wget 直接下载。

1
wget https://static.kodcloud.com/update/download/kodbox.1.54.zip

解压包至 Nginx 的 kod 目录下。

1
unzip kodbox.1.54.zip -d $PREFIX/share/nginx/html/kod

4.2 登录配置

手机访问 127.0.0.1:8080/kod 即可进入系统安装页面,依次进行环境检测、数据库配置和账号设置。

  • 环境检测:部分非必要开启项失败可忽略,也可查看帮助解决。
  • 数据库配置:建议使用 SQLite + 文件缓存,有条件或有需求可以选择 MySQL
  • 账号设置:设置账号和密码用于系统管理员登录。

image-20241130131432401

至此安装完成,系统自动跳转到登录页面,使用设置的账号密码进入云盘首页。

image-20241130134254668

4.3 局域网连接

在同局域网下的任意设备通过浏览器访问 Termux主机IP:8080/kod 进行登录操作,Termux主机IP 通过 ifconfig 命令查看。

image-20241130140039572

在同局域网下的任意设备通过客户端连接站点进行登录操作,站点同浏览器访问地址。

image-20241130142006276

4.4 访问手机内部存储

在 Termux 中获取手机存储访问权限。

1
termux-setup-storage

使用 ln -s <本机目录> <termux内部目录> 命令挂载手机存储目录,比如将手机的 Download 目录映射到 Termux 的 home 目录下。

1
ln -s /sdcard/Download /data/data/com.termux/files/home

然后在云盘系统中新增挂载,依次点击系统设置>存储管理>新增。

image-20241130144431724

image-20241130145250127

保存后刷新页面,就可以在文件管理中的网络挂载中查看到了。

image-20241130145507490

5 使用 WordPress 搭建博客

WordPress 是一款非常流行的开源内容管理系统,可以用于创建和管理网站。

安装前需准备 Nginx 环境和 MySQL 数据库,可查看本文 3.1 和 3.2 内容。

5.1 新建数据库

网站需要使用数据库,在正式安装前先新建一个数据库备用。

1
2
mariadb -uroot -p123456 -e"create database wordpress;show databases;"
# root为用户名,123456为密码,wordpress为名称

执行操作命令成功后输出数据库列表,列表中包含新建的 wordpress

image-20241130224249788

5.2 下载安装

前往官网下载页面复制最新版本下载链接后使用 wegt 直接下载。

1
2
3
wget https://cn.wordpress.org/latest-zh_CN.zip
# 或者选择指定版本下载:
wget https://cn.wordpress.org/wordpress-6.7.1-zh_CN.zip

解压包至 Nginx 的网站根目录下。

1
unzip wordpress-6.7.1-zh_CN.zip -d $PREFIX/share/nginx/html

5.3 登录配置

完成下载安装后在本机浏览器访问 127.0.0.1:8080/wordpress 或者在同局域网下的其它设备访问 Termux主机IP:8080/wordpress

image-20241130230250194

填写数据库连接信息,使用前面新建的数据库设置。如果数据库主机使用 localhost 无法连接可使用 Termux主机IP,依旧无法连接可以尝试创建一个新用户。

1
2
# 创建一个用户名为wordpress,密码为123456的新用户
mariadb -uroot -p123456 -e"GRANT ALL PRIVILEGES ON *.* TO 'wordpress'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;"

image-20241130234627033

接下来的步骤根据文字指引进行配置,最后根据设置的账号密码登录站点成功进入后台。

image-20241130235044001

6 使用 You-Get 下载媒体

You-Get 是一个命令行程序,提供便利的方式来下载网络上的媒体信息。

6.1 安装依赖

进行程序安装前首先获取所需依赖:Python3、FFmpeg。

1
pkg install python3 ffmpeg -y

6.2 安装 you-get

安装依赖完成后直接使用 pip 来安装。

1
pip3 install you-get

6.3 下载媒体

支持下载的全部媒体平台可前往官方说明中查看,这里仅以 Bilibili 视频展示演示。

1
you-get https://www.bilibili.com/video/BV132421A7VN/

image-20241201220530901

7 安装 Ubuntu 学习 Linux

7.1 安装依赖

系统的安装将使用国光大佬制作的一键脚本,由于脚本存放于 GitHub 并且使用 Python 环境,所以使用需要安装 git 和 python,另外还需要 proot 才可以运行 Linux。

1
pkg install proot git python -y

7.2 下载安装

首先克隆这个一键安装脚本,将它保存到本地。

1
git clone https://github.com/sqlsec/termux-install-linux

然后运行这个安装脚本,出现安装指引,这里输入 1 来进行 Ubuntu 系统的安装。这里一定要先切换目录再运行脚本,不然会出现路径问题。

1
2
cd termux-install-linux
python termux-linux-install.py

image-20241202200435389

耐心等待安装完成。

image-20241202201232702

7.3 Ubuntu 启动

使用一行命令运行脚本就可以顺利启动 Ubuntu 系统。

1
~/Termux-Linux/Ubuntu/start-ubuntu.sh

image-20241202204347014

7.4 特别注意

这里所安装的系统是轻量级的,所以很多 Ubuntu 命令及功能无法使用,另外经过尝试,宝塔面板、Docker等均无法正常安装。

8 写在最后

本文介绍了利用 Termux 将安卓手机制作成家庭服务器的方法,包括 Termux 安装与设置、MySQL、Nginx、Node.js 等环境准备,以及使用 KodBox 搭建云盘、WordPress 搭建博客、You-Get 下载媒体、安装 Ubuntu 学习 Linux 等应用搭建与使用的步骤,涵盖了从基础环境搭建到多种功能实现的全过程,可将闲置安卓手机资源再利用,满足文件存储与共享、个人博客、媒体服务等多种需求。

全面详细的常用Linux命令汇总(2)

无论是Linux的新手还是老手,掌握一些常用命令都是必不可少的,熟练使用它们可以大大提高工作效率,成为工作中的得力助手。本文是常用Linux命令汇总系列文章的第二篇,全面详细的展示了10个与文档编辑相关的命令。

一览表

序号命令简述分类
1cat连接与查看文件内容文档编辑
2more分页显示大文件文档编辑
3less功能强大的文本查看器文档编辑
4head查看文件开头部分文档编辑
5tail查看文件结尾部分文档编辑
6vim强大的文本编辑器文档编辑
7sed批量编辑文本文件文档编辑
8awk对文本和数据进行处理的编程语言文档编辑
9grep强大的文本搜索工具文档编辑
10diff比较文件内容差异文档编辑

1. cat 命令

cat 命令主要用于查看文件内容,也可将多个文件合并输出,还能创建新文件。它会一次性将文件的全部内容输出到标准输出设备(通常是屏幕)。

语法格式

1
cat [参数] 文件

常用参数

1
2
3
4
5
6
-n    显示行号,会在输出的每一行前加上行号
-b 显示行号,但只对非空行进行编号
-s 压缩连续的空行,只显示一个空行
-E 在每一行的末尾显示 $ 符号
-T 将 Tab 字符显示为 ^I
-v 显示一些非打印字符

实例

(1)显示指定文件内容并显示非空行的行号

1
cat -b file1

image-20241114164504779

(2)把文件A的非空白行内容加上行号,之后将其附加到文件B中

1
cat -b file2 >> file3

image-20240320165734429

注意

  • cat命令默认会一次显示整个文件,如果文件过大可能会导致终端卡顿
  • cat命令可以用来创建新的空文件,但不能编辑文件

2. more 命令

more 命令用于分页显示文件内容,每次显示一屏。当文件内容较多时,使用 more 可以逐屏查看,避免内容过多在屏幕上滚动过快而难以阅读。

语法格式

1
more [参数] 文件

常用参数

1
2
3
4
5
6
7
8
+n    从笫n行开始显示
-n 定义屏幕大小为n行
+/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示
-c 从顶部清屏,然后显示
-d 提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能
-l 忽略Ctrl+l(换页)字符
-s 把连续的多个空行显示为一行
-u 把文件内容中的下画线去掉

操作命令

1
2
3
4
5
<回车键>    向下n行,需要定义。默认为1行
<空格键> 向下滚动一屏
<Ctrl> + B 返回上一屏
= 输出当前行的行号
q 退出more

实例

(1)显示指定文件内容并从第 5 行开始显示

1
more +5 file1

image-20241114171900559

(2)从文件中查找第一个出现 34 字符串的行,并从该处前两行开始显示输出

1
more +/34 file1

image-20241114172040667

(3)设定每屏显示行数为 5

1
more -5 file1

image-20241114172319103

3. less 命令

less 功能更强大,支持向前和向后翻页,在文件中进行搜索,并且可以在查看文件时不加载整个文件到内存,对于非常大的文件更加高效。

语法格式

1
less [参数] 文件

常用参数

1
2
3
4
5
6
7
8
9
10
11
12
-b <缓冲区大小>    设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时将超出部分舍弃
-x <数字> 将"tab"键显示为规定的数字空格

操作命令

1
2
3
4
5
6
7
8
9
10
/字符串    向下搜索"字符串"的功能
?字符串 向上搜索"字符串"的功能
b 向上滚动一页
u 向上滚动半页
y 向上滚动一行
<空格键> 向下滚动一页
d 向下滚动半页
<回车键> 向下滚动一行
h 显示帮助界面
q 退出less

实例

(1)ps 查看进程信息并通过 less 分页显示

1
ps -ef |less

image-20241114173653083

(2)浏览多个文件

1
less file1 file2

提示:输入 :n 切换到下一个文件,输入 :p 切换上一个文件

image-20241114174041626

4. head 命令

head 命令用于显示文件的开头部分内容。默认情况下会显示文件的前 10 行内容。

语法格式

1
head [参数] 文件

常用参数

1
2
3
4
-q    隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数
-n<行数> 显示的行数

实例

(1)显示指定文件的前 13 行

1
head -n 13 file1

image-20241114174815384

(2)显示指定文件除最后 39 行外的全部内容

1
head -n -39 file1

image-20241114175131721

(3)显示指定文件的前 100 个字节

1
head -c 100 file1

image-20241114175344903

5. tail 命令

tail 命令用于显示文件的结尾部分内容。默认情况下会显示文件的最后 10 行内容。

语法格式

1
tail [参数] 文件

常用参数

1
2
3
4
5
6
7
8
-f    循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示的行数
--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

实例

显示指定文件的后 13 行

1
tail -n 13 file1

image-20241114175550073

6. vim 命令

vim 是强大的文本编辑器,支持多种操作模式,包括命令模式、输入模式和命令行模式。

语法格式

1
vim 文件

操作模式

  • 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等
  • 输入模式:正常的文本输入
  • 命令行模式:保存或退出文档,以及设置编辑环境

image-20241119201558539

1. 命令模式

用户启动 vim 便进入了命令模式,此状态下敲击键盘动作会被 vim 识别为命令,而非输入字符,比如按下 iao 就进入了输入模式,而按下 : 就进入了命令行模式。

1
2
3
4
5
6
7
8
9
10
11
i    切换到输入模式,在光标当前位置开始输入文本
a 切换到输入模式,在光标下一个位置开始输入文本
o(小写) 在当前行的下方插入一个新行,并进入输入模式
O(大写) 在当前行的上方插入一个新行,并进入输入模式
dd 剪切当前行
yy 复制当前行
p(小写) 粘贴剪贴板内容到光标下方
P(大写) 粘贴剪贴板内容到光标上方
u 撤销上一次操作
<Ctrl> + r 重做上一次撤销的操作
: 切换到命令行模式,以在最底一行输入命令

2. 输入模式

在输入模式中用户可以随意修改文本内容,当编写完成后可以使用 <ESC> 返回命令模式,进行其它操作。

1
2
3
4
5
6
<ENTER>    回车键,换行
<BACK SPACE> 退格键,删除光标前一个字符
<DELETE> 删除键,删除光标后一个字符
<HOME>/<END> 移动光标到行首/行尾
<Page Up>/<Page Down> 上/下翻页
<ESC> 退出输入模式,切换到命令模式

3. 命令行模式

在命令模式下按下 : 就进入了命令行模式,在命令行模式通过输入单个或多个字符的命令来实现丰富与连贯的操作。

1
2
3
4
5
6
:w    保存文件
:q 退出 Vim 编辑器
:wq 保存文件并退出 Vim 编辑器
:q! 强制退出 Vim 编辑器,不保存修改
:set nu (变量变更)显示行号
:set nonu (变量变更)取消行号

实例

使用 vim 打开指定文件

1
vim file1

image-20241114203405731

7. sed 命令

sed 是一种流编辑器,用于对文本进行非交互式的编辑操作,可以进行文本的替换、删除、插入等操作。

语法格式

1
sed [参数] [事件] 文件

常用参数

1
2
-e    以选项中指定的事件处理输入的文本文件
-n 仅显示事件处理后的结果

事件动作

1
2
3
4
5
6
a    新增,a的后面接字串,字串在下一行出现
c 取代,c的后面接字串,字串替换n1,n2之间的行
d 删除,删除行,d的后面通常不接字串
i 插入,i的后面接字串,字串在上一行出现
p 打印,将某个选择的数据输出,通常与参数 -n 一起运行
s 取代,通常搭配正则表达式

实例

(1)在指定文件第 6 行后添加一行,并将结果输出到标准输出设备

1
sed -e 6a跟在第6行后的一行 file1

image-20241114232322949

(2)在指定文件中搜索包含 13 的行并输出

1
sed -n 13p file1

image-20241114235444697

(3)替换指定文件中的内容更改为新内容

1
sed -e s/13/130/ file1

image-20241115000631362

8. awk 命令

awk 是一种用于处理文本文件的语言,它以行为单位处理文件内容,可以进行复杂的数据提取和分析。

语法格式

1
awk [参数] [处理规则] 文件

常用参数

1
2
3
-F <分隔符>    指定输入字段的分隔符,默认是空格
-v <变量名>=<值> 设置内部变量值。可以使用该选项将外部值传递给 awk 脚本中的变量
-f <脚本文件> 指定一个包含 awk 脚本的文件。这样可以在文件中编写较大的 awk 脚本,然后通过 -f 选项将其加载

内置变量

1
2
3
4
5
$0    保存当前行的内容
NR 记录号(行号),每处理完一条记录,NR值加1
NF 保存记录的字段数(总共保存的列数),$1,$2...$100
FS 输入字段分隔符,默认空格
OFS 输出字段分隔符

处理规则

1
2
3
4
BEGIN{}    BEGIN是在awk处理文本之前运行
// 使用的匹配规则
{} 循环(每次只处理一行数据)
END{} 当所有的处理全部执行完毕之后,执行END中的相关操作

实例

(1)打印指定文件内容的第一列

1
awk '{print $1}' file3

image-20241119115814152

(2)打印指定文件内容的第一列,并用分隔符指定列

1
awk -F':' '{print $1}' file3

image-20241119115951010

(3)打印指定文件内容的行数

1
awk 'END{print NR}' file3

image-20241119120225590

9. grep 命令

grep 命令用于在文件中搜索指定的模式。它可以搜索单个文件或多个文件,并输出包含匹配模式的行。

语法格式

1
grep [参数] 模式 文件

常用参数

1
2
3
4
5
6
-i    忽略大小写进行匹配
-v 反向查找,只打印不匹配的行
-n 显示匹配行的行号
-r 递归查找子目录中的文件
-l 只打印匹配的文件名
-c 只打印匹配的行数

实例

(1)在指定文件中搜索包含特定字符串的行

1
grep "/bin" file3

image-20241119121130878

(2)使用递归查找指定目录下所有文件包含指定字符串的行

1
grep -r "12" /linux

image-20241119121641346

10. diff 命令

diff 用于比较两个文件的差异。它会显示两个文件中不同的行,并可以以不同的格式输出差异信息。

语法格式

1
diff [参数] 文件1 文件2

常用参数

1
2
3
4
5
6
7
-u    显示完整的差异内容
-w 忽略空格和空行的差异
-r 递归比较目录下的所有文件和子目录
-q 仅判断两个文件是否不同,而不显示文件内容的差异
-c 显示上下文差异
-i 忽略大小写的差异
-y 以并列的方式显示差异内容

实例

(1)比较两个文件的差异

1
diff file1 file4

image-20241119125830112

(2)比较两个文件的差异,并以并列的方式展示差异

1
diff -y file1 file4

image-20241119130202656

Follow:信息浏览聚合,万物皆可订阅

简介

Follow 是一款被标榜为“下一代信息浏览器”的软件,近期在信息聚合领域引起了广泛关注。它不仅仅是一个 RSS 阅读器,更是一个全方位的信息管理助手。这一创新的工具由资深互联网创业者 DIYgod 创立,他也是 RSSHub、xLog、DPlayer 等知名产品的创始人。Follow 的诞生,不仅延续了 RSSHub 的“万物皆可 RSS”的理念,更进一步扩展了信息订阅的边界,为用户提供了前所未有的信息整合体验。

Follow 通过结合 RSSHub 与 RSS3 的生态软件,极大地扩展了其订阅源的范围,使得用户可以订阅包括文章、社交媒体、图片、视频、音频以及通知等多种类型的内容。这种多元化的订阅模式,打破了传统 RSS 阅读器仅限于文本信息的局限,为用户带来了更加丰富和直观的信息消费方式。

什么是 RSS?

RSS 是一种基于 XML 的数据格式,用于描述网站上的文章、新闻等内容。通过 RSS,网站可以将最新的内容推送给订阅者,而不需要订阅者手动访问每个网站。这种方式大大提高了信息获取的效率,让用户能够专注于感兴趣的内容。

软件特色

Follow 作为一款新一代的信息聚合平台,其核心功能和特色主要体现在以下几个方面:

(一)多样化的订阅能力

Follow 的订阅能力堪称强大。除了支持常规的 RSS/Atom feeds,它还能订阅任何网页内容(即使该网页原本没有 RSS 订阅功能)以及各种社交媒体内容。用户可以轻松订阅 X 时间线、YouTube 频道、Bilibili 用户动态、邮件通讯等,真正实现了“万物皆可订阅”。

(二)智能过滤和推荐系统

面对信息爆炸的时代,Follow 采用先进的 AI 算法,为用户提供了智能过滤和推荐服务。它能够自动过滤重复内容,智能推荐用户感兴趣的文章,并根据用户的阅读习惯调整内容展示顺序,确保用户不会错过任何重要信息。

(三)多平台同步与个性化阅读体验

Follow 支持网页版、桌面客户端(Windows、macOS、Linux)多平台使用,确保用户在不同设备间的阅读进度能够完美同步。同时,它还提供了丰富的个性化设置选项,如支持明暗双主题切换、自定义字体大小和样式、文章布局调整等,让用户能够根据自己的喜好打造舒适的阅读环境。

(四)强大的搜索和过滤功能

Follow 提供了全文搜索、高级过滤以及标签管理等功能,帮助用户快速找到所需内容。用户可以设置关键词进行精准筛选,还可以对订阅源进行分类管理,让信息管理变得更加轻松高效。

(五)进阶使用技巧与API集成

Follow 还提供了多种进阶使用技巧和功能,如导入导出功能(支持 OPML 格式)、自定义订阅规则(使用 XPath 或 CSS 选择器)、API 集成以及插件系统等。这些功能为用户提供了更多自由定制和扩展的可能性,满足了用户在不同场景下的需求。

软件截图

image-20241029141522519

image-20241029142717872

image-20241029143059112

image-20241029143114319

安装教程

目前,Follow 可以在 Windows、MacOS、Linux 的桌面上使用客户端软件,也可以直接在浏览器中使用 web 网页版,据说 Android 和 iOS 的移动应用程序也即将推出。

下载安装程序

打开浏览器,访问 Follow 的官方网站地址。

image-20241029130549312

在官方网站上找到下载按钮,根据自己的操作系统选择相应的安装程序进行下载。

image-20241029130714676

安装 Follow

下载完成后,运行安装程序,等待安装完成后自动运行程序。

image-20241029131517923

注册账号

打开 Follow 后,根据提示注册一个账号,目前仅支持 GitHub 和 Google 第三方登录。

使用教程

添加订阅源

目前支持搜索关键词、RSS 链接、用户分享和导入等多种添加方式。

image-20241029134441943

以下是推荐的一些文章订阅源:

  • 分享创造日报:https://app.follow.is/share/feeds/59241875117740032
  • 少数派 - 派早报:https://app.follow.is/share/feeds/73553160421921792
  • 小众软件:https://app.follow.is/share/feeds/41719081557593134
  • 爱吃猫的鱼BLOG:https://app.follow.is/share/feeds/73649746103933952

内容视图

针对不同类型的内容可以选择不同的呈现视图。

image-20241029135600209

  • 文章:适合博客、新闻等长篇内容网站
  • 社交:适合订阅微博、X等社交媒体,关注某个人或某个关键词的时间线
  • 图片:适合订阅 Instagram、Pixiv 等图片网站
  • 视频:适合哔哩哔哩、YouTube 等视频网站
  • 播客:订阅某一档播客之后,可以直接在 Follow 中收听
  • 通知:适合订阅某个软件、服务的更新通知,简短快捷

自动化功能

可以通过设置中的自动化配置来获取特殊功能,如 AI 总结、翻译、Wehooks等。

image-20241029134907126

发现新内容

当阅读一篇文章时,可以在顶部查看其他阅读用户的关注列表,更高效的获取自己感兴趣的内容。

image-20241029140439685

认证订阅源

将自己的订阅源进行认证后就可以接收打赏,认证方式非常简单,只需发布一段内容到订阅源即可。

image-20241029141136223

下载地址

官网下载:https://follow.is/download


认证订阅源
This message is used to verify that this feed (feedId:73649746103933952) belongs to me (userId:73648539778066432). Join me in enjoying the next generation information browser https://follow.is.

QRcodeGen项目介绍,基于Python打造二维码生成新利器

项目介绍

QRcodeGen(二维码生成器)是一个使用 Python 的 Tkinter 库开发的二维码生成器应用程序。它允许用户输入文本或链接,然后生成相应的二维码。

功能

  • 生成二维码:用户输入文本或链接后,点击“生成”按钮,程序会生成一个二维码,并在预览区域显示。
  • 保存二维码:生成二维码后,用户可以点击“保存”按钮将二维码保存为 PNG 图像文件。
  • 颜色选择:用户可以通过“设置”按钮打开设置窗口,在设置窗口中选择二维码的颜色和背景颜色。
  • 设置保存路径:在设置窗口中,用户可以设置二维码的默认保存路径。

技术实现

  1. 使用qrcode库生成二维码。
  2. 使用Tkinter库创建图形用户界面,包括输入框、按钮、标签和预览区域等。
  3. 使用colorchooser模块实现颜色选择功能。
  4. 使用os模块检查和创建保存二维码的文件夹。
  5. 使用requestsPIL库获取和处理程序图标。

截图展示

2024/10/13 版本

image-20241023213928754

image-20241023213957544

开源仓库

欢迎对该项目贡献代码,提交 Pull Requests 或报告问题。

GitHub:https://github.com/talen8/QRcodeGen

Gitee:https://gitee.com/talen2004/QRcodeGen

更新日志

2024/10/13

经过数日开发及测试,项目正式上线,参考项目文档教程即可上手体验使用。

Nginx 可视化编辑工具 Nginx UI 安装和使用

1 前言

Nginx 是一款高性能的 HTTP 和反向代理服务器,已在众多企业和开发者中得到广泛应用。其强大的性能、灵活的配置以及出色的稳定性,使得 Nginx 成为了处理高并发网络请求的首选方案。然而,Nginx 的配置文件通常较为复杂,涉及大量的指令和参数设置,这给不少初学者和管理员带来了不小的挑战。

在这样的背景下,可视化编辑工具应运而生,它们旨在简化 Nginx 的配置过程,提高管理效率。其中,Nginx UI 作为一款革命性的可视化编辑工具,凭借其直观的操作界面和强大的功能,正逐渐改变着人们对 Nginx 管理的认知。它的出现不仅降低了 Nginx 配置的门槛,使得更多非专业人员能够轻松上手,还大大提高了配置的准确性和效率。通过直观的图形化界面,用户可以清晰地看到各项配置的效果,减少了因误操作导致的问题。同时,Nginx UI 还提供了丰富的管理功能,如服务器状态监控、SSL证书管理等,进一步提升了 Nginx 的管理体验。

2 安装

Nginx UI 拥有多种安装方式,官方推荐使用适用于 Linux 系统下的 shell 安装脚本,除此之外,还可以使用 Docker 安装或者更为便捷的 1Panel 面板一键安装。本文将使用安装脚本的方式进行演示,需要注意的是,使用 Docker 安装将难以管理主机上的 Nginx。

使用官方提供的 shell 脚本命令进行快速下载及安装。

1
bash <(curl -L -s https://mirror.ghproxy.com/https://raw.githubusercontent.com/0xJacky/nginx-ui/master/install.sh) install -r https://mirror.ghproxy.com/

使用一键安装脚本默认设置的监听端口为 9000,HTTP Challenge 端口默认为 9180。如果有端口冲突,需要手动修改 /usr/local/etc/nginx-ui/app.ini文件, 并使用 systemctl restart nginx-ui 重启 Nginx UI 服务。

使用 systemctl status nginx-ui 命令检查启动状态,出现 Active: active (running) 即为成功。

image-20241010120617401

在浏览器访问 IP:9000 进入 Nginx UI 安装页,可简单配置管理员邮箱、用户名、密码等。

image-20241010121804502

配置完成后使用设置好的用户名及密码进行登录,登录成功后进入到 Nginx UI 首页。

image-20241010125003102

Systemd 管理

  • 启动: systemctl start nginx-ui
  • 停止: systemctl stop nginx-ui
  • 重启: systemctl restart nginx-ui

3 使用

  • 多种语言支持及日夜主题切换

image-20241010130124602

  • 服务器仪表盘。支持查看内存与存储、CPU 状态、网络等基本信息。

image-20241010130240954

  • 管理站点、添加站点。使用简明的可视化页面和配置页面轻松管理和添加站点。

image-20241010130520848

  • 配置管理。将复杂的配置文件目录以清晰的结构展现,方便快速进行对 Nginx 配置文件的设置修改。

image-20241010130548175

  • 管理证书。通过配置 DNS 凭证可以快速申请及续签站点证书,降低了运维时间及成本。

image-20241010130755284

  • 管理多台服务器。在环境设置中,通过添加环境实现对多台服务器 Nginx 的配置。

image-20241010131042288

  • 多用户管理。可以添加用户来实现多人共同管理,提高了团队协作效率。

image-20241010131052624

4 写在最后

Nginx UI 作为一款强大的 Nginx 管理工具,在 Nginx 的运维领域已经取得了显著的成就,未来有望继续发展壮大,成为 Nginx 管理的标杆工具。无论是新手还是资深用户,都可以享受到 Nginx UI 在实践中为我们带来的惊喜和便利。

Python unittest 框架,强大的测试利器

1 前言

单元测试是软件开发中的重要环节,它是对软件中最小可测试单元进行检查和验证的过程。对于单元测试中单元的含义,一般要根据实际情况判定,如在 C 语言中单元指一个函数,在 Java 里单元指一个类,在图形化软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。

unittest 框架作为 Python 强大的单元测试工具,在软件测试中发挥着重要作用。其核心优势主要体现在以下几个方面:

  • 内置于 Python 标准库:作为 Python 标准库的一部分,unittest 框架无需额外安装即可使用,降低了项目的依赖成本。
  • 丰富的功能特性:框架提供了丰富的断言方法、测试用例组织方式、测试运行器等功能特性,满足了开发者多样化的测试需求。
  • 良好的兼容性与扩展性:unittest 框架与其他 Python 测试工具和库兼容良好,同时也支持开发者根据需要进行定制和扩展。

2 核心概念

  • Test Case(测试用例)

一个 TestCase 的实例就是一个测试用例,它是 unittest 框架中的基本单元。测试用例的方法必须以 test 开头,这样 unittest 框架才能识别并执行这些方法。

测试用例的执行顺序是按照方法名的 ASCII 值进行排序的,而不是按照书写的顺序。这意味着如果想要控制测试用例的执行顺序,不能仅仅依靠书写的先后顺序,需要通过合理命名方法名来实现。

在测试用例中,断言方法是判断被测对象行为是否符合预期的关键。例如,可以使用assertEqual()断言两个值是否相等,assertTrue()断言一个表达式是否为真,assertFalse()断言一个表达式是否为假等。如果断言失败,测试框架会抛出一个异常,表明测试用例未通过。

  • Test Suite(测试套件)

测试套件是将多个测试用例集合在一起执行的工具。它可以将不同的测试用例组织起来,形成一个更大的测试集合,方便进行批量测试。

可以通过多种方式构建测试套件。例如,可以使用unittest.TestSuite()实例化一个测试套件对象,然后通过addTest()方法逐个添加测试用例。也可以使用unittest.makeSuite()方法,根据一个测试类批量创建测试用例并添加到测试套件中。

测试套件还可以嵌套,即一个测试套件可以包含其他测试套件,这样可以更加灵活地组织测试用例。

  • Test Runner(测试运行器)

测试运行器是用来执行测试用例并返回执行结果的工具。它可以配合测试套件一起使用,执行测试套件中的所有测试用例,并将测试结果保存到TextTestResult实例中。

unittest.TextTestRunner()是一个常用的测试运行器,它提供了多种运行测试用例的方法。可以设置不同的参数来控制测试结果的显示详细程度,例如verbosity参数可以设置为 0、1 或 2,分别对应静默模式、默认模式和详细模式。

在详细模式下,测试运行器会显示每个测试用例的所有相关信息,包括测试用例的名称、执行结果、错误信息等,这对于调试和分析测试结果非常有帮助。

  • Test Fixture(测试夹具)

测试夹具在单元测试中起着至关重要的作用。它主要负责为测试用例提供一个稳定、一致的测试环境,包括环境搭建(setUp)和销毁(tearDown)。

setUptearDown方法可以在不同的级别生效。比如,在方法级别,setUp(self)会在每个测试方法执行前自动执行,用于准备测试数据和环境;tearDown(self)则在每个测试方法执行后自动执行,用于清理测试数据和环境。例如在测试数据库操作时,setUp可以建立数据库连接,准备测试数据,而tearDown可以关闭数据库连接,清理测试过程中产生的数据。在类级别,@classmethod装饰的setUpClass(cls)在每个测试类里,执行一次,在所有用例运行前执行;tearDownClass(cls)同样在每个测试类里,执行一次,在所有用例运行后执行。这对于一些需要在类级别进行初始化和清理的操作非常有用,比如创建和销毁一个复杂的对象实例。在模块级别,setUpModule()在每个模块里,执行一次,在所有用例运行前执行;tearDownModule()在每个模块里,执行一次,在所有用例运行后执行。可以用于一些全局的初始化和清理操作,比如初始化日志系统等。

通过这些不同级别的测试夹具,可以为每个测试用例、测试类或测试模块提供干净的测试环境,确保测试结果的准确性和可靠性。

3 用例编写与执行

3.1 编写测试用例

编写测试用例是使用 unittest 框架进行单元测试的关键步骤。以下是编写测试用例的一般步骤:

1. 导入模块

首先,需要导入 unittest 模块以及要测试的模块。例如,如果要测试一个名为my_module的模块,可以使用以下代码导入:

1
2
import unittest
from my_module import *

2. 创建测试类

创建一个测试类,该类继承自unittest.TestCase。测试类的名称应该能够清晰地表明它所测试的模块或功能。例如:

1
2
class MyTest(unittest.TestCase):
...

3. 定义测试方法

在测试类中,定义测试方法。测试方法的名称必须以test_开头,这样 unittest 框架才能识别它们为测试方法。例如:

1
2
3
def test_functionality(self):
result = add(2, 3)
self.assertEqual(result, 5)

def test_functionality(self):定义了一个测试方法。在这个方法中,可以编写具体的测试逻辑,包括调用被测试的函数或方法,使用断言方法验证结果是否符合预期。例如被测试的函数是 add,可以使用result = add(2, 3)测试方法,然后使用断言方法self.assertEqual(result, 5)来验证结果是否为 5。

4. 调用 main 方法运行测试用例

在测试模块的底部,可以使用unittest.main()方法来运行所有的测试用例,这个方法会自动发现并执行所有以test_开头的测试方法。例如:

1
2
if __name__ == '__main__':
unittest.main()

3.2 用例执行方式

1. 自动发现和执行测试用例

unittest 提供了一种自动发现测试用例的机制。默认情况下,它会在当前目录下查找以test开头的 Python 文件,并将其中以test_开头的方法识别为测试用例。

可以通过命令行参数来指定特定的目录进行测试用例的自动发现。例如,使用python -m unittest discover -s /path/to/directory命令可以在指定目录下查找测试用例并执行。

2. 执行指定用例

指定测试模块:可以通过命令行参数指定要执行的测试模块。例如,运行python -m unittest test_module命令,将会执行名为test_module的模块中的所有测试用例。

指定测试类:可以进一步指定要执行的测试类。例如,运行python -m unittest test_module.TestClass命令,将会执行test_module模块中的TestClass类中的所有测试用例。

指定测试方法:还可以指定要执行的具体测试方法。例如,运行python -m unittest test_module.TestClass.test_method命令,将会执行test_module模块中的TestClass类中的test_method方法。

指定文件路径:除了使用模块和类名,也可以直接指定测试文件的路径来执行其中的测试用例。例如,运行python -m unittest /path/to/test_file.py命令,将会执行指定文件中的所有测试用例。

4 实例展示

4.1 用于测试的类

以下是一个用于测试的简单类示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Calculator:
def add(self, a, b):
return a + b

def subtract(self, a, b):
return a - b

def multiply(self, a, b):
return a * b

def divide(self, a, b):
if b == 0:
raise ValueError("除数不能为零")
return a / b

这个类Calculator包含了四个基本的数学运算方法:加法、减法、乘法和除法。

4.2 测试用例

以下是使用 unittest 框架对Calculator类进行测试的测试用例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import unittest
from calculator import Calculator

class TestCalculator(unittest.TestCase):
def setUp(self):
self.calculator = Calculator()

def test_add(self):
result = self.calculator.add(5, 3)
self.assertEqual(result, 8)

def test_subtract(self):
result = self.calculator.subtract(8, 3)
self.assertEqual(result, 5)

def test_multiply(self):
result = self.calculator.multiply(4, 3)
self.assertEqual(result, 12)

def test_divide(self):
result = self.calculator.divide(10, 2)
self.assertEqual(result, 5)

with self.assertRaises(ValueError):
self.calculator.divide(10, 0)

if __name__ == '__main__':
unittest.main()

在这个测试用例中,首先创建了一个TestCalculator类,它继承自unittest.TestCase。在setUp方法中,创建了一个Calculator的实例,以便在每个测试方法中使用。

test_add方法测试了加法运算,调用Calculator类的add方法并使用断言self.assertEqual来验证结果是否为预期值;test_subtract方法测试减法运算,同理使用断言验证结果;test_multiply方法测试乘法运算;test_divide方法测试除法运算,分为两种情况:正常情况下验证结果是否正确;当除数为零时,使用self.assertRaises来验证是否抛出了 ValueError 异常。

4.3 详细解释

1. 测试用例结构

每个测试方法都以test_开头,这是 unittest 框架的要求,以便框架能够自动识别并执行这些方法。

在每个测试方法中,首先调用被测试的方法,然后使用断言来验证结果是否符合预期。

2. 断言的使用

self.assertEqual用于验证两个值是否相等。在加法、减法、乘法和除法的正常测试中,使用这个断言来验证计算结果是否正确。

self.assertRaises用于验证是否抛出了特定的异常。在除法测试中,当除数为零时,应该抛出ValueError异常,使用这个断言来验证这一行为。

3. setUp方法的作用

setUp方法在每个测试方法执行之前都会被调用,用于设置测试环境。在这个例子中,创建了一个Calculator的实例,以便在每个测试方法中都可以使用这个实例进行测试。

4.4 特别注意

1. 测试方法的独立性

每个测试方法应该是独立的,不应该依赖于其他测试方法的执行顺序或结果。这可以确保即使某个测试方法失败,其他测试方法仍然可以正常执行,并且便于定位问题。

2. 异常处理的测试

对于可能抛出异常的代码,应该进行异常处理的测试。在这个例子中,对除法运算中除数为零的情况进行了异常测试,确保代码在出现异常情况时能够正确处理。

3. 测试用例的全面性

测试用例应该尽可能覆盖各种可能的情况,包括正常情况和边界情况。例如,对于加法运算,可以测试正数、负数、零等不同的输入情况;对于除法运算,可以测试除数为正数、负数、零等情况。

4. 测试用例的可读性

测试用例的代码应该具有良好的可读性,以便其他开发人员能够理解测试的目的和方法。可以使用有意义的测试方法名称和注释来提高测试用例的可读性。

5 写在最后

unittest 框架在 Python 项目中具有至关重要的地位。它在提高代码质量方面表现出色,通过提供丰富的断言方法和严格的测试流程,能够及时发现代码中的潜在问题,确保代码的正确性和稳定性。在测试管理方面,unittest 框架提供了多种方式来组织和执行测试用例。测试套件可以将多个测试用例或测试类集中起来执行,方便管理大量的测试用例。同时,测试运行器可以生成详细的测试报告,帮助开发者快速了解测试结果,定位问题。此外,框架中的测试固件功能,如setUptearDown方法,使得测试环境的搭建和销毁更加方便,提高了测试的可重复性和可维护性。unittest 框架作为 Python 内置的单元测试框架,具有广泛的应用前景。在持续集成和持续部署(CI/CD)流程中,unittest 框架可以与其他工具结合使用,实现自动化测试,确保每次代码提交后都能进行全面的测试,及时发现问题并进行修复。在大型项目中,unittest 框架可以帮助开发者更好地管理和维护测试用例,提高开发效率和代码质量。此外,unittest 框架还具有良好的可扩展性。开发者可以根据项目的需求,自定义测试用例和测试套件,实现更加复杂的测试场景。同时,框架也可以与其他测试工具和框架结合使用,发挥各自的优势,共同提高软件测试的效率和质量。

总之,unittest 框架在 Python 项目中具有重要的优势和广阔的应用前景,是提高代码质量、保证软件稳定性的重要工具。

深入探究电子邮件三大协议

1 前言

电子邮件系统中,SMTP、POP 和 IMAP 这三种协议起着至关重要的作用。SMTP 负责邮件的发送,将邮件从发件人传输到邮件服务器,并在服务器之间转发。POP 负责邮件的接收,允许用户从邮件服务器下载邮件到本地设备进行离线阅读,下载后通常会从服务器删除此邮件。IMAP 也负责邮件的接收,它提供了更灵活的邮件管理功能,用户可以在多个设备上同步邮件状态,并且邮件始终保存在服务器上,方便随时访问和管理。这三大协议相互配合,共同构建了一个高效、稳定的电子邮件系统。

image-20240204233153143

2 SMTP 协议

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,主要负责将邮件从发件人的邮件客户端传送到收件人的邮件服务器。它使用 TCP/IP 协议簇,建立在 FTP 文件传输服务之上,通过 “推送” 的方式传递信息,确保邮件能够可靠且有效地在不同系统之间传输。例如,当我们使用邮件客户端发送邮件时,SMTP 客户端会请求与 SMTP 服务器建立一个 TCP 连接,然后将邮件发送给服务器,服务器再将邮件传递给接收方邮件服务器。

image-20240908101409969

2.1 发展历史

SMTP 协议的发展可以追溯到 20 世纪 70 年代,当时 ARPANET 需要一种用于发送和接收电子邮件的协议。1980 年,网络中心发布了第一个 SMTP 协议标准 RFC 821,定义了发送邮件的格式,以及向服务器发送和接收电子邮件的功能,还包括服务器与客户端的命令等。1986 年 RFC 822 发布,为电子邮件提供了一个标准格式。随后又发布了一系列新的 SMTP 协议标准,如 RFC 974(传输管理)、RFC 1651(SMTP 的拓展)、RFC 1869(SMTP 服务器拓展)等。随着互联网的快速发展和电子邮件的广泛应用,SMTP 协议不断进行更新和改进,以适应日益增长的邮件传输需求和不断变化的网络环境,为电子邮件的可靠传输提供了重要的支持。

2.2 工作流程

  1. 建立连接

    • 客户端请求连接:SMTP 客户端尝试与 SMTP 服务器建立 TCP 连接,默认使用 25 端口,若加密连接则可能使用 465 端口。
    • 握手与域名确认:一旦连接建立,客户端向服务器发送 EHLO 命令,以表明客户端支持的扩展命令和 SMTP 版本等信息。服务器收到 EHLO 命令后,会返回一个 220 响应代码,表示服务器准备好接收命令。
  2. 邮件传输

    • 身份验证(如有需要):客户端发送 AUTH 命令,并按照服务器返回的支持方法将所需内容编码后发送回服务器。服务器对客户端提供的凭据进行验证,根据验证是否通过来判断是否允许继续发送邮件。
    • 指定发件人:客户端使用 MAIL FROM 命令指定邮件发送者的地址。服务器接收到该命令后,会检查发件人地址的合法性,成功则返回响应代码 250。
    • 指定收件人:客户端使用 RCPT TO 命令指定一个或多个邮件接收者的地址。服务器接收到该命令后,会检查每个收件人地址是否有效,是否愿意为该收件人接收邮件等,成功则返回响应代码 250。
    • 发送邮件内容:客户端使用 DATA 命令发送邮件正文和附件等内容,内容需按照相关的邮件格式规范编写。客户端在输入完邮件内容后,以一个单独的行,只包含一个英文句号 . 作为邮件内容的结束标识。
  3. 连接释放

    客户端使用 QUIT 命令向服务器发送结束通知,表示本次邮件发送会话结束。服务器接收到命令后,会返回一个响应代码,如 221 表示服务关闭传输通道。

2.3 通信举例

在 163.COM 服务器上的 Robert 发送邮件到 OUTLOOK.COM 服务器上的 John、Chris 和 Mary,这里假设 outlook 上没有 Chris 用户。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// T表示客户端,S表示服务器

S: 220 OUTLOOK.COM Simple Mail Transfer Service Ready // 服务器已准备好接收客户端的连接请求

T: EHLO 163.COM // 客户端向服务器表明身份
S: 250 OUTLOOK.COM // 服务器响应并告知客户端名称

T: MAIL FROM:<Robert@163.com> // 客户端指定邮件发件人地址
S: 250 OK // 服务器返回成功响应

T: RCPT TO:<John@outlook.com> // 客户端指定邮件第一个收件人地址
S: 250 OK // 服务器返回成功响应

T: RCPT TO:<Chris@outlook.com> // 客户端指定邮件第二个收件人地址
S: 550 No such user here // 服务器返回失败响应,失败原因为没有此用户

T: RCPT TO:<Mary@outlook.com> // 客户端指定邮件第三个收件人地址
S: 250 OK // 服务器返回成功响应

T: DATA // 客户端表示准备发送邮件内容
S: 354 Start mail input; end with <CRLF>.<CRLF> // 服务器提示客户端开始输入邮件内容

T: Beginning of content... // 客户端发送邮件的具体内容
T: ...End of content. // 客户端发送邮件的具体内容
T: . // 邮件内容结束
S: 250 OK // 服务器回应邮件接收成功

T: QUIT // 客户端请求结束会话
S: 221 OUTLOOK.COM Service closing transmission channel // 服务器回应关闭传输通道,本次交互结束

2.4 优势特点

  1. 应用广泛,几乎所有电子邮件系统都支持该协议,使得不同邮件服务器之间能够顺利传递邮件。
  2. 协议设计简单高效,一系列明确的命令和响应机制,使得邮件发送过程清晰明了。
  3. 可靠的传输机制,采用存储转发的方式传输邮件,即使传输过程出现问题,邮件也会被暂存在服务器。

3 POP 协议详解

POP(Post Office Protocol)即邮局协议,主要用于接收邮件。常用的是 POP3 版本,它使用 TCP 的 110 端口。POP3 采用 C/S 工作模式,默认使用 TCP/IP 协议进行传输,属于应用层协议。用户可以通过电子邮件客户端设置 POP3 服务器的地址等参数,连接服务器后下载邮件。但在客户端的操作(如删除邮件等)通常不会反馈到服务器上,且下载后服务器上的邮件可能会被删除。

image-20240908112059666

3.1 发展历史

在 1984 年之前,电子邮件的使用还处于探索阶段,用户需要直接登录到邮件服务器才能读取邮件,1984 年,早期版本 POP1 和 POP2 被制定出来,奠定了发展基础,但功能有所不足。直到 1998 年,POP3 成为互联网标准,广泛应用于电子邮件系统中,规定了如何将个人计算机连接到互联网的邮件服务器并下载电子邮件。随着互联网的发展,其它优秀的电子邮件接收协议如 IMAP 开始出现,POP3 面临竞争却仍在电子邮件领域占据重要地位。

3.2 工作流程

  1. 建立连接

    • 客户端请求连接:POP 客户端尝试与 POP 服务器建立 TCP 连接,默认使用 110 端口。
    • 身份验证:客户端向服务器发送 APOP 命令,提供用户名及响应 MD5 哈希值,服务器正确接收则返回 +OK 响应码,等待下一步操作。
  2. 邮件获取

    • 获取邮件列表:客户端发送 LIST 命令,请求获取邮箱中的邮件列表,服务器返回每封邮件的编号和大小等信息。
    • 获取特定邮件:客户端使用 RETR 命令加上邮件编号,请求获取特定的邮件内容,服务器将指定邮件的内容发送给客户端。
    • 删除邮件(可选):客户端使用 DELE 命令加上邮件编号,服务器会标记该邮件为待删除状态,但不会立即删除。
  3. 连接释放

    客户端使用 QUIT 命令向服务器发送结束通知,表示本次邮件发送会话结束。服务器接收到命令后,会返回一个响应代码,如 +OK,表示成功关闭连接,此时真正删除标记为待删除的邮件。

3.3 通信举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// M表示客户端,S表示服务器

S: +OK POP3 server ready <Mary@outlook.com> // 服务器响应

M: APOP mary 5bfef7618cbf9ab828aedc9b3d0d58d4 // 客户端向服务器验证身份
S: +OK mary's maildrop has 2 messages (320 octets) // 身份验证成功并报告邮件数量

M: STAT // 客户端请求邮件状态
S: +OK 2 320 // 服务器响应邮件状态,数量为2,总大小为320字节

M: LIST // 客户端请求邮件列表
S: +OK 2 messages (320 octets) // 服务器响应邮件列表
S: 1 120 // 服务器列出所有邮件及其大小
S: 2 200 // 服务器列出所有邮件及其大小
S: . // 服务器结束响应

M: RETR 1 // 客户端请求获取第一封邮件
S: +OK 120 octets // 服务器成功响应
S: The entirety of the content. // 服务器发送邮件内容
S: . // 服务器结束响应

M: DELE 1 // 客户端请求删除第一封邮件
S: +OK message 1 deleted // 服务器成功响应

M: RETR 2 // 客户端请求获取第二封邮件
S: +OK 200 octets // 服务器成功响应
S: The entirety of the content. // 服务器发送邮件内容
S: . // 服务器结束响应

M: DELE 2 // 客户端请求删除第二封邮件
S: +OK message 2 deleted // 服务器成功响应

M: QUIT // 客户端请求结束会话
S: +OK dewey POP3 server signing off (maildrop empty) // 服务器成功响应

3.4 优势特点

  1. 支持离线访问,邮件已下载到本地设备,在无网环境下仍可查看邮件。
  2. 广泛支持,几乎所有的主流邮件客户端和邮件服务器都支持该协议。

4 IMAP 协议详解

IMAP(Internet Message Access Protocol)即互联网消息访问协议,同样用于接收和管理邮件。它可以在多台设备上同步和管理电子邮件,支持在线和离线两种访问模式。在服务端保留邮件的原始副本,用户可以在客户端直接对服务器上的邮件进行操作,如在线浏览、标记邮件等,且多个用户可同时访问并能感知其他用户的操作。

image-20240908112124476

4.1 工作流程

  1. 建立连接
    • 客户端请求连接:IMAP 客户端尝试与 IMAP 服务器建立 TCP 连接,默认使用 143 端口,若加密连接则可能使用 993 端口。
    • 身份验证:客户端使用 login 命令向服务器发送认证信息,通常是用户名和密码等,服务器返回 OK 响应码即为完成验证。
  2. 邮件操作
    • 选择邮箱:客户端使用 SELECT 命令选择要操作的邮箱,服务器返回关于该邮箱的信息,如邮件数量、未读邮件数量等。
    • 获取邮件内容:客户端使用 FETCH <编号> full 命令获取指定邮件的详细内容,如邮件的主题、发件人、日期、正文、附件等。
    • 获取头部信息:客户端使用 FETCH <编号> body[header] 命令获取指定邮件的头部信息。
    • 标记状态:客户端使用 FLAGS 命令标记邮件为已读、未读、重要等状态,服务器根据命令实时更新邮件的状态标志。
  3. 断开连接
    • 客户端使用 LOGOUT 命令选择断开与服务器的连接,服务器确认后,关闭连接通道。

4.2 通信举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// C表示客户端,S表示服务器

S: * OK IMAP4rev1 Service Ready // 服务器响应

C: a001 login mary password // 登录用户名与密码
S: a001 OK LOGIN completed // 服务器登录成功响应

C: a002 select inbox // 选择操作的邮箱
S: * 18 EXISTS // 收件箱中有18封邮件
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) // 收件箱支持的邮件标志
S: * 2 RECENT // 最近有2封新邮件
S: * OK [UNSEEN 17] Message 17 is the first unseen message // 第17封邮件是第一封未读邮件
S: * OK [UIDVALIDITY 3857529045] UIDs valid // 邮件ID有效
S: a002 OK [READ-WRITE] SELECT completed // 操作完成且有读写权限

C: a003 fetch 12 full // 获取编号为12的邮件的详细内容
S: * 12 FETCH (FLAGS (\Seen) INTERNALDATE "17-Jul-1996 02:44:25 -0700" // ↓邮箱的详细内容↓
RFC822.SIZE 4286 ENVELOPE ("Wed, 6 Sep 2024 02:23:25 +0800 (CST)"
...
BODY ("TEXT" "PLAIN" ("CHARSET" "US-ASCII") NIL NIL "7BIT" 302892))
S: a003 OK FETCH completed // 服务器返回成功响应

C: a004 fetch 12 body[header] // 获取编号为12的邮件的头部信息
S: * 12 FETCH (BODY[HEADER] {342} // 头部信息的长度为342字节
S: Date: Wed, 6 Sep 2024 02:23:25 +0800 (CST) // 邮件的发送日期和时间
S: From: Robert <Robert@163.com> // 邮件的发件人
S: Subject: Three major email protocols // 邮件的主题
S: To: Mary@outlook.com // 邮件的收件人
S: Message-Id: <xxxxxxxxxxxxxxxxxx> // 邮件的唯一标识符
S: MIME-Version: 1.0 // 邮件的MIME版本
S: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII // 邮件的内容类型和字符集
S: )
S: a004 OK FETCH completed // 服务器返回成功响应

C: a005 store 12 +flags \deleted // 修改编号为12的邮件的标志为“已删除”
S: * 12 FETCH (FLAGS (\Seen \Deleted)) // 编号为12的邮件的标志被成功修改
S: a005 OK +FLAGS completed // 服务器返回成功响应

C: a006 logout // 结束与服务器的连接
S: * BYE IMAP4rev1 server terminating connection // 服务器正在终止连接
S: a006 OK LOGOUT completed // 成功终止连接

4.3 优势特点

  1. 多设备同步,对邮件的操作均可实时同步到其他设备,避免了混乱和重复操作。
  2. 邮件检索高效,即使面对大量邮件,也能够迅速定位到目标邮件。
  3. 服务器端管理出色,邮件存于服务器,节省设备空间,还可灵活管理文件夹,便捷高效。

5 协议对比与选择

5.1 协议比对

5.1.1 SMTP 与 POP/IMAP 的区别

SMTP 主要负责将邮件从发件人的邮件客户端传送到收件人的邮件服务器,它侧重于邮件的发送和中继,是一种“推送”的协议,即主动将邮件从发件人一方推送给收件人一方的服务器,但不能“拉取”消息。而 POP 和 IMAP 则主要用于接收邮件,它们可以接收来自 SMTP 发出的邮件。例如,当用户使用邮件客户端撰写一封邮件并点击发送时,邮件会通过 SMTP 协议被推送到发件人的邮件服务器,然后再由发件人的邮件服务器根据收件人的地址将邮件转发给收件人的邮件服务器。而当收件人想要查看自己的邮件时,就可以通过 POP 或 IMAP 协议从自己的邮件服务器上拉取邮件到本地客户端进行查看。

5.1.2 POP 与 IMAP 的区别

POP 协议在客户端操作邮件时,如移动邮件或标记已读,这些更改不会同步到服务器。因此,当用户在其他设备上通过 POP 协议重新连接服务器时,邮件状态保持不变,如未读状态和原始位置。相比之下,IMAP 协议实现了客户端与服务器之间的双向通信,确保客户端的任何操作都会实时反映到服务器上,如标记邮件为已读或移动到特定文件夹。

image-20240907191310308

5.2 选择场景

**日常办公:**对于经常需要在不同设备上查看邮件的人来说,IMAP 协议是更好的选择。它可以确保在公司电脑、家庭电脑和手机等多个设备上的邮件状态同步,方便随时处理邮件,避免遗漏重要信息。例如,在电脑查看了一封邮件并标记为已读,在手机上也会同步显示为已读状态,避免在重复内容上浪费时间,提高工作效率。

**移动办公:**在移动办公或出差时,POP 协议的离线访问功能具有一定优势。用户可以在有网络的时候将邮件下载到本地设备,在没有网络的情况下仍然可以查看邮件,不影响工作进度。例如,在乘坐飞机或前往网络信号不好的地区时,预先下载的邮件可以随时查阅。

**大规模邮件收发:**对于企业或组织需要大规模发送邮件的情况,SMTP 协议的稳定性和广泛适用性至关重要。它能够确保邮件准确无误地传输到收件人的邮件服务器,即使在高并发的情况下也能保持良好的性能。例如,企业进行营销活动或发送通知邮件时,SMTP 协议可以保证邮件的快速发送和传递。同时,对于接收大量邮件的用户来说,IMAP 协议的服务器端管理功能可以更好地应对。它可以将邮件分类整理在服务器上,用户可以通过不同的设备随时访问和管理邮件,而不会因为邮件数量过多而导致本地设备存储压力过大。

6 写在最后

电子邮件成功发展至今,离不开 SMTP、POP 和 IMAP 三大协议的共同支撑。SMTP 负责邮件的发送,POP/IMAP 负责邮件的下载,相互协作,不断优化升级,满足在各种通信场景下的不同需要。

部分资料参考于 RFC 文档

使用Ventoy集成多PE打造强大U盘

1 前言

PE 环境是一款轻量级且便携的 Windows 操作系统,广泛应用于系统维护与数据恢复等任务之中。在众多 PE 工具中,微PEUSMFirPE 等均为耳熟能详的佼佼者,它们各自以独特的优势赢得了用户的青睐。然而,面对一个U盘只能承载一款PE工具的局限,选择难题便悄然浮现,而我们要追求的是更为全面与高效的解决方案,正如那句“小孩子才做选择”,于是 Ventoy 这款神器便应运而生,它打破了传统限制,让我们能够轻松实现一个 U 盘多个 PE 的方案,无需再为选择哪一款PE工具而犹豫不决,Ventoy为我们提供了完美的解决方案,让我们在系统维护的征途上更加游刃有余。

2 Ventoy 简介

Ventoy 是一个用于制作可启动 U 盘的开源工具。它的独特之处在于允许用户将ISO、WIM、IMG、VHD(x)、EFI等多种类型的系统镜像文件直接拷贝到 U 盘中直接使用,而无需进行额外的格式化或分区操作。用户可以一次性拷贝多个不同类型的镜像文件到同一个启动盘中,Ventoy 会在启动时提供一个菜单供用户选择。

image-20240827221529506

特点

一、高度的兼容性

操作系统广泛兼容:Ventoy 能够启动众多不同类型的操作系统,无论是常见的 Windows 各版本,还是各类 Linux 发行版,甚至一些小众操作系统都能轻松应对。

文件格式丰富支持:Ventoy 支持 ISO、WIM、IMG、VHD(x)、EFI 等多种文件格式,让用户无需担心文件格式不匹配的问题。

二、便捷的使用体验

制作过程简单快速:下载 Ventoy 软件,插入 USB 设备,运行安装程序即可,几分钟就能完成启动盘制作。

无需反复格式化:直接将不同操作系统安装文件复制到 U 盘,无需为更换系统反复格式化。

自动识别与启动:插入 Ventoy 启动盘后,自动识别可启动操作系统选项,用户选择即可启动。

三、灵活的可扩展性

支持插件扩展:Ventoy 支持插件安装,可根据需求增强启动盘功能,满足不同的个性化需求。

自定义主题:用户可以自定义 Ventoy 启动界面主题,选择不同颜色、图标和布局,彰显个性。

四、安全可靠

开源免费:Ventoy 作为开源软件,代码公开透明,接受全球开发者审查和改进,保证了安全性和可靠性。

无广告和恶意软件:Ventoy 不包含任何广告和恶意软件,让用户使用过程中无需担心安全问题,安心使用。

4 安装 Ventoy

4.1 准备工作

由于要集成多个 PE 系统以及可能存储一些系统镜像文件和工具软件,所以 U 盘需要有足够的容量,建议选择至少 16GB 以上的 U 盘,32GB 或 64GB 的最为合适。需要注意的是,安装过程中会格式化 U 盘,请确保准备的 U 盘内没有重要数据,以免数据丢失。

image-20240828125447916

4.2 下载程序

访问 Ventoy 官方网站,下载最新版本的 Ventoy。

image-20240826234106411

4.3 安装过程

将下载好的 Ventoy 压缩包文件解压到本地后运行目录中的Ventoy2Disk.exe程序。

image-20240826235200203

在设备中选择已准备好的 U 盘,点击安装耐心等待一会,当进度条完成并且设备内部 Ventoy 版本中出现版本号即为安装成功。

image-20240826235833985

5 集成多 PE

集成多 PE 非常简单,只要将 PE 环境制作成 ISO 镜像文件并放在 Ventoy 盘的根目录即可。

5.1 Edgeless

简介

产品定位不是维护系统,因此兼容性较差,但强大、便捷、易用的自定义功能显得极为突出,完整的开发者文档、强大的插件包、优雅的主题包等。支持 Legacy+UEFI 双引导,支持识别主流 NVME 协议 SSD,还提供有线和无线网络连接能力及较完整的库文件支持。

image-20240828113012208

制作过程

前往 Edgeless 官网下载最新版本 Edgeless Hub 工具,解压压缩包后运行edgeless-hub.exe程序。

image-20240827002347011

成功打开软件后在制作>写入中点击开始,耐心等待下载完成后,根据提示完成后续步骤,回到首页出现版本号即为成功。

image-20240828115013008

5.2 微 PE

简介

简洁纯净,无广告和强制性商业软件链接,无病毒木马。集成的维护工具精良,每一款都经过作者精简和压缩适配。体积小巧,功能齐全,能满足日常系统维护和安装需求。

image-20240828094149954

制作过程

前往微 PE 官网下载最新版本 WePE 工具,下载完成后运行程序。

image-20240827161912115

打开应用后,在其它安装方式中找到“生成可启动ISO选项”,简单设置后点击“立即生成ISO”,建议将输出位置设置在 U 盘避免二次移动。

image-20240827162503495

5.3 杏雨梨云启动维护系统

简介

知名老牌的 U 盘启动系统制作工具。提供了个人开发的“IQI X Windows一键安装”及“OBR 一键备份&一键还原”等人性化功能。拥有多种引导模式,兼容各类电脑,内置实用工具可解决多种电脑问题,减轻重装系统负担。

image-20240828094540413

制作过程

前往杏雨梨云启动维护系统官方博客找到并下载最新版本工具。

image-20240827165312721

下载完成后解压压缩包并运行杏雨梨云启动维护系统.exe程序,在安装方式中找到“生成ISO镜像”,简单设置后点击开始执行并选择存放位置,存放位置可设置为 U 盘。

image-20240827173929208

5.4 FirPE

简介

系统预安装环境,简约易操作,人性化设计。采用优化的 U 盘三分区方案,支持 BIOS 与 UEFI 两种启动模式,“双 PE 分治”理念可兼顾新老硬件。整合各种装机必备工具,能有效提高系统安装效率,且可兼容 Edgeless 插件。

image-20240828100918296

制作过程

前往 FirPE 官网下载最新版本 FirPE 工具,下载完成后运行程序。

image-20240827171401691

打开应用后,点击“生成ISO”并选择存放位置,存放位置可设置为 U 盘。

image-20240827175316826

5.5 HotPE

简介

使用简单、纯净、强大、兼容性高,安装便捷,采用 Windows11 内核,内置主流网卡、声卡等驱动,内置装机维护软件,可通过插件下载器安装额外软件。

image-20240828125747711

制作过程

前往 HotPE 官网下载最新版本 HotPE 工具。

image-20240828120817750

下载完成后解压压缩包并运行HotPE Client.exe程序,在安装方式中找到“生成ISO镜像”,点击“开始生成”并选择存放位置,存放位置可设置为 U 盘。

image-20240828121627350

6 测试效果

Ventoy 盘制作完成后,若不想使用物理机进行测试,可以使用 VMware 虚拟机。

image-20240828122751653

任意新建一台虚拟机,打开虚拟机设置,添加一个硬盘设备。

image-20240828123153560

虚拟磁盘类型选择 NVMe,磁盘选择使用物理磁盘。

image-20240828123326435

点击Windows+R键,在输入框中键入diskmgmt.msc并“确定”,设备中选择与 U 盘所在磁盘号对应的选项。

image-20240828124148010

点击完成后启动虚拟机,出现 Ventoy 启动页即成功。

image-20240828124700811

7 写在最后

本文全面介绍了利用 Ventoy 制作多 PE 环境的方法。Ventoy 作为开源工具,具有高度兼容性、便捷使用体验、可扩展性及安全可靠等优点。通过准备合适容量的 U 盘,下载并安装 Ventoy,用户可打破传统局限,实现一个 U 盘多个 PE。对于多 PE 本文以 Edgeless、微 PE、杏雨梨云启动维护系统、FirPE 和 HotPE 为例演示制作过程,究其本质就是将镜像文件放入 U 盘即可实现多 PE 的集成。

PE 带来便利,但使用时一定多加小心,稍有不慎就可能导致数据丢失,甚至损坏硬件等。涉及到的下载内容尽量从官网获取最新版,避免恶意软件或病毒对设备造成威胁。

Xterminal:颜值高、功能强,追求卓越体验的SSH工具

特别感谢:本文软件由旺东推荐

简介

Xterminal 是一款集成了多种功能的SSH客户端工具,它不仅支持安全、快速的SSH连接,还提供了本地控制台、命令管理、实时监控、多标签页管理、自定义主题与布局等功能,它的设计注重用户体验,支持图表化实时监控,清晰掌握系统状态,并提供了智能化的命令行提示和自动补全功能,这些特性有助于提高开发者和系统管理员的工作效率。

此外,Pro 版本还支持云端仓库功能,可以实现跨设备同步会话和快捷命令,以及通过 AI 技术提供智能命令提示和解答,进一步提升操作便捷性。XTerminal的界面设计现代,支持自定义背景和主题,提供了美观且个性化的操作环境。

软件特色

可定制性强:提供了丰富的界面设置和扩展设置,可以根据自己的需求进行个性化配置

操作简便:具有直观的操作界面和快捷键支持,有助于提升用户的操作流畅度

跨平台支持:可以在Windows、Linux等多种操作系统上运行,提供广泛的兼容性

现代化设计:集成了现代设计元素,如多标签支持、自定义主题、智能搜索和个性化布局,大大提升用户体验

功能增强:除了基本的终端功能外还提供了图表化实时监控、文件上传下载等增强功能

用户友好性:提供简洁明了的指南和拖放文件上传下载等直观操作,降低了学习成本

AI智能:XTerminal是市场上少数引入AI代码赋能的终端之一,提供智能命令提示、解答和补全,进一步提升了工作效率

安全性:提供本地仓库和云端仓库两种数据存储方式,确保用户数据的安全性

软件截图

image-20240731071321350

image-20240731071830346

image-20240731072033389

安装教程

选择最新版本进行下载

image-20240731073150065

运行安装程序,选择安装选项及设置安装路径,最后耐心等待一会即可进入软件

image-20240727214027011

使用教程

首次启动 Xterminal 需要创建一个密码仓库,用于加密存储敏感信息,如服务器密码

image-20240731065836202

然后在左侧列表栏新建服务器并填写相关信息即可正常使用

image-20240731070648470

下载地址

官网下载:https://www.xterminal.cn/

爱吃猫的鱼CLOUD下载:https://cloud.talen.top/s/adFx

高效利用 GitHub 搜索,精准快速获取所需

1 前言

在互联网上寻找某件事情需要有正确的搜索技巧,在 GitHub 也不例外,通过一些搜索的语法和策略,可以帮助更精准、快速地定位到有价值的项目和代码片段。

在使用搜索前需要了解一个存储库大概包含哪些内容,可以在存储库详情页面查看,具体可参考下图。

image-20240702024947554

2 基础搜索语法

2.1 关键词搜索

最直接的方式,只需在搜索框中输入关键词,如:data visualization

image-20240702001751465

2.2 引号精确匹配

如果想要精确搜索某个短语,可以将其用引号括起来,如:"data visualization"

image-20240702002338077

3 高级搜索语法

3.1 按基本信息

语法描述
xxx in:name匹配名称中带有 xxx 的存储库
xxx in:description匹配说明中带有 xxx 的存储库
xxx in:topics匹配标签中带有 xxx 的存储库
xxx in:readme匹配自述文件中带有 xxx 的存储库
  • 示例1:匹配名称中带有 hexo 的存储库
1
hexo in:name

image-20240702025307675

  • 示例2:匹配标签中带有 hexo 的存储库
1
hexo in:topics

image-20240702025551676

3.2 按星数、分支数

语法描述
stars:m…n匹配 m 到 n 个星数的存储库
stars:>n匹配大于 n 个星数的存储库
>为判断,还可替换为>=<<=
forks:m…n匹配 m 到 n 个分支数的存储库
forks:<=n匹配小于等于 n 个分支数的存储库
<=为判断,还可替换为>>=<
  • 示例1:匹配小于等于 656 个星数的存储库(以 hexo 为例)
1
hexo stars:<=656

image-20240702031319498

  • 示例2:匹配大于 3k 分支数的存储库(以 hexo 为例)
1
hexo forks:>3000

image-20240702131951013

3.3 按语言

语法描述
language:LANGUAGE匹配编程语言为 LANGUAGE 的存储库
  • 示例:匹配语言为 TypeScript 的存储库(以 hexo 为例)
1
hexo language:TypeScript

image-20240702132715661

3.4 按创建时间、更新时间

语法描述
created:<YYYY-MM-DD匹配 YYYY 年 MM 月 DD 日之前创建的存储库
pushed:>YYYY-MM-DD匹配 YYYY 年 MM 月 DD 日之后更新的存储库
  • 示例:匹配 2024 年 2 月之后更新的存储库(以 hexo 为例)
1
hexo pushed:>=2024-03-01

image-20240702133521937

3.5 按用户、组织

语法描述
user:USERNAME匹配用户为 USERNAME 的存储库
org:ORGNAME匹配组织为 ORGNAME 的存储库
  • 示例:匹配用户为 hexojs 的存储库(以 hexo 为例)
1
hexo user:hexojs

image-20240702134656735

3.6 按许可证

语法描述
license:LICENSE匹配许可证为 LICENSE 的存储库
常用许可关键词有:MITApache-2.0GPL
  • 示例:匹配许可证为 Apache-2.0 的存储库(以 hexo 为例)
1
hexo license:Apache-2.0

image-20240702140718485

4 组合搜索技巧

结合前面的基础、高级搜索语法,可以实现更复杂、更精确的搜索。

  • 示例1:搜索 2024 年之后更新、星数大于 1k 的 hexo 存储库
1
hexo pushed:>=2024-01-01 stars:>1000

image-20240702141816163

  • 示例2:搜索 MIT 许可证、组织为 GitHub 、语言使用 JavaScript 的所有存储库
1
license:MIT org:github language:JavaScript

image-20240702141755227

5 利用高级搜索界面

GitHub 提供了一个高级搜索界面,通过它可以更直观地设置各种搜索条件,包括高级选项、存储库选项、代码选项、问题选项、用户选项等。

GitHub 高级搜索

6 写在最后

熟练掌握 GitHub 的搜索语法和技巧,能够大大提高在开源世界中的探索效率,更快地找到所需的代码资源,加速开发进程。在 GitHub 中诸如此类的效率方法还有很多,如果感兴趣可以查阅官方文档学习。

IDM:广受欢迎的高速下载管理器

简介

[IDM(Internet Download Manager)](Internet Download Manager is a powerful download accelerator)是一款功能强大的下载管理工具,它通过多线程技术和断点续传功能,有效提高了下载速度和稳定性,深受用户喜爱。IDM支持多种协议,如HTTP、HTTPS、FTP等,并能与主流浏览器无缝集成,简化下载过程。

软件特色

  1. 多线程下载加速

IDM的核心功能之一是通过多线程技术,将大文件分割成多个部分并行下载,显著提高下载速度。

  1. 断点续传

IDM能够在下载中断时保存进度,并在网络恢复后自动继续下载,避免了重新开始的麻烦。

  1. 浏览器集成

IDM可以集成到各种浏览器中,自动捕获下载链接,简化用户操作。

  1. 视频下载

IDM支持从视频网站下载在线视频,如YouTube、优酷等,且支持多种视频格式。

  1. 下载计划

IDM提供了定时下载功能,用户可以设置在特定时间段自动开始或停止下载。

  1. 用户友好的界面

IDM拥有简洁直观的用户界面,易于上手,支持拖放功能,方便用户管理下载任务。

  1. 安全性

IDM在下载完成后会自动进行病毒扫描,确保下载文件的安全性。

软件截图

image-20240614153336344

image-20240614153303124

image-20240614153352860

image-20240614153426043

特别提醒

正版IDM需要购买授权,否则只能试用30天,网络上有很多激活教程,本文也有说明,相关文件取自lstprjct/IDM-Activation-Script

安装教程

在官网下载IDM,若下载较慢推荐在文末查找网盘下载方式

image-20240622021648798

运行安装程序,选择界面语言,随后按照流程逐步操作,最后进行安装

image-20240622011855082

运行激活脚本文件夹下的IAS.cmd文件

image-20240622014040573

键入数字1后等待一会,若已超出试用天数,则先键入数字2,再键入数字1,等待出现成功提示后再打开IDM,可以发现已成功激活

image-20240622020111612

使用教程

浏览器集成

安装完成IDM后首次进入浏览器(如Edge)会提醒安装对应拓展

image-20240622013151461

如果没有提醒,可在浏览器拓展管理页自行安装

image-20240622013345472

批量下载

新建一个格式为txt的文本文档,内容为要下载的链接,一行一个

image-20240622021338129

在IDM导入这个文件就可以了

image-20240622021413717

下载地址

官网下载:https://www.internetdownloadmanager.com/download.html

爱吃猫的鱼CLOUD下载:https://cloud.talen.top/s/Gbf7

让Meting API解锁音乐开发新可能

1 前言

Meting API 是一个多功能的音乐播放服务接口,它能够帮助开发者轻松集成多种音乐平台的播放功能到自己的应用中。

本站音乐欣赏页使用了自建 Meting API 服务,可以前往查看相关数据获取。

引用站外链接
音乐欣赏
使用自建 Meting API 服务

注意

本教程使用的 Meting-API 由 @xizeyoupan 提供,其原作者是 @metowolf

2 安装

通过参阅官方文档及周边教程和我的个人实践,推荐使用 Docker 部署,本文将从命令行、宝塔面板和 1Panel 三处进行分别演示,但他们的本质都是 Docker 部署的方式。关于 Docker、宝塔面板和 1Panel 的安装部署可参考以下文章。

引用站外链接
安装Docker
零基础Docker入门指南
引用站外链接
部署宝塔面板和1Panel
服务器最佳搭档,宝塔和1Panel的部署与选择

2.1 命令行

最简单的一种部署方式,仅需两行命令即可实现,前提确保Docker已被安装。

下载镜像

1
docker pull intemd/meting-api:latest

运行容器

1
docker run -d --name meting -p 3000:3000 intemd/meting-api:latest
  • -name后的meting为容器名称,可自定义。
  • -p后第一个3000为端口映射,可自定义。需要放行对应防火墙。

检查

使用 docker ps 命令检查是否启动成功。

找到 meting-api 自定义容器名称所在的行,看 STATUS 列是否为 running,若是即为安装成功。

2.2 宝塔面板

打开已安装Docker的宝塔面板,点击侧边栏Docker,然后在线上镜像中搜索 intemd/meting-api 并拉取。

image-20240603224940790

最后在容器页创建容器,使用命令创建,输入下方命令并执行。

1
docker run -d --name meting -p 3000:3000 intemd/meting-api:latest
  • -name后的meting为容器名称,可自定义。
  • -p后第一个3000为端口映射,可自定义。需要放行对应防火墙。

image-20240603225224498

检查是否成功只需要查看该容器的状态是否为运行中

2.3 1Panel

由于应用商店中未上架 Meting API,常规的安装方式就是从容器页面拉取镜像并创建容器,这里建议使用第三方应用商店一键部署。

获取第三方应用商店列表

打开计划任务页,点击创建计划任务,任务类型选择 Shell 脚本,脚本内容如下填写,其它必填项自定义。

1
2
3
git clone -b localApps https://ghp.ci/https://github.com/okxlin/appstore /opt/1panel/resource/apps/local/appstore-localApps
cp -rf /opt/1panel/resource/apps/local/appstore-localApps/apps/* /opt/1panel/resource/apps/local/
rm -r /opt/1panel/resource/apps/local/appstore-localApps

image-20240603232212372

然后在操作列点击执行,再前往应用商店点击更新应用列表,随后搜索 Meting-API

image-20240603232512449

最后点击安装,端口设置后需要放行对应防火墙,其它项均可自定义,如果面板开启了防火墙需要勾选端口外部访问。

image-20240603233006190

检查是否成功在已安装中找到该应用看状态是否为已启动

2.4 小结

虽然是三种不同的安装途径,但它们的本质都是 Docker 部署,尤其是宝塔面板与命令行最为相识。

完成安装后可在浏览器访问 IP:端口 验证是否成功。

3 配置HTTPS

如需要相关服务安全通过 https 访问,则需要绑定域名、安装 SSL 证书、设置反向代理(Nginx)。

  • 绑定域名请在域名服务商处将自定义二级域名解析到部署 Meting-API 的服务器上。
  • 申请免费 SSL 证书的方法很多,建议到域名服务商处查看能否申请。

3.1 命令行

将已申请 SSL 证书的证书文件(.pem)和密钥文件(.key)上传到服务器并记录路径。上传推荐使用 FinalShell

确保已安装 Nginx,打开 Nginx 配置文件,默认路径为 /usr/local/nginx/conf 目录下的 nginx.conf

1
vim /usr/local/nginx/conf/nginx.conf

添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
listen 443 ssl;
server_name meting-api;

ssl_certificate ../server.pem; # pem文件的路径
ssl_certificate_key ../server.key; # key文件的路径
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;

location /meting/ {
proxy_pass http://localhost:3000/; # 设置的端口
proxy_set_header X-Forwarded-Host $scheme://$host:$server_port/meting;
}
}
  • 5行、6行:填写前面记录的证书、密钥文件路径。
  • 13行:创建容器时设置的端口映射,修改3000保持一致。

最后退出保存,并重新加载配置文件。

1
nginx -s reload

3.2 宝塔面板

在网站项目页添加站点,域名为前面解析的域名,其它项均自定义。

image-20240604003819847

在站点修改中的 SSL 里复制粘贴证书文件(.pem)和密钥文件(.key),然后在配置文件里与其它 location 项同级添加内容。

1
2
3
4
location /meting/ {
proxy_pass http://localhost:3000/; # 设置的端口
proxy_set_header X-Forwarded-Host $scheme://$host:$server_port/meting;
}
  • 2行:创建容器时设置的端口映射,修改3000保持一致。

image-20240604010050222

3.3 1Panel

在网站页创建网站,选择反向代理,主域名填写前面解析的域名,代理地址添加 127.0.0.1:端口

image-20240604005550737

创建完成后点击配置,在 HTTPS 中启用 HTTPS 并导入证书文件(.pem)和密钥文件(.key),然后在配置文件里与其它 location 项同级添加内容。

1
2
3
4
location /meting/ {
proxy_pass http://localhost:3000/; # 设置的端口
proxy_set_header X-Forwarded-Host $scheme://$host:$server_port/meting;
}
  • 2行:创建容器时设置的端口映射,修改3000保持一致。

image-20240604010237097

3.4 小结

如果出现错误请仔细比对本教程的参考图,反向代理内容很容易添加到错误的地方。

根据官方文档作出的解释,配置反向代理时请务必使用给定文本,并且访问时在域名后添加 /meting/,否则 https 依旧使用 http 连接。

4 成功截图

  • 主页:https://域名/meting/

image-20240604011556536

  • 测试页:https://域名/meting/test/

image-20240604011721278

  • API地址:https://域名/meting/api/

image-20240604011803943

5 使用

该 API 对平台的支持:

图片歌词URL单曲歌单歌手搜索
网易云音乐
QQ音乐××
YouTube Music××
Spotify××

最简单的使用办法就是导入 MetingJS

导入之前先引入 API:

1
2
3
<script>
var meting_api='https://域名/meting/api?server=:server&type=:type&id=:id&auth=:auth&r=:r';
</script>

然后依次导入 APlayer.min.cssAPlayer.min.jsMeting.min.js

1
2
3
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/aplayer/1.10.1/APlayer.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/aplayer/1.10.1/APlayer.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/meting/2.0.1/Meting.min.js"></script>

最后参考示例使用:

1
2
3
4
5
<meting-js
server="netease"
type="playlist"
id="3778678">
</meting-js>
选项描述
servernetease:网易云音乐
tencent:QQ音乐
ytmusic:YouTube Music
spotify:Spotify
音乐平台
typesong:单曲
playlist:歌单
artist:歌手
search:搜索
类型
id3778678歌曲ID、歌单ID、专辑ID

以上为必填项,如需更多项可查阅 APlayer 文档

6 写在最后

Meting-API 部署并不算复杂,有需要的可以自行部署,不想部署的也可以使用一些公益项目,这里提供我部署的,有需要的可以使用。

1
https://meting-api.talen.top/meting/

零基础Docker入门指南

1 前言

Docker 是一个开源的应用容器引擎,它允许开发者将应用程序及其依赖打包到一个轻量级、可移植的容器中。这些容器可以在任何支持 Docker 的 Linux 机器上运行,无需担心环境差异带来的问题。Docker 的设计理念是“一次构建,到处运行”,这意味着一旦应用在 Docker 容器中构建完成,它就可以在任何安装了 Docker 的机器上无缝运行。

特点

  • 轻量级:不需要模拟硬件,它共享宿主机的内核,因此比虚拟机更轻量。
  • 可移植性:可以在不同的环境中运行,无论是本地开发环境、测试环境还是生产环境。
  • 快速部署:可以快速启动和停止,这使得部署和扩展应用变得非常迅速。
  • 安全性:提供了良好的隔离,每个容器都是独立的,不会互相干扰。

2 快速安装

Docker 在不同系统的安装方式略有不同但基本相似,以下就用几个常用系统作为演示。

2.1 Ubuntu

使用 Ubuntu 22.04 LTS,理论上各版本可通用

更新系统软件包索引,如果较慢可以更换镜像源

1
sudo apt update

安装必要的依赖包

1
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

添加阿里云 GPG 密钥

1
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

添加阿里云 APT 软件源,在国内不推荐使用官方源,如需使用官方源请添加官方 GPG 密钥

1
2
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 过程需要使用一次回车键

更新软件包索引并安装 Docker Engine

1
2
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

启动Docker服务

1
sudo systemctl start docker

验证安装是否成功

1
2
3
docker --version
# 出现版本号即为安装成功
# Docker version 26.1.3, build b72abbb

2.2 Debian

使用 Debian 12.5,理论上各版本可通用

更新系统软件包索引,如果较慢可以更换镜像源

1
sudo apt-get update

安装必要的依赖包

1
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common

添加阿里云 GPG 密钥

1
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

添加阿里云 APT 软件源,在国内不推荐使用官方源,如需使用官方源请添加官方 GPG 密钥

1
2
echo "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 过程需要使用一次回车键

更新软件包索引并安装 Docker Engine

1
2
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

启动Docker服务

1
sudo systemctl start docker

验证安装是否成功

1
2
3
docker --version
# 出现版本号即为安装成功
# Docker version 26.1.3, build b72abbb

2.3 CentOS

使用 CentOS Stream 9,理论上 CentOS 7.x 也可以使用

更新系统软件包索引,如果较慢可以更换镜像源

1
sudo yum update -y

安装必要的依赖包

1
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

从国内服务器上下载存储库,在国内不推荐使用官方库

1
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装 Docker Engine

1
sudo yum install -y docker-ce docker-ce-cli containerd.io

启动Docker服务

1
sudo systemctl start docker

验证安装是否成功

1
2
3
docker --version
# 出现版本号即为安装成功
# Docker version 26.1.3, build b72abbb

3 常用命令

镜像管理命令

  • docker pull:从Docker Hub或其他仓库拉取镜像
  • docker images:列出本地所有镜像
  • docker rmi:删除指定的镜像
  • docker build:从 Dockerfile 构建新的镜像
  • docker commit:将容器保存为新的镜像
  • docker tag:给镜像打标签
  • docker push:将镜像推送到仓库
  • docker search:在 Docker Hub 上搜索镜像

容器管理命令

  • docker run:创建并运行一个新的容器
  • docker start:启动一个已停止的容器
  • docker stop:停止一个正在运行的容器
  • docker restart:重启一个容器
  • docker pause:暂停一个或多个容器的所有进程
  • docker unpause:恢复一个或多个容器的所有进程
  • docker kill:强制停止一个或多个容器
  • docker rm:删除一个或多个容器
  • docker ps:列出当前运行的容器
  • docker ps -a:列出所有容器,包括已停止的
  • docker inspect:查看容器的详细信息
  • docker exec:在容器内运行命令
  • docker logs:获取容器的日志
  • docker cp:在容器与宿主机间复制文件

网络管理命令

  • docker network ls:列出所有网络
  • docker network create:创建新网络
  • docker network connect:连接容器到网络
  • docker network disconnect:从网络断开容器
  • docker network rm:删除网络。

卷管理命令

  • docker volume ls:列出所有卷
  • docker volume create:创建新卷
  • docker volume inspect:查看卷的详细信息
  • docker volume rm:删除卷

系统信息命令

  • docker version:显示 Docker 版本信息
  • docker info:显示 Docker 系统信息

4 使用示例

4.1 Nginx

拉取 Nginx 镜像

1
docker pull nginx

运行 Nginx 容器

1
docker run --name nginx-test -p 8080:80 -d nginx
  • --name nginx-test:设置容器名称
  • -p 8080:80: 映射容器服务的 80 端口到宿主机的 8080 端口
  • -d nginx: 设置容器在在后台一直运行

若在浏览器成功访问 IP:8080 即为安装成功,注意需要放行对应端口

image-20240605155040664

3.2 MySQL

拉取 MySQL 镜像

1
docker pull mysql

运行 MySQL 容器

1
docker run -it --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
  • -it:启动一个交互式 shell
  • -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口
  • -e MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码
  • -d mysql: 设置容器在在后台一直运行

使用 Navicat Premium 工具测试是否安装成功,注意需要放行对应端口

image-20240605175605003

5 Docker Compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose 可以使用 YML 文件来配置应用程序需要的所有服务,然后使用一个命令就可以从 YML 文件配置中创建并启动所有服务。

5.1 安装

下载 Docker Compose 二进制文件

1
sudo curl -L "https://githubfast.com/docker/compose/releases/download/v2.27.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

赋予 Docker Compose 执行权限

1
sudo chmod +x /usr/local/bin/docker-compose

验证安装是否成功

1
2
3
docker-compose --version
# 出现版本号即为安装成功
# Docker Compose version v2.27.1

5.2 使用示例

创建并进入一个测试目录

1
mkdir composetest & cd composetest

创建并编辑 docker-compose.yml 文件

1
vim docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# docker-compose.yml
services: # 在这个配置文件中,定义了两个服务 nc(Nextcloud) 和 db(PostgreSQL)
nc: # Nextcloud
image: nextcloud:apache # 指定容器使用的镜像为 nextcloud:apache
environment: # 设置环境变量,包括数据库的连接信息
- POSTGRES_HOST=db # 指定数据库服务的名称
- POSTGRES_PASSWORD=nextcloud # 数据库密码
- POSTGRES_DB=nextcloud # 数据库名
- POSTGRES_USER=nextcloud # 数据库用户名
ports: # 映射容器服务的 80 端口到宿主机的 80 端口
- 80:80
restart: always # 指定容器总是重启
volumes: # 挂载卷 nc_data 到容器内 /var/www/html 目录,用于持久化 Nextcloud 的数据
- nc_data:/var/www/html
db: # PostgreSQL
image: postgres:alpine # 指定容器使用的镜像为 postgres:alpine
environment: # 设置环境变量,包括数据库的配置信息
- POSTGRES_PASSWORD=nextcloud # 数据库密码
- POSTGRES_DB=nextcloud # 数据库名
- POSTGRES_USER=nextcloud # 数据库用户名
restart: always # 指定容器总是重启
volumes: # 挂载卷 db_data 到容器内 /var/lib/postgresql/data 目录,用于持久化数据库的数据
- db_data:/var/lib/postgresql/data
expose: # 暴露容器的5432端口
- 5432
volumes: # 卷
db_data: # 定义了一个名为 db_data 的卷,用于存储数据库的数据
nc_data: # 定义了一个名为 nc_data 的卷,用于存储 Nextcloud 的数据

构建应用并在后台执行该服务

1
docker-compose up -d

等待构建完成后,在浏览器访问 IP:80 成功出现下图即为成功,注意需要放行对应端口

image-20240605182752361

6 写在最后

Docker 是一个强大的工具,它简化了应用的部署和管理过程。无论是开发者还是系统管理员,学习 Docker 都将大大提升工作效率。本文侧重于如何安装 Docker,如需深入学习推荐使用官方文档:https://docs.docker.com/guides/

服务器最佳搭档,宝塔和1Panel的部署与选择

1 前言

宝塔面板和 1Panel 都是优秀的服务器管理工具,称得上服务器必备程序。

宝塔面板

宝塔面板 是一款广受欢迎的Linux服务器管理软件,它提供了一键安装LNMP、LAMP、集群、监控、网站、FTP、数据库、Java等多种服务器管理功能,它直观的用户界面和简化的操作流程使得新手也能快速上手,轻松管理服务器。此外,宝塔面板还支持多种常见的Linux发行版,具有庞大的用户群体和活跃的社区,用户可以在社区中寻求帮助,分享经验,获取最新的使用技巧和教程。

image-20240605224530626

1Panel

1Panel 是一款现代化、开源的Linux服务器运维管理面板,它采用最新的前端技术和容器技术,使得服务器的运维管理更加简单、更安全,通过Web端轻松管理Linux服务器,包括应用管理、主机监控、文件管理、数据库管理、容器管理等。1Panel还提供了快速建站、安全可靠、一键备份等功能,支持一键备份和恢复,备份数据可在云端存储。

image-20240605224605657

2 安装

2.1 宝塔面板

不同系统的安装方式略有不同,针对不同系统官网均提供了相应的安装脚本

Centos / OpenCloud / Alibaba

1
url=https://download.bt.cn/install/install_panel.sh;if [ -f /usr/bin/curl ];then curl -sSO $url;else wget -O install_panel.sh $url;fi;bash install_panel.sh ed8484bec

Ubuntu / Deepin

1
wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh && sudo bash install_panel.sh ed8484bec

Debian

1
wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh && bash install_panel.sh ed8484bec

万能

1
if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec

出现 Congratulations! Installed successfully! 及登录信息等内容即为安装成功

image-20231128131320509

使用 bt 命令,分别使用编号 5、6、8、28 可以修改面板密码、面板用户名、面板端口和面板安全入口

image-20240605214025673

然后在浏览器访问 IP:面板端口/面板安全入口 即可进入宝塔面板,注意对应端口需要放行

2.2 1Panel

不同系统的安装方式略有不同,针对不同系统官网均提供了相应的安装脚本

RedHat / CentOS

1
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sh quick_start.sh

Ubuntu

1
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

Debian

1
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh

openEuler / 其他

1
2
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sh quick_start.sh

安装过程中依次设置安装目录、端口、安全入口、用户名、密码,出现 1Panel 服务启动成功! 及登录信息等内容即为安装成功

image-20240605220835603

然后在浏览器访问 IP:面板端口/面板安全入口 即可进入 1Panel,注意对应端口需要放行

3 界面截图

宝塔面板

image-20240605222704667

image-20240605222929136

image-20240605222948787

image-20240605223035813

1Panel

image-20240605223117543

image-20240605223210313

image-20240605223246380

image-20240605223307191

4 对比

对比维度宝塔面板1Panel
开发语言PythonGo
容器依赖非核心功能核心功能
安装速度较慢较快
系统侵入性较高较低
社区支持庞大且活跃较小但增长迅速
安全性基本安全设置更注重安全性
开源性部分开源完全开源
现代化程度较为传统现代且采用最新技术
功能丰富度丰富正在发展中
易用性
资源占用较高较低
兼容性支持多种Linux发行版支持多种Linux发行版
特色功能网站管理、数据库管理、FTP管理等快速建站、高效管理、安全可靠等
价格免费版和付费版完全免费

综合以上信息,宝塔面板在社区支持和功能丰富度方面表现较好,适合需要广泛支持和丰富功能的用户。而1Panel则在安装速度、系统侵入性和安全性方面有所优势,尤其适合对资源消耗敏感和追求现代化管理的用户。如果是初学者或者对开源项目感兴趣,1Panel可能是一个更好的选择。如果需要更多的功能和更广泛的社区支持,宝塔面板可能更适合。

5 写在最后

用过服务器建站的都知道,一个好的服务器管理工具可以大大提高工作效率,本文介绍的两款工具就是我目前日常使用的(ps:两台服务器各装一款简直太舒服了),无论是宝塔面板还是 1Panel 一定要根据个人切实需求来选择。

FinalShell:功能强大的服务器管理和远程连接工具

简介

FinalShell是一款集成了SSH客户端、服务器管理、远程桌面加速等多功能的网络管理软件。它支持Windows、macOS、Linux等多个操作系统平台,旨在为开发者和运维人员提供一个全面的远程管理解决方案。

软件特色

  • 多平台支持:支持Windows、macOS、Linux等主流操作系统,方便用户跨平台使用。
  • 多标签管理:支持多标签页,允许用户同时管理多个服务器连接。
  • SSH和远程桌面支持:支持SSH连接和Windows远程桌面连接,方便用户进行远程操作。
  • 命令行工具:集成了命令行工具,支持命令自动提示、智能匹配,提高了操作效率。
  • 文件传输:支持SFTP文件传输,可以快速传输文件到远程服务器。
  • 系统监控:提供系统信息显示、运行状态监测、进程管理等功能,帮助用户实时掌握服务器状态。
  • 网络监控:支持网络性能实时监控,无需安装额外的服务器插件。
  • 安全性:支持多种加密协议和身份验证方式,保障数据安全。

软件截图

image-20240602171416452

image-20240602171716150

image-20240602171744138

特别提醒

软件作者提供的最新版本为4.3.10,更新时间为2023年12月31日,截止目前(2024/6/3)已近半年没有更新。

安装教程

下载最新版本安装程序

image-20240602235507371

双击安装程序根据提示内容进行安装

image-20240602235852925

使用教程

SSH连接

在软件主界面,依次点击文件夹>新建连接>SSH连接,在新窗口内按照要求填写相关信息。

image-20240603001327031

修改字体

某些设备某些系统的默认字体可能会出现乱码情况,可以通过在菜单>选项>终端>字体中修改默认字体解决。

image-20240603001824841

下载地址

官网下载:https://www.hostbuf.com/t/988.html

爱吃猫的鱼CLOUD下载:https://cloud.talen.top/s/zDSz

掌握Markdown技巧,轻松应对写作需求

Markdown 是一种轻量级标记语言,它以简洁易读的文本格式来编写文档。

特点

  1. 简单易学:语法简洁明了,容易上手。
  2. 可读性高:纯文本形式,便于阅读和理解。
  3. 跨平台:在各种操作系统和设备上都能使用。
  4. 广泛应用:常用于文档编写、博客文章、技术文档等。

注意:

本文 Markdown 语法使用 VSCode 编辑并使用其插件 Markdown Preview Enhanced 预览。

1 基本语法

最简单的语法,通常在大部分编辑器中都可以使用。

1.1 标题

使用一定数量的#标记标题,#的数量代表标题的级别。

1
2
3
4
5
6
7
8
9
10
11
# 一级标题

## 二级标题

### 三级标题

#### 四级标题

##### 五级标题

###### 六级标题

image-20240520214045132

使用三个以上的=-在后一行可以标记一级标题和二级标题。

1
2
3
4
5
一级标题
===

二级标题
---

image-20240520214208160

1.2 段落

段落无特殊格式,直接编写文字就可以;换行需要在段落后面加一个空行表示重新开始一个新段落。

image-20240520214301969

1.3 强调

使用一定数量的*_标记加粗、倾斜等效果表示强调,它需要在目标文本的前后添加相同相等的符号来标记开始和结束。推荐使用*

1
2
3
4
5
6
7
8
9
10
11
**加粗**

*倾斜*

***加粗倾斜***

__加粗__

_倾斜_

___加粗倾斜___

image-20240520215755614

1.4 分割线

使用三个以上的*-_标记分割线,需要在单独一行使用。推荐使用-

1
2
3
4
5
***

---

___

image-20240520220402859

1.5 引用

使用>标记区块引用,使用两个以上的>标记嵌套的区块引用,其它大部分语法都可以嵌套在引用其中。

1
2
3
> 区块引用
>
>> 嵌套的区块引用

image-20240520221402730

1.6 列表

列表分为无序和有序两种。使用*+-标记无序列表,使用数字.标记有序列表。列表可以嵌套,有序列表可以自定义序号。

1
2
3
4
5
6
7
8
9
* 无序列表

+ 无序列表

- 无序列表
- 嵌套的无序列表

1. 有序列表
5. 打乱的有序列表

image-20240520222930114

1.7 链接

使用[]()标记一个超链接,链接文本放在[]中,链接地址放在()中,还可以使用尖括号<>将URL或Email地址变成可点击链接。

1
2
3
4
5
[爱吃猫的鱼BLOG](https://talen.top)

<https://talen.top>

<talen2004@163.com>

image-20240520231339720

1.8 图片

使用![]()标记一张图片,图片描述放在[]中,图片地址放在()中,本地图片使用相对地址引用,网络图片使用网络链接引用。

1
2
3
![本地图片](/2024-05-19_hd.jpg)

![网络图片](https://bing.mcloc.cn/img/2024/05/19/2024-05-19_hd.jpg)

image-20240520232035205

1.9 代码

使用``标记行内代码,内容放在``中。

1
`Markdown`语法

image-20240520233418426

1.10 转义

使用\将格式化字符转义为原义,可转移字符有\ * _ {} [] () # + - . ! |等。

1
\*不要倾斜\*

image-20240520232430817

2 拓展语法

拓展语法可能在某些编辑器中无法使用。

2.1 表格

使用|分割每列、三个以上的-创建每列标题来标记表格,在---左右使用:表示对其方式。

1
2
3
4
| 默认 | 左对齐 | 居中 | 右对齐 |
| --- | :--- | :---: | ---: |
| 内容 | 内容 | 内容 | 内容 |
| 内容 | 内容 | 内容 | 内容 |

image-20240520234516064

2.2 代码块

使用两个```在代码上下标记代码块,第一个```后指定语言可将代码高亮显示。

1
2
3
4
5
6
```json
{
"Name": "Lisa",
"Age": 25
}
```

image-20240520235420231

2.3 脚注

使用[^][^]:组合标记脚注,脚注标题在^后,脚注内容在:后。

1
2
3
4
5
第一个脚注[^1]和第二个脚注[^2]

[^1]: 第一个脚注的内容。

[^2]: 第二个脚注的内容。

image-20240521000344993

2.4 任务列表

使用- [ ]标记任务列表,[]中添加×表示复选框。

1
2
- [x] 完成
- [ ] 未完成

image-20240521000918425

2.5 删除线

使用~~标记删除线,在目标内容前后添加~~

1
~~删除线~~

image-20240521001341326

2.6 内容目录

使用[TOC]标记一个目录,它根据标题自动生成。

1
[TOC]

image-20240521002334233

2.7 公式

若支持 LaTeX 公式,$表示行内公式,$$表示整行公式。更多相关知识可参阅 LaTeX 入门 - OI Wiki

1
2
3
4
5
6
7
8
9
10
11
12
13
$$
\begin{Bmatrix}
a & b \\
c & d
\end{Bmatrix}
$$
$$
\begin{CD}
A @>a>> B \\
@VbVV @AAcA \\
C @= D
\end{CD}
$$

image-20240521004041255

3 进阶使用

Markdown 语法还支持 HTML 标签,所以可以使用 HTML 标签来完成一些进阶效果。

3.1 复杂表格

使用 HTML 标签可以让表格实现合并单元格等效果,rowspan 为跨行合并,colspan 为跨列合并,style 可以添加 CSS 样式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<table>
<tr>
<th rowspan="2" style="color:#dea71f">值班人员</th>
<th style="color:#fc5531">星期一</th>
<th style="color:#fc5531">星期二</th>
<th style="color:#fc5531">星期三</th>
<th style="color:#fc5531">星期四</th>
</tr>
<tr>
<td>李强</td>
<td>张明</td>
<td colspan="2">王平</td>
</tr>
</table>

image-20240521164118238

3.2 更改文本

使用 HTML 标签还可以给文本添加各种 CSS 样式,如改变颜色、字体、大小等。

1
2
3
4
5
6
<font face="微软雅黑">微软雅黑</font>
<font face="STCAIYUN">华文彩云</font>
<font color=red>红色</font>
<font color=#008000>绿色</font>
<font size=5>尺寸5</font>
<font color=green face="黑体" size=5>绿色黑体尺寸5</font>

image-20240521164733868

3.3 特殊标志

使用<kbd> <sup> <sub>等标签可以实现键盘文本、上下标等效果。

1
2
3
4
5
复制:<kbd>Ctrl</kbd>+<kbd>C</kbd>

数学:3<sup>2</sup>=9

化学:CO<sub>2</sub>

image-20240521165945978

3.4 调整图片

使用<img>标签配合 CSS 样式可以调整图片。

1
<img src="https://bing.mcloc.cn/img/2024/05/19/2024-05-19_hd.jpg" width = "200" align="right" />

image-20240521170634199

4 高级技巧

Markdown 语法还有很多使用技巧需要探索发现。

4.1 插入bash64图片

将图片转化为 Bash64 编码,可以直接插入在![]()()中使用。推荐一个编码网站:图片转BASE64

1
2
![base64](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAeAB4.....dG7tzQTdtNWrn//2Q==)
.....内容已省略

image-20240521172424558

4.2 各类图表

Markdown 语法除了支持公式外,还支持多种图表。本节采集于网络,仅供参考。

1、横向流程图

1
2
3
4
5
6
7
8
```mermaid
graph LR
A[方形] -->B(圆角)
B --> C{条件a}
C -->|a=1| D[结果1]
C -->|a=2| E[结果2]
F[横向流程图]
```

image-20240521173659952

2、竖向流程图

1
2
3
4
5
6
7
8
```mermaid
graph TD
A[方形] --> B(圆角)
B --> C{条件a}
C --> |a=1| D[结果1]
C --> |a=2| E[结果2]
F[竖向流程图]
```

image-20240521173734568

3、UML时序图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
```mermaid
%% 时序图例子,-> 直线,-->虚线,->>实线箭头
sequenceDiagram
participant 张三
participant 李四
张三->王五: 王五你好吗?
loop 健康检查
王五->王五: 与疾病战斗
end
Note right of 王五: 合理 食物 <br/>看医生...
李四-->>张三: 很好!
王五->李四: 你怎么样?
李四-->王五: 很好!
```

image-20240521173831504

4、甘特图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
```mermaid
%% 语法示例
gantt
dateFormat YYYY-MM-DD
title 软件开发甘特图
section 设计
需求 :done, des1, 2014-01-06,2014-01-08
原型 :active, des2, 2014-01-09, 3d
UI设计 : des3, after des2, 5d
未来任务 : des4, after des3, 5d
section 开发
学习准备理解需求 :crit, done, 2014-01-06,24h
设计框架 :crit, done, after des2, 2d
开发 :crit, active, 3d
未来任务 :crit, 5d
耍 :2d
section 测试
功能测试 :active, a1, after des3, 3d
压力测试 :after a1 , 20h
测试报告 : 48h
```

image-20240521173851730

5 工具

编写 Markdown 有很多好用的工具,就像编写文档有 Word 一样。

PC端:Typora(推荐)、Obsidian、VSCode等

移动端:Obsidian、坚果云Markdown等

Web端:Cmd MarkdownEditor.md


我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3bjscq0kgso4k

正则表达式的基本介绍与正则大全

正则表达式(Regular Expression)又称规则表达式,在代码中常简写为RegexRegexpRE,它是一种文本模式,包括普通字符(例如a到z之间的字母)和特殊字符(称为"元字符")。

作用

  1. 文本验证:用于检查输入的文本是否符合特定的格式要求,如验证电子邮件、电话号码等。
  2. 文本搜索和替换:可以在文本中查找特定模式的内容,并进行替换操作。
  3. 数据提取:从文本中提取出符合特定模式的部分内容。
  4. 语法分析:在某些编程领域中,用于分析和理解代码的结构。

1 语法

一个正则表达式是一种从左到右匹配主体字符串的模式,它可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串、验证表单、提取字符串等等。

1.1 基本匹配

由一些字符(如字母、数字或符号)组成的最简单的正则表达式。

实例

1
my

image-20240511224117653

1.2 元字符

正则表达式主要依赖于元字符。 元字符不代表他们本身的字面意思而是有有特殊的含义。

元字符描述
.匹配除换行符以外的任意字符
[ ]字符类。匹配方括号内的任意字符
[^ ]否定的字符种类。匹配除了方括号里的任意字符
*匹配前面的子表达式零次或多次
+匹配前面的子表达式一次或多次
?匹配前面的子表达式零次或一次
{n,m}匹配前面的子表达式最少n次最多m次
( )匹配分组。组合一个子表达式
|或运算符,匹配符号前或后的字符
\转义字符,用于匹配一些保留的字符
^从开头进行匹配
$从末端进行匹配

1.2.1 点 .

.匹配任意单个字符,但不匹配换行符。

示例1

1
.

image-20240512143846833

示例2

1
.n

image-20240512143933842

1.2.2 字符类

方括号[]用来指定一个字符类,在方括号中的字符都将被匹配。字符类不会被顺序影响,还可以使用连字符-来指定范围。

示例1

1
[aeiou]

image-20240512144913169

示例2

1
[a-m]

image-20240512145419367

否定字符类

当符号^用在方括号[]内表示这个字符类是否定的。

示例1

1
[^aeiou]

image-20240512145928931

示例2

1
[^a-m]

image-20240512150004372

1.2.3 重复

当一个子表达式后面跟着字符+ * ?,是用来指定匹配该子表达式的次数。

1.2.3.1 星号 *

*匹配在*之前的字符出现大于等于0次。

示例1

1
e*

需要注意的是,e 出现0次的地方也会被标记

image-20240512151436387

示例2

匹配所有字符

1
.*

image-20240512152644347

1.2.3.2 加号 +

+匹配+之前的字符出现大于等于1次。

示例1

1
e+

image-20240512153536137

示例2

匹配以 e 开头,以 u 结尾的内容

1
e.+u

image-20240512153839436

1.2.3.3 问号 ?

匹配之前的字符出现0或者1次,即表示前面的字符是可选的。

示例

1
ou?n

image-20240512154651440

1.2.3.4 花括号 {}

{}常用来限定子表达式可以出现的次数。比如{n,m}表示出现最少 n 次最多 m 次,{n,}表示出现最少 n 次,{,m}表示出现最多 m 次,{n}表示固定出现 n 次。

示例1

1
e{2,3}

image-20240512155501711

示例2

1
e{2,}

image-20240512160016217

示例3

1
e{3}

image-20240512160051826

1.2.4 匹配分组

括号()用来指定一个子表达式,在括号中的内容会被看作一个整体。比如 (xy)* 匹配连续出现零个或多个的 xy,而 xy* 则匹配连续出现零个或多个的 y

示例1

1
(love)+

image-20240512162059930

示例2

1
([at])r

image-20240512164518517

1.2.5 或运算符 |

|用于判断条件,表示或者。

示例

1
a|t|es

image-20240512165004816

1.2.6 转义

反斜线\用于将特殊字符转义为原义字符,特殊字符如{ } [ ] / \ + * . $ ^ | ?

示例

1
y\.

image-20240512165940893

1.2.7 锚点

锚点可以匹配指定开头或结尾的字符串。^ 指定开头,$ 指定结尾。

示例1

1
^Regular

image-20240512172014524

示例2

1
Expression$

image-20240512172057858

1.3 简写字符集

简写描述
\w匹配所有字母数字,等同 [a-zA-Z0-9_]
\W匹配所有非字母数字,等同 [^\w]
\d匹配数字,等同 [0-9]
\D匹配非数字,等同 [^\d]
\s匹配所有空格字符,等同 [\t\n\f\r\p{Z}]
\S匹配所有非空格字符: [^\s]
\f匹配一个换页符
\n匹配一个换行符
\r匹配一个回车符
\t匹配一个制表符
\v匹配一个垂直制表符
\p匹配 CR/LF,等同 \r\n

需要注意的是,\s \S \f \n \r \t \v \p 所匹配的字符均为非打印字符

1.4 断言

断言分为先行断言和后发断言,它们都属于非捕获组(用于匹配模式,但不包括在匹配列表中)。用来筛选指定条件的匹配结果。

需要注意的是,断言必须包含在分组()

符号描述
?=正先行断言-存在
?!负先行断言-排除
?<=正后发断言-存在
?<!负后发断言-排除

1.4.1 正先行断言 ?=

正先行断言的筛选条件为匹配字符其后跟随断言中定义的格式。

示例

1
my(?=\shometown)

image-20240512181224256

1.4.2 负先行断言 ?!

负先行断言的筛选条件为匹配字符其后不跟随断言中定义的格式。

示例

1
my(?!\shometown)

image-20240512231317412

1.4.3 正后发断言 ?<=

正后发断言的筛选条件为匹配字符其前跟随断言中定义的格式。

1
(?<=my)self

image-20240512232345325

1.4.4 负后发断言 ?<!

负后发断言的筛选条件为匹配字符其前不跟随断言中定义的格式。

1
(?<!my)self

image-20240512232406235

2 标记

标记也称为修饰符,作为额外的匹配策略用于修改表达式的搜索结果。标志可以任意组合使用,它也是正则表达式中的一部分。

标志描述
g全局搜索
i忽略大小写
m多行匹配

2.1 全局搜索

标记 g 用于全局搜索。即不仅返回第一个匹配结果,而是全部匹配结果。在语法章节中所有的示例均使用全局搜索。

示例

1
/r/g

image-20240513000657127

2.1 忽略大小写

标记 i 用于忽略大小写。匹配的字符可以是大写或者小写。

示例

1
/r/gi

image-20240513000706053

2.3 多行匹配

标记 m 用于多行匹配。比如前面说到的锚点^ $,如果想在每行的开头结尾生效,就需要使用标记 m

示例

1
/^Regular/gm

image-20240513002324588

3 常用正则

火车车次

1
/^[GCDZTSPKXLY1-9]\d{1,4}$/

手机机身码(IMEI)

1
/^\d{15,17}$/

必须带端口号的网址(或ip)

1
/^((ht|f)tps?:\/\/)?[\w-]+(\.[\w-]+)+:\d{1,5}\/?$/

网址(URL)

1
/^(((ht|f)tps?):\/\/)?([^!@#$%^&*?.\s-]([^!@#$%^&*?.\s]{0,63}[^!@#$%^&*?.\s])?\.)+[a-z]{2,6}\/?/

统一社会信用代码

1
/^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/

统一社会信用代码(宽松匹配)(15位/18位/20位数字/字母)

1
/^(([0-9A-Za-z]{15})|([0-9A-Za-z]{18})|([0-9A-Za-z]{20}))$/

迅雷链接

1
/^thunderx?:\/\/[a-zA-Z\d]+=$/

ed2k链接(宽松匹配)

1
/^ed2k:\/\/\|file\|.+\|\/$/

磁力链接(宽松匹配)

1
/^magnet:\?xt=urn:btih:[0-9a-fA-F]{40,}.*$/

子网掩码(不包含 0.0.0.0)

1
/^(254|252|248|240|224|192|128)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(255|254|252|248|240|224|192|128|0)$/

linux"隐藏文件"路径

1
/^\/(?:[^/]+\/)*\.[^/]*/

linux文件夹路径

1
/^\/(?:[^/]+\/)*$/

linux文件路径

1
/^\/(?:[^/]+\/)*[^/]+$/

window"文件夹"路径

1
/^[a-zA-Z]:\\(?:\w+\\?)*$/

window下"文件"路径

1
/^[a-zA-Z]:\\(?:\w+\\)*\w+\.\w+$/

股票代码(A股)

1
/^(s[hz]|S[HZ])(000[\d]{3}|002[\d]{3}|300[\d]{3}|600[\d]{3}|60[\d]{4})$/

大于等于0,小于等于150,支持小数位出现5,如145.5,用于判断考卷分数

1
/^150$|^(?:\d|[1-9]\d|1[0-4]\d)(?:\.5)?$/

html注释

1
/<!--[\s\S]*?-->/g

md5格式(32位)

1
/^[a-fA-F0-9]{32}$/

GUID/UUID

1
/^[a-f\d]{4}(?:[a-f\d]{4}-){4}[a-f\d]{12}$/i

版本号(version)格式必须为X.Y.Z

1
/^\d+(?:\.\d+){2}$/

视频(video)链接地址(视频格式可按需增删)

1
/^https?:\/\/(.+\/)+.+(\.(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4))$/i

图片(image)链接地址(图片格式可按需增删)

1
/^https?:\/\/(.+\/)+.+(\.(gif|png|jpg|jpeg|webp|svg|psd|bmp|tif))$/i

24小时制时间(HH:mm:ss)

1
/^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/

12小时制时间(hh:mm:ss)

1
/^(?:1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$/

base64格式

1
/^\s*data:(?:[a-z]+\/[a-z0-9-+.]+(?:;[a-z-]+=[a-z0-9-]+)?)?(?:;base64)?,([a-z0-9!$&',()*+;=\-._~:@/?%\s]*?)\s*$/i

数字/货币金额(支持负数、千分位分隔符)

1
/^-?\d{1,3}(,\d{3})*(\.\d{1,2})?$/

银行卡号(10到30位,覆盖对公/私账户,参考微信支付

1
/^[1-9]\d{9,29}$/

中文姓名

1
/^(?:[\u4e00-\u9fa5·]{2,16})$/

英文姓名

1
/(^[a-zA-Z][a-zA-Z\s]{0,20}[a-zA-Z]$)/

车牌号(新能源)

1
/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z](([DF]((?![IO])[a-zA-Z0-9](?![IO]))[0-9]{4})|([0-9]{5}[DF]))$/

车牌号(非新能源)

1
/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]$/

车牌号(新能源+非新能源)

1
/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/

手机号(mobile phone)中国(严谨),根据工信部2019年最新公布的手机号段

1
/^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[01256789]))\d{8}$/

手机号(mobile phone)中国(宽松),只要是13、14、15、16、17、18、19开头即可

1
/^(?:(?:\+|00)86)?1[3-9]\d{9}$/

手机号(mobile phone)中国(最宽松),只要是1开头即可,如果你的手机号是用来接收短信,优先建议选择这一条

1
/^(?:(?:\+|00)86)?1\d{10}$/

日期(宽松)

1
/^\d{1,4}(-)(1[0-2]|0?[1-9])\1(0?[1-9]|[1-2]\d|30|31)$/

日期(严谨,支持闰年判断)

1
/^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$/

中国省

1
/^浙江|上海|北京|天津|重庆|黑龙江|吉林|辽宁|内蒙古|河北|新疆|甘肃|青海|陕西|宁夏|河南|山东|山西|安徽|湖北|湖南|江苏|四川|贵州|云南|广西|西藏|江西|广东|福建|台湾|海南|香港|澳门$/

可以被moment转化成功的时间 YYYYMMDD HH:mm:ss

1
/^\d{4}([/:-\S])(1[0-2]|0?[1-9])\1(0?[1-9]|[1-2]\d|30|31) (?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/

email(邮箱)

1
/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

座机(tel phone)电话(国内),如: 0341-86091234

1
/^(?:(?:\d{3}-)?\d{8}|^(?:\d{4}-)?\d{7,8})(?:-\d+)?$/

身份证号(1代、15位数字)

1
/^[1-9]\d{7}(?:0\d|10|11|12)(?:0[1-9]|[1-2][\d]|30|31)\d{3}$/

身份证号(2代、18位数字),最后一位是校验位,可能为数字或字符X

1
/^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/

身份证号,支持1/2代(15位/18位数字)

1
/^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/

护照(包含香港、澳门)

1
/(^[EeKkGgDdSsPpHh]\d{8}$)|(^(([Ee][a-fA-F])|([DdSsPp][Ee])|([Kk][Jj])|([Mm][Aa])|(1[45]))\d{7}$)/

帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线组合

1
/^[a-zA-Z]\w{4,15}$/

中文/汉字

1
/^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])+$/

小数(支持科学计数)

1
/^[+-]?(\d+([.]\d*)?([eE][+-]?\d+)?|[.]\d+([eE][+-]?\d+)?)$/

只包含数字

1
/^\d+$/

html标签(宽松匹配)

1
/<(\w+)[^>]*>(.*?<\/\1>)?/

匹配中文汉字和中文标点

1
/[\u4e00-\u9fa5|\u3002|\uff1f|\uff01|\uff0c|\u3001|\uff1b|\uff1a|\u201c|\u201d|\u2018|\u2019|\uff08|\uff09|\u300a|\u300b|\u3008|\u3009|\u3010|\u3011|\u300e|\u300f|\u300c|\u300d|\ufe43|\ufe44|\u3014|\u3015|\u2026|\u2014|\uff5e|\ufe4f|\uffe5]/

qq号格式正确

1
/^[1-9][0-9]{4,10}$/

数字和字母组成

1
/^[A-Za-z0-9]+$/

英文字母

1
/^[a-zA-Z]+$/

小写英文字母组成

1
/^[a-z]+$/

大写英文字母

1
/^[A-Z]+$/

密码强度校验,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符

1
/^\S*(?=\S{6,})(?=\S*\d)(?=\S*[A-Z])(?=\S*[a-z])(?=\S*[!@#$%^&*? ])\S*$/

用户名校验,4到16位(字母,数字,下划线,减号)

1
/^[\w-]{4,16}$/

ip-v4[:端口]

1
/^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$/

ip-v6[:端口]

1
/(^(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$)|(^\[(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))\](?::(?:[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$)/i

16进制颜色

1
/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3}|[a-fA-F0-9]{8}|[a-fA-F0-9]{4})$/

微信号(wx),6至20位,以字母开头,字母,数字,减号,下划线

1
/^[a-zA-Z][-_a-zA-Z0-9]{5,19}$/

邮政编码(中国)

1
/^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/

中文和数字

1
/^((?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])|(\d))+$/

不能包含字母

1
/^[^A-Za-z]*$/

java包名

1
/^([a-zA-Z_]\w*)+([.][a-zA-Z_]\w*)+$/

mac地址

1
/^(([a-f0-9][0,2,4,6,8,a,c,e]:([a-f0-9]{2}:){4})|([a-f0-9][0,2,4,6,8,a,c,e]-([a-f0-9]{2}-){4}))[a-f0-9]{2}$/i

匹配连续重复的字符

1
/(.)\1+/

数字和英文字母组成,并且同时含有数字和英文字母

1
/^(?=.*[a-zA-Z])(?=.*\d).+$/

香港身份证

1
/^[a-zA-Z]\d{6}\([\dA]\)$/

澳门身份证

1
/^[1|5|7]\d{6}\(\d\)$/

台湾身份证

1
/^[a-zA-Z][0-9]{9}$/

大写字母,小写字母,数字,特殊符号 @#$%^&*~()-+=` 中任意3项密码

1
/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\W_!@#$%^&*`~()-+=]+$)(?![0-9\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\W_!@#$%^&*`~()-+=]/

ASCII码表中的全部的特殊字符

1
/[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]+/

正整数,不包含0

1
/^\+?[1-9]\d*$/

负整数,不包含0

1
/^-[1-9]\d*$/

整数

1
/^(?:0|(?:-?[1-9]\d*))$/

浮点数

1
/^(-?[1-9]\d*\.\d+|-?0\.\d*[1-9]\d*|0\.0+)$/

浮点数(严格)

1
/^(-?[1-9]\d*\.\d+|-?0\.\d*[1-9])$/

email(支持中文邮箱)

1
/^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/

域名(非网址,不包含协议)

1
/^([0-9a-zA-Z-]{1,}\.)+([a-zA-Z]{2,})$/

军官/士兵证

1
/^[\u4E00-\u9FA5](字第)([0-9a-zA-Z]{4,8})(号?)$/

户口薄

1
/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/

4 备注

4.1 Regex101

地址:regex101.com

正则表达式测试器,具有语法突出显示、解释、备忘单等功能,适用于 PHP-PCRE、Python、GO、JavaScript、Java、C#-.NET、Rust 等语言。

image-20240513233300327

4.2 RegExr

地址:regexr-cn.com

带有语法高亮、支持 PHP/PCRE 和 JS 语言、上下文解释、备忘单、参考和正则表达式社区的正则表达式测试工具。

image-20240513233809937

4.3 GoRegex

地址:goregex.cn

提供PHP、PCRE、Python、Go、JavaScript等语言的正则表达式在线测试、生成,解析工具服务。其中的正则库及正则教程可以帮助快速方便的获取正则表达式。

image-20240513234042057

4.4 RegexLearn

地址:regexlearn.com/zh-cn

交互式学习正则表达式,在所处的阶段练习、测试和分享自己的正则表达式。

image-20240513234207157

玩转npm:从基础到实践的全面指南

1 简介

npm(Node Package Manager)是Node.js生态系统中的默认包管理器,它提供了一系列的命令行工具,使得开发者能够方便地进行包的管理操作。这些操作包括但不限于下载、安装、升级、删除包,以及发布和维护自己的包。

以下是npm的一些主要功能:

  • 包管理:通过npm install命令安装项目所需的包,并将其添加到项目的依赖中,减少重复劳动。
  • 版本管理:指定项目依赖项的版本,确保项目不受不兼容版本的影响。
  • 脚本执行:在package.json文件中定义脚本,使用npm run命令执行。
  • 包发布和分享:开发者可以将自己编写的包发布到NPM的公共仓库中,供其他开发者使用。
  • 依赖解析:递归地解析和安装其依赖项,确保项目中的所有依赖都得到满足。
  • 包搜索和浏览:在NPM网站上搜索、浏览和发现其他人创建的包。

2 安装NPM

npm不需要单独的安装,在安装Node.js的时候会相应的安装npm。

  1. 前往Node.js官网下载并安装最新版本Node.js

image-20240425225114401

  1. 验证npm是否安装成功
1
2
npm -v    # 查看npm版本,若输出版本号,即为安装成功
# 10.5.1

3 基本使用

初次运行npm时,可以使用npm init命令进行初始化操作,它会引导填写一些基本信息(如版本号、描述等)

image-20240425230442939

初始化项目后创建package.json文件

package.json文件

package.json文件通常用来描述项目和软件包信息。

  • name:项目或库的名称
  • version:项目的版本
  • author:项目作者
  • description:项目的描述
  • license:项目的许可证

scripts

scripts字段用于定义项目中的各种脚本命令。可以在其中指定一些常用的操作,比如启动项目、执行测试、构建等,并且可以通过命令行工具来执行这些脚本。

例如,假设想在每次提交代码前运行测试,可以创建一个名为precommit的脚本:

1
2
3
4
5
6
{
"scripts": {
"prestart": "npm install",
"start": "node index.js"
}
}

在命令行使用npm run prestart等同于执行npm install

每个script都是一个命令行指令,后面跟着要执行的具体命令。当开发者克隆一个仓库并在自己的机器上运行npm installyarn安装依赖后,可以通过npm run <scriptName>yarn <scriptName>来执行这些预设的任务。这样的自动化大大提高了开发效率,减少了重复劳动,并且确保所有开发者和CI/CD流水线都能以相同的方式执行相同的步骤。

dependencies和devDependencies

dependencies和devDependencies是项目配置文件中的两个重要部分,它们用于分别列出项目运行时和开发时所需的外部模块或库。

  • dependencies:项目在实际运行时所依赖的模块或库。这些依赖项是在生产环境中必须安装和包含的包,因为它们包含了项目功能实现的核心代码或是该应用程序直接使用的库。当用户全局安装该应用程序或在系统上运行它时,npm会自动将这些依赖项下载并安装到node_modules目录中。
  • devDependencies:项目在开发过程中所需要的工具、测试框架、构建工具等,它们通常不参与项目的实际运行。这包括测试库、构建脚本、代码格式化工具等。当发布应用程序时这些依赖项不会被包含在内,但是其他开发者如果要在本地开发或测试代码,则需要安装这些依赖项。

在package.json中明确指定这些依赖项,可以确保任何人在新的环境中克隆和设置项目时都能够获得正确的版本,并且能够重现构建过程。这对于团队协作和持续集成/持续部署(CI/CD)流程至关重要。

4 常用命令

npm提供了许多有用的命令来帮助管理项目的依赖项和其他相关任务。下面是一些最常用的npm命令:

  1. npm init:初始化一个新的Node.js项目,创建一个package.json文件。
  2. npm install:安装所有依赖项以及未列出的新依赖项。
    • npm install :安装一个新依赖项到你的项目。
    • npm install --save:安装一个依赖项,并将其添加到dependencies中。
    • npm install --save-dev:安装一个开发依赖项,并将其添加到devDependencies中。
  3. npm uninstall :卸载一个依赖项。
  4. npm update:更新所有过期的依赖项到最新版本。
  5. npm outdated:列出所有过期的依赖项。
  6. npm ls:显示已安装的包及其版本信息。
  7. npm publish:发布你的包到npm仓库。

更多npm命令可参阅CLI 命令 | npm 中文网 (nodejs.cn)

5 全局安装与本地安装

在 npm 中,可以选择全局安装或本地安装包。这两种方式各有用途:

  • 全局安装 (npm install -g):全局安装的包对所有项目都可用。这意味着无论在哪里,都可以在命令行中访问这些包。这适用于那些不打算在单个项目中使用,而是希望在整个系统范围内使用的工具或命令行程序。例如,如果你经常需要使用某个代码格式化工具或构建脚本,全局安装可以让它在任何地方都可以使用。
  • 本地安装 (npm install):本地安装的包仅限于当前项目的node_modules目录。这意味着其他项目不能访问这些包,除非也为它们安装了同样的依赖项。这适用于那些项目直接依赖的库或工具。例如,如果你的项目需要一个特定版本的jQuery,你应该本地安装它,因为它只对你当前的项目有用。

image-20240428000553721

一般来说,建议尽可能使用本地安装,因为它允许精确控制每个项目的依赖关系,并且避免不同项目之间的冲突。全局安装主要用于那些你需要在多个项目间共享的工具或命令行实用程序。

6 版本管理和兼容性策略

npm版本管理和兼容性策略是确保项目顺利运行的关键部分。以下是一些建议:

  1. 使用语义化版本控制:遵循语义化版本控制规则,即主版本号.次版本号.修订号。当发布新功能时,增加次版本号;当修复 bug 时,增加修订号;当做出破坏性更改时,增加主版本号。这有助于开发者了解他们是否需要升级他们的代码以适应新版本。
  2. 锁定文件:使用package-lock.json或yarn.lock文件来锁定依赖项的具体版本。这可以防止因不同版本而导致的问题,并确保在不同环境中具有相同的一致性和可预测性。
  3. 定期更新:定期运行npm update来更新依赖项到最新版本,以利用最新的改进和安全修复。但请小心重大更新,因为它们可能会引入不兼容的变化。
  4. 依赖项兼容性:当添加新依赖项时,尽量选择广泛支持和积极维护的包。
  5. 测试:在更新依赖项之前,最好在一个隔离的环境中测试它们,比如使用Docker或虚拟机,以确保它们不会破坏现有的功能。
  6. 回退计划:如果更新导致问题,确保有一个回退计划。这可能意味着保留旧版本的代码或依赖项,直到问题解决。
  7. 监控:监控项目以识别潜在的安全漏洞和性能问题。有许多工具和服务可以帮助做到这一点,包括Snyk、Greenkeeper等。
  8. 文档:及时更新README.md或其他文档,说明项目依赖哪些版本的包,以及如何安装和配置它们。

通过遵循这些实践,可以最大限度地减少因依赖项更新而引起的问题,并确保项目稳定可靠。

package-lock.json文件:

package-lock.json文件是npm在执行npm install命令后自动生成的一个锁文件,其目的是确保在不同环境下能够一致地安装相同版本的依赖项。这个文件描述了项目所需的每个依赖的确切版本号以及解析后的实际下载地址。

7 案例分析:创建一个简单的npm模块并发布

  1. 确定模块名称

在GitHub或其他代码托管服务上检查模块名称是否可用,确保该名称没有被其他npm包占用。

  1. 初始化模块

在开发目录中创建一个新的文件夹作为模块项目,在该文件夹内运行npm init命令初始化package.json文件,它会引导填写一些基本信息(如版本号、描述等),或者使用npm init -y命令快速初始化。

image-20240427230309324

  1. 编写代码

在项目目录中创建一个JavaScript文件,通常命名为index.js,在其中编写模块代码,并且确保它能作为一个Node.js模块正确导出功能或类。

  1. 编辑package.json文件

添加必要的元数据,包括模块的名称、版本号、描述、作者、许可证等,如果需要,还可以添加 scripts 部分来自定义命令,例如启动脚本或测试脚本。

  1. 发布模块

第一次发布需要先注册一个npm账户

1
2
# 注册账户
npm adduser

image-20240428001100253

如果有npm账户则直接登录

1
2
# 登录账户
npm login

最后使用npm publish命令将模块发布到npm仓库

  1. 后期维护

对于每次更新,需要先递增版本号,然后再次运行npm publish来更新已发布的模块版本。

8 总结

总的来说,npm不仅是Node.js的核心组成部分,也是现代前端工程化的基石。掌握npm意味着掌握了JavaScript开发的未来趋势,它是每个前端工程师必备的基本功。随着Node.js及JavaScript技术的不断演进,相信npm将继续发挥其重要作用,引领着Web开发的新潮流。

GitHub Desktop:让代码托管不再高深莫测

简介

使用 GitHub Desktop 可以使用一个直观、可视化的界面而不是命令行或 Web 浏览器与 GitHub 交互。可以使用它从桌面完成大多数 Git 命令,使用户可以更容易地进行代码的版本控制、代码的提交、分支的管理、拉取请求的处理等操作。

image-20240321223318134

软件特色

界面设计:简洁直观的用户界面,即使是 Git 新手也能轻松上手。它提供了清晰的仓库列表、变更摘要和历史记录视图,使用户能够快速理解项目的当前状态。

基本 Git 操作:支持所有基本的 Git 操作,如克隆、提交、拉取和推送。这些操作都通过可视化界面进行,降低了学习成本。

分支管理:分支创建、切换和合并的流程非常直观。提供了一个易于理解的分支视图,使得分支管理变得更加容易。

冲突解决:当合并代码时发生冲突,提供了一个基本的冲突解决界面,帮助用户理解并解决冲突。

集成 GitHub 功能:它与 GitHub 的特性紧密集成,比如拉取请求和代码审查,提高了代码的管理和协作效率。

扩展性:虽然 GitHub Desktop 专注于基本功能,但它也支持高级用户通过命令行工具执行更复杂的 Git 操作。

软件截图

image-20240321230856865

image-20240321231027497

image-20240321231647969

image-20240321231725323

特别提醒

GitHub Desktop 的默认语言为英文,如果希望使用中文界面,可以通过安装汉化包来实现,汉化版本需与 GitHub Desktop 版本一致,本文提供汉化教程。

安装教程

选择合适的版本进行下载,较新的版本可能无汉化,部分版本提供两种安装程序,不了解区别则选择.exe

汉化工具来源:Github Desktop 汉化工具

image-20240322011517641

下载完成后双击运行安装程序进行安装

image-20240424133833716

随后在软件关闭的前提下运行对应版本的汉化工具,即GithubDesktopZhTool.exe文件,汉化完成后汉化工具可删除

image-20240424134314706

使用教程

打开软件后登录GitHub账号自动获取账号信息和存储库,可以连接自己的存储库、克隆其他用户的存储库,或者在本地初始化一个新存储库

image-20240424140838763

然后就可以使用图形化来执行各种git命令,在本地创建的存储库也可以快速在GitHub中创建远程存储库

下载地址

官网下载:https://desktop.github.com/

爱吃猫的鱼CLOUD下载:https://cloud.talen.top/s/14uY

值得推荐的7个vue3 UI组件库

前端 UI 组件库是前端开发者必备的工具之一,它们可以帮助开发者快速构建用户界面,提高开发效率。本文推荐几款热门的vue3 UI组件库,排名不分前后。

Naive UI

开发团队:TuSimple(图森未来)

官网:www.naiveui.com/

GitHub:github.com/tusen-ai/naive-ui/

Naive UI是由TuSimple团队开发并维护的一个现代化的Vue 3组件库。它旨在提供一套简洁、直观且易于使用的界面元素,帮助开发者快速构建美观的应用程序。Naive UI提供了包括按钮、输入框、布局、表格、提示等在内的多种常见UI组件,这些组件都遵循Material Design设计规范,以确保一致的视觉效果和用户体验。

image-20240409221834250

  • **TypeScript支持:**为开发者提供了丰富的类型定义,有助于在编码阶段捕获潜在错误,提升开发效率和代码质量。
  • **强大的主题系统:**通过简单的JSON配置,就可以改变全局颜色、字体等样式,甚至可以创建暗黑模式,极大地减少了前端开发者的工作负担。
  • **应用场景广泛:**适用于各类Web应用程序的开发,无论是要构建企业级后台管理平台,还是要设计简洁的个人博客,或者是开发移动优先的响应式网站,都能找到合适的组件。
  • **易用性强:**清晰的API接口和详尽的文档说明,使得学习和使用它非常容易。
  • **响应式设计:**所有组件均支持响应式布局,适应不同设备和屏幕尺寸。

总的来说,Naive UI是一个功能强大、易于使用的Vue 3组件库,适合于各种规模的项目的开发,成为了许多开发者构建现代Web应用程序的首选组件库。

安装

1
2
# NPM
npm i -D naive-ui

Element+

开发团队:饿了么前端

官网:element-plus.org/

GitHub:github.com/ElemeFE/element/

Element+,也被称为Element Plus,是一个基于Vue 3.x的前端界面框架,它提供了一套丰富的UI组件库,旨在帮助开发者快速构建现代化的用户界面。Element Plus是Element UI的升级版,Element UI是基于Vue 2.x的界面框架,而Element Plus则基于Vue 3.x。

image-20240409225831748

  • 丰富的组件库:Element Plus提供了一系列常用的UI组件,如按钮、表单、弹窗、导航等,可以帮助开发者快速构建现代化的用户界面。
  • 简洁易用:Element Plus的设计理念是简洁、易用和美观,它遵循了Material Design的设计原则,采用了扁平化的风格和鲜明的色彩搭配,给用户带来了良好的视觉体验。
  • 高效的开发流程:Element Plus将HTML的基础控件进行了封装,用户只需要调用这些控件就可以了,而不需要用CSS去调整风格。

总的来说,Element Plus是一个非常强大且易于使用的UI框架,它可以帮助开发者快速构建出高质量的应用程序。

安装

1
2
3
4
5
6
7
8
# NPM
npm install element-plus --save

# Yarn
yarn add element-plus

# pnpm
pnpm install element-plus

Quasar

开发团队:Quasar团队

官网:quasar.dev/ (中文网:http://www.quasarchs.com/

GitHub:github.com/quasarframework/quasar/

Quasar是一个基于Vue.js的开源前端框架,它允许开发者仅编写一次代码,然后就可以将应用部署到多个平台上,如网站、渐进式网页应用(PWA)、移动应用和Electron应用。Quasar的设计理念是简化开发流程,提高开发效率,并确保应用的性能和质量。

image-20240411135059881

  • 跨平台开发:Quasar 使开发者只需编写一次代码,即可跨多个平台无缝部署,包括 Web、移动、桌面和 Electron。这种统一的开发方案简化了开发工作流程,并确保不同设备和环境下一致的用户体验。
  • 大型组件库:Quasar 拥有超过 70 个高性能 Material Design 组件的库,为开发者提供了丰富的工具包,用于构建响应灵敏且具有视觉吸引力的 App。这些组件完全可定制,允许开发者对其进行定制,满足特定的设计要求和品牌偏好。
  • 文档齐全的 API:Quasar 拥有全面且文档齐全的 API,易于学习和使用。这种清晰且结构化的文档简化了开发过程,使开发者能够有效地利用 Quasar 的特性和功能。
  • 繁荣的社区:在大型活跃的开发者社区的支持下,Quasar 促进协作、知识共享和支持。无论是寻求帮助、分享见解还是为框架的发展开源贡献,开发者都可以依赖 Quasar 社区的指导和友情赞助。
  • 开源:作为一个开源框架,Quasar 可以免费使用和修改,开发者能够为所欲为地创新和定制它们的 App。这种开放的精神鼓励 Quasar 生态系统的透明度、社区参与和持续改进。

总的来说,Quasar是一个功能强大的前端框架,它可以帮助开发者更快地构建出高质量的应用,并且支持多种不同的平台和应用类型。

安装

1
2
3
4
5
6
7
8
9
10
11
# NPM
npm i -g @quasar/cli
npm init quasar

# Yarn
yarn global add @quasar/cli
yarn create quasar

# pnpm
pnpm add -g @quasar/cli
pnpm create quasar

Vuetify

开发团队:Vuetify(公司)

官网:vuetifyjs.com/

GitHub:github.com/vuetifyjs/vuetify/

Vuetify 广泛的精心设计的 UI 组件、布局和主题与谷歌的 Material Design 原则无缝衔接。开发者即使没有丰富的设计专业知识,也能够构建具有专业才能的、精美且响应灵敏的 Web App。

image-20240411135110831

  • 丰富的组件集:Vuetify 拥有广泛的 80 多个预构建 UI 组件。从按钮和表单等基本元素,到数据表和导航抽屉等复杂结构,Vuetify 涵盖了广泛的 UI 需求。
  • 响应式设计:Vuetify 中的每个组件都经过精心设计,具有本质上的响应性。这可确保使用 Vuetify 构建的 App 在从 PC 端到移动端的各种设备上保持视觉完整性。
  • 主题:Vuetify 提供强大的主题功能,开发者能够轻松定制其 App 的视觉美感。无论是创建定制主题,还是利用大量预构建选项,Vuetify 都使开发者能够定制 App 的外观和风格,满足特定偏好或品牌要求。
  • 国际化:凭借对国际化的内置支持,Vuetify 简化了创建迎合全球受众的 App 的过程。开发者可以无缝实现多语言支持和本地化功能,确保它们的 App 在全球范围内均可访问且用户友好。
  • 元气满满的社区:Vuetify 因其元气满满且积极参与的开发者社区而蓬勃发展。凭借庞大且支持的用户群,开发者可以轻松访问资源、寻求帮助,并与志同道合的个人协作。Vuetify 的社区驱动精神营造了持续学习和创新的环境。

总的来说,Vuetify是一个非常强大的前端框架,它可以帮助开发者快速构建出既美观又实用的Web应用程序。

安装

1
2
3
4
5
6
7
8
# NPM
npm create vuetify@latest

# Yarn
yarn create vuetify

# pnpm
pnpm create vuetify

Varlet

开发团队:varletjs社区

官网:varlet.gitee.io/varlet-ui/

GitHub:github.com/haoziqaq/varlet/

Varlet是一个基于Vue3开发的Material风格移动端组件库,全面拥抱Vue3生态,追求轻量的组件体积,简单的使用方式,最小的思维负担。Varlet提供了60多个高质量通用组件,旨在帮助开发者更高效地构建移动端应用。

image-20240418205745060

  • 轻量级:Varlet致力于保持组件的轻量化,以方便开发者更容易地管理和维护。
  • 易于使用:Varlet的使用方式简单,减少了开发者的思维负担,使他们能够更专注于业务逻辑的实现。
  • 丰富的组件库:Varlet提供了60多个高质量通用组件,覆盖了大部分常见的界面元素和交互行为,大大提高了开发效率。
  • 支持按需引入:Varlet支持按需引入,这意味着可以根据项目的实际需求来选择需要的组件,从而减少不必要的代码加载,提高应用的性能。
  • 支持国际化:Varlet支持国际化,无论在哪个国家或地区,都可以使用Varlet来开发应用。

总的来说,Varlet的使用场景广泛,适用于各种类型的移动端应用开发。如果需要一个强大的、易用的、轻量级的移动端组件库,那么Varlet或许是一个不错的选择。

安装

1
2
3
4
5
6
7
8
# NPM
npm i @varlet/ui -S

# Yarn
yarn add @varlet/ui

# pnpm
pnpm add @varlet/ui

PrimeVue

开发团队:PrimeTek

官网:v4.primevue.org/

GitHub:github.com/primefaces/primevue/

PrimeVue是一个基于Vue.js的UI组件库,它提供了丰富的、灵活的和现代的UI组件,旨在帮助开发者构建功能强大的Web应用程序。PrimeVue提供了一系列的组件,包括表单元素、数据表格、图表、日历等。这些组件支持响应式设计,能够在不同尺寸的屏幕和设备上提供良好的视觉效果。

image-20240418211307209

  • 丰富的组件集:PrimeVue提供了多样化的组件,包括按钮、输入框、数据表、图表等,满足了开发者在构建用户界面时的各种需求。
  • 主题自定义:PrimeVue允许开发者根据项目的需求定制主题,从而使UI更符合特定设计要求。
  • 灵活性和可定制性:组件库提供了很大的灵活性和可定制性,使得开发者能够根据项目需求进行个性化定制。
  • 社区支持:PrimeVue有一个积极的社区,用户可以在论坛上获取支持、提出问题,并分享经验。
  • 响应式设计:PrimeVue提供了对现代响应式设计的支持,使得应用能够适应各种设备和屏幕尺寸。

总的来说,PrimeVue是一个不断发展的Vue组件库,它提供了广泛的组件和灵活的定制选项,适合各种规模的Web应用程序开发。随着最近的更新,PrimeVue的组件集变得更加丰富,为开发者提供了更多的选择来构建现代化、响应式的用户界面。

安装

1
2
3
4
5
6
7
8
# NPM
npm install primevue@4.0.0-beta.1

# Yarn
yarn add primevue@4.0.0-beta.1

# pnpm
pnpm add primevue@4.0.0-beta.1

Buefy

开发团队:Rafael Beraldo(原始作者)

官网:buefy.org/

GitHub:github.com/buefy/buefy/

Buefy是一个基于Vue.js的轻量级UI组件库,它基于Bulma框架和设计。Buefy提供了响应式的UI组件,适合用于构建美观且高效的Web应用。它的组件设计遵循Material Design和iOS的设计原则,能够在不同设备和操作系统上保持一致的用户体验。Buefy的代码结构清晰,易于定制和扩展,支持按需引入,有助于减少项目的体积。

image-20240418212732113

  • 提高开发效率:Buefy提供了丰富的响应式UI组件,使得开发者能够更快地搭建出既符合设计规范又具有良好用户体验的Web应用。
  • 简化开发流程:通过使用Buefy,开发者可以减少重复造轮子的时间,专注于业务逻辑的实现,从而提高整体的开发效率。
  • 提升用户体验:Buefy的组件设计遵循Material Design和iOS的设计原则,能够在不同设备和操作系统上保持一致的用户体验,这对于提升应用的可用性和吸引力至关重要。
  • 支持定制化和扩展性:Buefy的代码结构清晰,易于定制和扩展,这使得开发者可以根据实际需求调整组件行为,满足多变的业务需求。

总的来说,Buefy在大型复杂应用中的表现取决于具体的应用需求和开发者的使用技巧。对于小型到中型项目,Buefy可能是一个理想的轻量级选择。但对于需要更多定制化组件和企业级特性的大型应用,可能需要考虑其他更专业的Vue组件库。

安装

1
2
# NPM
npm install buefy

推荐10个有趣的摸鱼网站,让快乐简单起来

梨花哪有摸鱼香,摸鱼一时爽,一直摸鱼一直爽,话不多说,开始摸鱼。

YORG.io

地址:https://yorg.io/

YORG.io 是一款关于供应链和僵尸的塔防类游戏。目标是建立一个能在僵尸袭击的夜晚幸存下来的基地,建造和升级各种防御塔以尽可能的长时间生存。

image-20240408162556749

Suroi

地址:https://suroi.fpsgo.net/

一款在线2D大逃杀游戏,无需登录注册即可联机匹配游玩。

image-20240408174351362

狗屁不通文章生成器

地址:https://suulnnka.github.io/BullshitGenerator/index.html

只需要输入一个主题就可以获得一篇富含哲理(狗屁不通)的文章,专业针对形式主义。

image-20240408175950600

纪妖

地址:https://www.cbaigui.com/

如果对虚幻的东西感兴趣,那这个网站一定不能错过,两千多只妖怪传说绝对能满足全部好奇。

image-20240408182208626

小霸王

地址:https://www.yikm.net/

在线小霸王游戏机,千百款小霸王、红白机、街机游戏,找回童年的乐趣。

image-20240408182402971

沙雕新闻

地址:https://shadiao.plus/

汇聚搞笑新闻,发现新闻中的乐趣,千万不要笑出“猪叫声”哦。

image-20240408182827263

请画一个小人

地址:https://www.webhek.com/post/draw-a-stickman/

随意画出一个小人,和它一起完成一次充满奇幻色彩的冒险旅程。

image-20240408213915285

Emoji生成器

地址:https://tikolu.net/emojimix/

将两个表情符号合二为一,数以千计的组合可供选择。

image-20240408215046145

名画拼图

地址:https://gallerix.asia/

超过17W幅绘画作品作为在线拼图的基础,可以自定义选择碎片数,还可以上传自己的图片。

image-20240408220820534

找不动表情

地址:http://emojisandearthporn.com/

在众多表情包中找出一直不动的表情包,然后点击就可以进入下一关,每次的表情包都是不一样的,而且数量也会跟着增加。

image-20240408224040209


写这篇文章太难了,每一个都忍不住玩上一会。摸鱼虽好,但一定不要过度哦。

Spck Editor:代码随时续写,感受移动编程新潮流

简介

Spck编辑器是一款实用的手机编程软件,它提供了几种编程代码模板,拥有自动检测编程代码错误等功能,为编程工作带来了极大的便捷,还有内置的git客户端集成极大方便了代码的拉取和推送。

软件特色

  • 克隆公共或私人(需要应用程序密码/令牌)存储库
  • 快速片段键盘可加快代码编辑速度
  • Git 客户端集成(签出/拉取/推送/提交/日志)
  • 支持 git 的项目的差异查看器
  • 直接在当前设备上预览网页
  • 项目或文件代码搜索
  • 代码语法分析和智能自动完成器
  • 代码完成和上下文提供程序(签名/定义查找)
  • 自动代码缩进(使用 js-beautify)
  • 提供浅色/深色主题
  • 集成 JavaScript 控制台
  • 导出/导入项目/文件到 zip 文件
  • 离线工作
  • CSS 颜色选择器
  • 很酷的 JavaScript 实验室可供使用

支持的主要语言:

  • JavaScript
  • CSS
  • HTML

智能代码提示支持:

  • TypeScript、JavaScript、TSX、JSX
  • CSS、Less、SCSS
  • HTML(支持 Emmet)

其他流行语言(仅语法突出显示):

  • Python、Ruby、R、Perl、Julia、Scala
  • Java、Scala、Kotlin
  • OCaml、PHP
  • Golang、Rust、C、C#
  • 手写笔、CoffeeScript、Pug
  • Markdown、批处理、Bash
  • ActionScript、Coldfusion、HaXe

软件截图

image-20240328134035293image-20240328134044472
image-20240328134049631image-20240328134053746

安装教程

下载最新版本的安装包,一般的下载途径为Google Play,但国内访问体验不佳,可在文末找到本站提供的安装包

image-20240328134453733

在手机安装后就可以正常使用了

下载地址

官网下载:https://play.google.com/store/apps/details?id=io.spck
爱吃猫的鱼CLOUD下载:https://cloud.talen.top/s/4dHM

ServerBox:一站式服务器管理工具,提升运维效率

简介

ServerBox是一款使用Flutter开发的功能强大的Android SSH远程连接开源应用。它允许用户轻松自由地添加和管理服务器,直接在手机上进行Linux服务器的远程连接和操作,非常方便快捷。

软件特色

功能强大

  • 状态图标、SSH终端、SFTP传输、Docker管理器、进程管理器、 管理器、代码编辑器等。
  • 特殊支持:生物认证、消息推送、桌面小部件等。

易于使用

整个软件界面支持中文,清晰直观的操作界面,让用户使用体验更加流畅。

内存占用小

内存占用极小,不会给用户的设备带来额外的负担。

多平台支持

安卓、iOS、MacOS、Windows、Linux全平台支持,让用户随时随地管理服务器。

开源免费

ServerBox是开源免费的,用户可以免费下载和使用,没有任何额外费用。

软件截图

image-20240326174913339
image-20240326174919180
image-20240326175147064
image-20240326175214684
image-20240326175220756
image-20240326175226525

安装教程

下载最新版本的安装包,官方提供的安装包在GitHub,下载速度慢的话可在文末找到本站提供的安装包

image-20240326175442196

在手机安装后就可以正常使用了,如果觉着好用,推荐去给作者点个star

下载地址

官网下载:https://github.com/lollipopkit/flutter_server_box

爱吃猫的鱼CLOUD下载:https://cloud.talen.top/s/bPTM

全面详细的常用Linux命令汇总(1)

无论是Linux的新手还是老手,掌握一些常用命令都是必不可少的,熟练使用它们可以大大提高工作效率,成为工作中的得力助手。本文是常用Linux命令汇总系列文章的第一篇,全面详细的展示了10个与文件管理相关的命令。

一览表

序号命令简述分类
1ls列出目录内容文件管理
2cd切换目录文件管理
3pwd显示当前工作目录的路径文件管理
4mkdir创建新目录文件管理
5cp复制文件或目录文件管理
6mv移动或改名文件文件管理
7touch创建空文件与修改时间戳文件管理
8rm删除文件或目录文件管理
9ln为文件创建快捷方式文件管理
10cat显示文件内容文件管理

1. ls命令

ls命令是英文list的缩写,用于列出指定目录的内容,能够显示文件名、文件类型、文件大小、最后修改时间等信息

语法格式

1
ls [参数] [文件或目录名]

常用参数

1
2
3
4
5
6
7
8
9
ls -a    列出包括隐藏文件的所有文件
ls -A 列出除当前目录(.)和父目录(..)所有文件和目录
ls -d 当遇到目录时列出目录本身而非目录内的文件
ls -i 显示每个文件的索引编号(inode号)
ls -l 显示文件的属性信息,包括权限、所有者、大小、创建时间等
ls -R 递归列出目录中的所有文件和子目录
ls -S 依据内容大小将文件排序显示,最大的在最前
ls -t 按修改时间排序,最新的在最前
ls -X 依据文件扩展名排序

实例

(1)列出/bin目录下的文件

1
ls /bin

image-20240314155802479

(2)按照修改时间列出所有文件的详细信息

1
ls -Alt

image-20240314161027100

(3)结合通配符*使用,显示目录中以a开头的文件列表

1
ls a*

image-20240314164601891

(4)查看当前目录中某一目录的权限

1
ls -ld dir2

image-20240314230031404

注意

  • 对于-a-A参数,ls 命令是区分大小写的

2. cd命令

cd命令是英文change directory的缩写,用于更改当前所处的工作目录,路径可以是绝对路径,也可以是相对路径

语法格式

1
cd 目录名

常用参数&实例

1
2
3
4
5
6
cd /root/dir1/directory    切换到绝对路径
cd dir1/directory 切换到相对路径
cd .. 切换到上级目录
cd ../.. 切换到上上级目录
cd ~ 或 cd 切换到用户主目录
cd - 切换到上次访问的目录

3. pwd命令

pwd命令是英文print working directory的缩写,用于显示当前工作目录的路径,一般不需要配合任何参数去使用

语法格式

1
pwd

实例

显示当前工作目录的路径

1
pwd

image-20240315013440393

4. mkdir命令

mkdir命令是英文make directories的缩写,用于创建目录文件

语法格式

1
mkdir [参数] 目录

常用参数

1
2
3
mkdir -m    创建目录的同时设置权限
mkdir -p 递归创建多级目录
mkdir -v 显示执行过程详细信息

实例

(1)建立一个目录文件

1
mkdir dir3

image-20240314225041763

(2)创建一个新目录并赋予所有者完全权限(读、写、执行),组成员读权限和执行权限,其他用户只读权限

1
mkdir -m 754 dir4

image-20240314230231760

(3)一次性创建多个有嵌套关系的目录文件

1
mkdir -p dir3/dir33/dir333

image-20240314230514736

注意

  • 使用-p参数时,如果目录已经存在,命令不会报错,而是继续执行
  • 如果没有足够的权限或目录已存在,命令会失败

5. cp命令

cp命令是英文copy的缩写,用于复制文件或目录,将一个或多个文件或目录复制到指定位置

语法格式

1
cp [参数] 源文件或目录 目标文件或目录

常用参数

1
2
3
4
5
6
7
8
9
10
cp -a    通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容,功能等同dbR参数
cp -d 复制链接文件时,将目标文件也创建为链接文件而非普通文件,这里链接类似Windows中的快捷方式
cp -f 若目标文件已存在,则会直接覆盖,不会提示用户确认
cp -i 若目标文件已存在,对每个将要覆盖的目标文件都会提示用户确认
cp -l 用于创建硬链接,硬链接是一种指向同一文件的指针,使得多个文件名可以引用相同的数据块
cp -p 复制时保留源文件的权限、所有者和时间戳等属性信息
cp -r 复制目录时递归复制其所有子目录和文件
cp -s 用于创建符号链接(软连接),类似Windows快捷方式,是一个包含链接路径的特殊类型文件
cp -u 仅当源文件比目标文件新,或者目标文件不存在时,才进行复制
cp -v 显示执行过程详细信息

实例

(1)复制源文件到指定目录,并定义新文件的名称

1
cp file1 dir2/new_file

image-20240315004421360

(2)复制指定的源目录,并定义新目录的名称,显示执行过程详细信息

1
cp -rv dir3 dir5

image-20240315003505733

(3)复制指定文件时保留原始属性信息,并强制覆盖已有目录

1
cp -af article.md dir4

image-20240315010344208

注意

可以将一个文件通过复制来覆盖一个已有文件或者复制添加到一个目录中,但无法将一个目录通过复制来覆盖一个已有目录,如果使用cp -r 目录 已有目录命令,会把目录复制添加到已有目录中

6. mv命令

mv命令是英文move的缩写,用于移动文件或目录,与cp复制命令不同,mv命令是剪切操作,只有文件位置发生了变化,而文件总个数并没有增加

语法格式

1
mv [参数] 源文件或目录 目标文件或目录

常用参数

1
2
3
4
5
mv -f    若目标文件已存在,则会直接覆盖,不会提示用户确认
mv -i 若目标文件已存在,对每个将要覆盖的目标文件都会提示用户确认
mv -n 不覆盖已存在的目标文件
mv -u 仅当源文件比目标文件新,或者目标文件不存在时,才进行复制
mv -v 显示执行过程详细信息

实例

(1)移动源文件到指定目录,并定义新文件的名称

1
mv file2 dir1/new_file

image-20240315015109752

(2)重命名当前目录下的文件或目录的名称

1
mv file2 file3

image-20240315021423039

注意

  • mv命令会覆盖文件,为避免误删文件,可以使用-i参数
  • 如果目标文件是一个目录,源文件会被移到此目录下,且文件名不变。如果目标文件不是目录,源文件名会变为目标文件名,并覆盖已存在的同名文件

7. touch命令

touch命令用于创建文件与修改文件或目录的时间属性,若文件存在则修改文件的访问时间和修改时间为当前时间,若文件不存在则创建一个新的空文件

语法格式

1
touch [参数] 文件

常用参数

1
2
3
4
5
touch -a    只修改文件的访问时间
touch -m 只修改文件的修改时间
touch -c 如果文件不存在,不会创建新文件
touch -d 使用字符串(YYYY-MM-DD hh:mm:ss)设定时间与日期,而不是使用当前时间
touch -t 使用时间戳(YYYYMMDDhhmmss)设定时间与日期,而不是使用当前时间

实例

(1)创建出一个指定名称的空文件

1
touch file4

image-20240315222535144

(2)修改指定文件的修改时间

1
touch -md "2024-03-04 05:06:07" file1

image-20240315223428148

(3)使用通配符批量修改多个文件的访问时间,并确保不创建不存在的文件

1
touch -ad "2024-03-04 05:06:07" file*

image-20240315230629852

注意

  • 当使用-d-t参数时,确保提供的时间格式正确
  • 如果提供的文件名包含特殊字符,可能需要用引号包围起来

8. rm命令

rm命令是英文remove的缩写,用于删除文件或目录,这是一个危险的命令,如rm -rf /*会清空系统所有文件且无法恢复

语法格式

1
rm [参数] 文件或目录

常用参数

1
2
3
4
5
rm -d    仅删除无子文件的空目录
rm -f 强制删除文件,不会提示用户确认
rm -i 在删除每个文件之前都会询问用户是否确定
rm -r 递归删除目录及其全部子文件
rm -v 显示执行过程详细信息

实例

(1)强制删除指定目录及其内的全部子文件

1
rm -rf dir1

image-20240317225703255

(2)删除当前目录下的所有文件及目录,并且每个文件删除前询问用户是否确认

1
rm -ri *

image-20240317230457708

(3)删除系统的所有文件(不要尝试!!!)

1
rm -rf /*

注意

  • 谨慎使用rm命令,一般情况下删除的文件或目录无法恢复

9. ln命令

ln命令是英文link的缩写,用于为某个文件在另外一个位置建立同步的链接(硬链接)。Linux系统中的链接文件有硬链接和软链接(符号链接)两种形式,软链接相当于Windows系统中的快捷方式文件,原始文件被移动或删除后软链接文件也将无法使用;硬链接则是将文件的inode属性块进行了复制,因此把原始文件移动或删除后硬链接文件依然可以使用

语法格式

1
ln [参数] 源文件或目录 目标文件或目录

常用参数

1
2
3
4
5
6
7
ln -d    允许超级用户尝试创建指向目录的硬链接
ln -f 若目标文件已存在,则会直接覆盖,不会提示用户确认
ln -i 若目标文件已存在,对每个将要覆盖的目标文件都会提示用户确认
ln -r 根据相对位置创建软链接而非绝对路径
ln -s 创建软链接
ln -t 设置链接文件的存放目录
ln -v 显示执行过程详细信息

实例

(1)创建软链接

1
ln -s file1 file2

image-20240317170238335

(2)创建硬链接,当目标文件存在时询问是否覆盖

1
ln -i file1 file2

image-20240317170756446

注意

  • 目录只能创建软链接
  • 目录创建链接必须用绝对路径,使用相对路径创建会提示:符号连接的层数过多

10. cat命令

cat命令是英文concatenate的缩写,用于在终端设备上打印出文件内容,适合查看内容较少的纯文本文件,对于内容较多的文件查看后会在屏幕上快速滚屏看不清所显示的具体内容

语法格式

1
cat [参数] 文件

常用参数

1
2
3
cat -n    由1开始对所有输出的行数编号
cat -b 和-n相似,但对空白行不编号
cat -s 遇到有连续两行以上的空白行,就换为一行的空白行

实例

(1)查看指定文件的内容并显示行号

1
cat -n file1

image-20240320163041761

(2)把文件A的非空白行内容加上行号,之后将其附加到文件B中

1
cat -b file2 >> file3

image-20240320165734429

注意

  • cat命令默认会一次显示整个文件,如果文件过大可能会导致终端卡顿
  • cat命令可以用来创建新的空文件,但不能编辑文件

VLC:选择优秀的播放器等于享受完美的观影体验

简介

VLC Media 是一款强大的多平台视频播放软件,是VideoLAN品牌产品,它无广告且性能出色。作为自由、开源的跨平台多媒体播放器及框架,VLC 可以播放大多数多媒体文件,以及 DVD、音频 CD、VCD 和各类流媒体协议。此外,它还具有跨平台特性,拥有 Linux、Windows、Mac等版本。

软件特色

  • 多平台支持:正如我们之前提到的,VLC 支持多种操作系统,包括 Windows、Mac、Linux 等,这使得它非常灵活,用户可以在不同的设备上使用。
  • 强大的播放功能:它可以播放各种常见的多媒体文件格式,如 MP4、AVI、 MKV 等,还支持播放 DVD、音频 CD 等。
  • 开源免费:VLC 是开源软件,这意味着用户可以自由地查看和修改源代码,也可以免费使用它。
  • 无广告:用户在使用过程中不会被广告打扰,能够专注于观看视频或聆听音乐。
  • 性能出色:VLC 通常能够流畅地播放多媒体文件,并且资源占用较低,即使在低配置的设备上也能良好运行。
  • 丰富的插件和扩展:VLC 有很多插件和扩展可供选择,这可以进一步增强它的功能,例如更好的视频解码、在线视频播放等。
  • 用户友好的界面:它的界面简洁直观,易于操作,即使对于不太熟悉技术的用户也很容易上手。

软件截图

image-20240311111503029

image-20240311113037120

image-20240311113127696

image-20240311113147414

安装教程

选择符合当前计算机的安装程序或者压缩包进行下载

image-20240311133146475

*安装程序:*双击运行,选择使用的语言,然后连续下一步,其中可以选择需要的组件和安装路径,最后耐心等待一会即可安装完成

image-20240311134129519

*压缩包:*将解压后的文件夹放到合适的路径(安装路径),运行文件夹内的vlc.exe即可直接打开VLC

image-20240311135811720

下载地址

官网下载:https://www.videolan.org/vlc/

爱吃猫的鱼CLOUD下载:https://cloud.talen.top/s/YOhn

❌