Compare commits
4 Commits
99a79b4af6
...
7ac31a3984
| Author | SHA1 | Date | |
|---|---|---|---|
| 7ac31a3984 | |||
| 3bb7ee6796 | |||
| 12fdf56539 | |||
| 173a99a626 |
@@ -37,8 +37,8 @@ export default defineUserConfig({
|
|||||||
info: [
|
info: [
|
||||||
{
|
{
|
||||||
username: 'si-meng-spec',
|
username: 'si-meng-spec',
|
||||||
name: '祀梦',
|
name: 'si-meng-spec',
|
||||||
alias: ['祀梦', 'si-meng-spec'],
|
alias: ['si-meng-spec'],
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -20,6 +20,23 @@ export default defineNavbarConfig([
|
|||||||
text: 'C++',
|
text: 'C++',
|
||||||
link: '/programming/cplusplus/',
|
link: '/programming/cplusplus/',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
text: 'Solidity',
|
||||||
|
link: '/programming/solidity/',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: '运维',
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
text: '区块链运维',
|
||||||
|
link: '/ops/blockchain/',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Linux 运维',
|
||||||
|
link: '/ops/linux/',
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -27,11 +27,52 @@ const cPlusPlus = defineNoteConfig({
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
const solidity = defineNoteConfig({
|
||||||
|
dir: 'programming',
|
||||||
|
link: '/programming/solidity/',
|
||||||
|
sidebar: [
|
||||||
|
{ text: "Solidity 学习笔记", link: "/programming/solidity/" },
|
||||||
|
{
|
||||||
|
text: "基础语法", prefix: "/basic-syntax", items: [
|
||||||
|
{ text: "Solidity 基础语法与数据类型", link: "/programming/solidity/basic-syntax/" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
const blockchain = defineNoteConfig({
|
||||||
|
dir: 'ops',
|
||||||
|
link: '/ops/blockchain',
|
||||||
|
sidebar: [
|
||||||
|
{ text: "区块链运维指南", link: "/ops/blockchain/" },
|
||||||
|
{
|
||||||
|
text: "区块链理论基础", items: [
|
||||||
|
{ text: "区块链的基本原理", link: "/ops/blockchain/theory/basic-principles/" },
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "区块链运维", items: [
|
||||||
|
{ text: "区块链网络部署指南", link: "/ops/blockchain/deployment/" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
const linux = defineNoteConfig({
|
||||||
|
dir: 'ops',
|
||||||
|
link: '/ops/',
|
||||||
|
sidebar: [
|
||||||
|
{ text: "Linux 运维笔记", link: "/ops/linux/" },
|
||||||
|
{
|
||||||
|
text: "Linux 基础", prefix: "/linux", items: [
|
||||||
|
{ text: "Linux 基础命令详解", link: "/ops/linux/basic-commands/" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
/**
|
/**
|
||||||
* 导出所有的 note
|
* 导出所有的 note
|
||||||
*/
|
*/
|
||||||
export default defineNotesConfig({
|
export default defineNotesConfig({
|
||||||
dir: 'notes',
|
dir: 'notes',
|
||||||
link: '/',
|
link: '/',
|
||||||
notes: [LeetCode, cPlusPlus],
|
notes: [LeetCode, cPlusPlus, solidity, blockchain, linux],
|
||||||
})
|
})
|
||||||
|
|||||||
25
docs/blog/website/EdgeOne_Pages_Images.md
Normal file
25
docs/blog/website/EdgeOne_Pages_Images.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
title: 通过 EdgeOne Pages 搭建图床
|
||||||
|
createTime: 2025/09/29 02:28:17
|
||||||
|
permalink: /article/8gihio2v/
|
||||||
|
---
|
||||||
|
|
||||||
|
EdgeOne Pages 是微软提供的一个静态网站托管服务,拥有一定的免费额度,基本上够用。
|
||||||
|
|
||||||
|
## 创建一个 Git 项目
|
||||||
|
|
||||||
|
这里首先要在 Gitee 上要搭建一个项目,用来存储网站中会用到的一些图片。
|
||||||
|
Github 或 CNB 也可以,都支持的,这里的项目的目录就是到时候的访问目录。
|
||||||
|
|
||||||
|
## EdgeOne Page 中导入项目
|
||||||
|
先打开 EdgeOne Page 的[控制台](https://console.cloud.tencent.com/edgeone/pages),这里可以导入 Github、Gitee 和 CNB 的项目。
|
||||||
|
|
||||||
|
然后点击导入项目,选择 Gitee 项目,选择对应的项目,然后直接开始部署就行。
|
||||||
|
|
||||||
|
大概一分钟左右,部署完成之后,可以在项目概览中点击预览,可以预览一下资源的访问。
|
||||||
|
|
||||||
|
## 配置域名
|
||||||
|
|
||||||
|
临时链接可以正常访问的话,可以在项目总揽中点击自定义域名去配置我们的域名。
|
||||||
|
|
||||||
|
项目概览中可以添加自定义域名,输入域名即可,腾讯云有50个免费证书的额度,而且到期之后会自动释放额度,这里可以放心的点使用免费证书
|
||||||
7
docs/notes/ops/blockchain/README.md
Normal file
7
docs/notes/ops/blockchain/README.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: 区块链运维指南
|
||||||
|
createTime: 2025/09/28 07:54:17
|
||||||
|
permalink: /ops/blockchain/
|
||||||
|
---
|
||||||
|
|
||||||
|
## 区块链运维
|
||||||
226
docs/notes/ops/blockchain/blockchain-deployment.md
Normal file
226
docs/notes/ops/blockchain/blockchain-deployment.md
Normal file
@@ -0,0 +1,226 @@
|
|||||||
|
---
|
||||||
|
title: 区块链网络部署指南~(≧∇≦)ノ
|
||||||
|
description: 详细介绍区块链网络的搭建和部署过程
|
||||||
|
createTime: 2025/09/28 20:15:00
|
||||||
|
permalink: /ops/blockchain/deployment/
|
||||||
|
---
|
||||||
|
|
||||||
|
# 区块链网络部署指南~(≧∇≦)ノ
|
||||||
|
|
||||||
|
嗨~今天我们要一起学习如何搭建和部署一个区块链网络哦!是不是听起来很厉害呢?其实只要按照步骤一步步来,你也可以成为区块链部署小能手的~(๑˘ᴗ˘๑)
|
||||||
|
|
||||||
|
## 准备工作 🏗️
|
||||||
|
|
||||||
|
在开始部署之前,让我们先准备好所需的环境和工具吧:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 更新系统包
|
||||||
|
sudo apt update && sudo apt upgrade -y
|
||||||
|
|
||||||
|
# 安装必要的依赖
|
||||||
|
sudo apt install -y git curl wget docker.io docker-compose
|
||||||
|
|
||||||
|
# 启动Docker服务并设置开机自启
|
||||||
|
sudo systemctl start docker
|
||||||
|
sudo systemctl enable docker
|
||||||
|
|
||||||
|
# 添加当前用户到docker组,避免每次使用sudo
|
||||||
|
# 注意:添加后需要重新登录才能生效哦~
|
||||||
|
sudo usermod -aG docker $USER
|
||||||
|
```
|
||||||
|
|
||||||
|
## 选择区块链平台 🌈
|
||||||
|
|
||||||
|
市面上有很多不同的区块链平台,我们可以根据项目需求来选择:
|
||||||
|
|
||||||
|
- **以太坊**:最流行的智能合约平台,适合开发DApp
|
||||||
|
- **Hyperledger Fabric**:企业级联盟链解决方案
|
||||||
|
- **Polygon**:以太坊的Layer 2扩展解决方案
|
||||||
|
- **BSC**:币安智能链,高性能的智能合约平台
|
||||||
|
|
||||||
|
今天我们将以以太坊私有链为例来演示部署过程哦~
|
||||||
|
|
||||||
|
## 部署以太坊私有链 🔗
|
||||||
|
|
||||||
|
### 1. 安装Geth客户端
|
||||||
|
|
||||||
|
Geth是以太坊的官方Go语言客户端,我们需要先安装它:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 下载Geth安装包
|
||||||
|
wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.13.10-7a0c19f6.tar.gz
|
||||||
|
|
||||||
|
# 解压安装包
|
||||||
|
tar -xvf geth-linux-amd64-1.13.10-7a0c19f6.tar.gz
|
||||||
|
|
||||||
|
# 移动geth可执行文件到系统路径
|
||||||
|
sudo mv geth-linux-amd64-1.13.10-7a0c19f6/geth /usr/local/bin/
|
||||||
|
|
||||||
|
# 验证安装是否成功
|
||||||
|
geth version
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 创建创世区块配置文件
|
||||||
|
|
||||||
|
创世区块是区块链的第一个区块,我们需要创建一个配置文件来定义它的参数:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 创建一个名为genesis.json的文件
|
||||||
|
nano genesis.json
|
||||||
|
```
|
||||||
|
|
||||||
|
将以下内容复制到文件中:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"chainId": 12345,
|
||||||
|
"homesteadBlock": 0,
|
||||||
|
"eip150Block": 0,
|
||||||
|
"eip155Block": 0,
|
||||||
|
"eip158Block": 0,
|
||||||
|
"byzantiumBlock": 0,
|
||||||
|
"constantinopleBlock": 0,
|
||||||
|
"petersburgBlock": 0,
|
||||||
|
"istanbulBlock": 0,
|
||||||
|
"berlinBlock": 0,
|
||||||
|
"londonBlock": 0,
|
||||||
|
"arrowGlacierBlock": 0,
|
||||||
|
"grayGlacierBlock": 0,
|
||||||
|
"mergeForkIdTransition": 0,
|
||||||
|
"terminalTotalDifficulty": 0,
|
||||||
|
"terminalTotalDifficultyPassed": true,
|
||||||
|
"shanghaiTime": 0,
|
||||||
|
"cancunTime": 0
|
||||||
|
},
|
||||||
|
"difficulty": "0x400",
|
||||||
|
"gasLimit": "0x1000000",
|
||||||
|
"alloc": {
|
||||||
|
"0x71C7656EC7ab88b098defB751B7401B5f6d8976F": {
|
||||||
|
"balance": "0x100000000000000000000000000000000"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 初始化区块链
|
||||||
|
|
||||||
|
现在我们可以使用创世区块配置文件来初始化我们的私有链了:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 创建一个目录来存储区块链数据
|
||||||
|
mkdir -p ~/ethereum-private-chain/data
|
||||||
|
|
||||||
|
# 使用genesis.json初始化区块链
|
||||||
|
geth --datadir ~/ethereum-private-chain/data init genesis.json
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 启动区块链节点
|
||||||
|
|
||||||
|
初始化完成后,我们可以启动我们的区块链节点了:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 启动区块链节点
|
||||||
|
# --networkid 要与创世区块配置中的chainId一致
|
||||||
|
# --nodiscover 禁用节点发现机制,只允许手动添加节点
|
||||||
|
# --http 启用HTTP-RPC接口
|
||||||
|
# --http.addr 设置HTTP-RPC接口监听地址
|
||||||
|
# --http.api 启用的API模块
|
||||||
|
geth --datadir ~/ethereum-private-chain/data --networkid 12345 --nodiscover --http --http.addr "0.0.0.0" --http.api "eth,net,web3,personal,miner" console
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. 开始挖矿
|
||||||
|
|
||||||
|
在Geth控制台中,我们可以开始挖矿来生成新区块:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// 设置挖矿账户
|
||||||
|
miner.setEtherbase(eth.accounts[0])
|
||||||
|
|
||||||
|
// 开始挖矿
|
||||||
|
miner.start(1)
|
||||||
|
|
||||||
|
// 查看挖矿状态
|
||||||
|
eth.blockNumber
|
||||||
|
|
||||||
|
// 查看账户余额
|
||||||
|
eth.getBalance(eth.accounts[0])
|
||||||
|
|
||||||
|
// 停止挖矿
|
||||||
|
// miner.stop()
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. 添加其他节点(可选)
|
||||||
|
|
||||||
|
如果需要搭建多节点的区块链网络,我们可以将其他节点连接到我们的主节点:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// 在主节点上获取节点信息
|
||||||
|
admin.nodeInfo.enode
|
||||||
|
|
||||||
|
// 在其他节点的Geth控制台中添加主节点
|
||||||
|
admin.addPeer("enode://主节点的enode信息@主节点IP:30303")
|
||||||
|
|
||||||
|
// 查看已连接的节点
|
||||||
|
admin.peers
|
||||||
|
```
|
||||||
|
|
||||||
|
## 部署智能合约 🚀
|
||||||
|
|
||||||
|
区块链网络搭建完成后,我们可以部署一个简单的智能合约来测试它:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// 在Geth控制台中编写一个简单的智能合约
|
||||||
|
var helloWorldContract = eth.contract([
|
||||||
|
{"constant":true,"inputs":[],"name":"greeting","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},
|
||||||
|
{"constant":false,"inputs":[{"name":"_greeting","type":"string"}],"name":"setGreeting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},
|
||||||
|
{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}
|
||||||
|
]);
|
||||||
|
|
||||||
|
// 编译合约代码
|
||||||
|
var helloWorldCompiled = eth.compile.solidity('pragma solidity ^0.8.0; contract HelloWorld { string public greeting; constructor() { greeting = "Hello, Blockchain!"; } function setGreeting(string memory _greeting) public { greeting = _greeting; } }');
|
||||||
|
|
||||||
|
// 部署合约
|
||||||
|
var helloWorld = helloWorldContract.new({
|
||||||
|
from: eth.accounts[0],
|
||||||
|
data: helloWorldCompiled.HelloWorld.code,
|
||||||
|
gas: 1000000
|
||||||
|
});
|
||||||
|
|
||||||
|
// 查看合约地址
|
||||||
|
helloWorld.address
|
||||||
|
|
||||||
|
// 调用合约函数
|
||||||
|
helloWorld.greeting.call()
|
||||||
|
helloWorld.setGreeting("Hello, Ethereum!", {from: eth.accounts[0]})
|
||||||
|
helloWorld.greeting.call()
|
||||||
|
```
|
||||||
|
|
||||||
|
## 监控与维护 📊
|
||||||
|
|
||||||
|
区块链网络部署完成后,我们需要定期进行监控和维护:
|
||||||
|
|
||||||
|
- **节点状态监控**:检查节点是否正常运行,区块高度是否在增长
|
||||||
|
- **网络连接监控**:监控节点之间的连接状态
|
||||||
|
- **资源使用监控**:监控服务器的CPU、内存、磁盘和网络使用情况
|
||||||
|
- **日志分析**:定期查看区块链节点的日志,及时发现和解决问题
|
||||||
|
|
||||||
|
## 安全注意事项 🔒
|
||||||
|
|
||||||
|
在部署区块链网络时,安全是非常重要的:
|
||||||
|
|
||||||
|
- 不要在生产环境中使用默认的配置参数
|
||||||
|
- 定期更新节点软件到最新版本
|
||||||
|
- 使用防火墙限制对节点的访问
|
||||||
|
- 妥善保管私钥和密码
|
||||||
|
- 考虑使用多重签名机制来保护重要操作
|
||||||
|
|
||||||
|
## 小练习 🏋️♀️
|
||||||
|
|
||||||
|
现在轮到你自己动手实践了!试着按照上面的步骤部署一个以太坊私有链,然后创建一个简单的智能合约并部署到链上吧~相信自己,你一定可以做到的!(๑•̀ㅂ•́)و✧
|
||||||
|
|
||||||
|
## 写在最后~💌
|
||||||
|
|
||||||
|
今天我们学习了如何部署一个区块链网络,从准备环境到部署智能合约,每一步都很重要哦~虽然看起来步骤很多,但只要耐心地一步步来,你一定能成功的!如果你在部署过程中遇到了问题,不要灰心,可以查阅相关文档或者向社区寻求帮助。
|
||||||
|
|
||||||
|
希望这篇指南能对你有所帮助,让我们一起在区块链的世界里快乐地探索吧!(づ ̄ 3 ̄)づ
|
||||||
15
docs/notes/ops/blockchain/theory/basic-principles.md
Normal file
15
docs/notes/ops/blockchain/theory/basic-principles.md
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
title: 区块链的基本原理
|
||||||
|
createTime: 2025/09/28 12:39:11
|
||||||
|
permalink: /ops/blockchain/theory/basic-principles/
|
||||||
|
---
|
||||||
|
|
||||||
|
## 学习资料和课程推荐
|
||||||
|
关于完整的区块链原理的资料,我目前在网上很少看到,只有一些比较基础的课程和书籍。
|
||||||
|
|
||||||
|
目前在B站的话我只找到一个课程是比较推荐的,肖臻老师的[《区块链技术与应用》](https://www.bilibili.com/video/BV1Vt411X7JF/)
|
||||||
|
|
||||||
|
在Youtube上的话,可以看一看[Binance Academy](https://www.youtube.com/@BinanceAcademy)的视频,也不错。
|
||||||
|
|
||||||
|
至于书籍的话,我目前还没有看到特别好的,等我再找找吧。
|
||||||
|
|
||||||
31
docs/notes/ops/linux/README.md
Normal file
31
docs/notes/ops/linux/README.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
title: Linux 运维笔记
|
||||||
|
createTime: 2025/09/28 10:30:00
|
||||||
|
permalink: /ops/linux/
|
||||||
|
---
|
||||||
|
|
||||||
|
# Linux 运维笔记
|
||||||
|
|
||||||
|
你好呀,这里是祀梦的 Linux 运维笔记小天地~ 🌟
|
||||||
|
|
||||||
|
在这片神奇的天地里,我们将一起探索 Linux 操作系统的奥秘,学习各种实用的运维技巧。无论你是刚开始接触 Linux 的新手,还是已经有一定经验的运维工程师,相信这里都能为你提供一些有用的知识和见解哦~
|
||||||
|
|
||||||
|
## 为什么选择 Linux?
|
||||||
|
|
||||||
|
Linux 就像是一个宝藏盒子,里面装满了各种强大的工具和功能。它稳定、安全、高效,是服务器领域的佼佼者。而且最重要的是,它是开源的!这意味着我们可以自由地探索它的内部结构,甚至可以根据自己的需求进行定制~
|
||||||
|
|
||||||
|
## 笔记内容概览
|
||||||
|
|
||||||
|
这里的笔记将会涵盖以下几个方面:
|
||||||
|
|
||||||
|
- **Linux 基础命令**:从最基本的文件操作到系统管理,一步步带你熟悉 Linux 的常用命令
|
||||||
|
- **系统管理**:学习如何管理用户、进程、服务和网络
|
||||||
|
- **Shell 脚本编程**:掌握 Shell 脚本的编写技巧,让你的工作更加自动化
|
||||||
|
- **系统性能优化**:了解如何监控和优化 Linux 系统的性能
|
||||||
|
- **安全防护**:学习 Linux 系统的安全配置和防护措施
|
||||||
|
|
||||||
|
## 学习建议
|
||||||
|
|
||||||
|
学习 Linux 最好的方法就是**多实践**!不要害怕犯错,每一次错误都是成长的机会。如果你在学习过程中遇到了问题,记得多查阅文档,多和社区交流~
|
||||||
|
|
||||||
|
让我们一起开启这段精彩的 Linux 运维之旅吧! 💪
|
||||||
210
docs/notes/ops/linux/basic-commands.md
Normal file
210
docs/notes/ops/linux/basic-commands.md
Normal file
@@ -0,0 +1,210 @@
|
|||||||
|
---
|
||||||
|
title: Linux 基础命令详解
|
||||||
|
createTime: 2025/09/28 10:45:00
|
||||||
|
permalink: /ops/linux/basic-commands/
|
||||||
|
---
|
||||||
|
|
||||||
|
# Linux 基础命令详解
|
||||||
|
|
||||||
|
Hello~ 欢迎来到 Linux 命令的奇妙世界!今天,爱莉希雅将带着祀梦一起探索那些最常用、最实用的 Linux 基础命令哦~ 准备好了吗?Let's go!🚀
|
||||||
|
|
||||||
|
## 文件与目录操作
|
||||||
|
|
||||||
|
### ls - 查看目录内容
|
||||||
|
|
||||||
|
`ls` 命令就像是你的眼睛,可以帮你查看当前目录下有哪些文件和文件夹~
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看当前目录内容
|
||||||
|
ls
|
||||||
|
|
||||||
|
# 查看详细信息(包括权限、大小、修改时间等)
|
||||||
|
ls -l
|
||||||
|
|
||||||
|
# 显示所有文件(包括隐藏文件)
|
||||||
|
ls -a
|
||||||
|
|
||||||
|
# 以人类可读的方式显示文件大小
|
||||||
|
ls -lh
|
||||||
|
```
|
||||||
|
|
||||||
|
### cd - 切换目录
|
||||||
|
|
||||||
|
`cd` 命令是你的小脚丫,可以带你在不同的目录之间穿梭~
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 进入指定目录
|
||||||
|
cd /path/to/directory
|
||||||
|
|
||||||
|
# 回到上一级目录
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
# 回到主目录
|
||||||
|
cd ~
|
||||||
|
|
||||||
|
# 回到上一次所在的目录
|
||||||
|
cd -
|
||||||
|
```
|
||||||
|
|
||||||
|
### pwd - 显示当前路径
|
||||||
|
|
||||||
|
有时候我们可能会迷路,这时候 `pwd` 命令就像是指南针,可以告诉我们当前所在的位置~
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 显示当前工作目录的绝对路径
|
||||||
|
pwd
|
||||||
|
```
|
||||||
|
|
||||||
|
### mkdir - 创建目录
|
||||||
|
|
||||||
|
想要创建新的文件夹?`mkdir` 命令可以帮你实现这个愿望~
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 创建一个新目录
|
||||||
|
mkdir new_directory
|
||||||
|
|
||||||
|
# 递归创建多级目录
|
||||||
|
mkdir -p parent/child/grandchild
|
||||||
|
```
|
||||||
|
|
||||||
|
### rm - 删除文件或目录
|
||||||
|
|
||||||
|
`rm` 命令可以帮你清理不需要的文件和目录,但要小心使用哦,删除后可是很难恢复的~
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 删除文件
|
||||||
|
rm filename.txt
|
||||||
|
|
||||||
|
# 强制删除文件(不提示)
|
||||||
|
rm -f filename.txt
|
||||||
|
|
||||||
|
# 删除目录
|
||||||
|
rm -r directory
|
||||||
|
|
||||||
|
# 强制删除目录(不提示)
|
||||||
|
rm -rf directory
|
||||||
|
```
|
||||||
|
|
||||||
|
## 文件内容查看
|
||||||
|
|
||||||
|
### cat - 查看文件全部内容
|
||||||
|
|
||||||
|
`cat` 命令就像是一个快速阅读器,可以帮你一次性查看整个文件的内容~
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看文件内容
|
||||||
|
cat filename.txt
|
||||||
|
|
||||||
|
# 显示行号
|
||||||
|
cat -n filename.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### less - 分页查看长文件
|
||||||
|
|
||||||
|
如果文件太长,一次性看不完怎么办?`less` 命令可以帮你分页查看~
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 分页查看文件内容
|
||||||
|
less filename.txt
|
||||||
|
|
||||||
|
# 在 less 模式下,可以使用方向键上下滚动,按 q 退出
|
||||||
|
```
|
||||||
|
|
||||||
|
### head 和 tail - 查看文件开头和结尾
|
||||||
|
|
||||||
|
只想看文件的开头或结尾部分?`head` 和 `tail` 命令可以满足你的需求~
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看文件前 10 行
|
||||||
|
head filename.txt
|
||||||
|
|
||||||
|
# 查看文件前 20 行
|
||||||
|
head -20 filename.txt
|
||||||
|
|
||||||
|
# 查看文件最后 10 行
|
||||||
|
tail filename.txt
|
||||||
|
|
||||||
|
# 实时查看文件更新(常用于查看日志)
|
||||||
|
tail -f filename.log
|
||||||
|
```
|
||||||
|
|
||||||
|
## 文本搜索
|
||||||
|
|
||||||
|
### grep - 搜索文本内容
|
||||||
|
|
||||||
|
`grep` 命令就像是一个侦探,可以帮你在文件中搜索特定的文本~
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 在文件中搜索特定文本
|
||||||
|
grep "search_text" filename.txt
|
||||||
|
|
||||||
|
# 忽略大小写搜索
|
||||||
|
grep -i "search_text" filename.txt
|
||||||
|
|
||||||
|
# 显示匹配行及前后几行
|
||||||
|
grep -A 5 -B 5 "search_text" filename.txt
|
||||||
|
|
||||||
|
# 递归搜索目录下所有文件
|
||||||
|
grep -r "search_text" directory/
|
||||||
|
```
|
||||||
|
|
||||||
|
## 系统信息查看
|
||||||
|
|
||||||
|
### uname - 查看系统信息
|
||||||
|
|
||||||
|
想要了解你的 Linux 系统是什么版本?`uname` 命令可以告诉你~
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看系统内核信息
|
||||||
|
uname -a
|
||||||
|
```
|
||||||
|
|
||||||
|
### top - 查看进程信息
|
||||||
|
|
||||||
|
`top` 命令就像是系统的仪表盘,可以实时显示系统的运行状态和进程信息~
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看系统进程信息
|
||||||
|
top
|
||||||
|
|
||||||
|
# 在 top 模式下,可以按 q 退出
|
||||||
|
```
|
||||||
|
|
||||||
|
## 网络命令
|
||||||
|
|
||||||
|
### ping - 测试网络连接
|
||||||
|
|
||||||
|
想知道你的电脑能不能连接到某个网站?`ping` 命令可以帮你测试~
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 测试网络连接
|
||||||
|
ping www.example.com
|
||||||
|
```
|
||||||
|
|
||||||
|
### ifconfig/ip - 查看网络接口信息
|
||||||
|
|
||||||
|
想了解你的网络配置?`ifconfig` 或 `ip` 命令可以帮你查看~
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看网络接口信息
|
||||||
|
ifconfig
|
||||||
|
# 或者
|
||||||
|
ip addr
|
||||||
|
```
|
||||||
|
|
||||||
|
## 小练习
|
||||||
|
|
||||||
|
现在,让我们来做一个小练习吧!尝试使用今天学到的命令完成以下任务:
|
||||||
|
|
||||||
|
1. 在家目录下创建一个名为 `practice` 的文件夹
|
||||||
|
2. 进入 `practice` 文件夹,创建一个名为 `notes.txt` 的文件
|
||||||
|
3. 使用 `cat` 命令查看该文件(虽然现在它是空的)
|
||||||
|
4. 返回上一级目录,然后使用 `ls -la` 查看所有文件和目录的详细信息
|
||||||
|
|
||||||
|
怎么样?你都完成了吗?如果遇到了问题,不要着急,多试几次就会熟悉啦~ 😊
|
||||||
|
|
||||||
|
## 小结
|
||||||
|
|
||||||
|
今天我们学习了很多实用的 Linux 基础命令,这些命令就像是 Linux 世界的积木,只要你熟练掌握它们,就可以搭建出各种各样的奇妙作品~ 记得要多多练习哦,实践出真知嘛!
|
||||||
|
|
||||||
|
下次我们将学习更多高级的 Linux 命令和技巧,敬请期待~ 拜拜~ 👋
|
||||||
9
docs/notes/programming/solidity/README.md
Normal file
9
docs/notes/programming/solidity/README.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
title: Solidity 学习笔记
|
||||||
|
description: 记录Solidity智能合约开发的学习心得和基础知识
|
||||||
|
createTime: 2025/09/28 19:39:00
|
||||||
|
permalink: /programming/solidity/
|
||||||
|
---
|
||||||
|
|
||||||
|
## Solidity 智能合约概述
|
||||||
|
|
||||||
185
docs/notes/programming/solidity/basic-syntax.md
Normal file
185
docs/notes/programming/solidity/basic-syntax.md
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
---
|
||||||
|
title: Solidity 基础语法与数据类型
|
||||||
|
createTime: 2025/09/22 10:30:00
|
||||||
|
permalink: /programming/solidity/basic-syntax/
|
||||||
|
---
|
||||||
|
|
||||||
|
# Solidity 基础语法与数据类型~(≧∇≦)ノ
|
||||||
|
|
||||||
|
嗨~欢迎来到 Solidity 基础语法的学习时间!今天我们要一起探索 Solidity 这门神奇语言的基本结构和数据类型哦~准备好了吗?Let's go!(๑>◡<๑)
|
||||||
|
|
||||||
|
## 智能合约的基本结构 🏗️
|
||||||
|
|
||||||
|
让我们先来看一个最简单的 Solidity 智能合约是什么样子的吧:
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
pragma solidity ^0.8.0;
|
||||||
|
|
||||||
|
contract HelloWorld {
|
||||||
|
// 状态变量
|
||||||
|
string public greeting = "Hello, World!";
|
||||||
|
|
||||||
|
// 函数
|
||||||
|
function setGreeting(string memory _greeting) public {
|
||||||
|
greeting = _greeting;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getGreeting() public view returns (string memory) {
|
||||||
|
return greeting;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
是不是看起来有点像其他编程语言呀?让我们来一点一点地了解它吧~
|
||||||
|
|
||||||
|
## 版本声明和许可证 📜
|
||||||
|
|
||||||
|
在 Solidity 合约的最开始,我们需要添加两行重要的声明:
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
pragma solidity ^0.8.0;
|
||||||
|
```
|
||||||
|
|
||||||
|
- **许可证声明**:告诉别人你的代码使用什么许可证,可以自由使用吗?
|
||||||
|
- **版本声明**:指定合约使用的 Solidity 编译器版本,`^0.8.0` 表示可以使用 0.8.0 及以上的版本哦~
|
||||||
|
|
||||||
|
## 数据类型 🌈
|
||||||
|
|
||||||
|
Solidity 有很多有趣的数据类型,让我们来认识一下它们吧~
|
||||||
|
|
||||||
|
### 值类型
|
||||||
|
|
||||||
|
这些类型在赋值时会直接复制值哦~
|
||||||
|
|
||||||
|
#### 布尔型 (Boolean)
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
bool public isActive = true;
|
||||||
|
bool public isPaused = false;
|
||||||
|
```
|
||||||
|
|
||||||
|
布尔型只有两个值:`true` 和 `false`,就像开关一样简单!(๑˘ᴗ˘๑)
|
||||||
|
|
||||||
|
#### 整型 (Integer)
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
int public negativeNumber = -42;
|
||||||
|
uint public positiveNumber = 42;
|
||||||
|
|
||||||
|
// 你还可以指定位数哦~
|
||||||
|
uint8 public smallNumber = 255; // 0-255
|
||||||
|
uint256 public bigNumber = 1000000000000000000; // 这是 1 以太币的 wei 值哦~
|
||||||
|
```
|
||||||
|
|
||||||
|
整型分为有符号(`int`)和无符号(`uint`)两种,可以存储正数和负数呢~
|
||||||
|
|
||||||
|
#### 地址型 (Address)
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
address public owner = 0x71C7656EC7ab88b098defB751B7401B5f6d8976F;
|
||||||
|
|
||||||
|
// 可以转账的地址类型
|
||||||
|
address payable public recipient = payable(0x71C7656EC7ab88b098defB751B7401B5f6d8976F);
|
||||||
|
```
|
||||||
|
|
||||||
|
地址类型非常特别,它用于存储以太坊账户的地址,就像是账户的身份证号码一样~`address payable` 还可以接收以太币转账呢!
|
||||||
|
|
||||||
|
### 引用类型
|
||||||
|
|
||||||
|
这些类型在赋值时只会传递引用,而不是复制整个值哦~
|
||||||
|
|
||||||
|
#### 字符串 (String)
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
string public message = "Hello, Solidity!";
|
||||||
|
string public name = "祀梦";
|
||||||
|
```
|
||||||
|
|
||||||
|
字符串用于存储文本数据,就像你平时写的便签一样~
|
||||||
|
|
||||||
|
#### 数组 (Array)
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
// 固定大小的数组
|
||||||
|
uint[5] public fixedArray = [1, 2, 3, 4, 5];
|
||||||
|
|
||||||
|
// 动态大小的数组
|
||||||
|
uint[] public dynamicArray;
|
||||||
|
|
||||||
|
// 你还可以在函数中这样使用哦~
|
||||||
|
function addNumber(uint _number) public {
|
||||||
|
dynamicArray.push(_number);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
数组就像是一个收纳盒,可以按顺序存放多个相同类型的数据呢~
|
||||||
|
|
||||||
|
#### 映射 (Mapping)
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
// 映射:地址 => 余额
|
||||||
|
mapping(address => uint) public balances;
|
||||||
|
|
||||||
|
// 使用方式
|
||||||
|
function deposit() public payable {
|
||||||
|
balances[msg.sender] += msg.value;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
映射是 Solidity 中非常强大的数据结构,就像是一个魔法字典,可以通过键快速找到对应的值~
|
||||||
|
|
||||||
|
## 变量作用域 🔍
|
||||||
|
|
||||||
|
在 Solidity 中,变量有不同的作用域哦:
|
||||||
|
|
||||||
|
### 状态变量
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
contract MyContract {
|
||||||
|
// 状态变量:存储在区块链上的
|
||||||
|
uint public myStateVariable = 42;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
状态变量是存储在区块链上的,所有合约函数都可以访问它们,就像是合约的公共记忆一样~
|
||||||
|
|
||||||
|
### 局部变量
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function myFunction() public {
|
||||||
|
// 局部变量:只在函数内部可见
|
||||||
|
uint myLocalVariable = 100;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
局部变量只在定义它们的函数内部可见,函数执行结束后就会消失哦~
|
||||||
|
|
||||||
|
### 全局变量
|
||||||
|
|
||||||
|
```solidity
|
||||||
|
function getSender() public view returns (address) {
|
||||||
|
// msg.sender 是一个全局变量,包含当前调用者的地址
|
||||||
|
return msg.sender;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
全局变量是 Solidity 内置的特殊变量,可以在任何地方使用,它们提供了关于区块链和交易的重要信息呢~
|
||||||
|
|
||||||
|
## 小练习 🏋️♀️
|
||||||
|
|
||||||
|
现在让我们来做一个小练习吧!试着编写一个简单的计数器合约,包含以下功能:
|
||||||
|
|
||||||
|
1. 一个状态变量来存储计数值
|
||||||
|
2. 一个函数来增加计数
|
||||||
|
3. 一个函数来减少计数
|
||||||
|
4. 一个函数来获取当前计数值
|
||||||
|
|
||||||
|
你可以做到吗?相信自己,你一定可以的!(๑•̀ㅂ•́)و✧
|
||||||
|
|
||||||
|
## 写在最后~💌
|
||||||
|
|
||||||
|
今天我们学习了 Solidity 的基础语法和数据类型,这些都是构建智能合约的基石哦~虽然一开始可能会觉得有点复杂,但只要多练习,你一定会越来越熟练的!下节课我们将学习 Solidity 的函数和修饰器,敬请期待吧~
|
||||||
|
|
||||||
|
如果有任何问题,欢迎随时提问哦~让我们一起在区块链的世界里快乐地探索吧!(づ ̄ 3 ̄)づ
|
||||||
Reference in New Issue
Block a user