第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

知识体系总览

下面这张图,是我自己梳理的本章知识结构。你把它存下来,以后遇到问题先看这张图,基本能找到方向。

第2章:Linux基础与Shell脚本 Linux常用命令 文件操作 进程监控 磁盘管理 网络检查 Vim编辑器 三种模式 搜索替换 保存退出 撤销恢复 Shell脚本 变量定义 条件判断 循环遍历 函数封装 定时任务Crontab 语法格式 任务管理 日志配置 异常处理 核心目标:用Linux命令操作 → 用Vim编辑 → 用Shell脚本自动化 → 用Crontab定时执行 形成一个完整的量化运维自动化闭环 量化运维自动化闭环 持续优化 → 持续自动化

这张图把四个模块串起来了。你从左上角开始,先学命令,再学Vim,然后写脚本,最后用Crontab调度。这就是一条完整的量化运维自动化链路。

最后说一句:这些基础工具,你花一周时间就能上手。但真正用好它们,需要你在实际项目中不断踩坑、总结。别怕犯错,每个坑都是你成长的阶梯。


公众号:蓝海资料掘金营,微信deep3321