第2章:Linux基础与Shell脚本
说实话,很多做量化的人一上来就搞策略、搞回测,结果连个服务器都登不上去。我见过太多这样的案例了。咱们做量化基础设施运维,Linux是绕不开的第一道坎。今天我就把最核心的东西给你捋一遍。
本章核心:掌握Linux常用命令、Vim编辑器、Shell脚本编写基础、定时任务Crontab。这四个东西,是量化运维的"四件套"。
2.1 Linux常用命令——你得会"说话"
Linux系统说白了就是个"哑巴",你不敲命令它就不动。我刚开始接触时也觉得麻烦,后来发现——嗯,这恰恰是它的优势。没有花里胡哨的界面,一切尽在掌控。
2.1.1 文件操作三板斧
我个人习惯把文件操作命令分成三组,记起来特别方便:
| 操作类型 | 命令 | 说明 |
|---|---|---|
| 查看 | ls -lh |
人性化显示文件大小 |
| 切换 | cd /path |
进入目录 |
| 复制/移动 | cp -r / mv |
递归复制或移动 |
我在项目中遇到过一个问题:有个同事用rm -rf删除了整个回测数据目录。嗯,从那以后我养成了一个习惯——删除前先ls确认,或者用mv移到回收站目录。
避坑指南:我曾经因为手快,在rm -rf ./data/后面多打了个空格,变成了rm -rf ./data/ /。后果你懂的。所以我现在都用rm -i,每次删除前确认一下。
2.1.2 进程与资源监控
做量化交易,服务器资源就是你的"弹药"。我建议你记住这几个:
top/htop—— 实时看CPU、内存占用free -h—— 内存使用情况df -h—— 磁盘空间,别让回测数据把盘撑爆了ps aux | grep python—— 找你的策略进程
你想想看,如果半夜策略停了,你连个ps都不会用,那得多被动?
2.2 Vim编辑器——逃不掉的"老朋友"
很多新人第一次进Vim就懵了——怎么退出?我当年也一样。但Vim这东西,你只要掌握三个模式、十个命令,就能应付90%的场景。
2.2.1 三个核心模式
- 普通模式:刚进入Vim就是这个模式,按
i进入插入模式 - 插入模式:可以打字了,按
Esc回到普通模式 - 命令模式:在普通模式下按
:,输入wq保存退出
我的小技巧:如果你实在不知道怎么退出,按Esc然后输入:q!,强制退出不保存。这招救过我无数次。
2.2.2 高频操作速查
| 操作 | 命令 | 场景 |
|---|---|---|
| 保存 | :w |
写了一半赶紧存 |
| 搜索 | /关键词 |
找配置文件里的某个参数 |
| 替换 | :%s/旧/新/g |
批量改策略参数 |
| 撤销 | u |
手滑了?按u |
我个人习惯用Vim来改配置文件,比如crontab -e打开的定时任务文件。别想着用图形界面,服务器上哪有那玩意儿?
2.3 Shell脚本编写基础——让机器替你干活
为什么要学Shell脚本?说白了,就是把重复的工作自动化。我每天开盘前要检查数据是否更新、进程是否存活、磁盘是否够用。这些事如果手动做,一天两天还行,时间长了绝对崩溃。
2.3.1 第一个脚本
#!/bin/bash
# 检查数据目录是否存在
DATA_DIR="/data/quant/raw"
if [ -d "$DATA_DIR" ]; then
echo "数据目录存在,开始检查文件..."
ls -lh "$DATA_DIR"
else
echo "错误:数据目录不存在!"
exit 1
fi
这个脚本我用了好几年,每次部署新服务器第一件事就是写类似的检查脚本。你想想看,如果数据目录挂载失败了,脚本能第一时间告诉你,而不是等到策略跑起来才发现——那损失可就大了。
2.3.2 变量与循环
Shell脚本里变量用起来很简单,但有个坑:赋值等号两边不能有空格。我曾经因为这个bug查了半小时。
#!/bin/bash
# 批量启动策略进程
STRATEGIES=("strategy_a" "strategy_b" "strategy_c")
for s in "${STRATEGIES[@]}"; do
echo "启动策略: $s"
nohup python3 /app/${s}/run.py > /logs/${s}.log 2>&1 &
done
echo "所有策略已启动"
重点:nohup + & 是后台运行进程的标配。加上2>&1把错误输出也重定向到日志文件,方便排查问题。
2.4 定时任务Crontab——量化交易的"闹钟"
Crontab这东西,说白了就是Linux自带的定时任务管理器。量化交易里,数据采集、策略启动、日志清理,全得靠它。
2.4.1 基本语法
# 格式:分 时 日 月 周 命令
# 每天早上8点30分拉取数据
30 8 * * * /home/quant/scripts/fetch_data.sh
# 每5分钟检查一次策略进程是否存活
*/5 * * * * /home/quant/scripts/check_alive.sh
# 每周日凌晨3点清理日志
0 3 * * 0 /home/quant/scripts/clean_logs.sh
我记得有一次,数据采集脚本因为网络波动失败了,但crontab没有重试机制。结果第二天开盘,策略用的还是昨天的旧数据。嗯,从那以后我养成了一个习惯——所有定时任务都要加日志输出。
避坑指南:我曾经在crontab里写了一个脚本,路径写的是相对路径。结果脚本执行时找不到文件。记住:crontab里的命令一定要用绝对路径,或者先在脚本里cd到目标目录。
2.4.2 管理命令
| 命令 | 作用 |
|---|---|
crontab -e |
编辑当前用户的定时任务 |
crontab -l |
查看当前用户的定时任务 |
crontab -r |
删除所有定时任务(慎用!) |
我的建议:每次修改crontab后,用crontab -l确认一下。另外,把crontab的日志重定向到文件,方便排查:30 8 * * * /script.sh >> /var/log/cron.log 2>&1
知识体系总览
下面这张图,是我自己梳理的本章知识结构。你把它存下来,以后遇到问题先看这张图,基本能找到方向。
这张图把四个模块串起来了。你从左上角开始,先学命令,再学Vim,然后写脚本,最后用Crontab调度。这就是一条完整的量化运维自动化链路。
最后说一句:这些基础工具,你花一周时间就能上手。但真正用好它们,需要你在实际项目中不断踩坑、总结。别怕犯错,每个坑都是你成长的阶梯。
公众号:蓝海资料掘金营,微信deep3321