以太坊作为全球第二大区块链平台,其核心交互工具之一便是geth(Go-Ethereum)。geth是以太坊官方实现的Go语言客户端,它不仅能让用户连接到以太坊网络,还提供了节点管理、账户操作、智能合约交互、交易发送等丰富功能,本文将从基础环境搭建开始,逐步讲解geth命令的运行方法,涵盖常用操作场景,帮助读者快速上手。
在运行geth命令前,需先安装对应操作系统的客户端,以下是不同系统的安装方法:

geth-windows-amd64-1.13.0-rc1.zip)。geth.exe所在路径添加到系统PATH环境变量,方便在命令行直接调用geth命令。brew install geth
geth可执行文件移动到/usr/local/bin目录。sudo apt update sudo apt install geth
chmod x geth sudo mv geth /usr/local/bin/
安装完成后,打开终端(Windows为CMD或PowerShell,macOS/Linux为Terminal),输入以下命令验证:
geth version
若显示geth版本信息(如Version: 1.13.0-rc1),则表示安装成功。
geth命令的核心功能通过子命令实现,常见子命令包括account(账户管理)、node(节点管理)、attach(交互式控制台)、wallet(钱包管理)等,以下是关键操作场景的命令示例。
geth启动时需指定网络类型(主网、测试网或私有链),以下是常见启动方式:
主网是正式运行的以太坊网络,启动后会同步全量数据(占用大量磁盘空间和带宽):
geth --mainnet
启动后,geth会自动连接到主网节点,开始同步区块数据(首次启动可能需要数小时甚至数天)。

测试网(如Goerli、Sepolia)用于测试,无需同步全量数据,适合开发和调试,以Goerli测试网为例:
geth --goerli
启动后,geth会同步测试网数据(数据量较小,通常几十GB即可)。
开发时可能需要搭建本地私有链,可通过自定义创世文件实现:
genesis.json): {
"config": {
"chainId": 15, // 私有链ID(需唯一)
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc": {}, // 预分配账户(可选)
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x4000", // 初始难度
"extraData": "",
"gasLimit": "0xffffffff",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
} geth --datadir "./private-chain" init genesis.json
geth --datadir "./private-chain" --networkid 15 --http --http.addr "0.0.0.0" --http.port "8545" --http.api "personal,eth,net,web3"
参数说明:
--datadir:指定数据存储目录(默认为~/.ethereum); --networkid:私有链网络ID(需与创世文件中的chainId一致); --http:启用HTTP-RPC服务,方便外部应用连接; --http.addr和--http.port:HTTP服务监听地址和端口; --http.api:开放的API接口(如personal用于账户管理,eth用于以太坊核心功能)。以太坊账户通过地址和私钥管理,geth的account子命令可完成账户创建、查看、导入导出等操作。

geth account new
执行后会提示输入密码(账户密码用于加密私钥,需妥善保管),成功后返回账户地址:
Address: {0x1234567890abcdef1234567890abcdef12345678}
geth account list
会显示数据目录下的所有账户地址及对应的加密文件路径(如UTC--2023-10-01T12-00-00.0Z--0x1234...)。
若已有账户的私钥或Keystore文件,可通过以下命令导入:
geth account import --datadir "./private-chain" /path/to/private.key
geth account import /path/to/UTC--...--0x1234...
导入时需输入Keystore文件的加密密码。
geth提供基于JavaScript的交互式控制台(IPC或HTTP连接),可实时执行节点操作、调用API,启动节点后,通过以下命令进入控制台:
geth attach
IPC方式通过本地套接字连接,无需网络通信,响应更快。
若节点启用了HTTP-RPC服务,可通过以下方式连接:
geth attach http://localhost:8545
进入控制台后,可输入以下命令(以JavaScript语法执行):
查看节点信息:
eth.protocolVersion // 查看协议版本 eth.syncing // 查看同步状态(null表示同步完成) net.peerCount // 查看连接的节点数量
账户操作:
eth.accounts // 查看本地账户列表 personal.unlockAccount(eth.accounts[0], "password") // 解锁账户(发送交易前需解锁) personal.newAccount() // 创建新账户(需输入密码)
交易操作:
// 查询账户余额(单位:Wei)
eth.getBalance("0x1234567890abcdef1234567890abcdef12345678")
// 发送交易(从账户0向账户1转账1 ETH)
eth.sendTransaction({
from: eth.accounts[0],
to: "0xabcdef1234567890abcdef1234567890abcdef",
value: web3.toWei(1, "ether"),
gas: 21000
}) 智能合约交互(需先部署合约):
// 假设已部署合约,合约地址为0x123...,ABI为contractAbi
let contract = new web3.eth.Contract(contractAbi, "0x123...")
contract.methods.transfer("0x456...", 100).send({from: eth.accounts[0]})