Python开发必会:Linux命令行基础操作与实战指南 先把最容易被忽略的一件事说在前面学Python不一定非得用Linux但如果你以后要写脚本、部署服务、处理数据迟早要跟Linux命令行打交道。我在带某个实战项目的时候有个同学在Windows上把代码跑通了结果一放到服务器上就懵了——文件路径不对、权限不够、进程杀不掉最后发现连日志都不知道去哪看。问题不在于Python代码本身而是他根本没掌握Linux最基本的那批命令。所以这一篇我把Linux里Python开发绕不开的基础命令完整捋一遍内容偏实操不讲多余的理论适合刚接触Linux、想把Python跑起来的同学直接照着用。1. 为什么Python开发绕不开Linux命令行先解决学它到底干嘛用的问题很多人一看到黑乎乎的终端窗口就头疼觉得图形界面明明点几下就能完成的事为什么非要敲命令。但Python的实际工作场景里命令行是绕不开的。原因很直接服务器上没有图形界面你连桌面环境都装不了所有操作只能靠命令行完成。哪怕你只是在本地学习用Linux终端执行Python脚本和看输出也比来回切换鼠标高效得多。另一个原因是权限模型。Windows默认把文件权限藏得比较深你不需要关心谁能读、谁能改。Linux则把文件归属和权限位放在明面上三个字符就能看出某个文件是不是可执行。Python脚本经常要设置成可执行权限然后直接当作命令调用这跟Windows下双击运行完全不是一个思路。还有一点最实际Python生态里大量工具和部署方案都以Linux为第一优先支持平台。同一段代码、同样的依赖管理在Linux下出错概率远低于Windows网上搜到的资料也以Linux命令为主。与其等到部署时手忙脚乱不如一开始就直接在Linux环境里练习。所以下面所有内容我都基于一个假设你的机器上已经装了某个Linux发行版或者Windows里开了虚拟机和WSL。没有也没关系命令本身是通用的你可以先把操作逻辑记住。2. 文件导航与查看先把我在哪、这里有什么、文件是啥搞清楚2.1 pwd、cd、ls最常敲的三个命令在终端里首先要解决的是位置感。pwdprint working directory直接输出当前所在绝对路径。别小看这个命令脚本里拼接路径时你最好先确认自己到底站在哪个目录下。cdchange directory负责切换目录。常用写法有cd ..回到上一级cd ~回到当前用户主目录cd -回到上一次所在的目录。最后这个用法特别实用在几个深层次目录之间来回跳转时省去重复输入一长串路径的麻烦。ls是查看目录内容的命令。基础用法是ls直接列出当前目录内容ls -l显示详细信息权限、属主、大小、修改时间ls -a显示包括隐藏文件在内的所有文件ls -lh则把文件大小显示成K、M、G这种人类易读的格式。实际工作中我几乎都用ls -lh因为一眼扫过去就能判断目录里有没有大文件。这里有个小细节值得说Linux下文件名以点开头的属于隐藏文件最常见的.git、.env、.config都是隐藏的。初次排查问题要先想到ls -a看一眼是否存在隐藏文件不然会漏掉配置线索。pwd cd /home/project cd ../ ls -lh ls -a2.2 cat、less、tail按场景选择查看文件的方式cat适合查看内容很短的小文件比如刚写好的Python脚本、配置文件直接cat xxx.py把整个内容打出来。但碰上日志文件、超过几万行的文件千万别用cat终端会被内容刷爆看起来非常痛苦。less更适合大文件。进入之后可以上下翻页按/搜索关键字按q退出。用less打开文件后根本不需要一次性加载全部内容性能上更安全排查日志时比cat体验好太多。tail则是查看文件末尾内容的利器尤其是日志。开发调试时最常用的写法是tail -f 文件名它会持续跟踪文件新增内容新日志一写进来就立刻显示在终端上。启动Python服务后观察打印的日志就是靠tail -f实现的。需要看最后100行时用tail -100 文件名。cat requirements.txt less app/logs/error.log tail -100 app/logs/app.log tail -f app/logs/app.log2.3 which、find、locate定位程序与文件which python3可以找到Python解释器的安装路径。如果机器上装了好几个Python版本通过which能确认自己当前调用的是哪一个避免出现系统里明明有包代码却报ModuleNotFoundError的诡异问题。find是功能更强大的文件搜索工具。基本格式是find 搜索路径 -name 文件名。比如find / -name settings.py会在整个系统范围内找这个文件。更高级一点可以用find . -name *.py -mtime -1查找最近一天内被修改过的所有Python文件排查改动时很方便。locate也可以查找文件后台有索引速度更快但需要提前用updatedb更新索引新创建的文件有时搜不到。日常使用我更推荐find虽然没有locate快但结果更可靠也不依赖索引。2.4 一个快速上手场景假设你要去查看某个Python脚本的内容完整操作如下cd ~/project pwd ls -lh cat main.py小项目阶段基本就这几条命令来回用。别贪多先把位置感建立起来后面遇到权限问题、进程问题再逐步扩展技能就够了。3. 文件操作与权限创建、复制、移动、删除、赋权每一步都有坑3.1 touch、mkdir创建文件与目录touch test.py如果目标文件不存在会创建一个空文件如果文件已存在则只更新修改时间。新手容易把touch理解成新建文件专用命令事实上它更常用于快速生成空文件配合编辑器写入内容。mkdir负责创建目录mkdir -p a/b/c会递归创建多级目录没有-p参数则会报错目录不存在。创建完目录后可以顺手rmdir删除空目录但rmdir只能删空目录目录里只要有一个文件它就会拒绝执行。所以实际工作中删除目录用得更多的还是rm。3.2 cp、mv、rm复制、移动与删除cp复制文件常用写法是cp a.py b.py把a.py内容复制为b.py。复制整个目录需要加-r参数cp -r 目录A 目录B。这里有一个新手常见的坑只写cp而漏了-r结果目录没复制成功反而报了一堆错。mv既可以移动文件也可以重命名。mv old.py new.py就是重命名mv file.py /home/user/backup/则是移动。mv因为不涉及内容拷贝在同一文件系统下速度非常快也常被用来做临时改名备份。rm删除文件rm -r 目录递归删除目录。这个命令要特别小心因为Linux没有回收站一旦删除很难找回。我自己的习惯是先ls看清楚要删什么再执行删除命令。生产服务器上的重要目录建议在删除前先重命名加个.bak后缀确定没问题后过几天再真正删除。touch main.py mkdir -p src/models cp config.example.py config.py mv config.py config_backup.py rm config_backup.py rm -r src3.3 chmod与文件权限三件套ls -l输出的第一列比如-rw-r--r--就是权限位。十个字符里第一个表示文件类型后面九个分成三组分别对应属主、属组、其他用户。r是读、w是写、x是执行。chmod可以按符号方式或数字方式修改权限工作中数字方式更常用。权限值对应关系是r4w2x1。比如chmod 755 文件名表示属主有rwx属组和其他用户有r-x。chmod x 脚本.py则是给所有用户追加执行权限这两种写法我都会配合使用。Python脚本需要直接运行时通常要给它加执行权限chmod x run.py ./run.py把脚本变成可执行文件之后通过./run.py就能直接运行而不是每次用python3 run.py。注意Linux下运行当前目录文件要用./前缀不能直接输入文件名这是很多新手第一次在Linux里执行程序时被卡住的地方。如果担心权限设置错误可以用chown修改文件的属主和属组。chown 用户:组 文件名是最基本的写法。初学阶段用到的机会不多但遇到文件明明存在却报Permission denied时就该意识到这是权限问题。经验提醒看权限时不仅要看自己有没有权限还要看当前登录的用户到底是谁。用whoami确认身份很多没权限的问题根源其实是登录用户不对。4. 进程与运行环境用Python脚本的时候怎么起、怎么看、怎么停4.1 前台运行与Python环境确认写Python代码最基础的操作是python3 文件名.py。但实际开发中建议优先用python命令确认版本python --version。很多机器上同时存在Python 2和Python 3直接敲python可能会进到旧版本环境导致语法不兼容。统一使用python3可以让意外少很多。如果项目中使用了虚拟环境进入虚拟环境后命令会变成python因为虚拟环境已经把解释器路径切换成项目内部的Python。判断方式很简单在终端里敲which python看输出的路径是不是在项目的venv目录下。依赖环境检查也要养成习惯pip list能查看当前环境已安装的包pip freeze requirements.txt则把依赖列表导出成文件。团队协作时这个requirements.txt就是别人复现环境的依据。4.2 后台运行nohup与写一个需要长时间运行的Python服务时直接在前台跑会让终端被占用一旦关闭窗口进程就断了。通用做法是使用nohup加nohup python3 app.py app.log 21 拆开看nohup让进程忽略挂断信号关闭终端后程序继续跑把标准输出写入app.log21把错误输出也合并到同一个文件里结尾的是把进程放到后台运行。这一条命令是部署轻量服务时最常用的后台启动方式每次写代码前先把这个结构记熟能省很多事。启动后台任务之后屏幕上会打印一个进程号PID。不要把PID记在本子上直接用下面的方法查进程更靠谱。4.3 ps、grep、kill查找和结束进程ps -ef显示系统当前所有进程的详细信息输出里包含PID进程号、PPID父进程号、启动时间和执行命令。因为输出内容非常多通常会配合grep过滤ps -ef | grep python这个组合的含义是先列出所有进程再从结果中筛选出和python相关的行。查出来的PID就是定位进程的关键。确认了PID之后用kill PID结束进程。如果进程不响应可以kill -9 PID强制杀死。这里有个必须重视的先后顺序先尝试平滑结束实在不行才用-9因为-9会直接让进程异常退出可能来不及保存数据或清理临时文件。ps -ef | grep app.py kill 12345 kill -9 123454.4 标准输出与错误输出分开看很多人第一次跑Python脚本看到终端没有输出就以为程序卡死了其实可能是输出被缓冲了或者日志写进了文件。调试时标准输出stdout和标准错误stderr最好分开落盘python3 app.py stdout.log 2 stderr.log这样正常日志和错误日志各归各的文件排查问题时不用在同一个文件里来回滚动。后台运行时21合并是一种偷懒做法只适合快速验证阶段正式排查问题时不建议合并。5. 文本处理三件套与重定向处理日志、筛选数据、拼接命令的底层逻辑5.1 grep在一堆内容里找出你要的grep在日志分析和代码搜索里出场率极高。基础用法是grep 关键字 文件名比如grep ERROR app.log找出所有包含ERROR的行。常用参数里-n会显示行号-i忽略大小写-r让grep递归搜索整个目录。圆周率记忆里有一个典型的场景在pipeline日志里筛某个请求ID。一个十几万行的日志用编辑器手工翻找根本不现实grep一秒钟就出结果。命令行处理日志效率高核心就是这个工具。grep -n ERROR app.log grep -ri timeout ./src/5.2 管道符把多个命令串起来管道符|的作用是把前一个命令的输出作为后一个命令的输入。这是Linux命令行最有设计感的地方。比如只查看日志里包含ERROR的前10行grep ERROR app.log | head -10再比如统计目录下Python文件的数量find . -name *.py | wc -l我不建议刚上手时背太多种组合先把| grep这个固定搭配记牢就够用。上面提到的ps -ef | grep python本质上也是管道。5.3 重定向输出的去向由你决定可以把命令输出覆盖写入文件则是追加写入。2把错误输出单独写文件。这些符号在后台执行Python脚本时已经出现过了现在把原理说明白标准输入、标准输出、标准错误是三个独立的数据流重定向的本质是改变数据流的去向。有个常见问题值得留意python3 app.py app.log只能捕获标准输出如果代码里用print打印正常信息和traceback报错信息两者会走不同的流。所以排查异常时务必同时看两个文件或者合并输出否则容易漏掉关键报错。区分清楚和很重要写错一次就把之前的日志覆盖了。生产环境里我一般都用追加防止历史记录被清空。6. vim的基础操作命令行里逃不开的文件编辑器6.1 为什么一定要会一点vim在Linux服务器上很多情况下你只有命令行环境没有图形编辑器可用。尽管可以用scp把文件传到本地改完再传回去但紧急修复配置文件时学会vim最省事。我对初学者的建议是不需要成为vim高手但打开、编辑、保存、退出这四件事必须熟练。6.2 三种模式和必会操作vim本身分为命令模式、插入模式、末行模式。刚打开文件时处于命令模式按i进入插入模式可编辑文本按Esc回到命令模式在命令模式下输入:进入末行模式。最基本的操作序列vim 文件名打开或新建文件。按i进入插入模式开始编辑。编辑完毕按Esc回到命令模式。输入:wq保存并退出。如果不想保存输入:q!强制退出不保存。查找和替换是日常高频操作。命令模式下输入/关键字然后回车按n跳转到下一个匹配位置。全文替换用末行模式:s/旧内容/新内容/g替换当前行:%s/旧内容/新内容/g替换全文。i Esc :wq :%s/old_text/new_text/g6.3 新手最容易犯的错新手最常见的惊慌局面打开文件后不知道怎么退出按了很多按键没反应最后直接关掉终端留下了swp锁文件。下次再打开文件vim会提示检测到交换文件不处理的话就一直无法编辑。解决办法是先看一眼提示里的选项一般选择eedit anyway就能继续编辑。处理完后如果不需要保留那个锁文件用rm .文件名.swp删除即可。这个坑几乎人人都会遇到提前了解能少一次手心冒汗。7. 网络与远程操作本地Linux和服务器之间的文件往来7.1 ssh连接远程机器很多Python项目部署在远程服务器上本地使用ssh连接是最常见操作。基本命令是ssh 用户名主机IP。第一次连接时终端会提示确认主机指纹输入yes并回车即可。连接成功后你就进入了远程机器的命令行。接下来的操作跟本地Linux完全一致用前面学过的命令继续管理远程环境。退出连接用exit或logout。7.2 scp复制文件的小技巧要从本地把代码上传到服务器用scp是最直接的方式。基本格式scp ./local_file.py 用户名主机IP:/远程目录/反过来从服务器下载文件scp 用户名主机IP:/远程目录/remote_file.py ./scp比直接手写ftp命令直观。不过传输大目录时scp不如rsync高效。rsync支持断点续传和增量同步部署代码时会更有优势。初次接触先掌握scp即可后面有需要再切rsync。7.3 远程排查时的一个最小化工作流我在远程排查问题时通常先ssh连上去然后cd到项目目录用ls -lh看文件状态再用tail -f看实时日志。这四条命令组成的流程已经覆盖了绝大多数情况ssh userip cd /app/project ls -lh tail -f logs/app.log看到这里你会发现网络相关的命令其实就围绕连上去、传文件、看日志这三件事展开真正繁琐的操作在本地做完远程动作保持最小化就够了。8. 终端复用用一次业务需求理解多窗口管理8.1 从单窗口到多窗口刚接触终端时习惯在一个窗口里工作。但实际开发中经常要同时做几件事一边跑着Python服务一边看日志一边在另一个目录修改代码。如果只有一个窗口就得不断切换前后台任务非常别扭。tmux或screen可以让你在一个终端里开多个会话窗口而且窗口可以分离detach和重新附着attach。所谓分离是指关闭终端连接后会话里的进程依然在后台运行重新附着则是再次打开终端后把之前的会话重新拖回面前。8.2 tmux最小操作集安装可以用包管理器完成比如apt install tmux或yum install tmux。基本操作tmux new -s work Ctrl-b % Ctrl-b ctrl-b方向键切换 Ctrl-b d 分离会话 tmux attach -t workCtrl-b %是水平切分窗口Ctrl-b加方向键在窗口间移动。分离后用tmux attach -t 会话名找回。日常开发中我经常一个窗口跑服务一个窗口tail日志一个窗口编辑代码效率比单窗口高非常多。8.3 什么时候用tmux什么时候用nohup这里要区分两个场景如果你希望进程在断开终端后依然运行比如部署一个服务用nohup配合合适如果你需要在断开前还能随时回去看状态、切换操作那么tmux更合适。两者的核心区别在于是否还需要交互。交互频繁就tmux纯后台跑就nohup。9. 一个完整小案例创建一个Python脚本跑起来看日志改代码命令学了一堆最终要能串在一起使用。下面用一套典型流程把本节前面的内容全部串起来场景模拟的是你拿到一台Linux机器要新建一个Python脚本运行它监控日志输出再修改代码继续运行。第一步建立项目目录并进入mkdir -p ~/demo_project cd ~/demo_project第二步新建Python脚本并用vim写入内容vim app.py在vim里输入以下内容或者任何一段简单测试代码import time for i in range(30): print(current number:, i) time.sleep(1)保存退出后赋予执行权限chmod x app.py第三步前台先跑一次确认能正常工作python3 app.py确认无误后改用后台方式运行并记录日志nohup python3 app.py app.log 21 第四步查看进程和日志:ps -ef | grep app.py tail -100 app.log tail -f app.log第五步发现问题或想调整输出内容时重新编辑代码vim app.py修改完内容后先找到原进程并结束再重新启动ps -ef | grep app.py kill PID nohup python3 app.py app.log 21 这一套流程就是写代码-运行-看日志-改代码-重启的最小闭环。你会发现Linux命令不是孤立的知识点它们都是围绕这个循环服务的。把这一遍走熟了再往深入学shell脚本、systemd、容器化都会顺畅很多。10. 我自己踩过的一些坑给新手的几条实在建议10.1 别在不对的目录里执行命令我见过太多同学在根目录或者错误目录下执行rm或find结果影响范围超出预期。建议在任何删除、覆盖类操作之前先用pwd和ls确认所在目录和目录内容再想一遍命令会影响到哪些文件。多花五秒钟可能省下一天的恢复时间。10.2 别被sudo耽误了有些命令提示权限不足第一反应是加sudo。但加了sudo后命令会以管理员身份执行权限太大的确什么问题都能绕过。但如果是文件权限配错了加sudo硬跑只会掩盖问题。更好的习惯是先确认当前用户和文件权限搞清楚为什么没权限再决定要不要用sudo。尤其在生产环境里尽量少用sudo。10.3 日志是最重要的调试入口新手最容易忽略日志。其实大多数Python运行问题在日志里都有迹可循。代码出异常时traceback会输出具体行号业务逻辑不对时print内容会显示中间变量。把这些输出有序地写到日志里再用tail和grep去查排查效率远高于盯着代码瞎猜。10.4 把命令组合保存成脚本当你发现某些命令组合反复使用时别每次都手动敲完全可以写成脚本复用。比如重启服务的完整流程可以保存成一个restart.sh下次直接执行。这样既减少敲错命令的风险也慢慢培养起用代码解决问题的思维习惯。#!/bin/bash pkill -f app.py sleep 1 nohup python3 app.py app.log 21 tail -f app.log10.5 学习顺序比数量更重要命令数量不追求一次记全核心是掌握循环建文件、看位置、改内容、跑代码、看日志、杀进程、再改。这个循环里的命令值得反复练到不需要想。其他命令用到再查也不迟因为Linux命令本身靠积累靠死记硬背效果很差。11. 后续可以自己延伸的方向基础命令熟练之后有三个方向值得深入学习。第一个是shell脚本把常用操作变成可重复执行的脚本例如自动化部署、日志清理。第二个是systemd服务管理把Python服务注册成开机自启比nohup更规范。第三个是Docker容器化一条命令即可统一运行环境但底层仍然依赖对Linux命令的理解。不过这些都是后话。先把手头的基本命令用熟让Python脚本在Linux上稳稳跑起来就已经迈出了很关键的一步。以后再碰到生产环境怎么运行日志怎么排查进程怎么管理这类问题你就知道自己该用什么工具、按什么顺序去解决了。