1. 为什么Python程序员绕不开Linux:从一次线上事故说起
先讲一件真实经历。之前负责维护一个爬虫服务,本地Windows上跑得好好的,每十分钟抓一次数据,稳定运行了快一周。结果一部署到云服务器上,不到半天就挂了。远程连上去一看,进程还在,但日志文件已经膨胀到4个G,磁盘直接写满,MySQL连不上,整个服务链全崩。那次排查花了我将近三个小时,最后发现罪魁祸首是一行print——没错,就是Python里最常见的调试输出,在本地跑的时候终端能看到,但到了Linux后台用nohup启动之后,标准输出被重定向到了日志文件,每抓一次数据就写几百行日志,几分钟就能写满磁盘。
这个事故让我彻底明白了一件事:写Python代码只是工作的一半,另一半是让代码在Linux环境下稳定运行。Python是跨平台的语言,但Python程序员的工作环境几乎必然包含Linux——开发机可能是Windows或macOS,但代码最终要跑在Linux服务器上、跑在Docker容器里、跑在云函数中。如果只会写代码,不会用Linux命令去观察、定位、处理问题,出了问题就只能干瞪眼,连排查的入口都找不到。
这篇文章不是让你把Linux命令大全背下来,而是从Python程序员真实的工作流出发,挑出日常开发、调试、部署、排障中最常用、最能救命的那些命令,配合实际场景讲解。我尽量把每个命令的适用场景、常见坑、组合用法都讲透,让你看完能直接用到工作中。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文件与目录操作:先看清楚“战场”再动手
Python程序员在Linux上做文件操作,通常不是为了打命令而打命令,而是带着明确目的:项目部署、日志清理、数据文件处理、配置文件修改。这几个场景对应的命令并不复杂,但组合起来能解决大部分问题。
2.1 ls、du、df:磁盘和文件状态一眼看穿
先说最基础的ls。很多教程只教你ls -l看权限,但实际工作中我最常用的是ls -lh,加一个h参数,文件大小会以人类可读的格式显示,ls -l显示的是字节数,一个日志文件显示成20485760你还得心算这是20M还是200M,ls -lh直接显示20M,一眼就知道该不该清理。
bash复制ls -lh
# -rw-r--r-- 1 root root 20M Sep 12 10:23 app.log
du命令用于统计目录占用空间,排查“服务器磁盘满了但不知道谁占的”这类问题最有用。我常用的组合是:
bash复制# 查看当前目录下每个子目录占用大小,按人类可读格式显示
du -sh *
# 查看当前目录占用总大小
du -sh .
s表示汇总,h表示人类可读。du -sh *会把当前目录下每个文件夹和文件的大小列出来,大到小的排序用管道接一个sort -hr:
bash复制du -sh * | sort -hr
df用来查看磁盘整体使用情况,df -h一眼就能看出哪个分区满了。这里有个Python程序员容易踩的坑:很多云服务器数据盘挂载在/data或/home下,而系统盘在/,代码默认装到/root或/var下,分区满了的表现就是程序突然报No space left on device,但你看代码目录明明还有空间。所以排查这类问题第一步就是df -h,先确认是哪个分区满了。
2.2 find + grep:在文件堆里精准定位
find是Python程序员处理批量文件时的利器,尤其是当你不想写Python脚本去遍历目录的时候——对,很多时候一条find命令比写十几行os.walk更高效。最常用的几个场景:
bash复制# 查找所有Python文件
find . -name "*.py"
# 查找最近7天内修改过的文件
find . -name "*.py" -mtime -7
# 查找并删除所有__pycache__目录
find . -type d -name "__pycache__" -exec rm -rf {} +
第三个命令非常实用。Python项目跑久了,每个包目录下都会生成__pycache__文件夹,里面是一堆.pyc缓存文件。在代码迭代频繁的项目里,这些缓存有时候会导致你明明改了代码却不生效——因为解释器优先加载了缓存文件。我习惯在每次大版本迭代后清理一次:
bash复制find . -type d -name "__pycache__" -exec rm -rf {} +
grep则是搜索文件内容的利器,通常和find配合形成完整方案。比如线上出了bug,你怀疑是某个配置导致的,但不确定配置在哪个文件里,可以这样搜:
bash复制# 在当前目录的所有.py文件中搜索包含"DEBUG"的行
grep -rn "DEBUG" --include="*.py" .
# 忽略node_modules、venv等目录的搜索
grep -rn "DEBUG" --include="*.py" --exclude-dir=venv --exclude-dir=.git .
-r是递归,-n是显示行号。这个组合在排查“配置到底有没有生效”这类问题时非常好用。比如环境变量配了DEBUG=True,但代码里走的分支不符合预期,直接grep一下所有引用点,立刻能定位到是哪个文件的哪个逻辑在作怪。
2.3 一个实例:从“磁盘满了”到“找到元凶”的完整过程
有一次线上告警说磁盘使用率超过90%,我登录服务器后是这么排查的:
bash复制# 第一步:确认哪个分区满了
df -h
# 第二步:进入代码部署目录,看哪个子目录占用最大
cd /opt/myproject
du -sh * | sort -hr
# 第三步:进入占用最大的目录,按文件大小排序找大文件
cd logs
ls -lhS | head -20
ls -lhS的S参数表示按文件大小排序,配合head取前几条,马上就能看到是不是有超大日志。那次找到的是一个debug.log,已经涨到7个G,因为某次上线时有人把日志级别从INFO调成了DEBUG,导致每一条API请求都会记录完整的请求体和响应体。这种问题如果你不会用这几个命令,可能要在服务器上翻半天才能找到原因。
提示:
ls -lhS按文件大小降序排列,head -20只显示前20行。这个组合比du定位单文件更快,因为du主要用于目录,ls -lh加S排序能直接秒杀大文件定位。
3. 进程管理:让Python程序“活着”且“健康”
Python程序员最怕的几件事:服务挂了、服务假死(进程还在但不响应)、CPU被打满、内存泄漏。这些问题的排查和处理,靠的就是进程管理命令。
3.1 ps与top:盯住进程状态和资源占用
ps -ef是最常用的进程查看命令,-e表示显示所有进程,-f表示全格式输出。配合grep可以快速找到目标进程:
bash复制ps -ef | grep python
