ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Python开发者必会的Linux命令:从部署到排障的实战指南

2026/10/6 16:27:08 拓冰建站 浏览量
Python开发者必会的Linux命令:从部署到排障的实战指南 很多Python程序员第一次上服务器部署时都会经历这种场面本地代码跑得好好的一到Linux服务器上就各种报错不是找不到文件就是端口被占用再不然就是权限不够。查了一圈发现问题根本不是代码本身而是你对Linux命令不够熟。Python和Linux就像豆浆和油条写Python可以只在Windows/Mac上写但一旦涉及部署、爬虫、数据处理、自动化运维服务器上几乎全是Linux系统。这篇就是写给Python开发者的Linux命令实操指南不按命令字典讲按真实工作流来把每一步为什么这么做讲清楚。适合谁看刚入门Python、准备投开发岗、或者已经在写Python但一碰服务器就发怵的同学都适用。我会把文件操作、环境管理、进程排查、文本处理、Git协作、系统监控这些高频场景拆开讲附上我踩过的坑和排查套路。1. 为什么Python程序员要专门学Linux命令1.1 Python的“第二现场”几乎都在Linux上先说个事实你的Python代码最终跑在哪里大概率是Linux。不管是云服务器、公司内网机器、Docker容器、K8s集群底层操作系统基本都是Linux。甚至很多CI/CD流水线里的构建镜像也是Linux发行版。这就意味着你写的代码在Linux上的行为才是用户真实面对的行为。Python解释器本身是跨平台的但你的代码跑起来可不只是解释器的事文件路径怎么拼接、环境变量怎么读、依赖装在哪、日志写到哪、进程怎么被拉起和停止、端口怎么监听这些都跟操作系统强相关。在Windows上你双击运行一个.py文件或者在IDE里点运行很顺畅到了Linux上通常要手动敲命令来启动服务、查看日志、管理进程。这些操作如果不会代码写得再好也交付不出去。还有一点容易被忽视很多和Python配套的底层组件比如Redis、PostgreSQL、Nginx在Linux上部署和排查问题的成熟度远高于Windows。你写Python迟早要跟这些服务打交道。我见过不少同学在Windows上开发时一切正常部署到Linux后因为路径分隔符、软链、权限的问题折腾一两天。早一点把Linux命令练熟相当于提前给自己买了个保险。1.2 学命令的两个误区和三个原则不少人学Linux命令时喜欢对着“Linux命令大全手册”从头背背两星期后真正用的时候还是懵。原因很简单抄来的命令没有和具体场景绑定记忆就没有钩子。我见过一个同学把tar的参数背得溜熟但真让他打包一个目录传到服务器上他先用zip再用scp绕了一大圈才想起来tar才是正解。这种学法效率和实用性都太低。另一个误区是只看命令不学机制。比如kill -9很多人敢用却不知道kill -9其实不是“正常终止”而是强制杀掉可能让进程来不及清理临时文件和释放锁。如果你在处理数据库或者消息队列这种“粗暴操作”是可能弄坏数据的。命令是表象机制才是底子。我的建议是三个原则第一按工作流学不按命令表学。比如“部署一个Python服务”是一个工作流它天然串联了ssh、git、python -m venv、pip install、nohup、ss -tlnp这一串命令顺着流程走一遍记忆会很牢固。第二先掌握定位问题的命令再掌握修改工具。排查一个线上问题时先要知道“看哪里”比如df -h看磁盘、free -h看内存、ss -tlnp看端口这些都熟了再研究怎么去改配置。第三学会把命令串成“一行流”把管道、重定向、组合命令用起来这是效率和自动化能力的分水岭。2. 文件与目录Python开发者每天都会碰的命令2.1 五个高频操作跳转、查看、复制、移动、删除目录跳转是每个命令行的起点。pwd查看当前路径cd切换目录ls列出文件。这三个命令本身不难难的是养成习惯在Linux上路径就是你的坐标系任何时候先确认自己在哪个目录再执行下一步操作能避免大量“把文件放错地方”的事故。几个我认为Python开发者最该形成肌肉记忆的组合ls -la查看目录下所有文件包括隐藏文件和详细权限。你经常会发现配置文件是隐藏文件比如.env、.bashrc。tree树状展示目录结构。这个命令默认系统不一定有但sudo apt install treeUbuntu系装一下很值看项目目录层级比ls -R舒服多了。file查看文件真实类型。服务器上经常有扩展名和内容对不上的文件file xxx可以告诉你这到底是文本、压缩包还是可执行文件。du -sh *列出当前目录下每个子目录的磁盘占用。排查“谁把磁盘吃满了”时必用。cp -r和mv复制目录加-r移动文件和重命名都用mv。在服务器上移动文件比重新传输快得多因为同文件系统内mv只是改个指针。权限问题是Python新人历险记的第一大坑。你写好一个run.sh或者app.py直接执行时提示Permission denied原因大概率是文件没有可执行权限。这时候要执行chmod x 文件名给它加上执行位。再深一点你部署项目时还会遇到“网站目录读不了”“日志写不进”的情况这时需要理解Linux权限的三元组所有者(user)、所属组(group)、其他人(others)用ls -l可以看。chmod 755是常见配置表示所有者可读写执行组内和其他人只能读和执行。如果服务以特定用户运行还要用chown修改文件所有者。这个逻辑建议动手实验一遍把文件从644改到755再试执行感受会很直观。2.2 删除文件夹别硬刚rm 的正确打开方式rm是每个Linux用户的“危险记忆点”因为删错文件真的找不回来。Windows有回收站Linux命令行没有。最经典的惨案是变量没赋值然后执行了rm -rf $VAR/结果路径变成了根目录直接把系统文件删了。这种事故不是段子是真的会发生在任何人身上。我的实操习惯是三条第一删除之前先ls确认路径服务器上绝不打“快速毁灭”式命令。第二在项目和配置文件目录工作时不轻易用rm -rf 文件夹先用mv 文件夹 /tmp/trash_xxx把它挪到临时目录确认没问题再真正删除。第三编写脚本时在危险命令前加判断比如检查变量是否为空或者加个set -u让未定义变量直接报错。如果你需要彻底删除一个目录常见命令是rm -rf directory但我必须提醒一定要把路径拼完整、写绝对路径并且提前ls看一遍。至于rm -rf /这种操作千万别碰。另外还有一个小工具叫trash-cli它可以在命令行上模拟回收站trash-put 文件之后还能恢复对新手比较友好。在文件传输和备份场景tar命令也得会用。打包常用tar czf 文件名.tar.gz 目录名解包用tar xzf 文件名.tar.gzxzf里的z表示gzip压缩。如果要解压到指定目录加-C 目录。这串命令之所以重要是因为Python项目的依赖、模型文件、数据集经常需要打包传到服务器压缩一份几百MB的数据能省很多时间。最后提一下挂载问题。如果公司有NAS存储服务器上经常要挂载远程目录来存日志或模型文件。命令一般是mount -t nfs 服务器IP:/共享路径 /本地目录需要root权限。这个场景在涉及大数据和模型训练时经常遇到。我不展开讲NFS原理但建议你至少能看懂挂载相关的命令因为运行Python训练任务时“磁盘空间不够”很有可能是远端挂载引起的这时候df -h能很明显看出来。3. Python环境管理版本、虚拟环境、第三方库的终端玩法3.1 别再用系统Python裸奔了很多服务器出厂就带了Python但这不代表你该直接在系统Python里pip install。首先系统自带的Python一般会被系统工具依赖比如yum、apt都可能用乱装第三方库很有可能把系统Python弄坏。其次不同项目依赖不同版本直接在系统环境里装会让依赖冲突越来越严重。正确做法是分两层管理第一层用pyenv管理Python版本。pyenv install 3.12.4可以安装指定版本pyenv global 3.12.4设置全局默认版本pyenv local 3.10.9设置某个目录下的局部版本。这样一来你可以在同一台机器上为不同项目切换Python版本。第二层为每个项目创建虚拟环境。进入项目目录后执行python -m venv .venv然后source .venv/bin/activate激活命令行前缀会出现(.venv)这就表示你在虚拟环境里了。之后pip install的东西都会被装进当前项目的.venv目录而不是污染全局。这一步是非常关键的习惯能帮你避开大量的版本冲突问题。有个常见问题pip install很慢或者直接超时。原因是默认访问的官方源在国外国内网络下很不稳定。解决办法是换用国内镜像源比如清华源或者阿里源。命令格式是pip install 包名 -i 镜像地址比如安装numpy时可以pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple想长期生效可以修改配置文件~/.pip/pip.conf加上[global] index-url https://pypi.tuna.tsinghua.edu.cn/simple改完后pip install numpy直接用默认源就是清华大学镜像速度快很多。这个技巧在服务器上尤其实用我第一次给服务器装Pandas时用默认源等了几分钟直接超时换镜像后几十秒完成。3.2 依赖导出和把环境搬到服务器在本地开发完要把项目部署到服务器环境怎么搬很多人只知道手动在服务器上一个个装依赖遇到版本多的项目会崩溃。正确的流程是# 本地导出依赖清单 pip freeze requirements.txt # 服务器创建虚拟环境并安装 python -m venv .venv source .venv/bin/activate pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple这个流程看着简单但有三个坑第一pip freeze会把一些无关的本地包也打进去最好先在干净环境里装或者手动检查一下requirements.txt。第二Python版本必须和本地一致或兼容否则某些包编译会失败。第三如果你的项目里用到一些需要编译的包比如psycopg2连接PostgreSQL服务器上要提前装好对应的系统依赖库否则会报pg_config not found。我自己的习惯是在项目根目录建一个requirements.txt发版前重新克隆一次项目、用全新虚拟环境跑一遍pip install -r requirements.txt这样可以尽早暴露缺失依赖。这个操作花不了几分钟却能在部署环节省下几小时的排查时间。另外顺带提一下现在的趋势uv这个工具使用体验很流畅它可以替代pip和pip freeze甚至虚拟环境创建都一条命令搞定。如果你刚接触我建议先把venv pip这套古典流程摸熟再上手新工具也不迟因为服务器上很多教程和脚本都是按古典流程写的你至少得能看懂。4. 进程、端口与排查服务跑不动时的三板斧4.1 进程状态查看与信号控制Python脚本一旦部署成服务你就得学会“看进程”。最常用的命令是ps aux | grep python。ps是进程快照aux表示显示所有用户的进程并用详细的格式列出后面的| grep python是管道把结果过滤出包含python的行。这是一条使用频率极高的命令我几乎每次排查服务器都会用到。ps aux能告诉你进程IDPID、CPU和内存占用、启动时间、运行用户等信息。当你发现线上Python服务的CPU飙升时第一步就是通过ps aux找到出问题的PID然后决定下一步是看日志还是直接重启。top命令则是动态刷新视图类似Windows的任务管理器。进入top后按P可以按CPU排序按M可以按内存排序q退出。看实时状态用top看某一瞬间的状态用ps。两个组合起来你就能追踪“哪个Python进程在搞事”。终止进程时常用kill PID发送默认的终止信号编号15。如果进程没有响应再用kill -9 PID强制结束。这里的机制是kill默认给进程一个“请优雅结束”的信号让它有机会清理资源kill -9则直接由内核终止进程没有清理机会。所以能用kill就用kill实在不听劝再用kill -9这个顺序少有例外。发展成熟的Python服务一般会监听这个终止信号来做优雅停机比如保存未完成的任务再退出。部署后台服务时nohup命令也是必备。连着SSH启动一个python app.py如果直接关了终端进程可能就跟着没了。前面加上nohup再重定向日志就能让进程在后台持续运行nohup python app.py app.log 21 这里的是把命令放到后台执行 app.log 21把标准输出和错误输出都写进日志文件。我第一次部署Flask应用时不知道这个命令一关SSH窗口服务就断当时还以为服务器有问题排查了半天才发现是进程被终端挂了。4.2 端口与网络排查连接不上时看这里端口冲突是Python服务最常见的启动失败原因。报错通常类似Address already in use。这时候用ss -tlnp查看当前监听的端口和占用进程ss -tlnp | grep 8000这条命令会显示8000端口被哪个进程占用。找到PID后就能用kill处理掉旧的进程再重新启动服务。老一点的教程喜欢用netstat -tlnp功能类似但ss更快信息也更直观新系统里基本都有装。如果发现端口根本没被监听但程序又连不上那就可能是网络连通性问题。telnet IP 端口是简单直接的测试方法能连上会显示连接成功连不上会卡住或者超时。例如telnet 192.168.1.10 3306这条命令用来测试MySQL的3306端口是否可以连通。很多时候“Python程序连不上数据库”的报错五花八门实际原因就是安全组没放行端口或者防火墙拦了。用telnet测一下就能缩小范围。注意大部分服务端口测试都不需要敲什么真正的telnet协议内容只要看到能连上基本就排除了网络层问题。还有一个和进程相关的冷门但实用的小技巧修改进程名称。服务器上如果同时跑多个Python服务ps aux里全是python app.py不好区分。一种方法是在命令行层面用exec -aexec -a my_worker python worker.py另一种是在Python代码里用setproctitle库给进程设置一个可读名字比如给数据处理任务命名成data_processor。这样在ps查看时就能一眼认出是哪个服务排查问题的时候非常方便。4.3 日志查看与 systemd 托管如果你把Python服务交给systemd管理比如写了一个/etc/systemd/system/myapp.service文件那么日志查看方式就不一样了。systemctl status myapp可以查看服务状态和最近的日志片段journalctl -u myapp -f可以实时跟踪日志输出。这条链路比把日志重定向到app.log再tail -f更统一适合正式环境。实际上我建议只要是常驻服务都用systemd或Docker来托管因为这样能做到开机自启动、崩溃自动重启。命令行nohup方案更适合临时任务、个人开发环境快速验证不适合当成线上正式方案。顺带说下容器场景。如果你所在公司用Docker/containerd部署那还需要掌握docker ps、docker logs这些容器命令。容器本质上也跑在Linux上核心排查思路不变先看进程、再看端口、最后看日志。5. 文本处理三板斧grep、sed、awk与Vim的实用边界5.1 grep日志里捞关键信息Python开发者处理日志是最常见的需求而日志处理的起点就是grep。grep 关键字 文件名可以找出包含关键字的行最常用的是配合管道cat app.log | grep ERROR其实不需要catgrep本身就能读取文件grep ERROR app.log加上-n显示行号--color高亮显示-E启用扩展正则。比如想让grep直接作为替代品在处理Python异常堆栈时grep -n -E Traceback|Error app.log这条命令能一次过滤出包含Traceback或Error的行。在实际排查中我经常把grep和tail连用tail -n 100 app.log | grep ERROR先看最近100行里的错误。日志文件动辄几万行盲目打开是很低效的grep就是你的搜索器。5.2 sed与awk清洗日志和CSV的小神器有时候你不仅想找日志还想把字段提出来。awk是处理“按列排列”的文本利器。比如日志里的每一行是2025-06-02 10:00:03 ERROR request_id1234想取出每行的时间列和错误码可以用awk {print $2, $3} app.log这里的$1到$N是按空格切分后的列。如果自定义分隔符用-F参数。比如处理CSV文件时awk -F, {print $1, $3} data.csvsed则擅长替换操作。比如把日志里的IP地址替换成脱敏格式sed s/192\.168\.1\.100/***/g app.logs表示替换g表示全局替换。如果你确定效果没问题可以加-i直接修改文件。但sed -i是个有风险的操作改错了不会自动保留原文件建议先把输出重定向到一个新文件确认无误再覆盖。讲一个实际场景你需要从一个几百兆的大日志里统计某个Python接口的每个状态码次数。一条命令就能搞定grep /api/order app.log | grep -oE HTTP/[0-9.]\ [0-9] | awk {print $2} | sort | uniq -c这行命令的链路是先筛出跟订单接口相关的行再用grep -oE抽取状态码字段然后用awk取第二列最后sort排序并用uniq -c统计。这就是“一行流”的典型用法比写Python脚本慢慢读日志更高效适合快速侦查。5.3 Vim不用精通但要会用说到改服务器上的文件绕不开Vim。很多Python程序员听到Vim就头疼其实它不需要你精通只要掌握几个核心操作就够用了vim 文件名打开文件进入后按i进入插入模式这时候可以打字编辑编辑完成后按Esc退出插入模式输入:wq保存并退出输入:q!不保存强制退出在普通模式下按/搜索关键词按n跳转到下一个匹配按G跳转到文件末尾按gg跳转到文件开头Vim的“模式”概念很反直觉同样按一个键在插入模式和普通模式下做的是不同的事。但没办法服务器上的文件编辑场景Vim几乎是无处不在的存在。特别是用systemd管理服务时你要去改.service文件先vim打开改一下配置保存再systemctl daemon-reload重载这一套流程能走顺日常运维就基本不慌了。如果你实在不想用Vim至少也得会nano这种更友好的编辑器。但说实话在大多数服务器镜像里Vim是默认安装或最容易获得的编辑器学会基础操作成本很低收益却不小。6. Git、SSH与远端协作把代码送上网的完整链路6.1 Git命令在服务器上的正确用法Git命令严格来说不属于Linux命令但Python程序员在Linux上干的最多的一件事就是通过Git把代码拉到服务器、提交变更。所以这里必须讲。基础流程是git clone gitgithub.com:yourname/project.git cd project git pull git status git add . git commit -m fix: update config git push这里面最容易踩坑的是权限问题。如果git clone时提示权限不足最可能是SSH key没配置或没添加到Git托管平台。解决办法是用ssh-keygen -t ed25519生成密钥然后把~/.ssh/id_ed25519.pub的内容加到GitHub/GitLab的SSH Keys里。所以ssh-keygen不只是网络安全工程师的工具Python程序员也要掌握。git log --oneline可以查看提交历史git diff可以查看未提交的改动。这些命令在排查“代码是不是最新版本”时特别有用。我曾经有一次排查线上Bug看代码内容怎么都对不上最后才发现服务器上跑的代码还是三天前的版本git pull一下就正常了。所以我的建议是定位问题时第一件事就是git log -1确认代码版本。在合并冲突时Vim会打开一个冲突文件让你手动解决。这种场景下git mergetool可以配置外部合并工具但服务器上通常没有图形工具只能手动编辑。方法是打开冲突文件后搜索、、这些标记把不需要的版本删除只保留目标内容再保存。这个过程不复杂但新手容易把整个文件删错。我的建议是不要在压力很大的线上直接手动解冲突先git stash或者用git checkout -- 文件名放弃本地改动重新git pull。6.2 SSH配置与免密登录的细节SSHSecure Shell是你进入服务器的唯一通道所以ssh命令必须熟练。基本用法是ssh 用户名服务器IP手动输密码没问题但频繁登录会很烦所以要配置免密登录。一次性配置步骤是本地执行ssh-keygen -t ed25519 -C your_emailexample.com生成密钥对执行ssh-copy-id 用户名服务器IP把公钥传到服务器之后ssh 用户名服务器IP就不需要输密码了如果机器上没有ssh-copy-id就手动把~/.ssh/id_ed25519.pub的内容追加到服务器的~/.ssh/authorized_keys里。还有一个小技巧是配置~/.ssh/config文件给服务器起一个简短别名Host myserver HostName 192.168.1.20 User ubuntu IdentityFile ~/.ssh/id_ed25519配置完后直接ssh myserver就能登录不用每次敲完整的用户名和IP。这个方法在你管理多台服务器时特别有用。传文件用scp和rsync。简单场景scp ./app.py myserver:/home/ubuntu/project/同步整个文件目录用rsync更稳定参数-avz是常用组合a归档模式保留权限和时间戳v显示过程z压缩传输。比如rsync -avz ./project/ myserver:/home/ubuntu/project/第一次同步时可能数据量较大但以后增量同步就很快而且rsync断点续传的能力比scp强得多。如果你经常需要更新服务器上的代码、模型文件、日志备份rsync几乎是不可替代的。现在很多AI编程助手可以直接在终端里执行命令甚至帮你跑测试、看报错。但这些工具只是助手你还是得自己能看懂终端输出。有一次我让AI助手帮我处理一个线上异常它给出的结论确实是逻辑层面正确但真正要操作还是得靠人确认路径、权限、进程状态。命令体系是你的“底层驾驶技能”AI只是导航。7. 系统状态与资源监控别等OOM才想起来看7.1 CPU、内存、磁盘三个命令看全局Python程序崩溃有一种很隐蔽的情况内存占用越来越高最后被系统OOMOut of Memory杀掉。这种情况光看业务日志很难发现因为你看到的只是“进程消失了”。要提前发现就得关注资源状态。free -h以人类可读格式显示内存使用情况重点看available这一列这是本机真正可用的内存。如果available一直很低而且swap区在被大量使用就要考虑是不是内存泄漏或者是不是并发开得太多了。df -h查看磁盘挂载和使用率。服务器磁盘满了会引发各种诡异问题日志写不进去、临时文件创建失败、Python报No space left on device。一旦看到使用率到90%以上就要找出大文件了。du -sh *在某个目录下执行可以列出当前目录下所有文件/文件夹的大小。我处理过几次“服务器磁盘告警”都是用这个命令定位到某个日志目录或者临时文件目录然后清理旧日志。一个典型的排查流程df -h # 看到 / 分区使用率 98% cd /home/ubuntu du -sh * # 找到 model_cache 目录占了几十GB ls -lh model_cache/ # 发现旧的模型文件没用清理掉7.2 定位“谁在消耗资源”并结合Python场景top命令进入后按P按CPU排序按M按内存排序。当你有多个Python进程在跑时一眼就能看出哪个进程占资源最多。如果那个进程是你自己写的服务下一步有三件事做看进程PID然后用ps -p PID -o %cpu,%mem,cmd确认详情查看这个PID的日志输出找有没有死循环、重试风暴用/proc/PID/environ查看进程启动时的环境变量确认它到底跑的是哪个配置比如线上有服务内存持续疯涨你通过top找到PID是12345然后执行cat /proc/12345/environ | tr \0 \n可以看清这个进程的环境变量确认它加载的是哪个配置文件。这个技巧比翻半天启动脚本高效得多。dmesg命令查看内核日志OOM记录会出现在这里。当你不知道Python进程为什么突然消失时执行dmesg | tail -n 50如果有Out of memory: Kill process ...那原因基本就明确了。这也提醒我部署服务前要对内存上限有个预估而不是盲目调度。7.3 负载与性能读懂uptimeuptime命令输出的最后三个数字是过去1分钟、5分钟、15分钟的平均负载。负载高不代表坏事它只代表有多少任务在等待CPU执行。如果负载长期高于CPU核数说明系统资源紧张。要判断CPU核数用nproc。举例来说一台4核机器负载到了8显然排队明显需要扩容或者优化。监控的完整度取决于你的目标。如果是个人项目top free df三件套够用如果是公司正式服务建议再接入专业的监控平台但命令行排查能力永远是地基。因为监控平台挂了之后你还是得回到终端。8. 常见报错与排查速查表这里整理一份我实际排查中总结的速查表按“现象、命令、处理办法”来列。这些坑一个比一个常见建议收藏备用。现象排查命令处理办法运行命令提示 command not foundwhich 命令名先确认命令是否安装如果没装用系统包管理器安装如果已安装检查PATH环境变量文件/目录操作提示 Permission deniedls -l 文件路径检查权限位用chmod增加权限或用chown修改所有者服务器上慎用sudo处理业务文件Python服务启动提示端口占用ss -tlnp | grep 端口号找到占用端口的PID后用kill PID确认无残留进程再重启服务磁盘空间不足导致Python写文件失败df -h、du -sh *找到大目录后清理旧日志、临时文件日志目录常用logrotate定期轮转pip安装依赖慢或超时看命令本身是否有指定镜像源在pip配置里设置国内镜像源例如清华源关掉代理配置再重试远程连接服务超时telnet IP 端口确认网络层通不通安全组是否放行端口服务进程是否在监听Python虚拟环境激活后pip仍是全局路径which python、which pip确认source .venv/bin/activate是否在项目目录执行用python -m pip代替裸pip避免指错后台进程随SSH断开被杀死ps aux | grep 服务名用nohup、systemd或Docker托管避免直接挂在当前shell下Git clone提示权限失败ssh -T gitgithub.com重新生成SSH key并添加到代码托管平台确认~/.ssh权限是700还有两个额外经验想分享。第一个是Ctrl R在命令行按它可以反向搜索历史命令。你曾经敲过的一串复杂命令不用再翻直接Ctrl R输入关键词就能找回这可能是最不需要学习成本但效率提升巨大的技巧。第二个是在~/.bashrc里加上常用别名比如alias pypython3 alias activatesource .venv/bin/activate alias gsgit status alias glgit log --onelinesource ~/.bashrc之后日常敲命令会短很多。别小看别名的作用减少输入阻力才会更愿意用命令行工作。最后说点实在的。命令这个东西看一百篇文章不如自己遇到一次线上故障记得牢。你可能觉得ss -tlnp没什么了不起但当你凌晨两点的服务因端口冲突起不来用这条命令一分钟内锁定问题这种感觉会直接刻进肌肉记忆。我也是这样过来的前面踩过的坑大概够你少吃不少苦了。